import axios from "axios";
import Router from "@/router";
import store from "@/store/index.js";
import { Message, Loading } from "element-ui";
const http = {};
let instance = axios.create({
withCredentials: true, //token凭证
timeout: 1000 * 60 * 1
});
// 请求动画
let loading;
// 内存中正在请求的数量
let loadingNum = 0;
let text = "拼命加载中...";
function startLoading(url) {
if (loadingNum == 0) {
loading = Loading.service({
lock: true,
text: text,
spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)"
});
}
loadingNum++;
}
function endLoading() {
// 关闭加载动画
loadingNum > 0 && loadingNum--;
if (loadingNum <= 0) {
loading && loading.close();
}
}
function checkWhetherString(blackList, url) {
for (let i = 0; i < blackList.length; i++) {
var item = blackList[i];
if (url.indexOf(item) != -1) {
return true;
}
}
return false;
}
// 请求拦截
instance.interceptors.request.use(
function (config) {
config.headers.Accept = "application/json, text/plain, */*";
// 黑名单,写在此处的都不进loading加载动画
const blackList = ["/gd/year/v1/in/progress", "im/index/newMsg", "/receiveMessage/v1/getMsgNumber"];
const { url } = config;
if (!checkWhetherString(blackList, url)) {
startLoading(url);
}
// 请求添加token
const token = store.state.token
if (token) {
config.headers.Authorization = `Bearer ${token}`;
}
return config;
},
function (err) {
return Promise.reject(err);
}
);
// 响应拦截
instance.interceptors.response.use(
(response) => {
endLoading();
// token过期
if (response.data.code != 0) {
// Router.replace("/login");
}
return response.data;
},
(err) => {
endLoading();
// console.log(err)
Message.error({
message: err?.response?.data?.message
});
if (err.response.status == 401 || err.response.status == 403) {
// sessionStorage.clear();
// // removeToken()
// Router.replace("/login");
// window.location.reload();
}
return Promise.reject(err.message);
}
);
http.get = function (url, options) {
return new Promise((resolve, reject) => {
instance
.get(url, options)
.then((res) => {
if (res.code == 20000) {
resolve(res.data);
} else {
Message.error({
message: res.message
});
reject(res.message);
}
})
.catch((err) => {
reject(err);
});
});
};
http.post = function (url, data, options) {
return new Promise((resolve, reject) => {
instance
.post(url, data, options)
.then((res) => {
if (res.code == 20000) {
resolve(res.data);
} else {
Message.error({
message: res.message
});
reject(res.message);
}
})
.catch((err) => {
console.log(err);
});
});
};
http.put = function (url, data, options) {
return new Promise((resolve, reject) => {
instance
.put(url, data, options)
.then((res) => {
if (res.code == 20000) {
resolve(res.data);
} else {
Message.error({
message: res.message
});
reject(res.message);
}
})
.catch((err) => {
console.log(err);
});
});
};
http.delete = function (url, options) {
return new Promise((resolve, reject) => {
instance
.delete(url, options)
.then((res) => {
if (res.code == 20000) {
resolve(res.data);
} else {
Message.error({
message: res.message
});
reject(res.message);
}
})
.catch((err) => {
console.log(err);
});
});
};
export default http;
axios的二次封装
于 2022-07-21 09:22:47 首次发布