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(); } }