浏览代码

[智价云] 菜单接口补充

tangyuanwang 1 周之前
父节点
当前提交
d58c4d6ff1
共有 3 个文件被更改,包括 181 次插入0 次删除
  1. 118 0
      app/Http/Controllers/Manager/Menu.php
  2. 55 0
      app/Http/Requests/Manager/Menu.php
  3. 8 0
      routes/manager.php

+ 118 - 0
app/Http/Controllers/Manager/Menu.php

@@ -0,0 +1,118 @@
+<?php
+
+namespace App\Http\Controllers\Manager;
+
+use App\Http\Requests\Manager\Menu as Request;
+use App\Models\Manager\Menu as MenuModel;
+
+/**
+ * 菜单管理
+ * @author 唐远望
+ * @version 1.0
+ * @date 2025-12-05
+ * 
+ */
+class Menu extends Manager
+{
+
+	/**
+	 * 列表 
+	 * @author 唐远望
+	 * @version 1.0
+	 * @date 2025-12-05
+	 */
+	public function list(MenuModel $MenuModel)
+	{
+		// 查询数据
+		$menu 		= $MenuModel->query()->select(['id', 'title', 'module', 'url', 'icon', 'type', 'pid'])->get()->toArray();
+		// 树形
+		$list		= array_sort(list_to_tree($menu), 'module', SORT_ASC);
+		// 返回结果
+		return		json_send(['code' => 'success', 'msg' => '成功', 'data' => $list]);
+	}
+
+	/**
+	 * 新增 
+	 * @author 唐远望
+	 * @version 1.0
+	 * @date 2025-12-05
+	 */
+	public function add(Request $request, MenuModel $MenuModel)
+	{
+		// 进行验证
+		$request->scene('add')->validate();
+		// 接收参数
+		$data['url']		= request('url', '');
+		$data['title']		= request('title', '');
+		$data['module']		= request('module', '');
+		$data['icon']		= request('icon', '');
+		$data['type']		= request('type', '');
+		$data['pid']		= request('pid', 0);
+		$data['sort_order']	= request('sort_order', 0);
+		// 新增
+		$data['id']			= $MenuModel->add($data);
+		// 提示
+		if (!$data['id'])	return json_send(['code' => 'error', 'msg' => '新增失败']);
+		// 成功
+		return				json_send(['code' => 'success', 'msg' => '新增成功', 'data' => $data]);
+	}
+
+	/** 编辑
+	 * @author 唐远望
+	 * @version 1.0
+	 * @date 2025-12-05
+	 */
+	public function edit(Request $request, MenuModel $MenuModel)
+	{
+		// 进行验证
+		$request->scene('edit')->validate();
+		// 接收参数
+		$id					= request('id', 0);
+		$data['url']		= request('url', '');
+		$data['title']		= request('title', '');
+		$data['module']		= request('module', '');
+		$data['icon']		= request('icon', '');
+		$data['type']		= request('type', '');
+		$data['pid']		= request('pid', 0);
+		$data['sort_order']	= request('sort_order', 0);
+		// 查询数据
+		$oldData			= $MenuModel->query()->find($id);
+		// 提示
+		if (!$oldData)		return json_send(['code' => 'error', 'msg' => '数据不存在']);
+		// 错误
+		if ($data['pid'] == $id) return json_send(['code' => 'error', 'msg' => '上级菜单不能为当前菜单']);
+		// 新增
+		$data['id']			= $MenuModel->edit($id, $data);
+		// 提示
+		if (!$data['id'])	return json_send(['code' => 'error', 'msg' => '编辑失败']);
+		// 成功
+		return				json_send(['code' => 'success', 'msg' => '编辑成功', 'data' => $data]);
+	}
+
+	/** 删除
+	 * @author 唐远望
+	 * @version 1.0
+	 * @date 2025-12-05
+	 */
+	public function delete(Request $request, MenuModel $MenuModel)
+	{
+		// 进行验证
+		$request->scene('delete')->validate();
+		// 接收参数
+		$id				= request('id', 0);
+		// 查询数据
+		$oldData		= $MenuModel->query()->find($id);
+		// 提示
+		if (!$oldData)	return json_send(['code' => 'error', 'msg' => '数据不存在']);
+		// 如果有数据
+		if ($MenuModel->where([['pid', '=', $id]])->value('id')) return json_send(['code' => 'error', 'msg' => '请先删除子节点']);
+		// 删除节点
+		$result 		= $MenuModel->query()->where([['id', '=', $id]])->delete();
+		// 删除失败
+		if (!$result)  return json_send(['code' => 'error', 'msg' => '删除失败']);
+		// 更新缓存
+		$MenuModel->getList($oldData['module'], true);
+		// 删除成功
+		return			json_send(['code' => 'success', 'msg' => '删除成功', 'data' => ['id' => $id]]);
+	}
+}

+ 55 - 0
app/Http/Requests/Manager/Menu.php

@@ -0,0 +1,55 @@
+<?php namespace App\Http\Requests\Manager;
+
+use App\Http\Requests\BaseRequest;
+
+/**
+ * 菜单管理-验证规则
+ * @author 唐远望
+ * @version 1.0
+ * @date 2025-12-05
+ * 
+ */
+class Menu extends BaseRequest
+{
+    /**
+     * 获取应用于请求的规则
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            // 有时候我们希望某个字段在第一次验证失败后就停止运行验证规则,只需要将 bail 添加到规则中:
+            // 验证字段,验证规则,提示信息
+	        'title' 			=> 'required|min:2|max:20',
+            'url' 			    => 'required',
+            'id'                => 'required|integer|gt:0',
+        ];
+    }
+
+    // 场景列表
+    protected $scenes = [
+		'add'  		            => ['title','url'],
+        'edit'  		        => ['id','title','url'],
+        'delete'  		            => ['id'],
+	];
+    
+    /**
+     * 获取已定义验证规则的错误消息
+     *
+     * @return array
+     */
+    public function messages()
+    {
+        return [
+            'title.required'    => '菜单名称必填',
+            'title.min'	        => '菜单名称需2字以上',
+            'title.max'	        => '菜单名称最多20字',
+            'url.required'      => '菜单路径必填',
+            'id.required'       => 'ID未知',
+            'id.integer'   	    => 'ID格式错误',
+            'id.gt'   		    => 'ID格式错误',
+        ];
+    }
+
+}

+ 8 - 0
routes/manager.php

@@ -24,6 +24,14 @@ Route::any('admin_user/alter_password', [App\Http\Controllers\Manager\AdminUser:
 
 //城市列表
 Route::any('citys/list', [App\Http\Controllers\Manager\Citys::class, 'list']);
+// 菜单管理-列表
+Route::any('menu/list', [App\Http\Controllers\Manager\Menu::class, 'list']);
+// 菜单管理-添加
+Route::any('menu/add', [App\Http\Controllers\Manager\Menu::class, 'add']);
+// 菜单管理-修改
+Route::any('menu/edit', [App\Http\Controllers\Manager\Menu::class, 'edit']);
+// 菜单管理-删除
+Route::any('menu/delete', [App\Http\Controllers\Manager\Menu::class, 'delete']);
 
 // 账号管理-列表
 Route::any('admin_user/list', [App\Http\Controllers\Manager\AdminUser::class, 'get_list']);