| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- -- 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`);
|