diff --git a/frontend/src/utils/request.ts b/frontend/src/utils/request.ts index da5b78c..79a474e 100644 --- a/frontend/src/utils/request.ts +++ b/frontend/src/utils/request.ts @@ -25,6 +25,10 @@ api.interceptors.response.use( (response) => response.data, (error) => { const message = error.response?.data?.error || error.message || 'Request failed' + + // 如果请求标记为静默失败,不显示任何消息 + const silent = error.config?.silent + if (error.response?.status === 401) { const isLoginRequest = error.config?.url?.includes('/auth/login') const isRegisterRequest = error.config?.url?.includes('/auth/register') @@ -38,21 +42,26 @@ api.interceptors.response.use( error.config?.url?.includes('/lotteries') if (isLoginRequest || isRegisterRequest) { - ElMessage.error(message) - } else if (!isPublicRequest) { + if (!silent) ElMessage.error(message) + } else if (!isPublicRequest && !silent) { localStorage.removeItem('token') localStorage.removeItem('user') ElMessage.error('请先登录') router.push('/login') - } else { - // 公开接口的 401 错误静默处理,不跳转登录 - console.warn('Public API 401:', error.config?.url) } - } else { + // 公开接口或静默请求的 401 错误不显示消息也不跳转 + } else if (!silent) { ElMessage.error(message) } return Promise.reject(error) }, ) -export default api +// 扩展 axios 类型以支持 silent 选项 +declare module 'axios' { + interface AxiosRequestConfig { + silent?: boolean + } +} + +export default api \ No newline at end of file diff --git a/frontend/src/views/user/ProductDetail.vue b/frontend/src/views/user/ProductDetail.vue index e9ceffe..9b527e3 100644 --- a/frontend/src/views/user/ProductDetail.vue +++ b/frontend/src/views/user/ProductDetail.vue @@ -93,10 +93,16 @@ function hasEnoughCredit(): boolean { // 获取用户资格信息 async function fetchUserCredits() { + // 未登录时静默跳过,不发起请求 + const token = localStorage.getItem('token') + if (!token) return + try { const res: any = await userApi.getProfile() userCredits.value = res.data?.purchase_credits || 0 - } catch {} + } catch { + // 静默处理错误 + } } onMounted(async () => {