import axios from 'axios' import { ElMessage } from 'element-plus' import useUserStore from '@/store/modules/user' // 错误码枚举 enum responseCode { success = 200, // 成功 error = 500, // 服务器异常 } const request = axios.create({ baseURL: window.localStorage.getItem('IntegratedFront') as string, timeout: 1000 * 60, responseType: 'json', }) request.interceptors.request.use( (request) => { const userStore = useUserStore() /** * 全局拦截请求发送前提交的参数 * 以下代码为示例,在请求头里带上 token 信息 */ if (userStore.isLogin && request.headers) { request.headers.token = userStore.token } // 是否将 POST 请求参数进行字符串化处理 return request }, ) request.interceptors.response.use( (response) => { /** * 全局拦截请求发送后返回的数据,如果数据有报错则在这做全局的错误提示 * 如果是文件直接返回整个response对象 */ if (response.data instanceof Blob) { return Promise.resolve(response) } else if (response.data.code !== responseCode.success) { // 这里做错误提示 ElMessage.error(response.data.message || '发生错误') return Promise.reject(response.data) } else { // 成功 return Promise.resolve(response.data) } }, (error) => { // 处理文件下载的错误提示 if (error.response && error.response.data instanceof Blob) { const reader = new FileReader() reader.onload = (e) => { let errMsg = '发生错误!' if (e && e.target!.result) { errMsg = JSON.parse(e.target!.result as string) } ElMessage.error(errMsg) } } else if (error.response && error.response.data) { const message: string = error.response.data.message ElMessage({ message, type: 'error', }) } else if (error.message) { let message = error.message if (message === 'Network Error') { message = '网络故障' } else if (message.includes('timeout')) { message = '接口请求超时' } else if (message.includes('Request failed with status code')) { message = `接口${message.substr(message.length - 3)}异常` } ElMessage({ message, type: 'error', }) } return Promise.reject(error) }, ) export default request