diff --git a/backend/F9WebAiTest.Api/f9_web_ai_test_rbac.db b/backend/F9WebAiTest.Api/f9_web_ai_test_rbac.db index 5c6523f..ef7c48f 100644 Binary files a/backend/F9WebAiTest.Api/f9_web_ai_test_rbac.db and b/backend/F9WebAiTest.Api/f9_web_ai_test_rbac.db differ diff --git a/backend/F9WebAiTest.Infrastructure/Data/BusinessSeedData.cs b/backend/F9WebAiTest.Infrastructure/Data/BusinessSeedData.cs index e263264..35a3aa6 100644 --- a/backend/F9WebAiTest.Infrastructure/Data/BusinessSeedData.cs +++ b/backend/F9WebAiTest.Infrastructure/Data/BusinessSeedData.cs @@ -225,7 +225,7 @@ public static class BusinessSeedData AddMenu(fsql, baseDirId, "工艺庄口", "/base/zhuangkou", "base/zhuangkou/index", "Collection", "base:zhuangkou:list", 1); AddMenu(fsql, baseDirId, "生丝规格", "/base/guige", "base/guige/index", "Grid", "base:guige:list", 2); AddMenu(fsql, baseDirId, "生丝定级指标", "/base/dingjizhibiao", "base/dingjizhibiao/index", "TrendCharts", "base:dingjizhibiao:list", 3); - AddMenu(fsql, baseDirId, "机组车台", "/base/jizuchetai", "base/jizuchetai/index", "SetUp", "base:jizuchetai:list", 4); + // 机组车台归属「生产-前缫」(见 DbSeeder.SeedProdMenus),不再挂在基础数据下 // 生产模块按工序拆分为两个一级目录:生产-前缫(落丝)/ 生产-后缫(纤度、黑板检验) var qianxianDirId = fsql.Select().Where(m => m.Path == "/prod/qianxian").First()?.Id ?? 0; diff --git a/backend/F9WebAiTest.Infrastructure/Data/DbSeeder.cs b/backend/F9WebAiTest.Infrastructure/Data/DbSeeder.cs index e80859b..c8e50ca 100644 --- a/backend/F9WebAiTest.Infrastructure/Data/DbSeeder.cs +++ b/backend/F9WebAiTest.Infrastructure/Data/DbSeeder.cs @@ -714,14 +714,45 @@ public static class DbSeeder Console.WriteLine("[DbSeeder] 已清理旧权限单元 base:chejianbanci:list"); } + // 机组车台原先挂在"基础数据"目录下,按 F9 归属改到"生产-前缫" + var legacyJizuChetai = fsql.Select().Where(m => m.Path == "/base/jizuchetai").First(); + if (legacyJizuChetai != null) + { + fsql.Ado.ExecuteNonQuery($"DELETE FROM sys_rbac_role_permissions WHERE permission_id = {legacyJizuChetai.Id}"); + fsql.Ado.ExecuteNonQuery($"DELETE FROM sys_rbac_menus WHERE id = {legacyJizuChetai.Id}"); + Console.WriteLine("[DbSeeder] 已清理旧菜单 /base/jizuchetai(机组车台移入生产-前缫)"); + } + var legacyJzctPerms = fsql.Ado.ExecuteDataTable("SELECT id FROM sys_rbac_permissions WHERE code = 'base:jizuchetai:list'"); + foreach (DataRow permRow in legacyJzctPerms.Rows) + { + var permId = Convert.ToInt64(permRow["id"]); + fsql.Ado.ExecuteNonQuery($"DELETE FROM sys_rbac_role_permissions WHERE permission_id = {permId}"); + fsql.Ado.ExecuteNonQuery($"DELETE FROM sys_rbac_permissions WHERE id = {permId}"); + Console.WriteLine("[DbSeeder] 已清理旧权限单元 base:jizuchetai:list"); + } + EnsureTopMenuWithChildren(fsql, snowflake, "/prod/qianxian", "生产-前缫", "Cpu", 5, new (string Name, string Path, string Component, string Permission, string Icon, int Sort)[] { - ("落丝记录", "/prod/qianxian/lsjl", "prod/lsjl/index", "prod:lsjl:list", "Document", 1), - ("车间班次", "/prod/qianxian/chejianbanci", "base/chejianbanci/index", "prod:chejianbanci:list", "Timer", 2), - ("看台排班", "/prod/qianxian/ktpb", "prod/ktpb/index", "prod:ktpb:list", "Grid", 3) + ("机组车台", "/prod/qianxian/jizuchetai", "base/jizuchetai/index", "prod:jizuchetai:list", "SetUp", 1), + ("落丝记录", "/prod/qianxian/lsjl", "prod/lsjl/index", "prod:lsjl:list", "Document", 2), + ("车间班次", "/prod/qianxian/chejianbanci", "base/chejianbanci/index", "prod:chejianbanci:list", "Timer", 3), + ("看台排班", "/prod/qianxian/ktpb", "prod/ktpb/index", "prod:ktpb:list", "Grid", 4) }); + // 子菜单顺序归一(EnsureTopMenuWithChildren 只补新菜单,不调整已存在菜单的排序) + foreach (var (path, sort) in new (string Path, int Sort)[] + { + ("/prod/qianxian/jizuchetai", 1), ("/prod/qianxian/lsjl", 2), + ("/prod/qianxian/chejianbanci", 3), ("/prod/qianxian/ktpb", 4) + }) + { + fsql.Update() + .Set(x => x.SortOrder, sort) + .Where(x => x.Path == path && x.SortOrder != sort) + .ExecuteAffrows(); + } + EnsureTopMenuWithChildren(fsql, snowflake, "/prod/houxian", "生产-后缫", "DataLine", 6, new (string Name, string Path, string Component, string Permission, string Icon, int Sort)[] { diff --git a/工作进度/工作进度-12.md b/工作进度/工作进度-12.md index e11b556..5bc2120 100644 --- a/工作进度/工作进度-12.md +++ b/工作进度/工作进度-12.md @@ -11,9 +11,10 @@ ``` 生产-前缫 -├── 落丝记录 -├── 车间班次 -└── 看台排班(新增) /prod/qianxian/ktpb +├── 机组车台(由「基础数据」迁入) /prod/qianxian/jizuchetai +├── 落丝记录 /prod/qianxian/lsjl +├── 车间班次 /prod/qianxian/chejianbanci +└── 看台排班(新增) /prod/qianxian/ktpb 顶部:车间(职责类型=前缫)+ 班次(甲/乙)+ 机组 + 关键字 页签:挡车工 / 车头工 / 值班长 ├── 挡车工:按「车间+班次+机组」整组维护 @@ -89,7 +90,16 @@ POST zbz | PUT zbz/{id} | DELETE zbz/{id} ### 2.4 菜单 -`DbSeeder.SeedProdMenus` 在生产-前缫下新增第 3 个子菜单「看台排班」,权限标识 `prod:ktpb:list`,admin 自动授权。 +`DbSeeder.SeedProdMenus` 统一维护生产-前缫的 4 个子菜单,并按 F9 的归属把「机组车台」从基础数据迁入(排序 1): + +| 顺序 | 菜单 | 路径 | 组件 | 权限标识 | +|---|---|---|---|---| +| 1 | 机组车台 | /prod/qianxian/jizuchetai | base/jizuchetai/index | prod:jizuchetai:list | +| 2 | 落丝记录 | /prod/qianxian/lsjl | prod/lsjl/index | prod:lsjl:list | +| 3 | 车间班次 | /prod/qianxian/chejianbanci | base/chejianbanci/index | prod:chejianbanci:list | +| 4 | 看台排班 | /prod/qianxian/ktpb | prod/ktpb/index | prod:ktpb:list | + +迁移方式与之前「车间班次」迁入时一致:删除旧菜单 `/base/jizuchetai` 及其权限单元 `base:jizuchetai:list`,再由种子重新创建到生产-前缫并给 admin 授权(幂等,重启不重复)。页面组件与后端接口 `/api/jizuchetai` 均未改动。 --- @@ -130,6 +140,6 @@ POST zbz | PUT zbz/{id} | DELETE zbz/{id} ## 五、说明与后续 1. 职工姓名沿用 F9 档案原文(部分带「宁兴」等后缀,如「谢群生宁兴」),属于基础数据层面的既有情况,本次未改动。 -2. 「机组车台」维护页面仍在 基础数据 下(`/base/jizuchetai`);F9 是放在生产-前缫组内。如需完全对齐,可把该菜单整体平移到生产-前缫(数据接口不变)。 +2. 「机组车台」已按 F9 归属迁到生产-前缫(`/prod/qianxian/jizuchetai`),组件与接口不变;基础数据目录中原位置已清理。 3. 挡车工排班目前按「整组替换」保存,没有保留历史版本;若需要留痕,可增加排班生效日期 + 版本表。 4. 后续若要支持「按班组/按日期」排班(F9 另有班组维度),可在现有三张表上扩展 BanCi 组合键。