request->isPost()) { $ids = input('post.ids/a', []); if (empty($ids)) { $ids[] = input('post.id/d'); } ArchivesModel::deleteByIds($ids); return $this->json(); } return $this->json(4001, '非法请求!'); } /** * 编辑 * * @return Json|View * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException * @throws Exception */ public function edit() { $id = input('id/d', 0); if (!$info = ArchivesModel::findById($id)) { return $this->json(4001, '记录不存在'); } if ($this->request->isPost()) { $item = input('post.'); if (isset($item['video_src'])) { $item['video'] = $item['video_src']; unset($item['video_src']); } $validate = $this->validateByApi($item, [ 'category_id|栏目' => 'require|gt:0', 'title|标题' => 'require|max:255', 'summary|摘要' => 'max:255', 'content|内容' => 'require', ], ['category_id.gt' => '请选择栏目']); if ($validate !== true) { return $validate; } try { $now = date('Y-m-d H:i:s'); $item['updated_at'] = $now; $item['updated_by'] = $this->auth['user_id']; $info->save($item); return $this->json(); } catch (ValidateException $e) { return $this->json(4001, $e->getError()); } } $showFieldList = ArchivesModelField::showFieldList();//所有栏目 可展示字段列表 $currentShowFields = $showFieldList[$info['category_id']] ?? [];//当前选中栏目 可展示字段列表 $this->data['item'] = $info; $this->data['jsonList'] = $this->xmSelectJson([$info['category_id']]); $this->data['currentList'] = $currentShowFields; return $this->view(); } /** * 单个字段编辑 * * @return Json * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException * @throws Exception */ public function modify(): Json { if ($this->request->isPost()) { $item = input('post.'); $validate = $this->validateByApi($item, [ 'field' => 'require', 'value' => 'require', ]); if ($validate !== true) { return $validate; } if (!$info = ArchivesModel::findById($item['id'])) { return $this->json(4001, '记录不存在'); } $update = [$item['field'] => $item['value']]; try { $info->save($update); return $this->json(); } catch (ValidateException $e) { return $this->json(4001, $e->getError()); } } return $this->json(4000, '非法请求'); } /** * 添加 * * @return Json|View * @throws Exception */ public function add() { $categoryId = input('category_id/d', 0); if ($this->request->isPost()) { $item = input('post.'); if (isset($item['video_src'])) { $item['video'] = $item['video_src']; unset($item['video_src']); } $validate = $this->validateByApi($item, [ 'category_id|栏目' => 'require|gt:0', 'title|标题' => 'require|max:255', 'summary|摘要' => 'max:255', 'content|内容' => 'require', ], ['category_id.gt' => '请选择栏目']); if ($validate !== true) { return $validate; } try { $now = date('Y-m-d H:i:s'); $item['created_at'] = $now; $item['published_at'] = $now; $item['created_by'] = $this->auth['user_id']; ArchivesModel::create($item); return $this->json(); } catch (ValidateException $e) { return $this->json(4001, $e->getError()); } } $showFieldList = ArchivesModelField::showFieldList();//所有栏目 可展示字段列表 //有指定栏目获取指定栏目 否则获取第一个 可展示字段列表 $currentShowFields = $categoryId > 0 ? ($showFieldList[$categoryId] ?? []) : array_values($showFieldList)[0]; $this->data['categoryId'] = $categoryId ?? 0; $this->data['diaryId'] = $diaryId ?? 0; $this->data['jsonList'] = $this->xmSelectJson([$categoryId]); $this->data['showList'] = json_encode($showFieldList, JSON_UNESCAPED_UNICODE); $this->data['currentList'] = $currentShowFields; return $this->view(); } /** * 列表 * * @return View|Json * @throws Exception */ public function index() { $categoryId = input('category_id/d', 0); if ($this->request->isPost()) { $page = input('page/d', 1); $limit = input('size/d', 20); $searchParams = input('searchParams'); $where = []; if ($categoryId > 0) { $where[] = ['category_id', '=', $categoryId]; } if ($searchParams) { foreach ($searchParams as $key => $param) { if (!empty($param)) { if (is_string($param)) { $where[] = [$key, 'like', '%'.$param.'%']; } elseif (is_array($param)) { //数组空元素去除 foreach ($param as $k => $val) { if (empty($val)) { unset($param[$k]); } } if (!empty($param)) { $where[] = [$key, 'in', $param]; } } } } } $items = ArchivesModel::findList($where, [], $page, $limit, function ($q) { return $q->with(['member', 'category']) ->order('sort', 'desc') ->order('id', 'desc'); }); return $this->json(0, '操作成功', $items); } $selected = $categoryId > 0 ? [$categoryId] : []; $this->data['categoryId'] = $categoryId; $this->data['categoryJson'] = $this->categoryJson($selected); $this->data['archivesPath'] = '/'.Config::MINI_PATH_ARCHIVES; return $this->view(); } /** * 构造分类 json数据[zTree用] * * @param array $selected * @return false|string * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ private function categoryJson(array $selected = []) { $category = ArticleCategoryModel::order('sort', 'desc') ->field('id,pid,title') ->select() ->toArray(); foreach ($category as $k => $m) { $category[$k]['checked'] = in_array($m['id'], $selected); $category[$k]['spread'] = true; } $category = CmsRepository::getInstance()->buildMenuChild(0, $category); return json_encode($category, JSON_UNESCAPED_UNICODE); } /** * 内容分类 构造xmSelect json数据[xmSelect用] * * @param array $selected * @param array $disabled * @return false|string * @throws DataNotFoundException * @throws DbException * @throws ModelNotFoundException */ private function xmSelectJson(array $selected = [], array $disabled = []) { $category = ArticleCategoryModel::order('sort', 'desc') ->field('id,pid,title') ->select() ->toArray(); foreach ($category as $k => $m) { $category[$k]['selected'] = in_array($m['id'], $selected); $category[$k]['disabled'] = in_array($m['id'], $disabled); } $category = CmsRepository::getInstance()->buildMenuChild(0, $category); $category = CmsRepository::getInstance()->handleSelectedList($category); return json_encode($category, JSON_UNESCAPED_UNICODE); } }