diff --git a/backend/F9WebAiTest.Api/f9_web_ai_test_rbac.db b/backend/F9WebAiTest.Api/f9_web_ai_test_rbac.db index 5831c94..178eabe 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/DbSeeder.cs b/backend/F9WebAiTest.Infrastructure/Data/DbSeeder.cs index b313243..5778f62 100644 --- a/backend/F9WebAiTest.Infrastructure/Data/DbSeeder.cs +++ b/backend/F9WebAiTest.Infrastructure/Data/DbSeeder.cs @@ -82,8 +82,7 @@ public static class DbSeeder // 6.68 生产模块(按工序拆分:生产-前缫 / 生产-后缫) SeedProdMenus(fsql, snowflake); - // 6.69 车间班次菜单(挂在"基础数据"目录下)+ 修正前缫部门的职责类型 - SeedChejianBanciMenus(fsql, snowflake); + // 6.69 修正前缫部门的职责类型(车间班次菜单随"生产-前缫"一起处理) FixQianxianDutyType(fsql); // 6.7 为菜单创建权限单元(Permission),并修正旧菜单权限关联(统一权限模型) @@ -675,10 +674,30 @@ public static class DbSeeder } // 2) 两个一级目录 + 各自页面菜单 + // 车间班次原先挂在"基础数据"目录下,现归入"生产-前缫" + var legacyChejianbanci = fsql.Select().Where(m => m.Path == "/base/chejianbanci").First(); + if (legacyChejianbanci != null) + { + fsql.Ado.ExecuteNonQuery($"DELETE FROM sys_rbac_role_permissions WHERE permission_id = {legacyChejianbanci.Id}"); + fsql.Ado.ExecuteNonQuery($"DELETE FROM sys_rbac_menus WHERE id = {legacyChejianbanci.Id}"); + Console.WriteLine("[DbSeeder] 已清理旧菜单 /base/chejianbanci(车间班次移入生产-前缫)"); + } + + // 一并清理旧菜单遗留的权限单元(权限标识已从 base:chejianbanci:list 改为 prod:chejianbanci:list) + var legacyPerms = fsql.Ado.ExecuteDataTable("SELECT id FROM sys_rbac_permissions WHERE code = 'base:chejianbanci:list'"); + foreach (DataRow permRow in legacyPerms.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:chejianbanci: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/lsjl", "prod/lsjl/index", "prod:lsjl:list", "Document", 1), + ("车间班次", "/prod/qianxian/chejianbanci", "base/chejianbanci/index", "prod:chejianbanci:list", "Timer", 2) }); EnsureTopMenuWithChildren(fsql, snowflake, "/prod/houxian", "生产-后缫", "DataLine", 6, @@ -767,21 +786,6 @@ public static class DbSeeder } } - /// 车间班次菜单(挂在"基础数据"目录下) - private static void SeedChejianBanciMenus(IFreeSql fsql, ISnowflakeIdGenerator snowflake) - { - try - { - EnsureBaseDataMenu(fsql, snowflake, "/base/chejianbanci", "车间班次", - "base/chejianbanci/index", "base:chejianbanci:list", "Timer", 11); - Console.WriteLine("[DbSeeder] 车间班次菜单已就绪"); - } - catch (Exception ex) - { - Console.WriteLine($"[DbSeeder] 车间班次菜单种子跳过:{ex}"); - } - } - /// /// 修正前缫部门的职责类型:历史数据迁移时 duty_type 统一写成了"其他"(5), /// 而车间班次等模块需要按职责类型(前缫=25)筛选部门。