// +---------------------------------------------------------------------- declare(strict_types=1); namespace addon\haonav\controller\backend; use think\Request; use think\Response; use think\exception\ValidateException; use think\facade\Db; use addon\haonav\validate\Category as CategoryValidate; /** * Category 类 * * @author ywxapp */ class Category extends HaonavBackend { /** * Summary of needLogin * @var array */ /** * Summary of needRight * @var array */ protected $noNeedVerify = ['*']; /** * 控制器初始化 _initialize * @return void */ protected function initialize() { $this->model = new \addon\haonav\model\Category(); } /** * 显示资源列表 * * @return \think\Response */ public function index() { if ($this->request->isAjax()) { $title = $this->request->param('title', ''); $page = $this->request->param('page/d', 1); $limit = $this->request->param('limit/d', 20); $data = $this->model->withAttr('cate') ->when($title, fn($q, $t) => $q->whereLike('title', "%{$t}%")) ->paginate(['page' => $page, 'list_rows' => $limit]); $this->result->setCount($data->total()); $this->result->success($data->items()); } return $this->view->fetch('category/index'); } /** * 显示创建资源表单页. * * @return \think\Response */ public function create() { if ($this->request->isAjax()) { $data = $this->model->cateTree($this->model->select()->toArray()); $this->result->success(['data' => $data]); } } /** * 保存新建的资源 * * @param \think\Request $request * @return \think\Response */ public function save(Request $request) { if ($this->request->isPost()) { $params = $this->request->post(); try { validate(CategoryValidate::class)->check($params); } catch (ValidateException $e) { $this->result->error('数据验证失败: ' . $e->getMessage()); } Db::startTrans(); try { $data = $this->model->save($params); Db::commit(); $this->result->success($data, '保存成功'); } catch (\Exception $e) { Db::rollback(); $this->result->error('保存失败: ' . $e->getMessage()); } } } /** * 显示指定的资源 * * @param int $id * @return \think\Response */ public function read($id) { // } /** * 显示编辑资源表单页. * * @param int $id * @return \think\Response */ public function edit($id = null) { $id = $this->request->param('id'); $model = $this->model->find($id); if (! $model) { $this->result->error('数据不存在'); } if ($this->request->isAjax()) { $powers = $this->model->cateTree($this->model->select()->toArray()); $this->result->success(['power' => $powers, 'info' => $model]); } } /** * 保存更新的资源 * * @param \think\Request $request * @param int $id * @return \think\Response */ public function update(Request $request, $id = 0) { $id = $id ? $id : $this->request->param('id'); if ($this->request->isAjax() && $this->request->isPut()) { $params = $this->request->param(); try { validate(CategoryValidate::class)->check($params); } catch (ValidateException $e) { $this->result->error('数据验证失败: ' . $e->getMessage()); } Db::startTrans(); try { $model = $this->model->find($id); if (! $model) { throw new ValidateException('数据不存在'); } $model->save($params); Db::commit(); $this->result->success($model, '更新成功'); } catch (\Exception $e) { Db::rollback(); $this->result->error('更新失败: ' . $e->getMessage()); } } } /** * 显示回收站列表 * * @param \think\Request $request * @return \think\Response */ public function recyclebin() { $page = $this->request->param('page', 1); $size = $this->request->param('size', 15); if ($this->request->isAjax()) { $data = $this->model->onlyTrashed()->paginate([ 'page' => $page, 'list_rows' => $size, ]); $this->result->success($data->items()); } $this->view->assign('title', '回收站'); return $this->view->fetch('category/recyclebin'); } /** * 删除权限 * * @param \think\Request $request * @return \think\Response */ public function delete() { if ($this->request->isAjax() && $this->request->isDelete()) { $ids = $this->request->param('ids', ''); $force = $this->request->param('force', false); if (empty($ids)) { $this->result->error('请选择要删除的数据'); } try { Db::transaction(function () use ($ids, $force) { if ($force) { $this->model->onlyTrashed()->whereIn('id', $ids)->select()->each(function ($item) { $item->force()->delete(); }); } else { $this->model->destroy($ids); } }); $this->result->success(); } catch (\think\exception\HttpResponseException $e) { throw $e; // 不要 return,不要吞掉! } catch (\Throwable $th) { $this->result->error('删除失败: ' . $th->getMessage()); } } } /** * 还原权限 * * @param \think\Request $request * @return \think\Response */ public function restore($ids = null) { if ($this->request->isAjax() && $this->request->isPut()) { $ids = $this->request->param('ids', ''); if (empty($ids)) { $this->result->error('请选择要还原的数据'); } $idsArray = explode(',', $ids); try { Db::transaction(function () use ($idsArray) { $this->model->onlyTrashed()->whereIn('id', $idsArray)->select()->each(function ($item) { $item->restore(); }); }); $this->result->success(); } catch (\think\exception\HttpResponseException $e) { throw $e; // 不要 return,不要吞掉! } catch (\Throwable $th) { $this->result->error('还原失败: ' . $th->getMessage()); } } } }