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
| -- ----------------------------
| -- VIN码管理菜单补齐脚本(Mycat 兼容版)
| -- 创建日期: 2026-09-26
| -- 库: charging_pile_other
| -- 背景: 20260901_vin_management.sql 的菜单部分使用 SET @变量 语句,Mycat 2.0 不支持该写法,
| -- 导致测试库 charging_pile_other.sys_menu 中从未写入 VIN码管理菜单及按钮权限;
| -- 本脚本以子查询方式等价补齐,全部语句幂等,可重复执行。
| -- 说明: 执行顺序 -> 本脚本 -> 20260926_vin_allocate_auth.sql(额度分配按钮依赖 VIN码管理列表菜单)
| -- ----------------------------
| USE charging_pile_other;
|
| -- 1) 一级菜单:VIN码管理
| INSERT INTO `sys_menu`
| (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
| SELECT 'VIN码管理', 0, 11, '/vinManagement', NULL, 'M', '0', '0', '/vinManagement', 'car', 'admin', NOW(), 'VIN码管理父级菜单'
| FROM `sys_menu` anchor
| WHERE anchor.menu_id = 1
| AND NOT EXISTS (SELECT 1 FROM `sys_menu` x WHERE x.parent_id = 0 AND x.path = '/vinManagement');
|
| -- 2) 列表菜单:VIN码管理
| INSERT INTO `sys_menu`
| (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `remark`)
| SELECT 'VIN码管理', p.menu_id, 1, 'list', 'vin', 'C', '0', '0', '/vinManagement/list', 'car', 'admin', NOW(), 'VIN码管理列表'
| FROM `sys_menu` p
| WHERE p.parent_id = 0 AND p.path = '/vinManagement'
| AND NOT EXISTS (SELECT 1 FROM `sys_menu` x WHERE x.parent_id = p.menu_id AND x.path = 'list');
|
| -- 3) 按钮权限:新增
| INSERT INTO `sys_menu`
| (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
| SELECT '新增', c.menu_id, 1, '#', '', '', 1, 0, 'F', '0', '0', '/vinManagement/add', '#', 'admin', NOW(), '', NULL, 'VIN新增'
| FROM `sys_menu` c
| WHERE c.perms = '/vinManagement/list'
| AND NOT EXISTS (SELECT 1 FROM `sys_menu` x WHERE x.perms = '/vinManagement/add');
|
| -- 4) 按钮权限:编辑
| INSERT INTO `sys_menu`
| (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
| SELECT '编辑', c.menu_id, 2, '#', '', '', 1, 0, 'F', '0', '0', '/vinManagement/edit', '#', 'admin', NOW(), '', NULL, 'VIN编辑'
| FROM `sys_menu` c
| WHERE c.perms = '/vinManagement/list'
| AND NOT EXISTS (SELECT 1 FROM `sys_menu` x WHERE x.perms = '/vinManagement/edit');
|
| -- 5) 按钮权限:删除
| INSERT INTO `sys_menu`
| (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
| SELECT '删除', c.menu_id, 3, '#', '', '', 1, 0, 'F', '0', '0', '/vinManagement/delete', '#', 'admin', NOW(), '', NULL, 'VIN删除'
| FROM `sys_menu` c
| WHERE c.perms = '/vinManagement/list'
| AND NOT EXISTS (SELECT 1 FROM `sys_menu` x WHERE x.perms = '/vinManagement/delete');
|
| -- 6) 按钮权限:启停
| INSERT INTO `sys_menu`
| (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
| SELECT '启停', c.menu_id, 4, '#', '', '', 1, 0, 'F', '0', '0', '/vinManagement/status', '#', 'admin', NOW(), '', NULL, 'VIN启停'
| FROM `sys_menu` c
| WHERE c.perms = '/vinManagement/list'
| AND NOT EXISTS (SELECT 1 FROM `sys_menu` x WHERE x.perms = '/vinManagement/status');
|
| -- 7) 按钮权限:导入
| INSERT INTO `sys_menu`
| (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
| SELECT '导入', c.menu_id, 5, '#', '', '', 1, 0, 'F', '0', '0', '/vinManagement/import', '#', 'admin', NOW(), '', NULL, 'VIN导入'
| FROM `sys_menu` c
| WHERE c.perms = '/vinManagement/list'
| AND NOT EXISTS (SELECT 1 FROM `sys_menu` x WHERE x.perms = '/vinManagement/import');
|
| -- 8) 按钮权限:导出
| INSERT INTO `sys_menu`
| (`menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
| SELECT '导出', c.menu_id, 6, '#', '', '', 1, 0, 'F', '0', '0', '/vinManagement/export', '#', 'admin', NOW(), '', NULL, 'VIN导出'
| FROM `sys_menu` c
| WHERE c.perms = '/vinManagement/list'
| AND NOT EXISTS (SELECT 1 FROM `sys_menu` x WHERE x.perms = '/vinManagement/export');
|
| -- 9) 管理员角色授权(VIN码管理父菜单、列表菜单及全部按钮)
| -- 注意: OR 与 AND 的优先级,务必用括号把"菜单范围"整体框住,否则父菜单分支会绕过幂等校验(重复执行报主键冲突)
| INSERT INTO `sys_role_menu` (`role_id`, `menu_id`)
| SELECT 1, m.menu_id
| FROM `sys_menu` m
| WHERE ((m.parent_id = 0 AND m.path = '/vinManagement')
| OR m.perms IN ('/vinManagement/list', '/vinManagement/add', '/vinManagement/edit', '/vinManagement/delete',
| '/vinManagement/status', '/vinManagement/import', '/vinManagement/export', '/vinManagement/allocate'))
| AND NOT EXISTS (SELECT 1 FROM `sys_role_menu` x WHERE x.role_id = 1 AND x.menu_id = m.menu_id);
|
|