diff --git a/playground/src/types/global.d.ts b/playground/src/types/global.d.ts index c200f44..1bdbbe3 100644 --- a/playground/src/types/global.d.ts +++ b/playground/src/types/global.d.ts @@ -8,7 +8,19 @@ interface Window { teacherApi?: { startSfu: () => Promise<{ port: number; already?: boolean }> stopSfu: () => Promise - openScreenShareWindow: () => Promise + /** 可选传入班级学员列表与班级名称;名称用于教师端共享窗口标题「{名称} - 屏幕共享」。 */ + openScreenShareWindow: ( + classStudentRows?: unknown[], + className?: string, + ) => Promise + /** 打开学员屏幕监控独立窗口(teacher-electron) */ + openStudentScreenMonitorWindow?: ( + classStudentRows?: unknown[], + className?: string, + ) => Promise + setShareClassStudentsListener?: ( + cb: ((rows: unknown[]) => void) | null, + ) => void } } diff --git a/playground/src/views/org/classroom-monitor/home.vue b/playground/src/views/org/classroom-monitor/home.vue index 180c100..4bbab19 100644 --- a/playground/src/views/org/classroom-monitor/home.vue +++ b/playground/src/views/org/classroom-monitor/home.vue @@ -10,6 +10,7 @@ import type { import { computed, onBeforeUnmount, onMounted, reactive, ref } from 'vue' import { useRouter } from 'vue-router' +import { classStudentService } from '../../../api/service/org/class-student' import { classroomMonitorService } from '../../../api/service/org/classroom-monitor' import hud from '../../../utils/hud' @@ -258,18 +259,57 @@ function formatTime(time?: number | string) { } /** teacher-electron 注入:打开独立屏幕共享窗口 */ -async function openTeacherScreenShareWindow() { +async function openTeacherScreenShareWindow(item: ClassroomItem) { const api = window.teacherApi if (!api?.openScreenShareWindow) { - ElMessage.warning('请在教师端桌面客户端中使用「共享屏幕」') + hud.warning('请在教师端桌面客户端中使用「共享屏幕」') return } - try { - await api.openScreenShareWindow() - } catch (e) { - console.error(e) - ElMessage.error('打开屏幕共享窗口失败') + await hud.load({ + option: '准备共享屏幕', + task: async () => { + try { + const page = await classStudentService.findPage(1, 999, { + classId: item.id, + }) + const rows = (page as any)?.data?.rows ?? page?.rows ?? [] + await api.openScreenShareWindow(rows, item.name ?? '') + } catch (e) { + console.error(e) + throw e + } + }, + error: async () => { + hud.error('打开屏幕共享窗口失败') + }, + }) +} + +/** teacher-electron:学员 JPEG 截屏监控窗口 */ +async function openStudentScreenMonitorWindow(item: ClassroomItem) { + const openMon = window.teacherApi?.openStudentScreenMonitorWindow + if (!openMon) { + hud.warning('请在教师端桌面客户端中使用「屏幕监控」') + return } + await hud.load({ + option: '准备屏幕监控', + task: async () => { + try { + const page = await classStudentService.findPage(1, 999, { + classId: item.id, + }) + const rows = (page as any)?.data?.rows ?? page?.rows ?? [] + await openMon(rows, item.name ?? '') + } catch (e) { + console.error(e) + throw e + } + }, + error: async () => { + hud.error('打开屏幕监控窗口失败') + }, + }) } @@ -283,9 +323,6 @@ async function openTeacherScreenShareWindow() {
请选择班级查看当前课堂监控。
- - 共享屏幕 -
- - 查看监控 - +
+ + 共享屏幕 + + + 屏幕监控 + + + 查看监控 + +
返回班级列表 历史监控 - - 共享屏幕 -