From 2e4c04581802fa2ffc1e517a0e5bd7e98849e6bc Mon Sep 17 00:00:00 2001 From: yanpeng200212 <32453@DESKTOP-HTJ2T0B> Date: Thu, 22 Oct 2026 11:00:27 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9C=BA=E7=BB=84=E8=BD=A6=E5=8F=B0=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E8=BF=81=E5=85=A5=E7=94=9F=E4=BA=A7-=E5=89=8D?= =?UTF-8?q?=E7=BC=AB=E7=9B=AE=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../F9WebAiTest.Api/f9_web_ai_test_rbac.db | Bin 1531904 -> 1536000 bytes .../Data/BusinessSeedData.cs | 2 +- .../Data/DbSeeder.cs | 37 ++++++++++++++++-- 工作进度/工作进度-12.md | 20 +++++++--- 4 files changed, 50 insertions(+), 9 deletions(-) diff --git a/backend/F9WebAiTest.Api/f9_web_ai_test_rbac.db b/backend/F9WebAiTest.Api/f9_web_ai_test_rbac.db index 5c6523f66b5f2bbaf6dda00e4c25b6b31c2d5402..ef7c48f1b38d86a5d7d9198d0c37353323e8a402 100644 GIT binary patch delta 2057 zcmZvdYfMvT7{||P&pBb#WMBnM?e{G+v^~1{;b~bkQtx+2*pnEp3@8AO2rXe(&@A z&hxxI9iC|#UT7N6K`%oP9C|;$1ilS{a>h%ziKyPe?WOK2c?-cQ<@z0G4(6Nabi0@ zgBw*nFem5LAzKyj*$+3BKFJCdWI-lKt<^#swcB8=7S?EBMlQ1>>*cKuBnMW=B@Tpa z8o`F2eY(6jH9QW*c%YLFZG(XUI8Y*RG)ePC6j?;m`4nm7BqL25c!3urMzFQ@)%%w| zK7a4)BfnfYefQX;V!NW)AM9x@4!E0rgCMf=J2*cx`pDSj9_nxDZ0l=w8@=w{KDlHs zQUfEAclRPcDqv;ATaO%tku(_^jQnj!G;ieXEz16f%m8Mh+|>%cue_iqtG2J`8>^HvJF*K|wGO6^I%{ z1Cj>v0?0ZLEeH-mM5Z66@BS?$|0^i&6u0rDb9CP-E!^i=P1<_1o8~|7I7n#@=xWg@-3wmh!!bShS)W@Dvty+ z^fGxQ6WzG7Yk}k?L6DsAoi6?wXurZ;Na1*qlSr10aaWUEc$Ldd+#QCYSuw`VmB#Dc zk>L{=*|D~93|u@>q zTTJ}oay%#SB3R74`GIR@rSH_7eDaO>FF?+3$VTMv!+Iq0*pZ#C#5Aqz)Fat{0C*=w2EhbSXS8Y#-a2qX($d^B9;u3z0<^oL+G%NTY~_Ltb&NAe`+B9e zn)Z;(x^rjpb0y`I%xX^!O9`wK=yXSQHXH&sh7$||#d9Lh>@W|O^%Ro*LoH%QLlskJ zYLv{LV57ahx6IO2*gMqI>7|;x%WI3J`o=0x;gFXv?h`x}KGDMNZg!iv*4BoA+s1Zw zc=|%Md}V)|qrKBr*YUgz9sO5|_Y_nN7nSiQWmv($v9w6i!j5iXPmSHeJNNOdyWG{q z(v?n@^!N|j2WggZ1Zo}rgJu54K!<4R@_LF}m_4ETavyK4vkL7kg|xZZ(lTiFQe}Q~ bPkZ%iZDp;dHk;59T0|l*vw>OniOj#33{-!%hs5<2|@~@QKYtwR_!5B3kAhmp*4vY zA)&(JA4U&OuT~Ix%hJe*7TS~7SoGw<=AuyTp&+fGtvd4fZVw)>(kfI|3bjsL1ptlIDv3{J*vBPwQX0)5+CqFQR4lc&}cOlQ_(EwD%qdfYo zKt)WBpa&3@y4!*HeGwV=qP=JquvIqCitH5YpzHJveMk$`qQJlEpZCx3cnkFew3GM~ zUck3;4u{bf)DUAW^c^c;M+|&LQv|+smo|`uB_e5(E*X+f+9S0|eu+vjKSJ*yIYigVrXY^gYE>bOX#6V!~S(BSj)ex`!H3MRC-5e%rjFh>yX`Uc>`hVof zIOfw^=4<|8%Z&9TQYpty-GutimCPh 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 组合键。