5.5 KiB
5.5 KiB
监控学习终端的学习界面功能问题分析报告
问题概述
用户反馈"监控学习终端的学习界面"功能无法看到界面,经过代码分析发现了几个关键问题。
发现的问题
1. 菜单配置缺失 ⚠️ 关键问题
问题描述:
- 项目使用动态路由机制,路由从后端数据库的
sys_menu表获取 screenStream页面(实时监控界面)没有在数据库菜单表中配置- 因此无法在侧边栏看到菜单项,无法访问该页面
影响:
- 教师端无法通过菜单访问实时监控界面
- 功能虽然已实现,但无法使用
解决方案:
需要在数据库 sys_menu 表中添加菜单配置,包括:
- 主菜单项:实时监控(screenStream)
- 相关权限按钮:控制监控、查看列表等
2. 学生端实现缺失 ⚠️ 关键问题
问题描述:
- 代码中只有教师端的监控界面实现
- 缺少学生端的实现,学生端需要:
- 连接 WebSocket (
/ws/screenStream/{userId}) - 接收监控控制指令(start_capture/stop_capture)
- 捕获屏幕截图
- 将截图以 base64 格式通过 WebSocket 发送给服务器
- 连接 WebSocket (
当前状态:
- 后端 WebSocket 处理器已实现,可以接收学生端连接
- 后端控制器可以发送控制指令
- 但没有学生端代码来执行屏幕捕获和发送
影响:
- 即使菜单配置好了,也无法真正监控学生屏幕
- 学生端无法响应监控指令
解决方案: 需要开发学生端功能:
- 学生端 WebSocket 客户端连接
- 屏幕截图捕获功能(可能需要使用浏览器 API 或第三方库)
- 定时发送截图数据
3. 监控记录页面可能也有菜单问题
问题描述:
study-ui/src/views/study/monitor/index.vue是监控记录管理页面- 该页面可能也没有在菜单中配置
解决方案: 同样需要在菜单表中配置该页面的菜单项
技术架构分析
已实现的部分 ✅
-
后端 WebSocket 处理器 (
ScreenStreamWebSocketHandler.java)- 支持学生端和监控端连接
- 支持屏幕帧数据转发
- 支持控制指令发送
-
后端 REST API (
ScreenStreamController.java)- 启动/停止屏幕流捕获
- 检查学生在线状态
- 获取在线学生数
-
前端监控界面 (
study-ui/src/views/study/screenStream/index.vue)- 学生列表显示
- 实时屏幕画面显示
- WebSocket 连接管理
- 监控控制功能
-
监控记录管理 (
StudyScreenMonitorController.java)- 截图上传接口(供 App 端使用)
- 监控记录查询
- 监控记录删除
缺失的部分 ❌
- 菜单配置 - 数据库菜单表配置
- 学生端实现 - 屏幕捕获和 WebSocket 客户端
- 权限配置 - 相关权限标识可能未配置到角色
建议的修复步骤
第一步:添加菜单配置
执行 SQL 添加菜单项(需要先查询"学习管理"菜单的 parent_id):
-- 1. 添加"实时监控"菜单(假设学习管理菜单ID为 XXXX)
INSERT INTO sys_menu (
menu_name, parent_id, order_num, path, component,
is_frame, is_cache, menu_type, visible, status,
perms, icon, create_by, create_time, remark
) VALUES (
'实时监控', XXXX, 10, 'screenStream', 'study/screenStream/index',
1, 0, 'C', '0', '0',
'study:monitor:control', 'monitor', 'admin', sysdate(), '监控学习终端的学习界面'
);
-- 获取刚插入的菜单ID
SELECT @menuId := LAST_INSERT_ID();
-- 2. 添加权限按钮
INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time) VALUES
('监控控制', @menuId, 1, '#', '', 1, 0, 'F', '0', '0', 'study:monitor:control', '#', 'admin', sysdate()),
('监控查询', @menuId, 2, '#', '', 1, 0, 'F', '0', '0', 'study:monitor:list', '#', 'admin', sysdate());
-- 3. 添加"监控记录"菜单(如果还没有)
INSERT INTO sys_menu (
menu_name, parent_id, order_num, path, component,
is_frame, is_cache, menu_type, visible, status,
perms, icon, create_by, create_time, remark
) VALUES (
'监控记录', XXXX, 11, 'monitor', 'study/monitor/index',
1, 0, 'C', '0', '0',
'study:monitor:list', 'log', 'admin', sysdate(), '学习监控记录管理'
);
第二步:开发学生端功能
需要创建学生端页面或组件,实现:
- WebSocket 连接管理
- 屏幕截图捕获(使用
html2canvas或类似库) - 定时发送截图数据
第三步:配置角色权限
在系统管理 -> 角色管理中,为相应角色分配:
study:monitor:control- 监控控制权限study:monitor:list- 监控查询权限study:monitor:query- 监控详情查询权限study:monitor:remove- 监控记录删除权限
总结
核心问题:
- ✅ 功能代码已实现
- ❌ 菜单配置缺失(无法访问)
- ❌ 学生端实现缺失(无法真正监控)
优先级:
- 高优先级:添加菜单配置(让界面可见)
- 高优先级:开发学生端功能(让功能可用)
- 中优先级:配置角色权限(让权限正确)
备注
-
学生端屏幕捕获在浏览器中有限制,可能需要:
- 使用
html2canvas库捕获当前页面 - 或使用浏览器扩展/桌面应用进行全屏捕获
- 或使用 Electron 等桌面应用框架
- 使用
-
WebSocket 配置看起来是正确的,
WebSocketConfig.java已正确配置 -
数据库表
monitor_record应该已存在(从 Mapper 文件可以看出)