import axios from 'axios' import { ElMessage } from 'element-plus' import router from '@/router' import { useUserStore } from '@/stores/user' // 创建axios实例 const service = axios.create({ baseURL: import.meta.env.VITE_API_BASE_URL, timeout: 10000 }) // 请求拦截器 service.interceptors.request.use( config => { const userStore = useUserStore() if (userStore.token) { config.headers['Authorization'] = `Bearer ${userStore.token}` } return config }, error => { console.error('请求错误:', error) return Promise.reject(error) } ) // 响应拦截器 service.interceptors.response.use( response => { const res = response.data // 如果响应的状态码不是200,则判断为错误 if (response.status !== 200) { ElMessage({ message: res.message || '请求失败', type: 'error', duration: 5 * 1000 }) return Promise.reject(new Error(res.message || '请求失败')) } else { return res } }, error => { console.error('响应错误:', error) if (error.response) { const { status, data } = error.response if (status === 401) { // 未授权,跳转到登录页 const userStore = useUserStore() userStore.logout() router.push('/login') ElMessage.error('登录已过期,请重新登录') } else if (status === 403) { ElMessage.error('没有权限访问该资源') } else if (status === 404) { ElMessage.error('请求的资源不存在') } else if (status === 500) { ElMessage.error('服务器错误') } else { ElMessage.error(data.detail || '请求失败') } } else { ElMessage.error('网络错误,请检查网络连接') } return Promise.reject(error) } ) export default service