migrate_20260815_duty_menu_portal_fix.sql 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. -- backend/scripts/migrate_20260815_duty_menu_portal_fix.sql
  2. -- 修复:值班菜单改为一级目录 /duty + 叶子 schedule,才能出现在门户首页启动器
  3. -- 可重复执行(幂等)
  4. -- 1) 一级目录「值班管理」
  5. INSERT INTO `sys_menu` (
  6. `id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
  7. `is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
  8. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  9. ) VALUES (
  10. 'DUTY000000000000000000000000000',
  11. '值班管理',
  12. '2',
  13. 'M',
  14. '/duty',
  15. '/index/index',
  16. NULL,
  17. 1, '1', '1', 'shanxia2.0', 85,
  18. '值班一级模块(门户首页分区)',
  19. 'system', '', NOW(), NULL, NOW(), 0
  20. )
  21. ON DUPLICATE KEY UPDATE
  22. `menu_name`=VALUES(`menu_name`),
  23. `parent_id`=VALUES(`parent_id`),
  24. `menu_type`=VALUES(`menu_type`),
  25. `path`=VALUES(`path`),
  26. `component`=VALUES(`component`),
  27. `visible`=VALUES(`visible`),
  28. `status`=VALUES(`status`);
  29. -- 2) 叶子「值班排班」挂到值班管理下
  30. UPDATE `sys_menu`
  31. SET
  32. `parent_id` = 'DUTY000000000000000000000000000',
  33. `menu_type` = 'C',
  34. `path` = 'schedule',
  35. `component` = '/duty/schedule/index',
  36. `perms` = 'duty:schedule:list',
  37. `visible` = '1',
  38. `status` = '1',
  39. `order_num` = 1,
  40. `update_time` = NOW()
  41. WHERE `id` = 'DUTY000000000000000000000000001';
  42. -- 3) 给「超级管理员」「管理员」授权(若已有则忽略)
  43. -- 注意:INSERT…SELECT 中 UUID() 在 MySQL 5.7 可能对多行算出相同值导致主键冲突,
  44. -- 故用 role_id+menu_id 派生确定性主键,保证幂等可重跑。
  45. INSERT INTO `sys_role_menu` (
  46. `id`, `role_id`, `menu_id`, `tenant_no`, `order_num`, `remark`,
  47. `create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
  48. )
  49. SELECT
  50. CONCAT('DUTYRM', LEFT(MD5(CONCAT(r.id, '|', m.menu_id)), 26)),
  51. r.id,
  52. m.menu_id,
  53. 'shanxia2.0',
  54. NULL,
  55. 'duty portal',
  56. 'system',
  57. '',
  58. NOW(),
  59. NULL,
  60. NOW(),
  61. 0
  62. FROM `sys_role` r
  63. JOIN (
  64. SELECT 'DUTY000000000000000000000000000' AS menu_id
  65. UNION ALL
  66. SELECT 'DUTY000000000000000000000000001'
  67. ) m
  68. WHERE r.del_flag = 0
  69. AND r.role_name IN ('超级管理员', '管理员')
  70. AND NOT EXISTS (
  71. SELECT 1 FROM `sys_role_menu` rm
  72. WHERE rm.role_id = r.id
  73. AND rm.menu_id = m.menu_id
  74. AND IFNULL(rm.del_flag, 0) = 0
  75. )
  76. ON DUPLICATE KEY UPDATE
  77. `del_flag` = 0,
  78. `update_time` = NOW(),
  79. `remark` = VALUES(`remark`);