Files
shanxia2.0/backend/scripts/migrate_20260815_duty_menu_portal_fix.sql
T
2026-08-16 14:58:19 +08:00

83 lines
2.4 KiB
SQL

-- backend/scripts/migrate_20260815_duty_menu_portal_fix.sql
-- 修复:值班菜单改为一级目录 /duty + 叶子 schedule,才能出现在门户首页启动器
-- 可重复执行(幂等)
-- 1) 一级目录「值班管理」
INSERT INTO `sys_menu` (
`id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`,
`is_frame`, `visible`, `status`, `tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
) VALUES (
'DUTY000000000000000000000000000',
'值班管理',
'2',
'M',
'/duty',
'/index/index',
NULL,
1, '1', '1', 'shanxia2.0', 85,
'值班一级模块(门户首页分区)',
'system', '', NOW(), NULL, NOW(), 0
)
ON DUPLICATE KEY UPDATE
`menu_name`=VALUES(`menu_name`),
`parent_id`=VALUES(`parent_id`),
`menu_type`=VALUES(`menu_type`),
`path`=VALUES(`path`),
`component`=VALUES(`component`),
`visible`=VALUES(`visible`),
`status`=VALUES(`status`);
-- 2) 叶子「值班排班」挂到值班管理下
UPDATE `sys_menu`
SET
`parent_id` = 'DUTY000000000000000000000000000',
`menu_type` = 'C',
`path` = 'schedule',
`component` = '/duty/schedule/index',
`perms` = 'duty:schedule:list',
`visible` = '1',
`status` = '1',
`order_num` = 1,
`update_time` = NOW()
WHERE `id` = 'DUTY000000000000000000000000001';
-- 3) 给「超级管理员」「管理员」授权(若已有则忽略)
-- 注意:INSERT…SELECT 中 UUID() 在 MySQL 5.7 可能对多行算出相同值导致主键冲突,
-- 故用 role_id+menu_id 派生确定性主键,保证幂等可重跑。
INSERT INTO `sys_role_menu` (
`id`, `role_id`, `menu_id`, `tenant_no`, `order_num`, `remark`,
`create_by`, `create_dept_id`, `create_time`, `update_by`, `update_time`, `del_flag`
)
SELECT
CONCAT('DUTYRM', LEFT(MD5(CONCAT(r.id, '|', m.menu_id)), 26)),
r.id,
m.menu_id,
'shanxia2.0',
NULL,
'duty portal',
'system',
'',
NOW(),
NULL,
NOW(),
0
FROM `sys_role` r
JOIN (
SELECT 'DUTY000000000000000000000000000' AS menu_id
UNION ALL
SELECT 'DUTY000000000000000000000000001'
) m
WHERE r.del_flag = 0
AND r.role_name IN ('超级管理员', '管理员')
AND NOT EXISTS (
SELECT 1 FROM `sys_role_menu` rm
WHERE rm.role_id = r.id
AND rm.menu_id = m.menu_id
AND IFNULL(rm.del_flag, 0) = 0
)
ON DUPLICATE KEY UPDATE
`del_flag` = 0,
`update_time` = NOW(),
`remark` = VALUES(`remark`);