Files
yanpeng200212 1f1b184411 新增工资/仓储/生产日报等模块,移除旧考勤模块
- 新增 PayRoll(工资)、Wms(仓储)、Prod(车速/缫丝/考勤/丝片检测/丝片台账/纤检日报/质量日报) 模块
- 新增对应 Domain 实体、Application DTO/Service、Api Controller 与前端页面
- 移除旧 Attendance 考勤模块(Controller/Service/Entity/DTO 及 5 个前端页面),由 Prod/Kaoqin 取代
- 调整路由、仪表盘、Lsjl 流丝记录实体与服务
- 更新业务种子数据与 DbSeeder
- 补充工作进度文档 14-27
2026-10-27 09:09:57 +08:00

75 lines
3.4 KiB
Markdown
Raw Permalink 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.
# 工作进度-21:修复「生产-选剥茧」菜单未显示
> **协作规则(长期生效)**:**每次对话结尾都要生成工作进度**。
> 即在每轮对话结束前,把本轮完成的内容追加为 `工作进度/工作进度-N.md`,并在文档中保留本条规则,方便下一轮接续。
## 一、问题
用户反馈:**项目里没有"生产-选剥茧"模块,前端看不到菜单页面**。
## 二、根因(重要,后续加菜单必须记住)
项目中**有两处**菜单种子,但**只有 `DbSeeder` 是主流程**:
| 文件 | 实体 | 是否主流程 | 是否处理角色权限 |
| --- | --- | --- | --- |
| `Infrastructure/Data/DbSeeder.cs`(`SeedProdMenus` → `EnsureTopMenuWithChildren`) | **`SysMenu`** | ✅ 是(生产菜单实际来源) | ✅ 自动 `EnsureMenuPermission` 关联 admin |
| `Infrastructure/Data/BusinessSeedData.cs`(`AddMenu`) | `Menu` | ❌ 否(上轮误改此处) | 需另走 adminRole 循环 |
20 轮只改了 `BusinessSeedData.cs`,所以菜单**没有生效**。
**结论:以后新增菜单,必须改 `DbSeeder.cs` 的 `SeedProdMenus`,用 `EnsureTopMenuWithChildren`。**
## 三、修复
在 `DbSeeder.cs`「生产-后缫」之后新增(Sort 7):
```csharp
EnsureTopMenuWithChildren(fsql, snowflake, "/prod/xuanjian", "生产-选剥茧", "Grid", 7,
new (string Name, string Path, string Component, string Permission, string Icon, int Sort)[]
{
("选茧日报", "/prod/xuanjian/rb", "prod/xuanjian/index", "prod:xuanjian:list", "Document", 1),
("选茧计划", "/prod/xuanjian/plan", "prod/xuanjian/index", "prod:xuanjian:plan:list", "Calendar", 2),
("选茧班组", "/prod/xuanjian/banzu", "prod/xuanjian/index", "prod:xuanjian:banzu:list", "User", 3)
});
```
并补「子菜单顺序归一」(`/prod/xuanjian/rb`=1、`/plan`=2、`/banzu`=3)。
`EnsureTopMenuWithChildren` 会:
1. 建/更新一级目录(`/prod/xuanjian`,`MenuType_Enum.分组`)
2. 建子菜单(不存在才插入)
3. `EnsureMenuPermission` 关联 admin 角色 → 无需另外配权限
`BusinessSeedData.cs` 里 20 轮加的那段**保留**(`AddMenu` 有 `if (!Any(m => m.Path == path))` 幂等保护,不会重复)。
## 四、前端路由(已确认存在)
`web/src/router/index.js`:
```js
'prod/xuanjian/index': () => import('../views/prod/xuanjian/index.vue'),
```
菜单的 `Component` 字段 `prod/xuanjian/index` 与之对应,三个菜单共用该组件,
由 `index.vue` 内 `tabOf(route.path)` 按路由末段自动切 Tab(rb / plan / banzu)。
## 五、验证
- `F9WebAiTest.Infrastructure` 编译:无 `error CS`
## 六、用户需要做的
1. **重启后端服务**(菜单在启动时 seed;且运行中 Api 进程锁 DLL 会导致编译复制失败)
2. 重启后**重新登录 / 刷新**(菜单随登录接口下发)
3. 用 **admin** 角色查看(权限只关联了 admin;其他角色需在角色管理里勾选)
## 七、遗留
- 非 admin 角色需在「角色管理」手动勾选选剥茧三个菜单
- 标包重仍是 localStorage 临时方案,建议改 `/sys/registry`(见 20 轮)
- 计划里「领料单ID」为手填数字框,老系统是选择原料出库单
## 八、下次接续提示
- 新增菜单一律改 **`DbSeeder.SeedProdMenus`**(`SysMenu` + `EnsureTopMenuWithChildren`),不要再只改 `BusinessSeedData`
- **每轮对话结尾记得生成本工作进度文档**