高
3 天以前 c6a2b472cde9dff4d21b95637ee6d99a412c785c
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
-- ============================================================
-- MES 质检单批量导入 菜单与按钮权限
--
-- 背景:来料检验(IQC)、过程检验(IPQC)、出货检验(OQC)各自新增「批量导入」能力
--       (后端接口 GET /mes/qc/{iqc|ipqc|oqc}/get-import-template 与 POST .../import),
--       需要在对应列表页暴露按钮权限,否则前端按钮会被 @PreAuthorize 拦截。
--
-- 新增按钮权限:
--   mes:qc-iqc:import   来料检验列表「批量导入」按钮
--   mes:qc-ipqc:import  过程检验列表「批量导入」按钮
--   mes:qc-oqc:import   出货检验列表「批量导入」按钮
--
-- ID 自适应:本脚本不写死菜单 ID
--   ① 菜单 ID 由 system_menu 自增分配(不指定 id 列);
--   ② 父菜单按权限码反查该模块「查询」按钮所在菜单(mes:qc-iqc:query 等),
--      查不到时依次回退到「导出」按钮所在菜单、同名 type=2 菜单;
--   ③ 角色授权跟随同模块「查询」按钮已有的角色,不写死 role_id。
--   因此脚本可在任何库结构一致的实例上直接执行。
--
-- 幂等:按权限码先删后插,可重复执行。
--
-- 执行方式(PowerShell,避免中文菜单名乱码):
--   mysql -uroot -p1234 --default-character-set=utf8mb4 ruoyi-vue-pro < docs/sql/mes_qc_import_menu.sql
-- ============================================================
 
SET NAMES utf8mb4;
 
-- ------------------------------------------------------------
-- 0. 幂等清理:删除既有导入按钮及其角色授权
-- ------------------------------------------------------------
DELETE rm FROM `system_role_menu` rm
    JOIN `system_menu` m ON rm.`menu_id` = m.`id`
WHERE m.`permission` IN ('mes:qc-iqc:import', 'mes:qc-ipqc:import', 'mes:qc-oqc:import');
 
DELETE FROM `system_menu`
WHERE `permission` IN ('mes:qc-iqc:import', 'mes:qc-ipqc:import', 'mes:qc-oqc:import');
 
-- ------------------------------------------------------------
-- 1. 父菜单:各检验单列表页所在菜单(type=2)
-- ------------------------------------------------------------
SET @iqc_parent = COALESCE(
    (SELECT `parent_id` FROM `system_menu` WHERE `permission` = 'mes:qc-iqc:query'  AND `deleted` = b'0' LIMIT 1),
    (SELECT `parent_id` FROM `system_menu` WHERE `permission` = 'mes:qc-iqc:export' AND `deleted` = b'0' LIMIT 1));
 
SET @ipqc_parent = COALESCE(
    (SELECT `parent_id` FROM `system_menu` WHERE `permission` = 'mes:qc-ipqc:query'  AND `deleted` = b'0' LIMIT 1),
    (SELECT `parent_id` FROM `system_menu` WHERE `permission` = 'mes:qc-ipqc:export' AND `deleted` = b'0' LIMIT 1));
 
SET @oqc_parent = COALESCE(
    (SELECT `parent_id` FROM `system_menu` WHERE `permission` = 'mes:qc-oqc:query'  AND `deleted` = b'0' LIMIT 1),
    (SELECT `parent_id` FROM `system_menu` WHERE `permission` = 'mes:qc-oqc:export' AND `deleted` = b'0' LIMIT 1));
 
-- ------------------------------------------------------------
-- 2. 新增按钮(菜单 ID 自增)
-- ------------------------------------------------------------
INSERT INTO `system_menu` (`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT '来料检验导入', 'mes:qc-iqc:import', 3, 6, @iqc_parent, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'
WHERE @iqc_parent IS NOT NULL;
SET @menu_iqc_import = IF(ROW_COUNT() > 0, LAST_INSERT_ID(), NULL);
 
INSERT INTO `system_menu` (`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT '过程检验导入', 'mes:qc-ipqc:import', 3, 6, @ipqc_parent, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'
WHERE @ipqc_parent IS NOT NULL;
SET @menu_ipqc_import = IF(ROW_COUNT() > 0, LAST_INSERT_ID(), NULL);
 
INSERT INTO `system_menu` (`name`, `permission`, `type`, `sort`, `parent_id`, `path`, `icon`, `component`, `component_name`, `status`, `visible`, `keep_alive`, `always_show`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT '出货检验导入', 'mes:qc-oqc:import', 3, 6, @oqc_parent, '', '', '', '', 0, b'1', b'1', b'1', '1', NOW(), '1', NOW(), b'0'
WHERE @oqc_parent IS NOT NULL;
SET @menu_oqc_import = IF(ROW_COUNT() > 0, LAST_INSERT_ID(), NULL);
 
-- ------------------------------------------------------------
-- 3. 授权:跟随同模块「查询」按钮已有的角色(同时兜底超级管理员角色 1)
-- ------------------------------------------------------------
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT DISTINCT rm.`role_id`, @menu_iqc_import, '1', NOW(), '1', NOW(), b'0'
FROM `system_role_menu` rm
WHERE rm.`menu_id` = (SELECT `id` FROM `system_menu` WHERE `permission` = 'mes:qc-iqc:query' AND `deleted` = b'0' LIMIT 1)
  AND rm.`deleted` = b'0'
  AND @menu_iqc_import IS NOT NULL;
 
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT DISTINCT rm.`role_id`, @menu_ipqc_import, '1', NOW(), '1', NOW(), b'0'
FROM `system_role_menu` rm
WHERE rm.`menu_id` = (SELECT `id` FROM `system_menu` WHERE `permission` = 'mes:qc-ipqc:query' AND `deleted` = b'0' LIMIT 1)
  AND rm.`deleted` = b'0'
  AND @menu_ipqc_import IS NOT NULL;
 
INSERT INTO `system_role_menu` (`role_id`, `menu_id`, `creator`, `create_time`, `updater`, `update_time`, `deleted`)
SELECT DISTINCT rm.`role_id`, @menu_oqc_import, '1', NOW(), '1', NOW(), b'0'
FROM `system_role_menu` rm
WHERE rm.`menu_id` = (SELECT `id` FROM `system_menu` WHERE `permission` = 'mes:qc-oqc:query' AND `deleted` = b'0' LIMIT 1)
  AND rm.`deleted` = b'0'
  AND @menu_oqc_import IS NOT NULL;
 
-- ------------------------------------------------------------
-- 4. 校验:应各自返回 1 行菜单;角色授权行数与同模块「查询」按钮一致
-- ------------------------------------------------------------
SELECT '菜单 mes:qc-iqc:import ' AS item, COUNT(*) AS cnt FROM `system_menu` WHERE `permission` = 'mes:qc-iqc:import'   AND `deleted` = b'0'
UNION ALL SELECT '菜单 mes:qc-ipqc:import', COUNT(*) FROM `system_menu` WHERE `permission` = 'mes:qc-ipqc:import'  AND `deleted` = b'0'
UNION ALL SELECT '菜单 mes:qc-oqc:import ', COUNT(*) FROM `system_menu` WHERE `permission` = 'mes:qc-oqc:import'   AND `deleted` = b'0'
UNION ALL SELECT 'IQC 授权 / 查询授权  ', CONCAT(
    (SELECT COUNT(*) FROM `system_role_menu` rm JOIN `system_menu` m ON rm.`menu_id` = m.`id`
      WHERE m.`permission` = 'mes:qc-iqc:import' AND rm.`deleted` = b'0'), ' / ',
    (SELECT COUNT(*) FROM `system_role_menu` rm JOIN `system_menu` m ON rm.`menu_id` = m.`id`
      WHERE m.`permission` = 'mes:qc-iqc:query' AND rm.`deleted` = b'0'))
UNION ALL SELECT 'IPQC 授权 / 查询授权 ', CONCAT(
    (SELECT COUNT(*) FROM `system_role_menu` rm JOIN `system_menu` m ON rm.`menu_id` = m.`id`
      WHERE m.`permission` = 'mes:qc-ipqc:import' AND rm.`deleted` = b'0'), ' / ',
    (SELECT COUNT(*) FROM `system_role_menu` rm JOIN `system_menu` m ON rm.`menu_id` = m.`id`
      WHERE m.`permission` = 'mes:qc-ipqc:query' AND rm.`deleted` = b'0'))
UNION ALL SELECT 'OQC 授权 / 查询授权  ', CONCAT(
    (SELECT COUNT(*) FROM `system_role_menu` rm JOIN `system_menu` m ON rm.`menu_id` = m.`id`
      WHERE m.`permission` = 'mes:qc-oqc:import' AND rm.`deleted` = b'0'), ' / ',
    (SELECT COUNT(*) FROM `system_role_menu` rm JOIN `system_menu` m ON rm.`menu_id` = m.`id`
      WHERE m.`permission` = 'mes:qc-oqc:query' AND rm.`deleted` = b'0'));