282 lines
		
	
	
		
			7.7 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			282 lines
		
	
	
		
			7.7 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);
 | 
						||
            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();
 | 
						||
    }
 | 
						||
 | 
						||
 | 
						||
} |