2026-09-03-pl-plan-cert-button-perm.sql 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. -- 危化品证上传:上传证书 / 证书齐备 按钮权限
  2. -- 设计: docs/superpowers/specs/2026-09-03-pl-plan-cert-button-permission-design.md
  3. --
  4. -- 注意:sys_role_menu.id 勿用 REPLACE(UUID(),'-','') 做多行 INSERT…SELECT。
  5. -- MySQL 5.7 下 UUID() 在同一次 SELECT 中可能只算一次,导致 PRIMARY 冲突(1062)。
  6. -- 改用按行确定性 MD5(role_id + menu + 源行 id)。
  7. SET NAMES utf8mb4;
  8. INSERT INTO `sys_menu` (
  9. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  10. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  11. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  12. )
  13. SELECT
  14. 'PL_PLAN_CERT_U', '上传证书', 'PL_PLAN_CERT', 'F', '', '',
  15. 'pl:plan-cert:upload', 1, '1', '1', 'shanxia2.0', 1, NULL,
  16. 'system', '', NOW(), NULL, NOW(), 0
  17. FROM DUAL
  18. WHERE NOT EXISTS (
  19. SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_PLAN_CERT_U' AND `del_flag` = 0
  20. );
  21. INSERT INTO `sys_menu` (
  22. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  23. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  24. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  25. )
  26. SELECT
  27. 'PL_PLAN_CERT_R', '证书齐备', 'PL_PLAN_CERT', 'F', '', '',
  28. 'pl:plan-cert:ready', 1, '1', '1', 'shanxia2.0', 2, '含取消齐备',
  29. 'system', '', NOW(), NULL, NOW(), 0
  30. FROM DUAL
  31. WHERE NOT EXISTS (
  32. SELECT 1 FROM `sys_menu` WHERE `id` = 'PL_PLAN_CERT_R' AND `del_flag` = 0
  33. );
  34. -- 已拥有危化品证上传页的角色:补 upload + ready
  35. INSERT INTO `sys_role_menu` (
  36. `id`, `role_id`, `menu_id`, `tenant_no`, `order_num`, `remark`,
  37. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  38. )
  39. SELECT
  40. MD5(CONCAT(rm.role_id, '|PL_PLAN_CERT_U|parent|', rm.id)),
  41. rm.role_id,
  42. 'PL_PLAN_CERT_U',
  43. rm.tenant_no,
  44. 0,
  45. NULL,
  46. 'system',
  47. '',
  48. NOW(),
  49. NULL,
  50. NOW(),
  51. 0
  52. FROM `sys_role_menu` rm
  53. WHERE rm.menu_id = 'PL_PLAN_CERT'
  54. AND rm.del_flag = 0
  55. AND NOT EXISTS (
  56. SELECT 1 FROM `sys_role_menu` x
  57. WHERE x.role_id = rm.role_id
  58. AND x.menu_id = 'PL_PLAN_CERT_U'
  59. AND x.del_flag = 0
  60. );
  61. INSERT INTO `sys_role_menu` (
  62. `id`, `role_id`, `menu_id`, `tenant_no`, `order_num`, `remark`,
  63. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  64. )
  65. SELECT
  66. MD5(CONCAT(rm.role_id, '|PL_PLAN_CERT_R|parent|', rm.id)),
  67. rm.role_id,
  68. 'PL_PLAN_CERT_R',
  69. rm.tenant_no,
  70. 0,
  71. NULL,
  72. 'system',
  73. '',
  74. NOW(),
  75. NULL,
  76. NOW(),
  77. 0
  78. FROM `sys_role_menu` rm
  79. WHERE rm.menu_id = 'PL_PLAN_CERT'
  80. AND rm.del_flag = 0
  81. AND NOT EXISTS (
  82. SELECT 1 FROM `sys_role_menu` x
  83. WHERE x.role_id = rm.role_id
  84. AND x.menu_id = 'PL_PLAN_CERT_R'
  85. AND x.del_flag = 0
  86. );