一、功能概述

菜单管理模块基于auth_menu表实现树形层级管理,支持菜单的新增、修改、删除、排序、状态切换及复制等操作。系统按项目隔离菜单(通过project_id字段),通过parent_idancestors维护父子关系,同时区分菜单类型(目录、菜单、按钮、接口)和链接类型(内部、外链内嵌、外链),结合auth_role_menu表实现角色与菜单的权限绑定,适配Pure-Admin框架的路由生成需求。

二、核心功能说明

(一)新增菜单

  1. 操作路径:菜单列表点击「新增」按钮,选择父菜单后填写表单
  2. 系统自动填充字段
    • menu_id:自动生成36位UUID
    • ancestors:祖先ID链(父菜单ancestors+父菜单ID,根菜单为"0")
    • sort:排序号(同层级最大排序+1)
    • create_date/create_user_id:当前操作信息
  3. 校验规则
    • 验证项目是否存在,不存在则提示“项目不存在”
    • 验证父菜单是否存在,不存在则提示“父菜单不存在”
    • 同一父菜单下菜单名称不可重复,重复时提示验证错误

(二)修改菜单

  1. 操作路径:菜单列表点击目标菜单「修改」按钮,更新表单后保存
  2. 可修改字段:除menu_id外的所有字段(同新增菜单)
  3. 特殊处理
    • 修改父菜单时自动更新ancestors字段(祖先ID链)
    • route_name自动转换为首字母大写
  4. 校验规则:与新增菜单一致,排除当前菜单自身记录

(三)删除菜单

  1. 操作路径:菜单列表点击「删除」按钮,支持批量选择删除
  2. 删除限制
    • 存在子菜单时禁止删除,提示“该菜单下存在子菜单,不允许删除”
    • 必须选择至少一个菜单,否则提示“请选择要删除的内容”
  3. 删除逻辑
    • 执行物理删除(deleteBatchIds
    • 返回删除成功的菜单数量(格式:“删除成功X条数据”)
  4. 关联检查:通过ancestors字段包含当前菜单ID判断是否存在子菜单

(四)菜单排序

  1. 操作路径:菜单列表点击「排序」按钮,拖拽调整顺序后保存
  2. 实现逻辑:批量更新sort字段,按调整后的顺序赋值
  3. 生效范围:同层级菜单按sort升序排列

(五)菜单状态管理

  1. 启用/停用(is_enable
    • 操作路径:菜单列表点击「启用」/「停用」按钮
    • 状态转换:1(启用)↔0(停用)
    • 影响范围:停用后菜单不参与路由生成,角色无法访问
  2. 显示/隐藏(visible
    • 操作路径:通过编辑菜单修改「显示状态」
    • 状态转换:1(显示)↔0(隐藏)
    • 影响范围:隐藏后不在界面展示,但仍可通过接口访问

(六)菜单复制

  1. 操作路径:菜单列表点击「复制」按钮
  2. 复制规则
    • 复制后的菜单名称自动添加“-复制”后缀
    • 不可复制已复制的菜单(名称包含“-复制”)
    • 排序号自动设为同层级最大排序+1
  3. 字段处理:复制所有字段,menu_id自动生成新值

(七)Pure-Admin路由生成

  1. 功能说明:根据用户角色权限生成适配Pure-Admin框架的路由配置
  2. 权限控制
    • 管理员(admin/admin1)可访问所有启用状态的菜单
    • 普通用户仅能访问角色关联的菜单(通过auth_role_menu表筛选)
  3. 路由转换规则
    • 目录(M)和菜单(C)转换为路由节点,包含pathcomponentmeta等信息
    • 按钮(B)和接口(I)转换为meta中的权限标识(perms
    • 外链(frame_status=2/3)特殊处理frameSrc字段
  4. 返回格式:符合Pure-Admin框架要求的路由JSON结构

三、菜单类型与链接类型说明

(一)菜单类型(menu_type

类型编码说明
目录M用于组织菜单结构,不含具体组件
菜单C可访问的功能页面,包含路由和组件
按钮B操作按钮,用于权限控制(如新增、删除)
接口I系统接口,用于API权限控制

(二)链接类型(frame_status

类型编码说明
内部链接1系统内页面,route_component为组件路径
外链内嵌2外部页面内嵌展示,route_component为外链地址
外链跳转3点击跳转至外部页面,route_component为外链地址

四、数据校验规则

  1. 必填校验:项目ID、菜单名称、类型、链接类型等关键参数不能为空
  2. 存在性校验
    • 新增/修改菜单时验证项目是否存在
    • 验证父菜单是否存在(非根菜单时)
  3. 唯一性校验:同一父菜单下菜单名称不可重复
  4. 业务规则校验
    • 复制菜单时禁止重复复制(名称含“-复制”)
    • 删除菜单前检查是否存在子菜单(通过ancestors判断)

五、菜单与权限关联说明

  1. 关联关系:角色与菜单为多对多关系(通过auth_role_menu表实现)
  2. 权限控制
    • 角色菜单权限配置时,通过菜单下拉框选择可访问的菜单
    • 路由生成时根据用户关联的角色过滤可见菜单
  3. 缓存影响:菜单启用状态或权限变更后,需重新生成路由以生效