-- 审核监督权限完整修复(可重复执行) -- 问题:旧权限码 alarm-audit:* 与前端 alarm:audit:* / 后端 alarm:query|audit|detail 不一致 -- 且「审核表决」「查看详情」功能点可能未挂在「审核监督」页面下 BEGIN; CREATE TEMP TABLE IF NOT EXISTS tmp_audit_page (menu_id BIGINT PRIMARY KEY) ON COMMIT DROP; TRUNCATE tmp_audit_page; INSERT INTO tmp_audit_page (menu_id) SELECT menu_id FROM t_menu WHERE deleted_flag = 0 AND menu_type = 2 AND (path = '/business/alarm/audit-list' OR menu_name = '审核监督') LIMIT 1; -- 1) 旧码原地升级 UPDATE t_menu SET web_perms = 'alarm:audit:query', api_perms = 'alarm:query', menu_name = '查询', perms_type = 1, update_time = NOW() WHERE web_perms = 'alarm-audit:query' AND menu_type = 3 AND deleted_flag = 0; UPDATE t_menu SET web_perms = 'alarm:audit:do', api_perms = 'alarm:audit', menu_name = '审核表决', perms_type = 1, update_time = NOW() WHERE web_perms IN ('alarm-audit:handle', 'alarm-audit:audit', 'alarm:audit') AND menu_type = 3 AND deleted_flag = 0 AND parent_id IN (SELECT menu_id FROM tmp_audit_page); -- 2) 补全「审核监督」下三个功能点(web_perms 全局唯一,按码插入) INSERT INTO t_menu (menu_name, menu_type, parent_id, sort, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, deleted_flag, create_user_id, create_time, update_time) SELECT '查询', 3, p.menu_id, 10, false, false, true, false, 1, 'alarm:query', 'alarm:audit:query', p.menu_id, false, 1, NOW(), NOW() FROM tmp_audit_page p WHERE NOT EXISTS (SELECT 1 FROM t_menu x WHERE x.web_perms = 'alarm:audit:query' AND x.deleted_flag = 0); INSERT INTO t_menu (menu_name, menu_type, parent_id, sort, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, deleted_flag, create_user_id, create_time, update_time) SELECT '审核表决', 3, p.menu_id, 20, false, false, true, false, 1, 'alarm:audit', 'alarm:audit:do', p.menu_id, false, 1, NOW(), NOW() FROM tmp_audit_page p WHERE NOT EXISTS (SELECT 1 FROM t_menu x WHERE x.web_perms = 'alarm:audit:do' AND x.deleted_flag = 0); INSERT INTO t_menu (menu_name, menu_type, parent_id, sort, frame_flag, cache_flag, visible_flag, disabled_flag, perms_type, api_perms, web_perms, context_menu_id, deleted_flag, create_user_id, create_time, update_time) SELECT '查看详情', 3, p.menu_id, 30, false, false, true, false, 1, 'alarm:detail', 'alarm:audit:detail', p.menu_id, false, 1, NOW(), NOW() FROM tmp_audit_page p WHERE NOT EXISTS (SELECT 1 FROM t_menu x WHERE x.web_perms = 'alarm:audit:detail' AND x.deleted_flag = 0); -- 3) api_perms 兜底 UPDATE t_menu SET api_perms = 'alarm:query', update_time = NOW() WHERE web_perms = 'alarm:audit:query' AND deleted_flag = 0 AND COALESCE(api_perms, '') <> 'alarm:query'; UPDATE t_menu SET api_perms = 'alarm:audit', update_time = NOW() WHERE web_perms = 'alarm:audit:do' AND deleted_flag = 0 AND COALESCE(api_perms, '') <> 'alarm:audit'; UPDATE t_menu SET api_perms = 'alarm:detail', update_time = NOW() WHERE web_perms = 'alarm:audit:detail' AND deleted_flag = 0 AND COALESCE(api_perms, '') <> 'alarm:detail'; -- 4) 审核组三角色 + JZ_ADMIN:绑定「接报案中心」目录 + 「审核监督」页面及全部功能点 INSERT INTO t_role_menu (role_id, menu_id, create_time, update_time) SELECT r.role_id, m.menu_id, NOW(), NOW() FROM t_role r CROSS JOIN t_menu m WHERE r.role_code IN ('alarm_audit_legal', 'alarm_audit_lawyer', 'alarm_audit_jz', 'JZ_ADMIN') AND m.deleted_flag = 0 AND ( m.menu_name = '接报案中心' AND m.menu_type = 1 OR m.path = '/business/alarm/audit-list' OR m.parent_id IN (SELECT menu_id FROM tmp_audit_page) OR m.menu_id IN (SELECT menu_id FROM tmp_audit_page) ) AND NOT EXISTS (SELECT 1 FROM t_role_menu rm WHERE rm.role_id = r.role_id AND rm.menu_id = m.menu_id); COMMIT; -- 验证 SELECT m.menu_id, m.menu_name, m.web_perms, m.api_perms, m.parent_id FROM t_menu m WHERE m.deleted_flag = 0 AND (m.menu_id IN (SELECT menu_id FROM t_menu WHERE path = '/business/alarm/audit-list' AND deleted_flag = 0) OR m.parent_id IN (SELECT menu_id FROM t_menu WHERE path = '/business/alarm/audit-list' AND deleted_flag = 0)) ORDER BY m.menu_type, m.sort, m.menu_id;