import axios from 'axios' import message from '@/utils/message' const instance = axios.create({ timeout: 1000 * 300 }) // 请求拦截器 - 添加JWT token instance.interceptors.request.use( config => { const token = localStorage.getItem('pptist_token') if (token) { config.headers.Authorization = `Bearer ${token}` } return config }, error => { return Promise.reject(error) } ) // 响应拦截器 - 处理认证错误和其他错误 instance.interceptors.response.use( response => { if (response.status >= 200 && response.status < 400) { return Promise.resolve(response.data) } message.error('未知的请求错误!') return Promise.reject(response) }, error => { if (error && error.response) { const status = error.response.status // 处理认证错误 if (status === 401) { localStorage.removeItem('pptist_token') localStorage.removeItem('pptist_user') message.error('登录已过期,请重新登录') // 可以在这里触发重定向到登录页面 window.location.href = '/login' return Promise.reject('Authentication failed') } if (status >= 400 && status < 500) { const errorMsg = error.response.data?.error || error.message message.error(errorMsg) return Promise.reject(errorMsg) } else if (status >= 500) { const errorMsg = error.response.data?.error || '服务器内部错误' message.error(errorMsg) return Promise.reject(errorMsg) } message.error('服务器遇到未知错误!') return Promise.reject(error.message) } message.error('连接到服务器失败 或 服务器响应超时!') return Promise.reject(error) } ) export default instance