diff --git a/frontend/app/web-gold/src/api/http.js b/frontend/app/web-gold/src/api/http.js index 597994334a..2181bd7289 100644 --- a/frontend/app/web-gold/src/api/http.js +++ b/frontend/app/web-gold/src/api/http.js @@ -7,6 +7,7 @@ import { createClientAxios } from '@gold/api/axios/client' import authService from '@/services/AuthService' +import router from '@/router' /** * 创建应用层 HTTP 客户端实例 @@ -32,8 +33,8 @@ export function createHttpClient(options = {}) { await authService.handleAuthError( error, () => { - // 刷新失败,跳转到登录页 - window.location.href = '/login' + // 刷新失败,使用router跳转,避免整页刷新 + router.push('/login') } ) // 如果刷新成功,AuthService返回null,不跳转,不抛出错误 @@ -44,8 +45,8 @@ export function createHttpClient(options = {}) { if (on403) { on403(error) } else { - console.warn('403权限不足,跳转到登录页') - window.location.href = '/login' + console.warn('403权限不足,使用router跳转到登录页') + router.push('/login') } }, }) diff --git a/frontend/app/web-gold/src/services/AuthService.js b/frontend/app/web-gold/src/services/AuthService.js index 2012d6a55f..e7835b5ba5 100644 --- a/frontend/app/web-gold/src/services/AuthService.js +++ b/frontend/app/web-gold/src/services/AuthService.js @@ -6,6 +6,7 @@ import { clientAxios } from '@gold/api/axios/client' import tokenManager from '@gold/utils/token-manager' +import router from '@/router' // 刷新token的锁,避免并发刷新 let isRefreshing = false @@ -120,13 +121,14 @@ async function logout() { // 清除token tokenManager.clearTokens() - // 跳转到登录页 - window.location.href = '/login' + // 使用router跳转,避免整页刷新 + router.push('/login') } catch (error) { console.error('登出失败:', error) // 即使出错也要清除token tokenManager.clearTokens() - window.location.href = '/login' + // 依然使用router跳转 + router.push('/login') } } @@ -160,10 +162,10 @@ async function getCurrentUser() { * @param {Function} onAuthFailed - 认证失败回调 */ async function handleAuthError(error, onAuthFailed) { - const status = error?.response?.status - const data = error?.response?.data - const code = data?.code - + const status = error?.status + const data = error?.data + const code = error?.code + // 统一检查是否为 401 (token无效或过期) const is401 = (code === 401) || (status === 401) diff --git a/frontend/app/web-gold/src/views/content-style/Copywriting.vue b/frontend/app/web-gold/src/views/content-style/Copywriting.vue index 3789ec3928..45c52fe3ad 100644 --- a/frontend/app/web-gold/src/views/content-style/Copywriting.vue +++ b/frontend/app/web-gold/src/views/content-style/Copywriting.vue @@ -385,15 +385,6 @@ async function generateCopywriting() { const status = err?.response?.status const data = err?.response?.data - // 处理 401/403 认证错误 - if (status === 401 || status === 403 || - (data && typeof data.code === 'number' && (data.code === 401 || data.code === 403))) { - authService.handleAuthError(err, () => { - window.location.href = '/login' - }) - return - } - const errorMsg = err?.message || '网络请求失败' console.error('SSE请求错误:', err) message.error(errorMsg) diff --git a/frontend/app/web-gold/src/views/trends/Forecast.vue b/frontend/app/web-gold/src/views/trends/Forecast.vue index 2d4e9475e4..5b591c79bd 100644 --- a/frontend/app/web-gold/src/views/trends/Forecast.vue +++ b/frontend/app/web-gold/src/views/trends/Forecast.vue @@ -277,16 +277,6 @@ async function handleGenerate() { // 尝试解析错误中的状态码和业务码 const status = err?.response?.status const data = err?.response?.data - - // 处理 401/403 认证错误 - if (status === 401 || status === 403 || - (data && typeof data.code === 'number' && (data.code === 401 || data.code === 403))) { - authService.handleAuthError(err, () => { - window.location.href = '/login' - }) - return - } - const errorMsg = err?.message || '网络请求失败' console.error('SSE请求错误:', err) message.error(errorMsg)