-- 空板出库菜单:前端 component 必须为 emptyOutbound(见 rsf-admin ResourceContent.js) -- 执行前请确认「出库管理」目录在 sys_menu 中的 name(常见为 menu.outStockPoces): -- SELECT id, name, component, parent_id FROM sys_menu WHERE name LIKE '%outStock%' OR name LIKE '%出库%'; -- 若 name 不一致,请改下面子查询或改为固定 parent_id。 -- 主菜单(类型=菜单) INSERT INTO `sys_menu` (`name`, `parent_id`, `parent_name`, `path`, `path_name`, `route`, `component`, `brief`, `code`, `type`, `authority`, `icon`, `sort`, `meta`, `tenant_id`, `status`, `deleted`, `create_time`, `update_time`, `memo`) SELECT 'menu.emptyOutbound', p.id, 'menu.outStockPoces', CONCAT(IFNULL(p.path, ''), CASE WHEN IFNULL(p.path, '') = '' THEN '' ELSE ',' END, CAST(p.id AS CHAR)), NULL, '/work/emptyOutbound', 'emptyOutbound', NULL, NULL, 0, 'manager:emptyOutbound:list', 'Layers', 30, NULL, 1, 1, 0, NOW(), NOW(), NULL FROM `sys_menu` p WHERE p.name = 'menu.outStockPoces' AND IFNULL(p.deleted, 0) = 0 AND IFNULL(p.type, 0) = 0 AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `component` = 'emptyOutbound' AND IFNULL(`type`, 0) = 0 LIMIT 1) LIMIT 1; -- 列表/接口权限(类型=按钮,与 WcsController @PreAuthorize manager:emptyOutbound:list 一致) INSERT INTO `sys_menu` (`name`, `parent_id`, `path`, `path_name`, `route`, `component`, `brief`, `code`, `type`, `authority`, `icon`, `sort`, `meta`, `tenant_id`, `status`, `deleted`, `create_time`, `update_time`, `memo`) SELECT 'Query 空板出库', m.id, CONCAT(IFNULL(m.path, ''), ',', m.id), NULL, NULL, NULL, NULL, NULL, 1, 'manager:emptyOutbound:list', NULL, 0, NULL, 1, 1, 0, NOW(), NOW(), NULL FROM `sys_menu` m WHERE m.component = 'emptyOutbound' AND IFNULL(m.type, 0) = 0 AND IFNULL(m.deleted, 0) = 0 AND NOT EXISTS (SELECT 1 FROM `sys_menu` WHERE `authority` = 'manager:emptyOutbound:list' AND IFNULL(`type`, 0) = 1 LIMIT 1) LIMIT 1; -- 说明:JwtAuthenticationFilter 只加载 authority 非空的菜单为权限;主菜单必须填鉴权,否则即使用户有菜单也会 403。 -- 执行后在【系统管理 -> 角色管理】中为角色勾选「空板出库」(及可选「Query 空板出库」)并保存。 -- 若此前已插入主菜单且 authority 为空导致 /wcs/empty/outbound 返回 403,执行下面 UPDATE: UPDATE `sys_menu` SET `authority` = 'manager:emptyOutbound:list' WHERE `component` = 'emptyOutbound' AND IFNULL(`type`, 0) = 0 AND (IFNULL(`authority`, '') = ''); -- 可选:给管理员角色绑定主菜单(role_id 按实际修改,常见为 1) INSERT INTO `sys_role_menu` (`role_id`, `menu_id`) SELECT 1, m.`id` FROM `sys_menu` m WHERE m.`component` = 'emptyOutbound' AND IFNULL(m.`type`, 0) = 0 AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` srm WHERE srm.`role_id` = 1 AND srm.`menu_id` = m.`id`);