import { showDialog } from 'vant' import router from '@/router' import { clearAuthTokens } from '@/utils/auth-token' let authFailureDialogPromise: Promise | null = null /** * 认证信息无法恢复时,清空本地登录态并提示用户重新登录。 * 多个并发请求同时失败时只展示一个弹窗,避免重复提示和重复跳转。 */ export function handleAuthFailure() { clearAuthTokens() if (!authFailureDialogPromise) { authFailureDialogPromise = showDialog({ title: '登录提示', message: '认证失败,登录状态已失效,请重新登录。', confirmButtonText: '重新登录', confirmButtonColor: '#e92d3b', closeOnClickOverlay: false, closeOnPopstate: false, }) .then(async () => { if (router.currentRoute.value.name !== 'Login') { await router.replace({ name: 'Login' }) } }) .catch(() => { // 弹窗仅提供确认按钮;宿主异常关闭时登录态也已安全清理。 }) .finally(() => { authFailureDialogPromise = null }) } return authFailureDialogPromise }