fix: 全局只显示一个useTips弹框,不会有多个叠在一起

This commit is contained in:
shawko 2026-05-12 14:19:55 +08:00
parent d1f364e230
commit d066302c31
2 changed files with 15 additions and 8 deletions

View File

@ -10,6 +10,7 @@ let monitorTimer: ReturnType<typeof setInterval> | null = null
let monitorSessionId = '' let monitorSessionId = ''
let isUploadingMonitorSnapshot = false let isUploadingMonitorSnapshot = false
let monitorState: 0 | 1 = 0 let monitorState: 0 | 1 = 0
let closeMonitorTip: (() => void) | null = null
const MONITOR_SNAPSHOT_INTERVAL = 10000 const MONITOR_SNAPSHOT_INTERVAL = 10000
const MONITOR_MSG_TYPE = 'monitorStart' 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 monitorWarn = (...args: unknown[]) => console.warn(MONITOR_LOG_PREFIX, ...args)
const monitorError = (...args: unknown[]) => console.error(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 = () => { const getServerOrigin = () => {
try { try {
return new URL(import.meta.env.VITE_SERVER_URL).origin return new URL(import.meta.env.VITE_SERVER_URL).origin
@ -372,10 +381,7 @@ export const stopClassMonitor = (showTip = false) => {
monitorTimer = null monitorTimer = null
} }
if (showTip && isMonitoring) { if (showTip && isMonitoring) {
useTips({ showMonitorTip('已结束课堂监控')
tips: '已结束课堂监控',
showCancel: false,
})
} }
monitorSessionId = '' monitorSessionId = ''
monitorState = 0 monitorState = 0
@ -396,10 +402,7 @@ const startClassMonitor = (msg: anyObj) => {
stopClassMonitor() stopClassMonitor()
monitorSessionId = sessionId monitorSessionId = sessionId
monitorState = 1 monitorState = 1
useTips({ showMonitorTip('已进入课堂监控状态')
tips: '已进入课堂监控状态',
showCancel: false,
})
reportMonitorSnapshot(sessionId) reportMonitorSnapshot(sessionId)
monitorTimer = setInterval(() => reportMonitorSnapshot(sessionId), MONITOR_SNAPSHOT_INTERVAL) monitorTimer = setInterval(() => reportMonitorSnapshot(sessionId), MONITOR_SNAPSHOT_INTERVAL)
} }

View File

@ -15,6 +15,7 @@ interface Tips_Config {
export const useTips = (config: Tips_Config) => { export const useTips = (config: Tips_Config) => {
const container = document.createElement('div') const container = document.createElement('div')
let closed = false
const dia = createVNode(XDia, { const dia = createVNode(XDia, {
modelValue: true, modelValue: true,
title: config.title || '提示', title: config.title || '提示',
@ -31,6 +32,8 @@ export const useTips = (config: Tips_Config) => {
}) })
const close = () => { const close = () => {
if (closed) return
closed = true
dia.component!.props.modelValue = false dia.component!.props.modelValue = false
setTimeout(() => { setTimeout(() => {
render(null, container) render(null, container)
@ -39,4 +42,5 @@ export const useTips = (config: Tips_Config) => {
render(dia, container) render(dia, container)
document.querySelector('body')?.appendChild(container.firstElementChild!) document.querySelector('body')?.appendChild(container.firstElementChild!)
return close
} }