// src/api/request.js import axios from 'axios' import { Message } from 'element-ui' import router from '../router' import i18n from '../language/index' // // 本地调试 // const baseURL = '/api' // 生产打包 const baseURL = (() => { const { protocol, hostname } = window.location; return `${protocol}//${hostname}:8080`; // 固定后端端口 })(); // 创建axios实例 const service = axios.create({ baseURL, timeout: 100000 }) // 请求拦截器 service.interceptors.request.use( config => { // 可以在这里添加token等 let token = sessionStorage.getItem("token") if (token) { config.headers['Authorization'] = token } return config }, error => { return Promise.reject(error) } ) // 响应拦截器 service.interceptors.response.use( response => { const res = response.data if (res.code == 401) { Message.error(i18n.t('error.unauthorized')) // 触发登出操作 sessionStorage.removeItem('token') router.push('/login') } else { return res } }, error => { console.error('请求错误:', error) let errorMessage = i18n.t('error.networkError') if (error.code === 'ECONNABORTED' || error.message.includes('timeout')) { errorMessage = i18n.t('error.timeout') // 触发登出操作 sessionStorage.removeItem('token') router.push('/login') } else if (error.response) { const status = error.response.status switch (status) { case 500: errorMessage = i18n.t('error.serverError') // 触发登出操作 sessionStorage.removeItem('token') router.push('/login') break case 404: errorMessage = i18n.t('error.notFound') break case 401: errorMessage = i18n.t('error.unauthorized') // 触发登出操作 sessionStorage.removeItem('token') router.push('/login') break default: errorMessage = i18n.t('error.unknownError') + `: ${status}` } if (error.response.data && error.response.data.message) { errorMessage = error.response.data.message } } else if (error.request) { errorMessage = i18n.t('error.noResponse') } Message.error(errorMessage) return Promise.reject(error) } ) export default service