# 菜单管理 - menuType 字段值修正

> **日期**: 2026-03-18
> **后端状态**: ✅ 已完成并部署测试环境
> **影响接口**: 菜单管理模块所有接口

---

## 变更说明

`menuType` 字段值从英文全称改为与字典 `menu_type` 一致的简码。

### 变更前

| 值 | 含义 |
|----|------|
| `DIRECTORY` | 目录 |
| `MENU` | 菜单 |
| `BUTTON` | 按钮 |

### 变更后（与字典 menu_type 一致）

| 值 | 含义 |
|----|------|
| `D` | 目录 |
| `M` | 菜单 |
| `B` | 按钮 |

---

## 影响的接口

| # | 接口 | 方法 | 路径 | 影响 |
|---|------|------|------|------|
| 1 | 创建菜单 | POST | `/admin/menu` | 请求参数 menuType 改用 D/M/B |
| 2 | 更新菜单 | PUT | `/admin/menu/{menuId}` | 请求参数 menuType 改用 D/M/B |
| 3 | 获取菜单详情 | GET | `/admin/menu/{menuId}` | 返回 menuType 为 D/M/B |
| 4 | 获取当前管理员菜单 | GET | `/admin/menu/my` | 返回 menuType 为 D/M/B |
| 5 | 获取完整菜单树 | GET | `/admin/menu/tree` | 返回 menuType 为 D/M/B |
| 6 | 获取角色菜单树 | GET | `/admin/menu/tree/role/{roleId}` | 返回 menuType 为 D/M/B |

---

## 前端需要修改的地方

1. **创建/更新菜单时**：menuType 传值从 `DIRECTORY`/`MENU`/`BUTTON` 改为 `D`/`M`/`B`
2. **菜单类型判断逻辑**：所有 `=== 'DIRECTORY'` 改为 `=== 'D'`，`=== 'MENU'` 改为 `=== 'M'`，`=== 'BUTTON'` 改为 `=== 'B'`
3. **菜单类型显示**：可通过字典接口 `GET /admin/dict/type/menu_type` 获取中文标签

### 示例：创建菜单

```javascript
// 变更前
await request.post('/admin/menu', {
  menuName: '用户管理',
  menuType: 'MENU',          // ❌ 旧值
  path: '/system/user',
  component: 'system/user/index'
})

// 变更后
await request.post('/admin/menu', {
  menuName: '用户管理',
  menuType: 'M',             // ✅ 新值
  path: '/system/user',
  component: 'system/user/index'
})
```

### 示例：菜单树类型判断

```javascript
// 变更前
if (menu.menuType === 'DIRECTORY') { /* 目录 */ }
if (menu.menuType === 'MENU') { /* 菜单 */ }
if (menu.menuType === 'BUTTON') { /* 按钮 */ }

// 变更后
if (menu.menuType === 'D') { /* 目录 */ }
if (menu.menuType === 'M') { /* 菜单 */ }
if (menu.menuType === 'B') { /* 按钮 */ }
```

---

## 关联字典

### menu_type（菜单类型）

| dict_value | dict_label |
|------------|------------|
| `D` | 目录 |
| `M` | 菜单 |
| `B` | 按钮 |

> 数据库旧数据已全部修正（`DIRECTORY`→`D`, `MENU`→`M`, `BUTTON`→`B`, 以及其他非标准值 `0`→`D`, `1`→`M`, `C`→`M`, `F`→`B`），前端只需适配新的简码即可。
