diff --git a/src/hooks/useClassMonitor.ts b/src/hooks/useClassMonitor.ts index d9deca0..6b4bd59 100644 --- a/src/hooks/useClassMonitor.ts +++ b/src/hooks/useClassMonitor.ts @@ -10,6 +10,7 @@ let monitorTimer: ReturnType | null = null let monitorSessionId = '' let isUploadingMonitorSnapshot = false let monitorState: 0 | 1 = 0 +let closeMonitorTip: (() => void) | null = null const MONITOR_SNAPSHOT_INTERVAL = 10000 const MONITOR_MSG_TYPE = 'monitorStart' @@ -23,6 +24,14 @@ const monitorLog = (...args: unknown[]) => console.log(MONITOR_LOG_PREFIX, ...ar const monitorWarn = (...args: unknown[]) => console.warn(MONITOR_LOG_PREFIX, ...args) const monitorError = (...args: unknown[]) => console.error(MONITOR_LOG_PREFIX, ...args) +const showMonitorTip = (tips: string) => { + closeMonitorTip?.() + closeMonitorTip = useTips({ + tips, + showCancel: false, + }) +} + const getServerOrigin = () => { try { return new URL(import.meta.env.VITE_SERVER_URL).origin @@ -372,10 +381,7 @@ export const stopClassMonitor = (showTip = false) => { monitorTimer = null } if (showTip && isMonitoring) { - useTips({ - tips: '已结束课堂监控', - showCancel: false, - }) + showMonitorTip('已结束课堂监控') } monitorSessionId = '' monitorState = 0 @@ -396,10 +402,7 @@ const startClassMonitor = (msg: anyObj) => { stopClassMonitor() monitorSessionId = sessionId monitorState = 1 - useTips({ - tips: '已进入课堂监控状态', - showCancel: false, - }) + showMonitorTip('已进入课堂监控状态') reportMonitorSnapshot(sessionId) monitorTimer = setInterval(() => reportMonitorSnapshot(sessionId), MONITOR_SNAPSHOT_INTERVAL) } diff --git a/src/hooks/useTips.ts b/src/hooks/useTips.ts index 7b08e58..bd41e6d 100644 --- a/src/hooks/useTips.ts +++ b/src/hooks/useTips.ts @@ -15,6 +15,7 @@ interface Tips_Config { export const useTips = (config: Tips_Config) => { const container = document.createElement('div') + let closed = false const dia = createVNode(XDia, { modelValue: true, title: config.title || '提示', @@ -31,6 +32,8 @@ export const useTips = (config: Tips_Config) => { }) const close = () => { + if (closed) return + closed = true dia.component!.props.modelValue = false setTimeout(() => { render(null, container) @@ -39,4 +42,5 @@ export const useTips = (config: Tips_Config) => { render(dia, container) document.querySelector('body')?.appendChild(container.firstElementChild!) + return close }