/** * 简化版request - 用于测试401跳转 * 如果标准版本不工作,可以临时替换使用这个版本 */ import axios from 'axios' import type { InternalAxiosRequestConfig, AxiosResponse } from 'axios' import { ElMessage } from 'element-plus' import { getToken, getRefreshToken, setToken as saveToken } from '@/utils/auth' // 获取基础 URL const getBaseURL = () => { let url = import.meta.env.VITE_API_BASE_URL || 'http://localhost:8000' if (url.includes('localhost') && typeof window !== 'undefined' && window.location.hostname !== 'localhost' && window.location.hostname !== '127.0.0.1') { url = url.replace('localhost', window.location.hostname) } return url } // 创建axios实例 const request = axios.create({ baseURL: getBaseURL(), timeout: 30000, headers: { 'Content-Type': 'application/json' } }) // 请求拦截器 request.interceptors.request.use( (config: InternalAxiosRequestConfig) => { const token = getToken() if (token && config.headers) { config.headers.Authorization = `Bearer ${token}` } return config }, (error) => { return Promise.reject(error) } ) // 响应拦截器 - 简化版 request.interceptors.response.use( (response: AxiosResponse) => { // Token自动更新 const newToken = response.headers['x-new-token'] if (newToken) { const refreshToken = getRefreshToken() saveToken(newToken, refreshToken || undefined) console.log('[简化版] Token已自动刷新') } const { code, message } = response.data ?? {} if ((code === '000000' || code === 0) || code === 200 || typeof code === 'undefined') { return response.data } const errorMsg = message || '请求失败' if (!response.config.headers?.['Skip-Error-Message']) { ElMessage.error(errorMsg) } const businessError = new Error(errorMsg) // @ts-ignore businessError.code = code // @ts-ignore businessError.isBusinessError = true return Promise.reject(businessError) }, (error) => { console.log('[简化版] 拦截器捕获错误:', error.response?.status) // 401错误 - 最简单的处理 if (error.response?.status === 401) { console.log('[简化版] 检测到401,立即跳转') // 清除所有认证信息 localStorage.clear() sessionStorage.clear() // 显示提示 ElMessage.error('登录已过期,请重新登录') // 立即跳转 window.location.href = '/login' // 阻止后续执行 return new Promise(() => {}) } // 其他错误 const skipErrorMessage = error.config?.headers?.['Skip-Error-Message'] if (error.response) { const { status, data } = error.response if (!skipErrorMessage) { if (status === 403) { ElMessage.error('权限不足') } else if (status === 404) { ElMessage.error('请求的资源不存在') } else if (status === 500) { ElMessage.error('服务器内部错误') } else { ElMessage.error(data?.message || '请求失败') } } } else { if (!skipErrorMessage) { ElMessage.error('网络连接失败') } } return Promise.reject(error) } ) export default request