- 问题:数据库中路由使用下划线(my_device),前端期望连字符(my-device) - 导致路由无法匹配,页面全屏显示 - 添加诊断和修复脚本: * check_route_naming.sql - 检查路由命名问题 * fix_my_routes_naming.sql - 修复路由命名 * fix_my_routes_naming.bat - 批处理执行脚本 - 修复后需要重启后端服务和清除浏览器缓存
5.2 KiB
5.2 KiB
修复"我的设备"和"设备申请"全屏显示问题
问题描述
点击"我的设备"和"设备申请"菜单后,页面全屏显示,侧边栏和顶部导航栏都消失了,只剩下页面内容。
问题原因
根本原因: 数据库中这两个路由的 component 字段配置不正确。
父路由必须使用 layout.base 作为 component,这样才能:
- 显示侧边栏菜单
- 显示顶部导航栏
- 在内容区域显示子路由页面
如果 component 配置错误或为空,前端会使用默认的全屏布局,导致侧边栏和顶栏消失。
解决方案
方法1:使用批处理脚本(推荐)
- 双击运行
fix_fullscreen_issue.bat - 等待脚本执行完成
- 重启后端服务
- 清除浏览器缓存
- 重新登录测试
方法2:手动执行 SQL
# 在命令行中执行
mysql -u root -proot < fix_fullscreen_issue.sql
然后:
- 重启后端服务
- 清除浏览器缓存
- 重新登录测试
正确的路由配置
父路由配置
父路由必须使用 layout.base:
-- 我的设备父路由
route_id: 'my-device'
name: 'my-device'
path: '/my-device'
component: 'layout.base' -- 关键!必须是 layout.base
meta: '{"title":"我的设备","i18nKey":"route.my_device","icon":"mdi:laptop","order":7}'
-- 设备申请父路由
route_id: 'my-application'
name: 'my-application'
path: '/my-application'
component: 'layout.base' -- 关键!必须是 layout.base
meta: '{"title":"设备申请","i18nKey":"route.my_application","icon":"mdi:file-document","order":8}'
子路由配置
子路由使用 view.{folder}_{subfolder} 格式:
-- 我的设备子路由
component: 'view.my-device_status'
component: 'view.my-device_remote-control'
component: 'view.my-device_power-control'
-- 设备申请子路由
component: 'view.my-application_apply'
component: 'view.my-application_my-list'
关键配置说明
为什么之前会全屏显示?
当路由配置为空或缺失时,前端无法识别正确的布局组件,可能会:
- 使用默认的全屏布局
- 或者直接渲染页面组件而不包含侧边栏和顶栏
正确的配置
父路由必须设置 component: 'layout.base',这样才能:
- 显示侧边栏菜单
- 显示顶部导航栏
- 在内容区域显示子路由页面
子路由使用 component: 'view.{folder}_{subfolder}' 格式,例如:
view.my-device_statusview.my-application_apply
验证修复
1. 检查数据库
-- 查看"我的设备"路由
SELECT route_id, name, path, component
FROM sys_route
WHERE name LIKE 'my-device%'
ORDER BY order_num;
-- 查看"设备申请"路由
SELECT route_id, name, path, component
FROM sys_route
WHERE name LIKE 'my-application%'
ORDER BY order_num;
应该看到完整的路由配置。
2. 检查后端日志
重启后端后,登录时应该看到:
=== 用户路由权限调试 ===
...
路由: my-device - 是否允许: true
路由: my-device_status - 是否允许: true
路由: my-application - 是否允许: true
路由: my-application_apply - 是否允许: true
...
3. 检查前端
- 打开浏览器开发者工具(F12)
- 切换到 Network 标签
- 登录后查看
/route/getUserRoutes请求的响应 - 应该包含
my-device和my-application路由
4. 界面验证
- 左侧菜单栏显示"我的设备"和"设备申请"
- 点击菜单后,页面在正常布局中显示(有侧边栏和顶栏)
- 不再全屏显示
- 子菜单可以正常展开和访问
如果还是有问题
问题A:执行 SQL 失败
可能原因:
- MySQL 服务未启动
- 数据库连接信息不正确(用户名/密码)
- 数据库
soybean_admin不存在
解决:
- 检查 MySQL 服务是否运行
- 确认数据库连接信息:
root/root - 确认数据库
soybean_admin存在
问题B:后端没有返回这些路由
可能原因:
- 后端未重启
- 角色权限配置不正确
解决:
- 确保重启了后端服务
- 检查角色的
menus字段是否包含这些路由名称:
-- 检查角色配置
SELECT role_code, menus FROM sys_role WHERE role_code = 'R_USER';
应该包含:my-device,my-device_status,my-device_remote-control,my-device_power-control,my-application,my-application_apply,my-application_my-list
如果没有,运行:
fix_403_complete.bat
问题C:前端还是全屏显示
可能原因:
- 浏览器缓存未清除
- 前端路由缓存
解决:
- 完全清除浏览器缓存(Ctrl+Shift+Delete,选择全部时间)
- 关闭所有浏览器窗口
- 重新打开浏览器
- 使用无痕模式测试
相关文件
fix_fullscreen_issue.sql- SQL 修复脚本fix_fullscreen_issue.bat- 批处理脚本fix_403_complete.sql- 角色权限修复脚本src/views/my-device/- "我的设备"页面组件src/views/my-application/- "设备申请"页面组件src/router/elegant/routes.ts- 前端路由配置(自动生成)
总结
修复步骤:
- ✅ 运行
fix_fullscreen_issue.bat - ✅ 重启后端服务
- ✅ 清除浏览器缓存
- ✅ 重新登录测试
完成后,"我的设备"和"设备申请"菜单应该正常显示在布局中,不再全屏。