mirror of
https://gitee.com/chu1204505056/vue-admin-beautiful.git
synced 2026-01-01 21:46:55 +08:00
120 lines
2.8 KiB
JavaScript
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;
|