-- 质检单「完成」按钮权限 -- -- 背景:后端 MesQcIqc/Ipqc/Oqc/RqcController 的 /finish 接口分别校验 -- mes:qc-iqc:finish / mes:qc-ipqc:finish / mes:qc-oqc:finish / mes:qc-rqc:finish, -- 但 system_menu 中没有这四个权限码对应的按钮,导致非超管用户点击「完成」 -- 直接返回 403「没有该操作权限」。 -- -- 本脚本幂等,可重复执行。执行后清理 Redis 中相关角色的 role_menu_ids 缓存, -- 或让用户重新登录后生效。 -- 1. 补四个「完成」按钮,挂在各自质检列表菜单下 INSERT INTO system_menu (name, permission, type, sort, parent_id, status, icon, creator, updater) SELECT s.name, s.permission, 3, 7, p.id, 0, '', '1', '1' FROM system_menu p JOIN ( SELECT '来料检验完成' AS name, 'mes:qc-iqc:finish' AS permission, 'mes/qc/iqc/index' AS component UNION ALL SELECT '过程检验完成', 'mes:qc-ipqc:finish', 'mes/qc/ipqc/index' UNION ALL SELECT '出货检验完成', 'mes:qc-oqc:finish', 'mes/qc/oqc/index' UNION ALL SELECT '退料检验完成', 'mes:qc-rqc:finish', 'mes/qc/rqc/index' ) s ON p.component = s.component WHERE p.type = 2 AND p.deleted = b'0' AND NOT EXISTS ( SELECT 1 FROM system_menu m WHERE m.permission = s.permission AND m.deleted = b'0' ); -- 2. 授予已拥有对应质检列表菜单的角色 INSERT INTO system_role_menu (role_id, menu_id, creator, updater) SELECT DISTINCT rm.role_id, m.id, '1', '1' FROM system_role_menu rm JOIN system_menu p ON p.id = rm.menu_id AND p.type = 2 AND p.deleted = b'0' JOIN system_menu m ON m.parent_id = p.id AND m.deleted = b'0' WHERE p.component IN ('mes/qc/iqc/index', 'mes/qc/ipqc/index', 'mes/qc/oqc/index', 'mes/qc/rqc/index') AND m.permission IN ('mes:qc-iqc:finish', 'mes:qc-ipqc:finish', 'mes:qc-oqc:finish', 'mes:qc-rqc:finish') AND rm.deleted = b'0' AND NOT EXISTS ( SELECT 1 FROM system_role_menu x WHERE x.role_id = rm.role_id AND x.menu_id = m.id AND x.deleted = b'0' );