admin/完整诊断和修复.md

113 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 用户管理菜单问题诊断和修复
## 问题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. 查看后端控制台日志,确认子路由没有被过滤
## 预期结果
- 用户管理显示为带下拉箭头的菜单项
- 点击展开后显示三个子菜单:用户列表、角色管理、权限管理
- 点击子菜单可以正常跳转并在标签页中打开