From 1ee6eaf071835f1e0e4d05e0fcc1f2d22b24d04d Mon Sep 17 00:00:00 2001 From: jsasg <735273025@qq.com> Date: Wed, 5 Mar 2025 18:00:54 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E5=88=86=E7=B1=BB=E5=88=86=E9=A1=B5/=E8=AF=A6=E6=83=85/?= =?UTF-8?q?=E6=96=B0=E5=A2=9E/=E6=9B=B4=E6=96=B0/=E5=88=A0=E9=99=A4?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/admin/controller/v1/Navigation.php | 143 +++++++++++++++++++ app/admin/model/v1/SysNavigationModel.php | 9 +- app/admin/route/v1.php | 18 +++ app/admin/validate/v1/NavigationValidate.php | 54 +++++++ app/common/model/SysNavigationBaseModel.php | 25 ++++ 5 files changed, 248 insertions(+), 1 deletion(-) create mode 100644 app/admin/controller/v1/Navigation.php create mode 100644 app/admin/validate/v1/NavigationValidate.php diff --git a/app/admin/controller/v1/Navigation.php b/app/admin/controller/v1/Navigation.php new file mode 100644 index 00000000..d19984cf --- /dev/null +++ b/app/admin/controller/v1/Navigation.php @@ -0,0 +1,143 @@ +param([ + 'name', + ]); + + $navs = SysNavigationModel::field([ + 'id', + 'name' + ]) + ->withSearch(['name'], ['name' => $name['name']??null]) + ->select(); + + return success('获取成功', $navs); + } + + // 分页 + public function index() + { + $name = request()->param([ + 'name', + 'page/d' => 1, + 'size/d' => 10, + ]); + + $navs = SysNavigationModel::field([ + 'id', + 'name', + 'desc', + 'created_at' + ]) + ->withSearch(['name'], ['name' => $name['name']??null]) + ->paginate([ + 'list_rows' => $name['size'], + 'page' => $name['page'], + ]); + + return success('获取成功', $navs); + } + + // 详情 + public function read() + { + $id = request()->param('id'); + + $nav = SysNavigationModel::withoutField([ + 'at_page', + 'unique_label', + 'language_id', + 'created_at', + 'updated_at', + 'deleted_at' + ]) + ->bypk($id) + ->find(); + if (empty($nav)) { + return error('导航不存在'); + } + + return success('获取成功', $nav); + } + + // 新增 + public function save() + { + $post = request()->post([ + 'name', + 'at_platform' => 'pc', + 'desc', + 'status' => 1 + ]); + $data = array_merge($post, ['language_id' => request()->lang_id, 'unique_label' => uniqid("NAV_")]); + + $validate = new NavigationValidate; + if (!$validate->scene('add')->check($data)) { + return error($validate->getError()); + } + + $nav = SysNavigationModel::create($data); + if ($nav->isEmpty()) { + return error('操作失败'); + } + + return success('操作成功'); + } + + // 修改 + public function update() + { + $id = request()->param('id'); + $put = request()->put([ + 'name', + 'at_platform' => 'pc', + 'desc', + 'status' => 1 + ]); + + $validate = new NavigationValidate; + if (!$validate->scene('edit')->check(array_merge($put, ['id' => $id]))) { + return error($validate->getError()); + } + + + $nav = SysNavigationModel::bypk($id)->find(); + if (empty($nav)) { + return error('请确认要操作对象是否存在'); + } + + if (!$nav->save($put)) { + return error('操作失败'); + } + + return success('操作成功'); + } + + // 删除 + public function delete() + { + $id = request()->param('id'); + + $nav = SysNavigationModel::bypk($id)->find(); + if (empty($nav)) { + return error('请确认要操作对象是否存在'); + } + + if (!$nav->delete()) { + return error('操作失败'); + } + + return success('操作成功'); + } +} diff --git a/app/admin/model/v1/SysNavigationModel.php b/app/admin/model/v1/SysNavigationModel.php index 474375e4..253cf1c8 100644 --- a/app/admin/model/v1/SysNavigationModel.php +++ b/app/admin/model/v1/SysNavigationModel.php @@ -11,5 +11,12 @@ use app\common\model\SysNavigationBaseModel; */ class SysNavigationModel extends SysNavigationBaseModel { - // + // 名称搜索 + public function searchNameAttr($query, $value) + { + if (empty($value)) { + return; + } + $query->where('name', 'like', "%{$value}%"); + } } diff --git a/app/admin/route/v1.php b/app/admin/route/v1.php index 5c282061..9a906786 100644 --- a/app/admin/route/v1.php +++ b/app/admin/route/v1.php @@ -412,6 +412,24 @@ Route::group('v1', function () { // 导航管理 Route::group('navigation', function() { + // 列表 + Route::get('list', 'Navigation/list'); + + // 分页 + Route::get('index', 'Navigation/index'); + + // 导航详情 + Route::get('read/:id', 'Navigation/read'); + + // 导航新增 + Route::post('save', 'Navigation/save'); + + // 导航更新 + Route::put('update/:id', 'Navigation/update'); + + // 导航删除 + Route::delete('delete/:id', 'Navigation/delete'); + Route::group('items', function() { // 导航数据类型 Route::get('link/type', 'NavigationItem/linkType'); diff --git a/app/admin/validate/v1/NavigationValidate.php b/app/admin/validate/v1/NavigationValidate.php new file mode 100644 index 00000000..94f0195c --- /dev/null +++ b/app/admin/validate/v1/NavigationValidate.php @@ -0,0 +1,54 @@ + ['规则1','规则2'...] + * + * @var array + */ + protected $rule = [ + 'id' => 'require|integer', + 'language_id' => 'require|integer', + 'at_platform' => 'require|in:pc,mobile', + 'unique_label' => 'require|max:64', + 'name' => 'require|max:64', + 'desc' => 'max:255', + 'sort' => 'integer', + 'status' => 'in:1,-1', + ]; + + /** + * 定义错误信息 + * 格式:'字段名.规则名' => '错误信息' + * + * @var array + */ + protected $message = [ + 'id.require' => 'ID不能为空', + 'id.integer' => 'ID必须是整数', + 'language_id.require' => '语言ID不能为空', + 'language_id.integer' => '语言ID必须是整数', + 'at_platform.require' => '平台不能为空', + 'at_platform.in' => '平台值必须是pc或mobile', + 'unique_label.require' => '唯一标识不能为空', + 'unique_label.max' => '唯一标识长度不能超过64个字符', + 'name.require' => '名称不能为空', + 'name.max' => '名称长度不能超过64个字符', + 'desc.max' => '描述长度不能超过255个字符', + 'sort.integer' => '排序必须是整数', + 'status.in' => '状态值必须是1或-1', + ]; + + // 场景定义 + protected $scene = [ + 'add' => ['language_id', 'at_platform', 'unique_label', 'name', 'desc', 'sort', 'status'], + 'edit' => ['id', 'at_platform', 'name', 'desc', 'sort', 'status'], + ]; +} diff --git a/app/common/model/SysNavigationBaseModel.php b/app/common/model/SysNavigationBaseModel.php index 59f4c424..40df0436 100644 --- a/app/common/model/SysNavigationBaseModel.php +++ b/app/common/model/SysNavigationBaseModel.php @@ -3,13 +3,38 @@ declare (strict_types = 1); namespace app\common\model; +use think\model\concern\SoftDelete; + /** * 导航模型 * @mixin \think\Model */ class SysNavigationBaseModel extends BaseModel { + // 启用软件删除 + use SoftDelete; + // 软件删除字段 + protected $deleteTime = 'deleted_at'; + // 表名 protected $name = 'sys_navigation'; + // 主键 + protected $pk = 'id'; + + // 字段信息 + protected $schema = [ + 'id' => 'int', + 'language_id' => 'int', + 'at_page' => 'string', + 'at_platform' => 'string', + 'unique_label' => 'string', + 'name' => 'string', + 'desc' => 'string', + 'sort' => 'int', + 'status' => 'int', + 'created_at' => 'datetime', + 'updated_at' => 'datetime', + 'deleted_at' => 'datetime' + ]; }