| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- import axios from 'axios';
- import Vue from 'vue';
- const ignoreResponseTransformMatch = [
- '/pre_interface/V5.0/insertBasicInfo',
- '/pre_interface/V5.0/getPreItem',
- '/pre_interface/V5.0/setStatus',
- '/captchaImage',
- ];
- const magicCode = [-5, -9, -8];
- const shareRequest = new Map();
- const http = axios.create({
- baseURL: process.env.VUE_APP_BASE_API,
- withCredentials: true,
- timeout: 60 * 1000,
- });
- http.interceptors.request.use(config => {
- const token = localStorage.getItem('token');
- if (token) config.headers.Authorization = token;
- if (config['meta'] && config['meta'].share && !config.signal) {
- const key = config.url;
- let controller = shareRequest.get(key);
- if (controller) controller.abort();
- shareRequest.set(key, controller = new AbortController());
- config.signal = controller.signal;
- }
- return config;
- });
- http.interceptors.response.use(
- response => {
- const res = response.data;
- // 设置 cookie
- if (response.headers['access-control-expose-headers']) {
- const cookie = response.headers['access-control-expose-headers'].split(';')[0];
- if (cookie) document.cookie = cookie;
- }
- // 直接返回响应数据
- try {
- const {url, meta = {}} = response.config;
- if (meta.share && shareRequest.has(url)) shareRequest.delete(url);
- if (ignoreResponseTransformMatch.includes(url) || meta.ignoreResponseTransform) return res;
- } catch (e) {}
- const {
- ResultCode = 0, ResultInfo, Data,
- code = ResultCode, message = ResultInfo, data = Data,
- } = res;
- if (code === 0) return {code, data, message};
- try {
- if (magicCode.includes(code)) {
- Vue.prototype.$router1.replace('/');
- throw message;
- } else if (code === 401) {
- const isAllow = sessionStorage.getItem('isAllow') || 'true';
- if (isAllow) Vue.prototype.$router1.replace('/');
- throw `登录过期,请重新登录`;
- } else {
- throw message || `错误,请重试!`;
- }
- } catch (error) {
- Vue.prototype.$message({
- message: error,
- type: 'error',
- showClose: true,
- });
- }
- return Promise.reject(new Error(message || `错误,请重试!`));
- },
- error => {
- if (error.message !== 'canceled') Vue.prototype.$message({
- message: error.message,
- type: 'error',
- });
- return Promise.reject(error);
- },
- );
- export default http;
|