问题
新增菜单后,在「租户套餐」里勾选菜单权限时找不到这个菜单;清浏览器缓存、退出重进也不行。
答案
多数不是浏览器缓存:先按上级菜单挂载位置搜索;同一 SPA 会话内若先开过套餐再加菜单,旧版本套餐弹窗有二次内存缓存会挡住新菜单(已统一为只走 getSimpleMenusList 缓存)。「显示状态=隐藏」不影响套餐勾选。
详细说明
1. 先确认挂在哪一层
套餐菜单树按「上级菜单」挂载,不会因为组件路径写在某配置页下就出现在该配置页的按钮列表里。
示例:菜单「管理假期类型」上级选「假勤管理」,应出现在「假勤管理」下、与「假勤配置」平级;在「假勤配置」下的「考勤配置查询」等按钮旁是找不到的。
操作:套餐弹窗搜索框直接搜菜单名称(如「假期」)。
2. 「显示状态=隐藏」不是原因
| 配置 | 影响 |
|---|---|
| 显示状态=隐藏 | 不进 PC 侧栏展示 |
| 菜单状态=开启 | 才会进 simple-list,可被套餐/角色勾选 |
套餐/角色赋权接口只过滤「菜单状态=关闭」,不按 visible 过滤。隐藏菜单仍应出现在套餐树中,否则隐藏页无法授权。
3. 缓存层级(产品行为)
| 层级 | 说明 |
|---|---|
API:getSimpleMenusList | 会话内请求缓存;菜单增删改会 clearSystemMenuClientCache |
| 套餐/角色弹窗 | 打开时走上述 API 建树,不再维护独立的模块级菜单树缓存 |
| 浏览器缓存 / Redis 菜单列表 | 与「套餐树看不见新菜单」通常无关;清浏览器缓存无效属正常 |
正确流程:菜单管理新增 → 打开租户套餐 → 搜索并勾选 → 保存套餐(新菜单不会自动进已有套餐)。
若仍搜不到:硬刷新(Ctrl+F5)后再开套餐;确认当前账号为系统租户(非业务租户按自身套餐裁剪菜单)。
4. 保存套餐后
保存后后端会把变更同步到使用该套餐的租户管理员角色菜单;业务角色仍可能需单独调整。
涉及代码 / 配置
- 前端赋权建树:
apps/web-antd/src/utils/menu-tree.ts(loadSimpleMenuTree) - API 缓存:
apps/web-antd/src/api/system/menu/index.ts(getSimpleMenusList/clearSystemMenuClientCache) - 套餐弹窗:
views/system/tenantPackage/modules/form.vue - 后端精简列表:
GET /system/menu/simple-list(仅开启菜单 + 租户套餐范围)
修订记录
| 日期 | 修改 |
|---|---|
| 2026-08-18 | 初稿(含套餐二次缓存问题说明与修复后约定) |
