vd/frontend/src/service/service.js
2020-04-02 21:16:04 +08:00

121 lines
3.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import axios from 'axios';
import { getToken, removeToken } from 'service/auth';
import { Message } from 'iview';
let domain = window.CONFIG.url;
// 创建axios实例
export const service = axios.create({
timeout: 1800000,
headers: {
post: {
'Content-Type': 'application/x-www-form-urlencoded'
}
},
baseURL: domain
});
export const serviceForm = axios.create({
timeout: 1800000,
headers: {
post: {
'Content-Type': 'multipart/form-data'
}
},
baseURL: domain
});
export const fetch = axios.create({
timeout: 1800000,
headers: {
post: {
'Content-Type': 'application/json; charset=utf-8'
}
},
baseURL: window.CONFIG.ascsUrl
})
// http request 拦截器
let request = function (config) {
const token = getToken();
// 判断是否存在token如果存在的话则每个http header都加上token
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
// 配置取消请求
if (window._source) {
config.cancelToken = window._source.token;
}
return config;
};
//fetch 的 http request 拦截器
let fetchRequest = function (config) {
// 配置取消请求
if (window._source) {
config.cancelToken = window._source.token;
}
return config;
};
let request_err = function (err) {
Message.error('请求超时');
return Promise.reject(err);
};
// http response 拦截器
let response = function (res) {
const data = res.data;
const message = data.message || '未知错误';
if (res.status) {
switch (res.status) {
case 200:
if (data.code !== 0) {
Message.error(message);
}
break;
}
}
return data;
};
let response_err = function (err) {
if (err.response) {
const data = err.response.data;
const message = data.message ? data.message : '未知错误';
switch (err.response.status) {
case 401:
if ([40001, 40002, 40003, 40008].includes(data.code)) {
// 40001未登录、40002未激活、40003已禁用、40008token未传递
localStorage.clear();
removeToken();
vm.$router.replace({ path: '/login', query: { redirect: encodeURIComponent(vm.$route.fullPath) } });
Message.error(message);
}
break;
case 500:
Message.error('服务器忙,请稍后再试');
break;
default:
Message.error(message);
break;
}
}
return Promise.resolve(err);
};
service.interceptors.request.use(request, request_err);
service.interceptors.response.use(response, response_err);
serviceForm.interceptors.request.use(request, request_err);
serviceForm.interceptors.response.use(response, response_err);
fetch.interceptors.request.use(fetchRequest, request_err);
fetch.interceptors.response.use(response, response_err);
axios.interceptors.response.use(response, response_err);
window.axios = axios;