/** * axios 实例 */ import axios from 'axios'; import router from '@/router'; import { MessageBox, Message } from 'element-ui'; import { API_BASE_URL, TOKEN_HEADER_NAME, LAYOUT_PATH } from '@/config/setting'; import { getToken, setToken } from './token-util'; import { logout } from './page-tab-util'; import JSONBIG from 'json-bigint'; import { Loading } from 'element-ui'; let loadingInstance = null; const service = axios.create({ baseURL: API_BASE_URL, transformResponse: [ function (data) { if (data instanceof Blob) { return data; } const json = JSONBIG({ storeAsString: true }); const res = json.parse(data); return res; } ] }); /** * 添加请求拦截器 */ service.interceptors.request.use( (config) => { // 添加 token 到 header const token = getToken(); if (token && config.headers) { config.headers.common[TOKEN_HEADER_NAME] = token; } // loadingInstance = Loading.service({background:"rgba(255,253,253,0)",text:'',spinner: '1'}); return config; }, (error) => { // loadingInstance.close(); return Promise.reject(); } ); /** * 添加响应拦截器 */ service.interceptors.response.use( (res) => { // token 自动续期 if ((res.data.code == '-1'||res.data.code == '500')&& res.config?.showErrorToast !== false) { Message.error(res.data.message); } if (res.data.code == '-2' && res.config?.showErrorToast !== false) { Message.warning({ dangerouslyUseHTMLString: true, message: res.data.message }); } const token = res.headers[TOKEN_HEADER_NAME.toLowerCase()]; if (token) { setToken(token); } // loadingInstance.close(); return res; }, (error) => { // loadingInstance.close(); // 登录过期处理 if (error?.response?.status === 401) { const currentPath = router.currentRoute.path; // if (currentPath === LAYOUT_PATH) { // logout(true); // } else { MessageBox.alert('登录状态已过期, 请退出重新登录!', '系统提示', { confirmButtonText: '重新登录', callback: (action) => { if (action === 'confirm') { logout(false, currentPath); } }, beforeClose: () => { MessageBox.close(); } }); // } return Promise.reject(new Error(error.response.data?.message)); }else if(!error?.response?.status){ Message.error('服务调用失败,请联系管理员!'); } return Promise.reject(error); } ); export default service;