1.0.406.sql 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. -- ============================================================================
  2. -- S0-FULL-DEMO-COVERAGE-CLOSURE-1 · STEP 1:合同评审周期菜单归位(三件套)
  3. --
  4. -- 背景:Web/src/views/aidop/s0/sales/ContractReviewCycleList.vue(681 行)与
  5. -- /api/s0/sales/contract-review-cycles 等 3 个接口、S0ContractReviewCycle 等 2 张表
  6. -- 均已存在,唯独 SysMenu 缺行;前端 isRequestRoutes=true(路由由菜单驱动),
  7. -- 故该页在任何租户都不可达(BLOCKED_BY_MENU)。
  8. --
  9. -- 归位而非新造:产销建模子菜单占用 Id …001/002/003/005/006/007 与 OrderNo 1/2/3/5/6/7,
  10. -- Id 1329002000004 与 OrderNo 4 恰好双双空缺,与历史「菜单 Id 被复用删除」的记录吻合。
  11. --
  12. -- 三件套(缺一不可,只插 SysMenu 会导致租户/角色不可达):
  13. -- ① SysMenu 菜单本身
  14. -- ② SysTenantMenu 租户可见(UATTEST_CHL)
  15. -- ③ SysRoleMenu 角色可授权(UAT_FUNCTION_USER)
  16. --
  17. -- 幂等:三处均以 NOT EXISTS 保护;重复执行 affected rows = 0。
  18. -- 边界:不改 SysOrg、不动业务数据、无 DDL、无 DELETE。
  19. --
  20. -- ⚠️ WIP:不占正式版本号,AutoVersionUpdate 不会自动应用;提交时 rename 为
  21. -- UpdateScripts/1.0.<next>.sql 并登记 csproj Copy 条目。
  22. -- ============================================================================
  23. -- ---------------------------------------------------------------------------
  24. -- ① SysMenu:合同评审周期
  25. -- 字段口径对齐同级兄弟菜单 1329002000006 / 1329002000007
  26. -- (Type=2 菜单 / Status=1 启用 / IsHide=0 / IsKeepAlive=1 / IsAffix=0 / IsIframe=0)
  27. -- ---------------------------------------------------------------------------
  28. INSERT INTO SysMenu (Id, Pid, Type, Title, Path, Component, OrderNo, Status, IsHide, IsKeepAlive, IsAffix, IsIframe)
  29. SELECT 1329002000004, 1329002000000, 2, '合同评审周期',
  30. '/aidop/s0/sales/contract-review-cycle', '/aidop/s0/sales/ContractReviewCycleList',
  31. 4, 1, 0, 1, 0, 0
  32. FROM DUAL
  33. WHERE NOT EXISTS (SELECT 1 FROM SysMenu m WHERE m.Id = 1329002000004)
  34. AND NOT EXISTS (SELECT 1 FROM SysMenu m WHERE m.Path = '/aidop/s0/sales/contract-review-cycle')
  35. AND EXISTS (SELECT 1 FROM SysMenu p WHERE p.Id = 1329002000000);
  36. -- ---------------------------------------------------------------------------
  37. -- ② SysTenantMenu:租户可见性(按 SysOrg.Code 解析租户,不硬编码 TenantId)
  38. -- Id 取当前最大值 +1(该表无 auto_increment)
  39. -- ---------------------------------------------------------------------------
  40. SET @crc_menu_id := (SELECT Id FROM SysMenu WHERE Path = '/aidop/s0/sales/contract-review-cycle' LIMIT 1);
  41. SET @crc_tenant := (SELECT t.Id FROM SysTenant t JOIN SysOrg o ON o.Id = t.OrgId
  42. WHERE o.Code = 'UATTEST_CHL' AND t.Status = 1 LIMIT 1);
  43. SET @crc_tm_base := (SELECT IFNULL(MAX(Id), 0) FROM SysTenantMenu);
  44. INSERT INTO SysTenantMenu (Id, TenantId, MenuId)
  45. SELECT @crc_tm_base + 1, @crc_tenant, @crc_menu_id
  46. FROM DUAL
  47. WHERE @crc_menu_id IS NOT NULL AND @crc_tenant IS NOT NULL
  48. AND NOT EXISTS (SELECT 1 FROM SysTenantMenu x WHERE x.TenantId = @crc_tenant AND x.MenuId = @crc_menu_id);
  49. -- ---------------------------------------------------------------------------
  50. -- ③ SysRoleMenu:角色授权 UAT_FUNCTION_USER(UATAdminA 的菜单来源角色)
  51. -- 其余 SMART_OPS_* 角色在 SysRoleMenu 中本就 0 条菜单授权,本批不改其语义。
  52. -- ---------------------------------------------------------------------------
  53. SET @crc_role := (SELECT r.Id FROM SysRole r
  54. WHERE r.TenantId = @crc_tenant AND r.Code = 'UAT_FUNCTION_USER' AND r.Status = 1 LIMIT 1);
  55. SET @crc_rm_base := (SELECT IFNULL(MAX(Id), 0) FROM SysRoleMenu);
  56. INSERT INTO SysRoleMenu (Id, RoleId, MenuId)
  57. SELECT @crc_rm_base + 1, @crc_role, @crc_menu_id
  58. FROM DUAL
  59. WHERE @crc_menu_id IS NOT NULL AND @crc_role IS NOT NULL
  60. AND NOT EXISTS (SELECT 1 FROM SysRoleMenu x WHERE x.RoleId = @crc_role AND x.MenuId = @crc_menu_id);