2020-07-12 09:43:07 +08:00

120 lines
2.8 KiB
JavaScript

import axios from "axios";
import {
baseURL,
contentType,
invalidCode,
messageDuration,
noPermissionCode,
requestTimeout,
successCode,
tokenName,
debounce,
} from "@/config/settings";
import { Loading, Message } from "element-ui";
import store from "@/store";
import qs from "qs";
import router from "@/router";
import _ from "lodash";
const service = axios.create({
baseURL,
timeout: requestTimeout,
headers: {
"Content-Type": contentType,
},
});
let loadingInstance;
service.interceptors.request.use(
(config) => {
if (store.getters["user/accessToken"]) {
config.headers[tokenName] = store.getters["user/accessToken"];
}
if (config.data) {
config.data = _.pickBy(config.data, _.identity);
}
if (process.env.NODE_ENV !== "test") {
if (contentType === "application/x-www-form-urlencoded;charset=UTF-8") {
if (config.data && !config.data.param) {
config.data = qs.stringify(config.data);
}
}
}
const needLoading = () => {
let status = false;
debounce.forEach((item) => {
if (_.includes(config.url, item)) {
status = true;
}
});
return status;
};
if (needLoading()) {
loadingInstance = Loading.service();
}
return config;
},
(error) => {
return Promise.reject(error);
}
);
const errorMsg = (message) => {
return Message({
message: message,
type: "error",
duration: messageDuration,
});
};
service.interceptors.response.use(
(response) => {
if (loadingInstance) {
loadingInstance.close();
}
const { status, data, config } = response;
const { code, msg } = data;
if (code !== successCode) {
switch (code) {
case invalidCode:
errorMsg(msg || `后端接口${code}异常`);
store.dispatch("user/resetAccessToken");
break;
case noPermissionCode:
router.push({
path: "/401",
});
break;
default:
errorMsg(msg || `后端接口${code}异常`);
break;
}
return Promise.reject(
"vue-admin-beautiful请求异常拦截:" +
JSON.stringify({ url: config.url, code, msg }) || "Error"
);
} else {
return data;
}
},
(error) => {
if (loadingInstance) {
loadingInstance.close();
}
/*网络连接过程异常处理*/
let { message } = error;
if (message == "Network Error") {
message = "后端接口连接异常";
}
if (message.includes("timeout")) {
message = "后端接口请求超时";
}
if (message.includes("Request failed with status code")) {
message = "后端接口" + message.substr(message.length - 3) + "异常";
}
errorMsg(message || "后端接口未知异常");
return Promise.reject(error);
}
);
export default service;