Files
ShiErFeng/docs/superpowers/specs/2026-07-27-promote-business-menus-design.md
T

67 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 业务菜单提升为一级菜单设计
## 目标
将“基础资料维护”、“业务管理”、“报表查询”从“系统管理”下提升为独立一级菜单,使业务入口与系统管理入口在侧边栏中并列展示。
## 目标层级与顺序
一级菜单按以下顺序展示:
1. 基础资料维护(`menu_id=121`)
2. 业务管理(`menu_id=122`)
3. 报表查询(`menu_id=123`)
4. 系统管理(`menu_id=1`)
5. 系统监控(`menu_id=2`)
6. 系统工具(`menu_id=3`)
对应的持久化字段为:
| 菜单 ID | 菜单名称 | `parent_id` | `order_num` |
|---|---|---:|---:|
| 121 | 基础资料维护 | 0 | 1 |
| 122 | 业务管理 | 0 | 2 |
| 123 | 报表查询 | 0 | 3 |
| 1 | 系统管理 | 0 | 4 |
| 2 | 系统监控 | 0 | 5 |
| 3 | 系统工具 | 0 | 6 |
## 架构与改动边界
项目的 Web 路由和侧边栏由后端 `/getRouters` 根据 `sys_menu` 动态生成,因此应修改菜单数据,不在前端增加拍平或重排逻辑。
本次仅调整六个目录菜单的层级和排序:
- 保持业务子菜单、组件路径、API 和权限标识不变。
- 保持角色菜单关联不变。
- 不修改 APP 端。
- 不新增依赖,不改动现有动态路由机制。
## SQL 与迁移设计
1. 同步修改 MySQL 和 PostgreSQL 初始化 SQL,使新建数据库直接得到目标层级。
2. 保留已执行的 `20260724_pallet_workflow_mysql.sql` 历史补丁,不改写已落库迁移的语义。
3. 新增一个 MySQL 增量补丁,同时支持“调整前”和“已调整”两种合法状态,保证可幂等重跑。
4. 增量补丁在第一条永久 DML 前校验六个固定 ID 的菜单身份和允许的层级状态。任一 ID 缺失、被复用或稳定字段异常时,在写入前中止。
5. 六条更新置于显式事务中,只修改 `parent_id` 和 `order_num`;执行器不得使用 `--force` 或 continue-on-error 模式。
6. 补丁末尾输出六个目录的实际层级和排序,用于人工核对。
## 缓存与运行态
数据库更新后,不使用 Redis `FLUSHALL`。本地验证通过重新登录触发现有登录缓存失效逻辑,并使用独立查询参数核对 `/getRouters` 的新层级。
## 测试与验收
- 先增加失败契约,要求 MySQL/PostgreSQL 初始化 SQL 定义上述六个一级菜单顺序。
- 增加增量补丁契约,覆盖写前校验、幂等性、显式事务、精确更新范围和事后查询。
- 运行后端 SQL 契约、业务测试、Ruff 检查、前端业务契约和生产构建。
- 数据库执行前重新创建备份,并只有在用户再次明确确认后才执行增量补丁。
- 数据库验收必须确认六个目录均为 `parent_id=0`,排序为 `1..6`,业务子菜单数量、页面组件和权限标识不变。
## 不在本次范围内
- 业务页面的功能、样式或交互调整。
- 普通角色的新授权或仓库/现场数据映射。
- 历史 AI 数据库表或其他数据清理。
- Redis 全库清理。