113 lines
4.3 KiB
Markdown
113 lines
4.3 KiB
Markdown
# 用户管理菜单问题诊断和修复
|
||
|
||
## 问题1:用户管理变成按钮,子菜单消失
|
||
|
||
### 原因分析
|
||
后端通过以下逻辑识别父子关系:
|
||
1. 通过 path 中的斜杠数量判断(2个以上斜杠=子路由)
|
||
2. 通过角色配置的 menus 字段过滤路由
|
||
3. 如果子路由不在 menus 中,会被过滤掉
|
||
|
||
### 检查步骤
|
||
|
||
1. **检查数据库中的路由名称**
|
||
```sql
|
||
SELECT route_id, name, path FROM sys_route
|
||
WHERE route_id IN ('user_manage', 'user_list', 'user_role', 'user_permission');
|
||
```
|
||
|
||
应该显示:
|
||
- user_manage → name = 'user-manage'
|
||
- user_list → name = 'user-manage_list'
|
||
- user_role → name = 'user-manage_role'
|
||
- user_permission → name = 'user-manage_permission'
|
||
|
||
2. **检查角色配置**
|
||
```sql
|
||
SELECT menus FROM sys_role WHERE role_code = 'R_SUPER';
|
||
```
|
||
|
||
应该包含:`user-manage,user-manage_list,user-manage_role,user-manage_permission`
|
||
|
||
3. **查看后端日志**
|
||
重启后端,登录后查看控制台输出:
|
||
- "允许访问的菜单" 应该包含所有4个路由
|
||
- "路由: user-manage_list - 是否允许: true"
|
||
|
||
### 修复方案
|
||
|
||
如果子路由被过滤掉,说明角色配置中缺少这些路由名称。
|
||
|
||
运行以下SQL确保角色配置正确:
|
||
```sql
|
||
UPDATE sys_role
|
||
SET menus = 'device,device_list,device_group,device_monitor,device_online,device_power,screen,screen_wall,screen_control,screen_record,user-manage,user-manage_list,user-manage_role,user-manage_permission,application,application_approval,application_history,system,system_agent,system_amt,system_log,my-device,my-device_status,my-device_remote-control,my-device_power-control,my-application,my-application_apply,my-application_my-list'
|
||
WHERE role_code = 'R_SUPER';
|
||
```
|
||
|
||
## 问题2:某些菜单点击要全屏
|
||
|
||
### 原因
|
||
某些路由的 meta 配置中可能设置了 `multiTab: false` 或其他全屏相关配置。
|
||
|
||
### 检查方法
|
||
查看路由的 meta 字段:
|
||
```sql
|
||
SELECT route_id, name, meta FROM sys_route
|
||
WHERE name IN ('需要检查的路由名称');
|
||
```
|
||
|
||
### 修复方案
|
||
如果不需要全屏,确保 meta 中没有设置全屏相关的配置。标准的 meta 应该是:
|
||
```json
|
||
{"title":"标题","i18nKey":"route.xxx","icon":"mdi:icon-name","order":1}
|
||
```
|
||
|
||
如果需要在标签页中打开(不全屏),不要添加特殊的全屏配置。
|
||
|
||
## 快速修复脚本
|
||
|
||
创建 `final_fix.sql`:
|
||
```sql
|
||
USE soybean_admin;
|
||
|
||
-- 1. 确保路由名称正确
|
||
UPDATE sys_route SET name = 'user-manage' WHERE route_id = 'user_manage';
|
||
UPDATE sys_route SET name = 'user-manage_list' WHERE route_id = 'user_list';
|
||
UPDATE sys_route SET name = 'user-manage_role' WHERE route_id = 'user_role';
|
||
UPDATE sys_route SET name = 'user-manage_permission' WHERE route_id = 'user_permission';
|
||
|
||
-- 2. 确保组件路径正确
|
||
UPDATE sys_route SET component = 'layout.base' WHERE route_id = 'user_manage';
|
||
UPDATE sys_route SET component = 'view.user-manage_list' WHERE route_id = 'user_list';
|
||
UPDATE sys_route SET component = 'view.user-manage_role' WHERE route_id = 'user_role';
|
||
UPDATE sys_route SET component = 'view.user-manage_permission' WHERE route_id = 'user_permission';
|
||
|
||
-- 3. 更新角色配置(关键!)
|
||
UPDATE sys_role
|
||
SET menus = 'device,device_list,device_group,device_monitor,device_online,device_power,screen,screen_wall,screen_control,screen_record,user-manage,user-manage_list,user-manage_role,user-manage_permission,application,application_approval,application_history,system,system_agent,system_amt,system_log,my-device,my-device_status,my-device_remote-control,my-device_power-control,my-application,my-application_apply,my-application_my-list'
|
||
WHERE role_code = 'R_SUPER';
|
||
|
||
-- 4. 验证
|
||
SELECT '=== 路由配置 ===' AS '';
|
||
SELECT route_id, name, path, component FROM sys_route
|
||
WHERE route_id LIKE 'user%' ORDER BY order_num;
|
||
|
||
SELECT '=== 角色配置(前100字符)===' AS '';
|
||
SELECT role_code, SUBSTRING(menus, 1, 150) FROM sys_role WHERE role_code = 'R_SUPER';
|
||
```
|
||
|
||
## 执行步骤
|
||
|
||
1. 运行 `final_fix.sql`
|
||
2. 重启后端服务
|
||
3. 清除浏览器缓存
|
||
4. 刷新页面
|
||
5. 查看后端控制台日志,确认子路由没有被过滤
|
||
|
||
## 预期结果
|
||
|
||
- 用户管理显示为带下拉箭头的菜单项
|
||
- 点击展开后显示三个子菜单:用户列表、角色管理、权限管理
|
||
- 点击子菜单可以正常跳转并在标签页中打开
|