菜单管理模块基于auth_menu
表实现树形层级管理,支持菜单的新增、修改、删除、排序、状态切换及复制等操作。系统按项目隔离菜单(通过project_id
字段),通过parent_id
和ancestors
维护父子关系,同时区分菜单类型(目录、菜单、按钮、接口)和链接类型(内部、外链内嵌、外链),结合auth_role_menu
表实现角色与菜单的权限绑定,适配Pure-Admin框架的路由生成需求。
- 操作路径:菜单列表点击「新增」按钮,选择父菜单后填写表单
- 系统自动填充字段:
menu_id
:自动生成36位UUIDancestors
:祖先ID链(父菜单ancestors
+父菜单ID,根菜单为"0")sort
:排序号(同层级最大排序+1)create_date
/create_user_id
:当前操作信息
- 校验规则:
- 验证项目是否存在,不存在则提示“项目不存在”
- 验证父菜单是否存在,不存在则提示“父菜单不存在”
- 同一父菜单下菜单名称不可重复,重复时提示验证错误
- 操作路径:菜单列表点击目标菜单「修改」按钮,更新表单后保存
- 可修改字段:除
menu_id
外的所有字段(同新增菜单) - 特殊处理:
- 修改父菜单时自动更新
ancestors
字段(祖先ID链) route_name
自动转换为首字母大写
- 校验规则:与新增菜单一致,排除当前菜单自身记录
- 操作路径:菜单列表点击「删除」按钮,支持批量选择删除
- 删除限制:
- 存在子菜单时禁止删除,提示“该菜单下存在子菜单,不允许删除”
- 必须选择至少一个菜单,否则提示“请选择要删除的内容”
- 删除逻辑:
- 执行物理删除(
deleteBatchIds
) - 返回删除成功的菜单数量(格式:“删除成功X条数据”)
- 关联检查:通过
ancestors
字段包含当前菜单ID判断是否存在子菜单
- 操作路径:菜单列表点击「排序」按钮,拖拽调整顺序后保存
- 实现逻辑:批量更新
sort
字段,按调整后的顺序赋值 - 生效范围:同层级菜单按
sort
升序排列
- 启用/停用(
is_enable
): - 操作路径:菜单列表点击「启用」/「停用」按钮
- 状态转换:1(启用)↔0(停用)
- 影响范围:停用后菜单不参与路由生成,角色无法访问
- 显示/隐藏(
visible
): - 操作路径:通过编辑菜单修改「显示状态」
- 状态转换:1(显示)↔0(隐藏)
- 影响范围:隐藏后不在界面展示,但仍可通过接口访问
- 操作路径:菜单列表点击「复制」按钮
- 复制规则:
- 复制后的菜单名称自动添加“-复制”后缀
- 不可复制已复制的菜单(名称包含“-复制”)
- 排序号自动设为同层级最大排序+1
- 字段处理:复制所有字段,
menu_id
自动生成新值
- 功能说明:根据用户角色权限生成适配Pure-Admin框架的路由配置
- 权限控制:
- 管理员(
admin
/admin1
)可访问所有启用状态的菜单 - 普通用户仅能访问角色关联的菜单(通过
auth_role_menu
表筛选)
- 路由转换规则:
- 目录(M)和菜单(C)转换为路由节点,包含
path
、component
、meta
等信息 - 按钮(B)和接口(I)转换为
meta
中的权限标识(perms
) - 外链(
frame_status=2/3
)特殊处理frameSrc
字段
- 返回格式:符合Pure-Admin框架要求的路由JSON结构
类型 | 编码 | 说明 |
---|
目录 | M | 用于组织菜单结构,不含具体组件 |
菜单 | C | 可访问的功能页面,包含路由和组件 |
按钮 | B | 操作按钮,用于权限控制(如新增、删除) |
接口 | I | 系统接口,用于API权限控制 |
类型 | 编码 | 说明 |
---|
内部链接 | 1 | 系统内页面,route_component 为组件路径 |
外链内嵌 | 2 | 外部页面内嵌展示,route_component 为外链地址 |
外链跳转 | 3 | 点击跳转至外部页面,route_component 为外链地址 |
- 必填校验:项目ID、菜单名称、类型、链接类型等关键参数不能为空
- 存在性校验:
- 新增/修改菜单时验证项目是否存在
- 验证父菜单是否存在(非根菜单时)
- 唯一性校验:同一父菜单下菜单名称不可重复
- 业务规则校验:
- 复制菜单时禁止重复复制(名称含“-复制”)
- 删除菜单前检查是否存在子菜单(通过
ancestors
判断)
- 关联关系:角色与菜单为多对多关系(通过
auth_role_menu
表实现) - 权限控制:
- 角色菜单权限配置时,通过菜单下拉框选择可访问的菜单
- 路由生成时根据用户关联的角色过滤可见菜单
- 缓存影响:菜单启用状态或权限变更后,需重新生成路由以生效