order('sort', 'asc') ->field('id, title, content, path, sort, status, create_time, update_time') ->select() ->toArray(); return json([ 'code' => 200, 'msg' => '获取成功', 'data' => $onePages ]); } catch (DbException $e) { return json([ 'code' => 500, 'msg' => '获取失败:' . $e->getMessage(), 'data' => [] ]); } } /** * 创建单页 * @return Json */ public function createOnePage() { try { // 获取请求参数 $data = $this->request->param(); // 验证参数 $this->validate($data, [ 'title|标题' => 'require|max:255', 'content|内容' => 'require', 'path|路由' => 'require|max:200', 'sort|排序号' => 'integer', 'status|状态' => 'integer|in:0,1', ]); // 验证路由格式(必须以 / 开头) if (!preg_match('/^\/[a-zA-Z0-9\/_-]*$/', $data['path'])) { return json([ 'code' => 400, 'msg' => '路由必须以 / 开头,只能包含字母、数字、下划线、横线和斜线' ]); } // 检查路由是否已存在 $exists = OnePage::where('path', $data['path']) ->where('delete_time', null) ->find(); if ($exists) { return json([ 'code' => 400, 'msg' => '路由已存在,请使用其他路由' ]); } // 准备单页数据 $onePageData = [ 'title' => $data['title'], 'content' => $data['content'], 'path' => $data['path'], 'sort' => $data['sort'] ?? 0, 'status' => $data['status'] ?? 1, 'create_time' => date('Y-m-d H:i:s'), ]; // 创建单页 $result = OnePage::insertGetId($onePageData); if ($result === false) { return json([ 'code' => 500, 'msg' => '创建失败' ]); } // 记录操作日志 $this->logSuccess('单页管理', '创建单页', ['id' => $result]); return json([ 'code' => 200, 'msg' => '创建成功', 'data' => ['id' => $result] ]); } catch (ValidateException $e) { // 记录失败日志 $this->logFail('单页管理', '创建单页', $e->getMessage()); return json([ 'code' => 400, 'msg' => $e->getError() ]); } catch (DbException $e) { // 记录失败日志 $this->logFail('单页管理', '创建单页', $e->getMessage()); return json([ 'code' => 500, 'msg' => '创建失败:' . $e->getMessage() ]); } } /** * 编辑单页 * @param int $id 单页ID * @return Json */ public function editOnePage(int $id) { try { // 获取请求参数 $data = $this->request->param(); // 验证参数 $this->validate($data, [ 'title|标题' => 'require|max:255', 'content|内容' => 'require', 'path|路由' => 'require|max:200', 'sort|排序号' => 'integer', 'status|状态' => 'integer|in:0,1', ]); // 验证路由格式(必须以 / 开头) if (!preg_match('/^\/[a-zA-Z0-9\/_-]*$/', $data['path'])) { return json([ 'code' => 400, 'msg' => '路由必须以 / 开头,只能包含字母、数字、下划线、横线和斜线' ]); } // 检查单页是否存在 $onePage = OnePage::where('id', $id) ->where('delete_time', null) ->find(); if (!$onePage) { return json([ 'code' => 404, 'msg' => '单页不存在' ]); } // 检查路由是否被其他单页使用 $exists = OnePage::where('path', $data['path']) ->where('id', '<>', $id) ->where('delete_time', null) ->find(); if ($exists) { return json([ 'code' => 400, 'msg' => '路由已被其他单页使用,请使用其他路由' ]); } // 准备更新数据 $updateData = [ 'title' => $data['title'], 'content' => $data['content'], 'path' => $data['path'], 'sort' => $data['sort'] ?? 0, 'status' => $data['status'] ?? 1, 'update_time' => date('Y-m-d H:i:s'), ]; // 执行更新 OnePage::where('id', $id)->update($updateData); // 获取更新后的单页信息 $updatedOnePage = OnePage::where('id', $id)->find(); // 记录操作日志 $this->logSuccess('单页管理', '更新单页', ['id' => $id]); return json([ 'code' => 200, 'msg' => '更新成功', 'data' => $updatedOnePage ? $updatedOnePage->toArray() : [] ]); } catch (ValidateException $e) { // 记录失败日志 $this->logFail('单页管理', '更新单页', $e->getMessage()); return json([ 'code' => 400, 'msg' => $e->getError() ]); } catch (DbException $e) { // 记录失败日志 $this->logFail('单页管理', '更新单页', $e->getMessage()); return json([ 'code' => 500, 'msg' => '更新失败:' . $e->getMessage() ]); } } /** * 删除单页 * @param int $id 单页ID * @return Json */ public function deleteOnePage(int $id) { try { // 检查单页是否存在 $onePage = OnePage::where('id', $id) ->where('delete_time', null) ->find(); if (!$onePage) { return json([ 'code' => 404, 'msg' => '单页不存在' ]); } // 逻辑删除单页 $result = OnePage::where('id', $id) ->where('delete_time', null) ->update([ 'delete_time' => date('Y-m-d H:i:s'), 'update_time' => date('Y-m-d H:i:s') ]); if ($result === false) { return json([ 'code' => 500, 'msg' => '删除失败' ]); } // 记录操作日志 $this->logSuccess('单页管理', '删除单页', ['id' => $id]); return json([ 'code' => 200, 'msg' => '删除成功' ]); } catch (DbException $e) { // 记录失败日志 $this->logFail('单页管理', '删除单页', $e->getMessage()); return json([ 'code' => 500, 'msg' => '删除失败:' . $e->getMessage() ]); } } }