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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
| -- ----------------------------
| -- 平台后台菜单重建(按业务菜单原型)
| --
| -- 目标库为业务库 hugray(与 sys_menu 同库)。
| -- 本脚本执行"完全替换":删除 ruoyi 原生导航菜单,只保留原型中的 6 组。
| --
| -- 号段取 2200~2250(页面用 2200~2224,按钮用 2225 起):现有最大 menu_id 为 2106(account 号段),
| -- 此段与之不冲突。**新增菜单/按钮一律用本区间内的空号**——区间外的号会被第 1 节的 NOT IN 清理掉,
| -- 而第 2 节只重建 2200~2250、第 4 节也只给这段授权,落到区间外等于重跑即丢。
| -- 区间上界是「被重建成什么」的唯一开关:加号必须同步改第 2/4 节的两条 BETWEEN(见下)。
| --
| -- 【为什么保留 15 条按钮权限】
| -- 下列三个页面复用既有组件,其内部按钮依赖原权限标识(v-hasPermi),
| -- 若一并删除,非 admin 角色进页面后按钮会全部消失:
| -- 员工管理 -> system/user/index 依赖 system:user:*
| -- 角色管理 -> system/role/index 依赖 system:role:*
| -- 操作记录 -> monitor/operlog/index 依赖 system:operlog:*
| -- 脚本保留 menu_id 1000~1011、1039~1041 这 15 条 F 记录,
| -- 并把父菜单改挂到对应的新菜单下。
| --
| -- 【菜单与按钮一律留在 2200~2250 内】
| -- 用户列表(2201)的 5 条按钮建在 2230~2234、主体认证审核(2202)的 2 条建在 2240~2241、
| -- 注销申请审核(2203)的 2 条建在 2242~2243、城市公司档案(2204)的 3 条建在 2235~2237、
| -- 城市管理(2224)的 4 条建在 2225~2228、服务商列表(2244)的 3 条建在 2245~2247、
| -- 协议配置(2219)的 2 条建在 2248~2249、平台设置(2220)的 1 条建在 2250。
| --
| -- 注意 2200~2250 里剩下的空号(2229、2238、2239)是**故意留的**:2229 是城市管理与用户列表之间
| -- 的间隔,2238~2239 留给用户列表后续可能补的按钮(见第 3 节的注释)。新模块请**往后追加**,
| -- 不要去填空号——填空号会让「同一父菜单的按钮连号」这个读法失效,也让上面的登记表失去意义。
| --
| -- 号段一改,只有**两处 BETWEEN 是承重的**:第 2 节的两条 DELETE 与第 4 节的授权 INSERT。
| -- 漏改第 2 节会撞主键:第 1 节不删号段内的行,第 3 节的 INSERT 就会 Duplicate entry。
| -- 漏改第 4 节则只是新菜单不给普通角色授权(admin 走 selectMenuTreeAll,不受影响),
| -- 表现为非 admin 账号看不到新菜单/按钮,重跑补上即可。
| --
| -- 第 1 节那两个 NOT IN 白名单**不要加新号**:它们只负责保住 15 条原生按钮,
| -- 2200~2250 的行本来就由第 2 节删、第 3 节建。把新号加进白名单是把「重建」变成「保留」,
| -- 万一第 2 节上界没跟着改就直接撞主键冲突——不加更宽容。
| --
| -- 【super admin 无需授权】
| -- SysMenuServiceImpl 对 admin 走 selectMenuTreeAll() 全量返回,与 sys_role_menu 无关。
| -- 脚本末尾为普通角色(role_id = 2)补了新菜单授权,保持其"能看到菜单"的原有行为,
| -- 不需要可整段删掉。
| --
| -- 可重复执行。
| -- ----------------------------
|
| USE `hugray`;
|
| -- ---------- 1. 删除原生导航菜单,保留 15 条按钮权限 ----------
| DELETE FROM `sys_role_menu`
| WHERE `menu_id` NOT IN (1000, 1001, 1002, 1003, 1004, 1005, 1006,
| 1007, 1008, 1009, 1010, 1011,
| 1039, 1040, 1041,
| 2230, 2231, 2232, 2233, 2234,
| 2240, 2241, 2242, 2243);
|
| DELETE FROM `sys_menu`
| WHERE `menu_id` NOT IN (1000, 1001, 1002, 1003, 1004, 1005, 1006,
| 1007, 1008, 1009, 1010, 1011,
| 1039, 1040, 1041,
| 2230, 2231, 2232, 2233, 2234,
| 2240, 2241, 2242, 2243);
|
| -- 保留的按钮权限改挂到新菜单下(幂等)
| UPDATE `sys_menu` SET `parent_id` = 2222 WHERE `menu_id` BETWEEN 1000 AND 1006; -- 用户* -> 员工管理
| UPDATE `sys_menu` SET `parent_id` = 2221 WHERE `menu_id` BETWEEN 1007 AND 1011; -- 角色* -> 角色管理
| UPDATE `sys_menu` SET `parent_id` = 2223 WHERE `menu_id` IN (1039, 1040, 1041); -- 操作* -> 操作记录
|
| -- ---------- 2. 重建本号段(保证可重复执行) ----------
| DELETE FROM `sys_role_menu` WHERE `menu_id` BETWEEN 2200 AND 2250;
| DELETE FROM `sys_menu` WHERE `menu_id` BETWEEN 2200 AND 2250;
|
| -- ---------- 3. 插入导航菜单 ----------
| -- 首页不在本表中:前端 index 为常量路由(constantRoutes),无需落库。
| INSERT INTO `sys_menu`
| (`menu_id`, `menu_name`, `parent_id`, `order_num`, `path`, `component`, `query`, `route_name`, `is_frame`, `is_cache`, `menu_type`, `visible`, `status`, `perms`, `icon`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`)
| VALUES
| -- ========== 用户与组织 ==========
| (2200, '用户与组织', 0, 1, 'member', NULL, NULL, '', 1, 0, 'M', '0', '0', '', 'user', 'admin', sysdate(), '', NULL, ''),
| (2201, '用户列表', 2200, 1, 'user', 'member/user/index', NULL, '', 1, 0, 'C', '0', '0', 'member:user:list', '#', 'admin', sysdate(), '', NULL, ''),
| (2202, '主体认证审核', 2200, 2, 'certification', 'member/certification/index', NULL, '', 1, 0, 'C', '0', '0', 'member:certification:list', '#', 'admin', sysdate(), '', NULL, ''),
| (2203, '注销申请审核', 2200, 3, 'cancel', 'member/cancel/index', NULL, '', 1, 0, 'C', '0', '0', 'member:cancel:list', '#', 'admin', sysdate(), '', NULL, ''),
| (2204, '城市公司档案', 2200, 4, 'company', 'member/company/index', NULL, '', 1, 0, 'C', '0', '0', 'member:company:list', '#', 'admin', sysdate(), '', NULL, ''),
| -- 城市管理挂 2200 下而不是 2204 下:RuoYi 的 buildMenus 只对 M(目录)展开 children,
| -- C 类型带子菜单不会出现在侧边栏,挂在 2204 下等于建了也点不进去。
| -- 入口另有城市公司档案列表页的「城市管理」按钮(跳 /member/city)。
| (2224, '城市管理', 2200, 5, 'city', 'member/city/index', NULL, '', 1, 0, 'C', '0', '0', 'member:city:list', '#', 'admin', sysdate(), '', NULL, ''),
| (2244, '服务商列表', 2200, 6, 'provider', 'member/provider/index', NULL, '', 1, 0, 'C', '0', '0', 'member:provider:list', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 商品与内容 ==========
| (2205, '商品与内容', 0, 2, 'product', NULL, NULL, '', 1, 0, 'M', '0', '0', '', 'shopping', 'admin', sysdate(), '', NULL, ''),
| (2206, '商品与套餐', 2205, 1, 'package', 'product/package/index', NULL, '', 1, 0, 'C', '0', '0', 'product:package:list', '#', 'admin', sysdate(), '', NULL, ''),
| (2207, '首页内容', 2205, 2, 'content', 'product/content/index', NULL, '', 1, 0, 'C', '0', '0', 'product:content:list', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 交易履约 ==========
| (2208, '交易履约', 0, 3, 'trade', NULL, NULL, '', 1, 0, 'M', '0', '0', '', 'form', 'admin', sysdate(), '', NULL, ''),
| (2209, '订单列表', 2208, 1, 'order', 'trade/order/index', NULL, '', 1, 0, 'C', '0', '0', 'trade:order:list', '#', 'admin', sysdate(), '', NULL, ''),
| (2210, '发货任务', 2208, 2, 'delivery', 'trade/delivery/index', NULL, '', 1, 0, 'C', '0', '0', 'trade:delivery:list', '#', 'admin', sysdate(), '', NULL, ''),
| (2211, '售后列表', 2208, 3, 'aftersale', 'trade/aftersale/index', NULL, '', 1, 0, 'C', '0', '0', 'trade:aftersale:list', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 库存与收支 ==========
| (2212, '库存与收支', 0, 4, 'stock', NULL, NULL, '', 1, 0, 'M', '0', '0', '', 'money', 'admin', sysdate(), '', NULL, ''),
| (2213, '虚拟库存台账', 2212, 1, 'ledger', 'stock/ledger/index', NULL, '', 1, 0, 'C', '0', '0', 'stock:ledger:list', '#', 'admin', sysdate(), '', NULL, ''),
| (2214, '收支与模拟结算', 2212, 2, 'settlement', 'stock/settlement/index', NULL, '', 1, 0, 'C', '0', '0', 'stock:settlement:list', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 等级与规则 ==========
| (2215, '等级与规则', 0, 5, 'grade', NULL, NULL, '', 1, 0, 'M', '0', '0', '', 'star', 'admin', sysdate(), '', NULL, ''),
| (2216, '等级配置', 2215, 1, 'config', 'grade/config/index', NULL, '', 1, 0, 'C', '0', '0', 'grade:config:list', '#', 'admin', sysdate(), '', NULL, ''),
| (2217, '升级审核', 2215, 2, 'audit', 'grade/audit/index', NULL, '', 1, 0, 'C', '0', '0', 'grade:audit:list', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 系统管理 ==========
| -- 后三项复用既有组件,不新写页面
| (2218, '系统管理', 0, 6, 'system', NULL, NULL, '', 1, 0, 'M', '0', '0', '', 'system', 'admin', sysdate(), '', NULL, ''),
| (2219, '协议配置', 2218, 1, 'agreement', 'system/agreement/index', NULL, '', 1, 0, 'C', '0', '0', 'system:agreement:list', '#', 'admin', sysdate(), '', NULL, ''),
| (2220, '平台设置', 2218, 2, 'platform', 'system/platform/index', NULL, '', 1, 0, 'C', '0', '0', 'system:platform:list', '#', 'admin', sysdate(), '', NULL, ''),
| (2221, '角色管理', 2218, 3, 'role', 'system/role/index', NULL, '', 1, 0, 'C', '0', '0', 'system:role:list', '#', 'admin', sysdate(), '', NULL, '复用既有页面'),
| (2222, '员工管理', 2218, 4, 'staff', 'system/user/index', NULL, '', 1, 0, 'C', '0', '0', 'system:user:list', '#', 'admin', sysdate(), '', NULL, '复用既有页面'),
| (2223, '操作记录', 2218, 5, 'operlog', 'monitor/operlog/index', NULL, '', 1, 0, 'C', '0', '0', 'system:operlog:list', '#', 'admin', sysdate(), '', NULL, '复用既有页面'),
|
| -- ========== 用户列表的按钮权限(F) ==========
| -- 后端 AccountUserController 的 @RequiresPermissions 已统一为 member:user:*,
| -- 权限集由 sys_menu.perms 经 sys_role_menu 聚合而来,故按钮必须落库,
| -- 否则非 admin 角色能打开页面却调不通接口(403)。
| -- list 权限无需在此建按钮:它已写在 2201 这条 C 类型菜单的 perms 上。
| -- F 记录的 path/component 无意义,统一空串(对齐 1000~1011 的既有格式)。
| (2230, '会员查询', 2201, 1, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:user:query', '#', 'admin', sysdate(), '', NULL, ''),
| (2231, '会员新增', 2201, 2, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:user:add', '#', 'admin', sysdate(), '', NULL, ''),
| (2232, '会员修改', 2201, 3, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:user:edit', '#', 'admin', sysdate(), '', NULL, ''),
| (2233, '会员删除', 2201, 4, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:user:remove', '#', 'admin', sysdate(), '', NULL, ''),
| (2234, '会员导出', 2201, 5, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:user:export', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 主体认证审核的按钮权限(F) ==========
| -- 审核页只有「查看」和「通过/驳回」,没有增删改,故只建 query + audit 两个权限。
| -- 号段跳开 2235~2239:给用户列表后续可能补的按钮留空隙,避免重排既有 menu_id
| -- (2235~2237 在后续的城市公司档案模块被占用,见下)。
| (2240, '认证查询', 2202, 1, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:certification:query', '#', 'admin', sysdate(), '', NULL, ''),
| (2241, '认证审核', 2202, 2, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:certification:audit', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 注销申请审核的按钮权限(F) ==========
| -- 同认证审核:只有「查看」和「通过/驳回」,故只需 query + audit 两个权限。
| -- 号段接在认证审核之后(2242~2243),保持「同父菜单的按钮连号」的读法。
| (2242, '注销查询', 2203, 1, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:cancel:query', '#', 'admin', sysdate(), '', NULL, ''),
| (2243, '注销审核', 2203, 2, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:cancel:audit', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 城市公司档案的按钮权限(F) ==========
| -- 原型操作列只有「查看」「禁用」,再加列表顶部「新增」,故需要 query/add/edit 三个;
| -- 「禁用」复用 edit(与会员列表同一取舍:状态切换不单开权限)。
| (2235, '档案查询', 2204, 1, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:company:query', '#', 'admin', sysdate(), '', NULL, ''),
| (2236, '档案新增', 2204, 2, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:company:add', '#', 'admin', sysdate(), '', NULL, ''),
| (2237, '档案修改', 2204, 3, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:company:edit', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 城市管理的按钮权限(F) ==========
| -- 城市管理页可增删改,「禁用」复用 edit。options(下拉数据源)不落 perms:
| -- 它由四个模块共用,走 @RequiresPermissions 的 Logical.OR,不适合钉在某一条按钮上。
| (2225, '城市查询', 2224, 1, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:city:query', '#', 'admin', sysdate(), '', NULL, ''),
| (2226, '城市新增', 2224, 2, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:city:add', '#', 'admin', sysdate(), '', NULL, ''),
| (2227, '城市修改', 2224, 3, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:city:edit', '#', 'admin', sysdate(), '', NULL, ''),
| (2228, '城市删除', 2224, 4, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:city:remove', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 服务商列表的按钮权限(F) ==========
| -- 原型操作列只有「查看」「禁用」,再加列表顶部「新增」,故需要 query/add/edit 三个;
| -- 「禁用/启用」复用 edit(与会员列表、城市公司档案同一个取舍:状态切换不单开权限)。
| -- 详情页是「直接可编辑」,查看与修改共用同一个 perms:member:provider:query 打开页面,
| -- 提交时才走 edit —— 与城市公司档案的双态页面同一套权限划分。
| (2245, '服务商查询', 2244, 1, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:provider:query', '#', 'admin', sysdate(), '', NULL, ''),
| (2246, '服务商新增', 2244, 2, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:provider:add', '#', 'admin', sysdate(), '', NULL, ''),
| (2247, '服务商修改', 2244, 3, '', '', NULL, '', 1, 0, 'F', '0', '0', 'member:provider:edit', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 协议配置的按钮权限(F) ==========
| -- 列表只有「查看」,顶部「新发布」与详情页「发布新版本」是同一个动作(都是插一条新版本),
| -- 故只需 query + add 两个权限:**没有 edit/remove** —— 版本行一经发布不可改、不可删,
| -- 列表里的「当前版本/历史版本」是查出来的,不是谁切出来的,所以也不需要额外的状态权限。
| -- 菜单名与 2219 保持「协议配置」(与菜单结构原型一致)。
| (2248, '协议查询', 2219, 1, '', '', NULL, '', 1, 0, 'F', '0', '0', 'system:agreement:query', '#', 'admin', sysdate(), '', NULL, ''),
| (2249, '协议发布', 2219, 2, '', '', NULL, '', 1, 0, 'F', '0', '0', 'system:agreement:add', '#', 'admin', sysdate(), '', NULL, ''),
|
| -- ========== 平台设置的按钮权限(F) ==========
| -- 只有一条 edit:这一页是「一份设置表单 + 保存」,读那一行就是打开页面本身,
| -- 而 list 权限已经写在 2220 这条 C 类型菜单的 perms 上,故读接口复用它、不再另建查询按钮。
| -- 没有 add/remove:全表只有一行(见 hugray_platform_setting_20261013.sql),保存即覆盖,
| -- 既不会多出第二行,也不提供删除。
| (2250, '平台设置修改', 2220, 1, '', '', NULL, '', 1, 0, 'F', '0', '0', 'system:platform:edit', '#', 'admin', sysdate(), '', NULL, '');
|
| -- ---------- 4. 普通角色授权(不需要可删) ----------
| -- 原库中 role_id = 2 持有一份近乎全量的菜单授权,此处保持等价行为。
| INSERT IGNORE INTO `sys_role_menu` (`role_id`, `menu_id`)
| SELECT 2, `menu_id` FROM `sys_menu` WHERE `menu_id` BETWEEN 2200 AND 2250;
|
| -- ---------- 5. 结果核对 ----------
| SELECT `menu_id`, `menu_name`, `parent_id`, `menu_type`, `path`, `component`, `perms`, `icon`, `order_num`
| FROM `sys_menu`
| ORDER BY IF(`parent_id` = 0, `menu_id`, `parent_id`), `order_num`, `menu_id`;
|
|