import axios from 'axios' import { showFailToast } from 'vant' // 创建axios实例 const api = axios.create({ baseURL: process.env.VUE_APP_API_BASE_URL || 'http://localhost:3000/api/v1', timeout: 10000, headers: { 'Content-Type': 'application/json' } }) // 请求拦截器 api.interceptors.request.use( config => { // 从localStorage获取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 res = response.data // 如果响应中的success不是true,则判断为错误 if (res.success !== true) { showFailToast(res.message || '请求失败') // 401: 未登录或token过期 // 403: 权限不足 if (res.code === 401 || res.code === 403) { // 清除用户信息并跳转到登录页 localStorage.removeItem('token') localStorage.removeItem('refreshToken') localStorage.removeItem('userInfo') // 如果不在登录页,则跳转到登录页 if (window.location.hash !== '#/login') { window.location.href = '#/login' } } return Promise.reject(new Error(res.message || '请求失败')) } else { return res } }, error => { console.error('请求错误:', error) let message = '网络错误' if (error.response) { switch (error.response.status) { case 400: message = '请求参数错误' break case 401: message = '未授权,请登录' break case 403: message = '拒绝访问' break case 404: message = '请求地址不存在' break case 500: message = '服务器内部错误' break default: message = `连接错误${error.response.status}` } } else if (error.request) { message = '网络连接失败' } showFailToast(message) return Promise.reject(error) } ) export default api