282 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			282 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			PHP
		
	
	
| 
								 | 
							
								<?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);
							 | 
						|||
| 
								 | 
							
								            event('UpdateBanner');
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								            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);
							 | 
						|||
| 
								 | 
							
								            event('UpdateBanner');
							 | 
						|||
| 
								 | 
							
								            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);
							 | 
						|||
| 
								 | 
							
								            event('UpdateBanner');
							 | 
						|||
| 
								 | 
							
								        } 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);
							 | 
						|||
| 
								 | 
							
								            event('UpdateBanner');
							 | 
						|||
| 
								 | 
							
								            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();
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								}
							 |