277 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			277 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
| <?php
 | ||
| 
 | ||
| namespace app\controller\manager;
 | ||
| 
 | ||
| use app\model\Log;
 | ||
| use app\repository\CmsRepository;
 | ||
| use app\repository\OperationRepository;
 | ||
| use app\validate\Slide as VSlide;
 | ||
| use Exception;
 | ||
| use think\db\exception\DataNotFoundException;
 | ||
| use think\db\exception\DbException;
 | ||
| use think\db\exception\ModelNotFoundException;
 | ||
| use think\exception\ValidateException;
 | ||
| use think\response\Json;
 | ||
| use think\response\View;
 | ||
| 
 | ||
| class Slide extends Base
 | ||
| {
 | ||
|     /**
 | ||
|      * 编辑
 | ||
|      *
 | ||
|      * @return Json|View
 | ||
|      * @throws DbException
 | ||
|      * @throws ModelNotFoundException
 | ||
|      */
 | ||
|     public function edit()
 | ||
|     {
 | ||
|         $id = $this->request->param('id/d', 0);
 | ||
| 
 | ||
|         if (!$slide = OperationRepository::getInstance()->findSlideById($id)) {
 | ||
|             return $this->json(4001, '数据不存在');
 | ||
|         }
 | ||
| 
 | ||
|         if ($this->request->isPost()) {
 | ||
|             $item     = input('post.item/a');
 | ||
|             $validate = new VSlide();
 | ||
|             if (!$validate->scene('slide')->check($item)) {
 | ||
|                 return $this->json(4002, $validate->getError());
 | ||
|             }
 | ||
| 
 | ||
|             unset($item['id']);
 | ||
|             OperationRepository::getInstance()->updateSlide($item, $id);
 | ||
|             return $this->json();
 | ||
|         }
 | ||
| 
 | ||
|         $this->data['item'] = $slide;
 | ||
|         $this->data['positionsJson']    = $this->xmSelectPositionsJson([$slide['position']]);
 | ||
|         $this->data['id']   = $id;
 | ||
| 
 | ||
|         return $this->view();
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 添加
 | ||
|      *
 | ||
|      * @return View|Json
 | ||
|      */
 | ||
|     public function add()
 | ||
|     {
 | ||
|         $repo = OperationRepository::getInstance();
 | ||
| 
 | ||
|         if ($this->request->isPost()) {
 | ||
|             $item     = input('post.item/a');
 | ||
|             $validate = new VSlide();
 | ||
|             if (!$validate->scene('slide')->check($item)) {
 | ||
|                 return $this->json(4002, $validate->getError());
 | ||
|             }
 | ||
| 
 | ||
|             $item['type']       = $item['type'] ?? 'img';
 | ||
|             $repo->createSlide($item);
 | ||
|             return $this->json();
 | ||
|         }
 | ||
| 
 | ||
|         $this->data['positionsJson']    = $this->xmSelectPositionsJson();
 | ||
|         return $this->view();
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 轮播图列表
 | ||
|      *
 | ||
|      * @return Json|View
 | ||
|      * @throws Exception
 | ||
|      */
 | ||
|     public function index()
 | ||
|     {
 | ||
|         $repo = OperationRepository::getInstance();
 | ||
|         if ($this->request->isPost()) {
 | ||
|             $position   = $this->request->param('position/s', '');
 | ||
|             $page       = $this->request->param('page/d', 1);
 | ||
|             $size       = $this->request->param('size/d', 30);
 | ||
| 
 | ||
|             $whereMap   = [];
 | ||
|             $orders     = ['sort'=>'asc'];
 | ||
|             if (!empty($position)) {
 | ||
|                 $whereMap[] = ['position', '=', $position];
 | ||
|             }
 | ||
| 
 | ||
|             $list = $repo->slideList($whereMap, [], $page, $size, null, $orders);
 | ||
| 
 | ||
|             return $this->json(0, 'success', $list);
 | ||
|         }
 | ||
| 
 | ||
|         $this->data['positions'] = $repo->slidePositions();
 | ||
|         return $this->view();
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 排序
 | ||
|      * @return Json
 | ||
|      */
 | ||
|     public function sort()
 | ||
|     {
 | ||
|         if (!$this->request->isPost()) {
 | ||
|             return $this->json(4000, '非法请求');
 | ||
|         }
 | ||
|         try {
 | ||
|             $id     = $this->request->param('id/d', 0);
 | ||
|             $sort   = $this->request->param('sort/d', 0);
 | ||
|             OperationRepository::getInstance()->updateSlide(['sort'=>$sort], $id);
 | ||
|         } catch (Exception $e) {
 | ||
|             return $this->json(4001, '排序失败');
 | ||
|         }
 | ||
|         return $this->json();
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 删除
 | ||
|      * @return Json
 | ||
|      */
 | ||
|     public function del()
 | ||
|     {
 | ||
|         if (!$this->request->isPost()) {
 | ||
|             return $this->json(4000, '非法请求');
 | ||
|         }
 | ||
| 
 | ||
|         $ids = $this->request->param('ids/a', []);
 | ||
|         if (empty($ids)) {
 | ||
|             $ids[] = $this->request->param('id/d', 0);
 | ||
|             $ids = array_filter($ids);
 | ||
|         }
 | ||
| 
 | ||
|         if (count($ids)) {
 | ||
|             OperationRepository::getInstance()->deleteSlides($ids);
 | ||
|             Log::write(get_class(), 'del', '删除了轮播图,涉及到的ID为:'.implode(',', $ids));
 | ||
|         }
 | ||
|         return $this->json();
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 显示位置下拉选项数据
 | ||
|      *
 | ||
|      * @param array $selected
 | ||
|      * @param array $disabled
 | ||
|      * @return false|string
 | ||
|      */
 | ||
|     private function xmSelectPositionsJson(array $selected = [], array $disabled = [])
 | ||
|     {
 | ||
|         $positionList = OperationRepository::getInstance()->slidePositions();
 | ||
|         foreach ($positionList as $k => $item) {
 | ||
|             $positionList[$k]['selected'] = in_array($item['key'], $selected);
 | ||
|             $positionList[$k]['disabled'] = in_array($item['key'], $disabled);
 | ||
|         }
 | ||
|         $positionList = CmsRepository::getInstance()->handleSelectedList($positionList);
 | ||
|         return json_encode($positionList, JSON_UNESCAPED_UNICODE);
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 轮播图显示位置管理
 | ||
|      *
 | ||
|      */
 | ||
|     public function position()
 | ||
|     {
 | ||
|         $repo = OperationRepository::getInstance();
 | ||
| 
 | ||
|         if ($this->request->isPost()) {
 | ||
|             $list = $repo->slidePositionList([], [], 1, 0);
 | ||
| 
 | ||
|             return $this->json(0, 'success', $list);
 | ||
|         }
 | ||
|         return $this->view();
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 添加显示位置信息
 | ||
|      *
 | ||
|      * @return Json|View
 | ||
|      */
 | ||
|     public function addPosition()
 | ||
|     {
 | ||
|         $repo = OperationRepository::getInstance();
 | ||
| 
 | ||
|         if ($this->request->isPost()) {
 | ||
|             $item     = input('post.item/a');
 | ||
|             try {
 | ||
|                 $this->validate($item, [
 | ||
|                     'title|标题' => 'max:250',
 | ||
|                     'key|位置标识' => 'require|max:100|alphaDash'
 | ||
|                 ]);
 | ||
|             } catch (ValidateException $e) {
 | ||
|                 return $this->json(4002, $e->getError());
 | ||
|             }
 | ||
| 
 | ||
|             if ($repo->slidePositionExists($item['key'])) {
 | ||
|                 return $this->json(4003, '当前位置标识已存在!');
 | ||
|             }
 | ||
| 
 | ||
|             $repo->createSlidePosition($item);
 | ||
|             return $this->json();
 | ||
|         }
 | ||
| 
 | ||
|         return $this->view();
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 编辑显示位置信息
 | ||
|      *
 | ||
|      * @return Json|View
 | ||
|      * @throws DbException
 | ||
|      * @throws ModelNotFoundException
 | ||
|      * @throws DataNotFoundException
 | ||
|      */
 | ||
|     public function editPosition()
 | ||
|     {
 | ||
|         $id = $this->request->param('id/d', 0);
 | ||
| 
 | ||
|         if (!$position = OperationRepository::getInstance()->findSlidePositionById($id)) {
 | ||
|             return $this->json(4001, '数据不存在');
 | ||
|         }
 | ||
| 
 | ||
|         if ($this->request->isPost()) {
 | ||
|             $item     = input('post.item/a');
 | ||
|             try {
 | ||
|                 $this->validate($item, [
 | ||
|                     'title|标题' => 'max:250'
 | ||
|                 ]);
 | ||
|             } catch (ValidateException $e) {
 | ||
|                 return $this->json(4002, $e->getError());
 | ||
|             }
 | ||
| 
 | ||
|             unset($item['id']);
 | ||
|             unset($item['key']);
 | ||
|             OperationRepository::getInstance()->updateSlidePosition($item, $id);
 | ||
|             return $this->json();
 | ||
|         }
 | ||
| 
 | ||
|         $this->data['item'] = $position;
 | ||
|         $this->data['id']   = $id;
 | ||
| 
 | ||
|         return $this->view();
 | ||
|     }
 | ||
| 
 | ||
|     /**
 | ||
|      * 删除显示位置信息
 | ||
|      * @return Json
 | ||
|      */
 | ||
|     public function delPosition()
 | ||
|     {
 | ||
|         if (!$this->request->isPost()) {
 | ||
|             return $this->json(4000, '非法请求');
 | ||
|         }
 | ||
| 
 | ||
|         $ids = $this->request->param('ids/a', []);
 | ||
|         if (empty($ids)) {
 | ||
|             $ids[] = $this->request->param('id/d', 0);
 | ||
|             $ids = array_filter($ids);
 | ||
|         }
 | ||
| 
 | ||
|         if (count($ids)) {
 | ||
|             OperationRepository::getInstance()->deleteSlidePositions($ids);
 | ||
|             Log::write(get_class(), 'delPosition', '删除了轮播显示位置,涉及到的ID为:'.implode(',', $ids));
 | ||
|         }
 | ||
| 
 | ||
|         return $this->json();
 | ||
|     }
 | ||
| 
 | ||
| 
 | ||
| } |