admin/修复全屏显示问题说明.md
lvfengfree 44cb688072 fix: 修复路由命名问题 - 将my_device和my_application改为连字符格式
- 问题:数据库中路由使用下划线(my_device),前端期望连字符(my-device)
- 导致路由无法匹配,页面全屏显示
- 添加诊断和修复脚本:
  * check_route_naming.sql - 检查路由命名问题
  * fix_my_routes_naming.sql - 修复路由命名
  * fix_my_routes_naming.bat - 批处理执行脚本
- 修复后需要重启后端服务和清除浏览器缓存
2026-03-01 10:36:18 +08:00

210 lines
5.2 KiB
Markdown
Raw 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.

# 修复"我的设备"和"设备申请"全屏显示问题
## 问题描述
点击"我的设备"和"设备申请"菜单后,页面全屏显示,侧边栏和顶部导航栏都消失了,只剩下页面内容。
## 问题原因
**根本原因:** 数据库中这两个路由的 `component` 字段配置不正确。
父路由必须使用 `layout.base` 作为 component这样才能
- 显示侧边栏菜单
- 显示顶部导航栏
- 在内容区域显示子路由页面
如果 component 配置错误或为空,前端会使用默认的全屏布局,导致侧边栏和顶栏消失。
## 解决方案
### 方法1使用批处理脚本推荐
1. 双击运行 `fix_fullscreen_issue.bat`
2. 等待脚本执行完成
3. 重启后端服务
4. 清除浏览器缓存
5. 重新登录测试
### 方法2手动执行 SQL
```bash
# 在命令行中执行
mysql -u root -proot < fix_fullscreen_issue.sql
```
然后:
1. 重启后端服务
2. 清除浏览器缓存
3. 重新登录测试
## 正确的路由配置
### 父路由配置
父路由必须使用 `layout.base`
```sql
-- 我的设备父路由
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}` 格式:
```sql
-- 我的设备子路由
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'
```
## 关键配置说明
### 为什么之前会全屏显示?
当路由配置为空或缺失时,前端无法识别正确的布局组件,可能会:
1. 使用默认的全屏布局
2. 或者直接渲染页面组件而不包含侧边栏和顶栏
### 正确的配置
父路由必须设置 `component: 'layout.base'`,这样才能:
- 显示侧边栏菜单
- 显示顶部导航栏
- 在内容区域显示子路由页面
子路由使用 `component: 'view.{folder}_{subfolder}'` 格式,例如:
- `view.my-device_status`
- `view.my-application_apply`
## 验证修复
### 1. 检查数据库
```sql
-- 查看"我的设备"路由
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. 检查前端
1. 打开浏览器开发者工具F12
2. 切换到 Network 标签
3. 登录后查看 `/route/getUserRoutes` 请求的响应
4. 应该包含 `my-device``my-application` 路由
### 4. 界面验证
- 左侧菜单栏显示"我的设备"和"设备申请"
- 点击菜单后,页面在正常布局中显示(有侧边栏和顶栏)
- 不再全屏显示
- 子菜单可以正常展开和访问
## 如果还是有问题
### 问题A执行 SQL 失败
**可能原因:**
- MySQL 服务未启动
- 数据库连接信息不正确(用户名/密码)
- 数据库 `soybean_admin` 不存在
**解决:**
1. 检查 MySQL 服务是否运行
2. 确认数据库连接信息:`root/root`
3. 确认数据库 `soybean_admin` 存在
### 问题B后端没有返回这些路由
**可能原因:**
- 后端未重启
- 角色权限配置不正确
**解决:**
1. 确保重启了后端服务
2. 检查角色的 `menus` 字段是否包含这些路由名称:
```sql
-- 检查角色配置
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`
如果没有,运行:
```bash
fix_403_complete.bat
```
### 问题C前端还是全屏显示
**可能原因:**
- 浏览器缓存未清除
- 前端路由缓存
**解决:**
1. 完全清除浏览器缓存Ctrl+Shift+Delete选择全部时间
2. 关闭所有浏览器窗口
3. 重新打开浏览器
4. 使用无痕模式测试
## 相关文件
- `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` - 前端路由配置(自动生成)
## 总结
修复步骤:
1. ✅ 运行 `fix_fullscreen_issue.bat`
2. ✅ 重启后端服务
3. ✅ 清除浏览器缓存
4. ✅ 重新登录测试
完成后,"我的设备"和"设备申请"菜单应该正常显示在布局中,不再全屏。