diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index 4766f91..30d9814 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -2,6 +2,7 @@ import axios from 'axios' import type { AxiosError, InternalAxiosRequestConfig } from 'axios' import { useAuthStore } from '@/stores/auth' +import router from '@/router' const baseURL = import.meta.env.VITE_API_BASE_URL || '/api' if (import.meta.env.DEV) { // Vite 的方式判断开发环境 @@ -49,7 +50,12 @@ service.interceptors.response.use( if (error.response && error.response.status === 401) { const authStore = useAuthStore(); authStore.clear(); - window.location.href = '/login'; + // 守卫校验期间(尚未进入受保护路由)由守卫负责跳登录; + // 这里只处理已登录状态下 token 失效的情况,且不再用 location.href 硬刷新 + const current = router.currentRoute.value; + if (current.matched.some(record => record.meta.requiresAuth)) { + router.push({ path: '/login', query: { redirect: current.fullPath } }); + } } return Promise.reject(error); } diff --git a/frontend/src/layouts/DashboardLayout.vue b/frontend/src/layouts/DashboardLayout.vue index 09d24a6..56a4953 100644 --- a/frontend/src/layouts/DashboardLayout.vue +++ b/frontend/src/layouts/DashboardLayout.vue @@ -1,6 +1,10 @@