-- 空板出库菜单：前端 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`);

