import axios, { type AxiosResponse, type InternalAxiosRequestConfig } from 'axios' import { ElMessage } from 'element-plus' import router from '@/router' // 创建axios实例 const service = axios.create({ timeout: 30000, }) // 请求拦截器 service.interceptors.request.use( (config: InternalAxiosRequestConfig) => { // 根据当前路由判断是否为Mock模式 const isMock = window.location.pathname.startsWith('/mock') config.baseURL = isMock ? '/mock-api' : '/api' // 自动添加Token const token = localStorage.getItem('token') if (token) { config.headers.Authorization = `Bearer ${token}` } return config }, (error) => Promise.reject(error) ) // 响应拦截器 service.interceptors.response.use( (response: AxiosResponse) => { const res = response.data if (res.code === 0) { return res } // Token无效/过期 if (res.code === 40101) { localStorage.removeItem('token') const isMock = window.location.pathname.startsWith('/mock') router.push(isMock ? '/mock/login' : '/login') ElMessage.warning('登录已过期') return Promise.reject(new Error(res.message)) } // 其他业务错误 const errorMessages: Record = { 40001: res.message || '参数校验失败', 40002: res.message || '资源不存在', 40003: res.message || '资源已存在', 50001: '服务器错误', 50002: '采集服务未响应', } const msg = errorMessages[res.code] || res.message || '请求失败' ElMessage.error(msg) return Promise.reject(new Error(msg)) }, (error) => { if (error.response) { ElMessage.error('网络异常') } else if (error.code === 'ECONNABORTED') { ElMessage.error('请求超时') } return Promise.reject(error) } ) export default service