import axios from 'axios' import { MessagePlugin } from 'tdesign-vue-next' // 创建 axios 实例 const api = axios.create({ baseURL: '/api', timeout: 10000, headers: { 'Content-Type': 'application/json' } }) // 请求拦截器 api.interceptors.request.use( (config) => { // 添加 token const token = localStorage.getItem('token') if (token) { config.headers.Authorization = `Bearer ${token}` } return config }, (error) => { return Promise.reject(error) } ) // 响应拦截器 api.interceptors.response.use( (response) => { const { data } = response // 统一处理响应 if (data.code === 200) { return data.data } else { MessagePlugin.error(data.message || '请求失败') return Promise.reject(new Error(data.message || '请求失败')) } }, (error) => { // 处理错误响应 if (error.response) { const { status, data } = error.response switch (status) { case 401: MessagePlugin.error('登录已过期,请重新登录') localStorage.removeItem('token') window.location.href = '/login' break case 403: MessagePlugin.error('没有权限访问该资源') break case 404: MessagePlugin.error('请求的资源不存在') break case 500: MessagePlugin.error('服务器内部错误') break default: MessagePlugin.error(data.message || '网络错误') } } else if (error.request) { MessagePlugin.error('网络连接失败,请检查网络') } else { MessagePlugin.error(error.message || '请求失败') } return Promise.reject(error) } ) export default api