169 lines
4.9 KiB
Markdown
169 lines
4.9 KiB
Markdown
|
|
# 各端菜单配置规范
|
|||
|
|
|
|||
|
|
> 最后更新:2026-04-02
|
|||
|
|
> 维护人:开发团队
|
|||
|
|
|
|||
|
|
本文档记录各端的正确菜单配置,是菜单分配的**唯一权威来源**。修改菜单时必须对照此文档。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 一、超管端(tenant_id=1, code='super')
|
|||
|
|
|
|||
|
|
**定位**:只读监管,不含操作类功能。
|
|||
|
|
|
|||
|
|
**一级菜单**:5 个(活动监管、内容管理、机构管理、用户中心、系统设置)
|
|||
|
|
|
|||
|
|
**不包含**:数据统计(租户端专属)、活动管理(租户端专属)、我的评审(评委端专属)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
活动监管 (id=37) ← 只读监管视角
|
|||
|
|
├── 全部活动 (38)
|
|||
|
|
├── 报名数据 (39)
|
|||
|
|
├── 作品数据 (40)
|
|||
|
|
├── 评审进度 (41)
|
|||
|
|
└── 活动成果 (44)
|
|||
|
|
|
|||
|
|
内容管理 (id=46)
|
|||
|
|
├── 作品审核 (47)
|
|||
|
|
├── 作品管理 (48)
|
|||
|
|
└── 标签管理 (49)
|
|||
|
|
|
|||
|
|
机构管理 (id=28)
|
|||
|
|
└── 机构管理 (30)
|
|||
|
|
|
|||
|
|
用户中心 (id=29)
|
|||
|
|
├── 用户管理 (32)
|
|||
|
|
└── 角色管理 (33)
|
|||
|
|
|
|||
|
|
系统设置 (id=14)
|
|||
|
|
├── 菜单管理 (17)
|
|||
|
|
├── 数据字典 (18)
|
|||
|
|
├── 系统配置 (19)
|
|||
|
|
├── 日志记录 (20)
|
|||
|
|
└── 权限管理 (21)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**tenant_menus ID 列表**(21条):
|
|||
|
|
`14, 17, 18, 19, 20, 21, 28, 29, 30, 32, 33, 37, 38, 39, 40, 41, 44, 46, 47, 48, 49`
|
|||
|
|
|
|||
|
|
### 超管端不包含的菜单及原因
|
|||
|
|
|
|||
|
|
| 菜单 | ID | 原因 |
|
|||
|
|
|------|-----|------|
|
|||
|
|
| 评委管理 | 42 | 操作类功能,属于租户端活动管理 |
|
|||
|
|
| 评审规则 | 43 | 操作类功能,属于租户端活动管理 |
|
|||
|
|
| 通知管理 | 45 | 操作类功能,属于租户端活动管理 |
|
|||
|
|
| 数据统计 | 52,53,54 | 设计文档明确标注"所属端:租户端" |
|
|||
|
|
| 活动管理 | 9 及子菜单 | 租户端操作菜单,超管用活动监管代替 |
|
|||
|
|
| 我的评审 | 34,35,36 | 评委端专属 |
|
|||
|
|
| 工作台 | 50 | 租户端工作台(TenantDashboard),超管端不需要 |
|
|||
|
|
| 学校管理 | 2 及子菜单 | 已剥离 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 二、租户端(以 gdlib id=9 为例)
|
|||
|
|
|
|||
|
|
**定位**:机构管理员操作端,含全部业务操作功能。
|
|||
|
|
|
|||
|
|
**一级菜单**:4 个(工作台、数据统计、活动管理、系统设置)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
工作台 (id=50) ← TenantDashboard(欢迎信息+统计卡片+快捷操作+待办+最近活动)
|
|||
|
|
|
|||
|
|
数据统计 (id=52) ← 租户端专属
|
|||
|
|
├── 运营概览 (53)
|
|||
|
|
└── 评审分析 (54)
|
|||
|
|
|
|||
|
|
活动管理 (id=9) ← 含全部操作功能
|
|||
|
|
├── 活动列表 (10)
|
|||
|
|
├── 评委管理 (23)
|
|||
|
|
├── 报名管理 (11)
|
|||
|
|
├── 作品管理 (12)
|
|||
|
|
├── 评审进度 (25)
|
|||
|
|
├── 评审规则 (26)
|
|||
|
|
├── 成果发布 (24)
|
|||
|
|
└── 活动公告 (27)
|
|||
|
|
|
|||
|
|
系统设置 (id=14) ← 精简版,不含菜单管理/字典/配置/权限/租户管理
|
|||
|
|
├── 机构信息 (51)
|
|||
|
|
├── 用户管理 (15)
|
|||
|
|
├── 角色管理 (16)
|
|||
|
|
└── 日志记录 (20)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**tenant_menus ID 列表**(18条):
|
|||
|
|
`9, 10, 11, 12, 14, 15, 16, 20, 23, 24, 25, 26, 27, 50, 51, 52, 53, 54`
|
|||
|
|
|
|||
|
|
### 租户端系统设置不包含的子菜单
|
|||
|
|
|
|||
|
|
| 菜单 | ID | 原因 |
|
|||
|
|
|------|-----|------|
|
|||
|
|
| 菜单管理 | 17 | 平台级功能,超管专属 |
|
|||
|
|
| 数据字典 | 18 | 平台级功能,超管专属 |
|
|||
|
|
| 系统配置 | 19 | 平台级功能,超管专属 |
|
|||
|
|
| 权限管理 | 21 | 平台级功能,超管专属 |
|
|||
|
|
| 租户管理 | 22 | 平台级功能,超管专属 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 三、评委端(tenant_id=7, code='judge')
|
|||
|
|
|
|||
|
|
**定位**:评委评审工作台。
|
|||
|
|
|
|||
|
|
**一级菜单**:1 个(我的评审)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
我的评审 (id=34)
|
|||
|
|
├── 评审任务 (35)
|
|||
|
|
└── 预设评语 (36)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**tenant_menus ID 列表**(3条):`34, 35, 36`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 四、公众端
|
|||
|
|
|
|||
|
|
公众端不使用动态菜单系统,路由固定在前端 `router/index.ts` 中:
|
|||
|
|
- `/p/gallery` — 作品广场
|
|||
|
|
- `/p/activities` — 活动大厅
|
|||
|
|
- `/p/mine` — 个人中心
|
|||
|
|
- `/p/create` — 绘本创作
|
|||
|
|
- `/p/works` — 我的作品库
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 五、技术实现要点
|
|||
|
|
|
|||
|
|
### 菜单加载逻辑(SysMenuServiceImpl.getUserMenus)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
1. 查询所有 valid_state=1 的菜单
|
|||
|
|
2. 查询当前用户 tenant_id 对应的 tenant_menus
|
|||
|
|
3. 按 tenant_menus 过滤菜单
|
|||
|
|
4. 如果是超管(isSuperAdmin):不做权限码过滤
|
|||
|
|
5. 如果是普通用户:按用户权限码过滤(菜单.permission 字段)
|
|||
|
|
6. 补全父菜单(确保树结构完整)
|
|||
|
|
7. 构建树形结构返回
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**注意**:超管也必须按 tenant_menus 过滤,不能返回全部菜单。
|
|||
|
|
|
|||
|
|
### 登录时租户识别
|
|||
|
|
|
|||
|
|
前端通过 URL 提取 tenantCode(如 `/gdlib/login` → `tenantCode=gdlib`),登录时发送:
|
|||
|
|
```json
|
|||
|
|
{"username": "admin", "password": "xxx", "tenantCode": "gdlib"}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Java 后端 AuthService.login 支持两种方式:
|
|||
|
|
1. `X-Tenant-Id` header(数字ID)
|
|||
|
|
2. body 中的 `tenantCode`(编码),后端通过编码查找租户ID
|
|||
|
|
|
|||
|
|
### 权威来源
|
|||
|
|
|
|||
|
|
- 菜单定义:`backend/data/menus.json`
|
|||
|
|
- 超管端菜单列表:`backend/scripts/init-menus.ts` 中 `SUPER_TENANT_MENUS`
|
|||
|
|
- 租户端菜单列表:`backend/scripts/init-menus.ts` 中 `NORMAL_TENANT_MENUS`
|
|||
|
|
- 本文档:`docs/design/menu-config.md`
|