import { ElMessage, ElMessageBox } from 'element-plus' import router from '@/routers' import type { DetectionLockHolder } from '@/stores/modules/detectionLock' import mittBus, { STOP_DETECTION_TIMER_EVENT } from '@/utils/mittBus' import { requestResourceManageAutoplayFirst } from '@/utils/resourceManageAutoplay' const stopDetectionTimer = () => { mittBus.emit(STOP_DETECTION_TIMER_EVENT) } const goResourceManage = async () => { requestResourceManageAutoplayFirst() if (router.hasRoute('resourceManage')) { await router.push({ name: 'resourceManage' }) return } await router.push('/resourceManage') } /** * S1: 他人正在做检测, 自己抢锁被挡 */ export const showLockBusyDialog = (holder: DetectionLockHolder) => { stopDetectionTimer() ElMessageBox.confirm(`「${holder.holderUserName}」正在做检测,请稍后。`, '检测进行中', { confirmButtonText: '观看检测视频教学', cancelButtonText: '我知道了', type: 'warning', distinguishCancelAndClose: true, customClass: 'detection-lock-busy-dialog' }) .then(() => { return goResourceManage() }) .catch(() => { // 用户点了"我知道了"或关闭,什么都不做 }) } /** * S2: 未开始检测就调中间接口 */ export const showLockNotStartedToast = () => { ElMessage.warning('请先点击"开始检测"按钮启动本轮检测') } /** * S3: 自己暂停超 10 分钟, 被 WS 推 STOP_TIMEOUT 强制结束 */ export const showPauseTimeoutDialog = () => { stopDetectionTimer() ElMessageBox.alert('暂停超过 10 分钟未恢复,系统已自动结束本次检测。\n\n如需继续,请重新发起检测。', '本次检测已结束', { confirmButtonText: '我知道了', type: 'warning' }).catch(() => {}) } /** * S4: 被管理员强制释放 * - holder 为 null: 强释后无人接手 * - holder 非 null: 强释后被别人立刻抢占 */ export const showForceReleasedDialog = (holder: DetectionLockHolder | null) => { stopDetectionTimer() if (holder) { ElMessageBox.confirm(`当前「${holder.holderUserName}」正在做检测,您无法继续检测,请稍后。`, '检测已被中止', { confirmButtonText: '观看检测视频教学', cancelButtonText: '我知道了', type: 'warning', distinguishCancelAndClose: true }) .then(() => { return goResourceManage() }) .catch(() => {}) } else { ElMessageBox.alert('您的检测已被管理员强制结束。\n如需继续,请重新发起检测。', '检测已被中止', { confirmButtonText: '我知道了', type: 'warning' }).catch(() => {}) } }