import axios from 'axios' import store from '@/store/' import { serialize } from '@/utils/util' import { ElMessage } from 'element-plus' // 全局未授权错误提示状态,只提示一次 const { VITE_APP_API_XT,VITE_APP_ENV,VITE_APP_URL_XT } = import.meta.env const serviceXT = axios.create({ timeout: 600000, baseURL: VITE_APP_ENV === 'development' ? VITE_APP_API_XT : VITE_APP_URL_XT, //跨域请求,允许保存cookie withCredentials: false, }) //http request拦截 serviceXT.interceptors.request.use( config => { const authorization = config.authorization === false const xtToken = store.state.user.xtToken if (xtToken && !authorization) { config.headers['Authorization'] = xtToken } const meta = config.meta || {} //headers中配置text请求 if (config.text === true) { config.headers['Content-Type'] = 'text/plain' } //headers中配置serialize为true开启序列化 if (config.method === 'post' && meta.isSerialize === true) { config.data = serialize(config.data) } return config }, error => { return Promise.reject(error) } ) //http response拦截 serviceXT.interceptors.response.use( res => { const status = res?.data?.code || res?.data?.error_code || res?.status const message = res?.data?.msg || res?.data?.message || '系统错误' // 如果请求为非200默认统一处理 if (status !== 200 && status !== 0) { ElMessage({ message: message, type: 'error', }) return Promise.reject(new Error(message)) } return res }, error => { return Promise.reject(new Error(error)) } ) export default serviceXT