-- ============================================================================= -- S6-IPQC-BILL-PAGE-1 · 「IPQC 检查单」独立 Tab + 独立详情页菜单 -- -- 背景:S6 的过程检验单(S6_PROCESS_INSPECTION 链,源 ado_s6_process_inspection_bill) -- 此前没有任何菜单入口 —— 用户必须先进「生产指令单列表」,再从行操作打开一个 Drawer -- 才能完成录入/提交/审核/处置。本脚本为它建立独立入口,与 S7 FQC 的信息架构对齐。 -- -- 两条同名链务必区分(改错会白做): -- 本脚本服务的是 S6_PROCESS_INSPECTION(工序级、有 S0 检规快照、逐样本实测); -- 既有菜单 1329016020001「过程检验单列表」是另一条 IPQC_INSPECTION 链(源 qms_gcjyd、 -- 单头级汇总),本脚本完全不动它。 -- -- 路由形态沿用 S5 IQC(1.0.535.sql)的修正版,而不是 S7 FQC(1.0.382.sql): -- * 详情页用 path param /:id,不用 ?id= —— 路径即状态,便于直链与刷新; -- * 详情页 IsKeepAlive = 0。它是强状态页面(可录入 → 只读 → 退回 → 可录入), -- KeepAlive 会缓存旧的 canEdit / flowState / 项目结果。S7 那条设成 1,是已知问题。 -- * 列表页 IsKeepAlive = 1,从详情返回时保留分页与查询条件(页面自身 onActivated 重新取数)。 -- -- 授权口径同样沿用 S5:租户可见性与角色授权都**子查询继承**同目录入口菜单 -- 1329016020001 的既有授权面(实测 10 个租户 / 23 个角色),不硬编码 RoleId、 -- 不新建权限码(Permission 留 NULL,与 S6 其余菜单一致)。 -- 这样后续给该目录加/减授权时,这两个新菜单自动跟随,不会漏配。 -- -- Id 生成沿用 1.0.535.sql 的 `MAX(Id) + ROW_NUMBER()`,且**一段只处理一个 MenuId** —— -- 两个菜单不合并成一条 CROSS JOIN。合并写法需要在 Id 里同时编码「菜单序」与「租户序」, -- 极易写出对同一菜单所有租户取同值的表达式而撞主键(本脚本第一版就是这么挂的)。 -- -- 幂等:每段 INSERT 都带 NOT EXISTS;重复执行 0 变更。 -- ============================================================================= -- ── 1. 列表页菜单(可见 Tab)── INSERT INTO SysMenu (Id, Pid, Type, Name, Path, Component, Title, Icon, IsIframe, IsHide, IsKeepAlive, IsAffix, OrderNo, Status, Remark, CreateTime) SELECT 1329016020002, 1322000000020, 2, 'aidopS6IpqcBillList', '/aidop/s6/process-quality/ipqc-bill-list', '/aidop/s6/process-quality/ipqcBillList', 'IPQC 检查单', 'ele-Tickets', 0, 0, 1, 0, 20, 1, 'S6-IPQC-BILL-PAGE-1 过程检验单(工序级)独立入口', NOW() FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM (SELECT Id FROM SysMenu) t WHERE t.Id = 1329016020002); -- ── 2. 详情页菜单(hidden child route,不出现在菜单树里)── INSERT INTO SysMenu (Id, Pid, Type, Name, Path, Component, Title, Icon, IsIframe, IsHide, IsKeepAlive, IsAffix, OrderNo, Status, Remark, CreateTime) SELECT 1329016020003, 1322000000020, 2, 'aidopS6IpqcBillDetail', '/aidop/s6/process-quality/ipqc-bill-detail/:id', '/aidop/s6/process-quality/ipqcBillDetail', 'IPQC 检查单详情', 'ele-Document', 0, 1, 0, 0, 21, 1, 'S6-IPQC-BILL-PAGE-1 强状态详情页,IsKeepAlive=0', NOW() FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM (SELECT Id FROM SysMenu) t WHERE t.Id = 1329016020003); -- ── 3. 列表页租户可见性:继承 1329016020001 的租户面 ── INSERT INTO SysTenantMenu (Id, TenantId, MenuId) SELECT base.m + ROW_NUMBER() OVER (ORDER BY src.TenantId), src.TenantId, 1329016020002 FROM (SELECT COALESCE(MAX(Id), 0) AS m FROM SysTenantMenu) base CROSS JOIN (SELECT DISTINCT TenantId FROM SysTenantMenu WHERE MenuId = 1329016020001) src WHERE NOT EXISTS ( SELECT 1 FROM (SELECT TenantId, MenuId FROM SysTenantMenu) x WHERE x.TenantId = src.TenantId AND x.MenuId = 1329016020002 ); -- ── 4. 详情页租户可见性:同上 ── INSERT INTO SysTenantMenu (Id, TenantId, MenuId) SELECT base.m + ROW_NUMBER() OVER (ORDER BY src.TenantId), src.TenantId, 1329016020003 FROM (SELECT COALESCE(MAX(Id), 0) AS m FROM SysTenantMenu) base CROSS JOIN (SELECT DISTINCT TenantId FROM SysTenantMenu WHERE MenuId = 1329016020001) src WHERE NOT EXISTS ( SELECT 1 FROM (SELECT TenantId, MenuId FROM SysTenantMenu) x WHERE x.TenantId = src.TenantId AND x.MenuId = 1329016020003 ); -- ── 5. 列表页角色授权:继承 1329016020001 的角色面 ── INSERT INTO SysRoleMenu (Id, RoleId, MenuId) SELECT base.m + ROW_NUMBER() OVER (ORDER BY src.RoleId), src.RoleId, 1329016020002 FROM (SELECT COALESCE(MAX(Id), 0) AS m FROM SysRoleMenu) base CROSS JOIN (SELECT DISTINCT RoleId FROM SysRoleMenu WHERE MenuId = 1329016020001) src WHERE NOT EXISTS ( SELECT 1 FROM (SELECT RoleId, MenuId FROM SysRoleMenu) x WHERE x.RoleId = src.RoleId AND x.MenuId = 1329016020002 ); -- ── 6. 详情页角色授权:同上 ── INSERT INTO SysRoleMenu (Id, RoleId, MenuId) SELECT base.m + ROW_NUMBER() OVER (ORDER BY src.RoleId), src.RoleId, 1329016020003 FROM (SELECT COALESCE(MAX(Id), 0) AS m FROM SysRoleMenu) base CROSS JOIN (SELECT DISTINCT RoleId FROM SysRoleMenu WHERE MenuId = 1329016020001) src WHERE NOT EXISTS ( SELECT 1 FROM (SELECT RoleId, MenuId FROM SysRoleMenu) x WHERE x.RoleId = src.RoleId AND x.MenuId = 1329016020003 );