# 菜单管理

## 1. 功能概述

菜单管理模块用于配置系统的菜单结构，支持后台管理端和PDA端的菜单配置，实现菜单的增删改查、排序和权限关联功能。

**核心功能：**

- 菜单树形结构管理：支持多层级菜单的创建、编辑和删除
- 菜单分类管理：区分后台(admin)和PDA模块的菜单
- 菜单状态控制：支持菜单的启用/禁用操作
- 菜单排序：支持拖拽排序，调整菜单显示顺序
- 菜单权限关联：新增菜单自动关联超级管理员角色
- 菜单导航属性：控制菜单是否在导航栏显示

## 2. 术语说明

#### 2.1.1 菜单相关术语

| 术语 | 定义 | 说明 |
|------|------|------|
| 顶层菜单 | 没有上级菜单的菜单节点 | 作为菜单树的根节点 |
| 子菜单 | 有上级菜单的菜单节点 | 可多级嵌套 |
| 模块 | 菜单所属的系统模块 | admin(后台)、pda(PDA端) |
| 导航属性 | 菜单是否在导航栏显示 | 可见(1)或隐藏(0) |
| 链接类型 | 菜单链接的类型 | 模块(0)或外链(1) |
| 打开方式 | 链接的打开方式 | 当前窗口(_self)或新窗口(_blank) |

## 3. 菜单管理操作

### 3.1 菜单查询

**查询条件：**

| 查询条件 | 说明 |
|---------|------|
| 模块 | 选择后台(admin)或PDA模块 |
| 状态 | 筛选启用或禁用状态的菜单 |
| 导航属性 | 筛选可见或隐藏的菜单 |
| 菜单深度 | 控制菜单树的展开层级 |

**操作步骤：**

1. 进入【系统设置】→【菜单管理】→【菜单配置】
2. 在顶部查询区域选择查询条件
3. 点击【查询】按钮获取菜单列表
4. 点击【重置】按钮清空查询条件

### 3.2 新增菜单

**操作步骤：**

1. 进入【系统设置】→【菜单管理】→【菜单配置】
2. 点击【新增顶层菜单】按钮，或在已有菜单上点击【新增】按钮添加子菜单
3. 填写菜单表单信息
4. 点击【确定】完成新增

**字段说明：**

| 字段 | 说明 | 必填 |
|------|------|------|
| 上级菜单 | 选择父菜单，不选择表示顶层菜单 | 否 |
| 名称 | 菜单的显示名称 | 是 |
| 别名 | 菜单的别名标识，API类型菜单必填 | 否 |
| 图标 | 菜单图标，可选择或自定义 | 否 |
| 排序 | 菜单的排序序号，数值越小越靠前 | 是 |
| 导航 | 控制菜单是否在导航栏显示 | 是 |
| 链接类型 | 模块(0)或外链(1) | 是 |
| 打开方式 | 当前窗口或新窗口 | 是 |
| URL | 菜单链接地址 | 否 |
| 参数 | 链接参数 | 否 |
| 备注 | 菜单的备注说明 | 否 |

**【提示】** 新增菜单时，系统会自动将其关联到超级管理员角色。

### 3.3 编辑菜单

**操作步骤：**

1. 在菜单树中点击需要编辑的菜单节点
2. 在右侧表单中修改菜单信息
3. 点击【修改】按钮保存更改

**【注意】** 菜单名称在同一模块内不能重复。

### 3.4 删除菜单

**操作步骤：**

1. 在菜单树中找到需要删除的菜单
2. 点击菜单右侧的【删除】按钮
3. 在确认对话框中点击【确定】

**【重要】** 如果该菜单或其子级菜单正在被角色使用，则无法删除。

### 3.5 启用/禁用菜单

**操作步骤：**

1. 在菜单树中找到需要操作的菜单
2. 点击菜单右侧的【禁用】或【启用】按钮
3. 在确认对话框中点击【确定】

**【注意】** 状态切换会影响该菜单及其所有子级菜单。

### 3.6 菜单排序

**操作步骤：**

1. 在菜单树中拖拽菜单节点到目标位置
2. 系统自动保存排序结果

**支持的拖拽操作：**
- 拖拽到同级菜单的前面或后面
- 拖拽到其他菜单下作为子菜单

## 4. 后台API接口

### 4.1 接口列表

| API路径 | 方法 | 功能描述 | 所属文件 |
|---------|------|---------|---------|
| `/api/background/v1/system_settings/menu_configuration/menu/all` | GET | 获取用户权限内的菜单列表 | MenuService.php:58 |
| `/api/background/v1/system_settings/menu_configuration/menu/list` | GET | 获取菜单列表(带筛选条件) | MenuService.php:124 |
| `/api/background/v1/system_settings/menu_configuration/menu/create` | POST | 创建新菜单 | MenuService.php:186 |
| `/api/background/v1/system_settings/menu_configuration/menu/edit` | POST | 编辑菜单信息 | MenuService.php:250 |
| `/api/background/v1/system_settings/menu_configuration/menu/delete` | POST | 删除菜单 | MenuService.php:307 |
| `/api/background/v1/system_settings/menu_configuration/menu/update_status` | POST | 更新菜单状态 | MenuService.php:328 |
| `/api/background/v1/system_settings/menu_configuration/menu/update_sort` | POST | 更新菜单排序 | MenuService.php:352 |

### 4.2 数据模型

**菜单表字段：**

| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | int | 菜单唯一标识 |
| parent_id | int | 父菜单ID |
| name | varchar | 菜单名称 |
| alias | varchar | 菜单别名 |
| icon | varchar | 菜单图标 |
| is_navi | tinyint | 是否导航显示(0/1) |
| module | varchar | 所属模块(admin/pda) |
| params | varchar | 链接参数 |
| remark | varchar | 备注说明 |
| sort | int | 排序序号 |
| status | tinyint | 状态(0禁用/1启用) |
| target | varchar | 打开方式 |
| type | tinyint | 链接类型(0模块/1外链) |
| url | varchar | 链接地址 |

## 5. 前端组件结构

### 5.1 组件目录

```
menu_configuration/
└── menu/
    ├── components/
    │   ├── PageHeader/
    │   │   └── index.vue      # 查询条件头部组件
    │   └── PageMain/
    │       └── index.vue      # 主内容区域组件
    └── index.vue              # 页面入口组件
```

### 5.2 核心组件功能

| 组件 | 功能 | 关键特性 |
|------|------|---------|
| PageHeader | 查询条件面板 | 支持模块切换、状态筛选、导航属性筛选 |
| PageMain | 菜单树和表单 | 树形展示、拖拽排序、增删改操作 |

## 6. 权限控制

菜单管理涉及以下权限点：

| 权限标识 | 权限名称 | 说明 |
|---------|---------|------|
| `/system_settings/menu_configuration/menu/create` | 新增菜单 | 允许创建新菜单 |
| `/system_settings/menu_configuration/menu/edit` | 编辑菜单 | 允许修改菜单信息 |
| `/system_settings/menu_configuration/menu/delete` | 删除菜单 | 允许删除菜单 |
| `/system_settings/menu_configuration/menu/disabled_enable` | 启用/禁用菜单 | 允许切换菜单状态 |

## 7. 数据流程图

```mermaid
flowchart TD
    A[用户请求] --> B{是否超级管理员}
    B -->|是| C[查询全部菜单]
    B -->|否| D[查询角色关联菜单]
    C --> E[返回菜单列表]
    D --> E
    E --> F[前端渲染树形结构]
    F --> G[用户操作]
    G --> H{操作类型}
    H -->|新增| I[校验名称唯一性]
    H -->|编辑| J[校验名称唯一性]
    H -->|删除| K[检查角色使用情况]
    H -->|状态切换| L[检查角色使用情况]
    I --> M[保存菜单数据]
    J --> M
    K --> N{是否被使用}
    L --> N
    N -->|是| O[提示错误信息]
    N -->|否| P[执行操作]
    M --> Q[关联超级管理员]
    Q --> R[返回结果]
    P --> R
    O --> R
```

## 8. 注意事项

**【重要】** 删除或禁用菜单前，请确保该菜单未被任何角色使用，否则操作将失败。

**【提示】** 建议定期整理菜单结构，保持菜单树的清晰性和逻辑性。

**【注意】** 菜单排序数值越小，显示越靠前，默认值为50。