83 lines
2.4 KiB
SQL
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`);
|