cl
2026-04-17 a726def1286c7bff013efeb17e8437a891ba5a00
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
-- 空板出库菜单:前端 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`);