查看代码
import axiox from 'axios'
import store from "@/store";
import utils from "@/utils";
import Qs from 'qs'
import {
Message
} from "element-ui";
const axiosConfig = {
headers: {
'Content-Type': 'application/json;charset=UTF-8',
},
timeout: 10000,
// responseType: 'json',
maxContentLength: 2000,
}
const request = axiox.create(axiosConfig)
let isRefreshing = false
let queue = []
let runQueue = () => {
isRefreshing = true
let first = queue.shift()
first.request()
}
request.interceptors.request.use((config) => {
const token = utils.storage.get("token");
if (config.headerType) {
config.headers['Content-Type'] = config.headerType
}
if (config.url.indexOf("api/scrm-system/v1/auth/one_click_login")>-1) {
//一键登录
utils.cookie.setCookie("zh-auth", JSON.parse(localStorage.getItem("onelogin")));
config.headers["zh-auth"] = ${localStorage.getItem("onelogin")}
;
} else {
if (token && !config.clearToken) {
config.headers["zh-auth"] = ${token}
;
config.headers["trace-id"] = utils.storage.get("traceId");
}
}
//自定义表头
if (config.customHeader) {
config.headers = {
...config.headers,
...config.headerObj
}
}
return config;
}, function (error) {
return Promise.reject(error);
});
request.interceptors.response.use(function (response) {
if ((response.config ?.url || "").indexOf("api/scrm-system/v1/auth/create_status") > -1||(response.config ?.url || "").indexOf("api/scrm-system/v1/auth/wx_scancode_Login") > -1||(response.config ?.url || "").indexOf("api/scrm-system/v1/auth/one_click_login") > -1) {
utils.storage.set("token", response.headers["zh-auth"]);
utils.storage.set("traceId", response.headers["trace-id"]);
utils.cookie.setCookie("zh-auth", response.headers["zh-auth"]);
}
store.dispatch("SetLoding", false);
isRefreshing = false
if (!(queue.length === 0)) runQueue()
if (response.status == 200 && (response.config ?.url || "").indexOf("api/scrm-system/v1/auth/delete_status") > -1 || response.status == "200" && (response.config ?.url || "").indexOf("api/scrm-system/v1/auth/delete_status") > -1||response.status == 401||response.status == "401") {
utils.cookie.delCookie("tokzh-authen");
utils.storage.remove("token");
utils.storage.remove("traceId");
utils.storage.remove("userInfo");
Message({
type: "success",
message: "已退出登录!",
});
window.setTimeout(() => {
// 手动更新, 刷新权限
location.reload();
}, 1000);
}
if (response.data) {
console.log(response, "response.data");
let result = null;
if (response.data.code == 100000 || response.data.code == "100000" || response.data.errno == "0") {
result = {
...response.data
}
} else {
Message.error(response.data.msg || response.data.errmsg || "接口报错");
}
return result
}
}, function (error) {
store.dispatch("SetLoding", false);
isRefreshing = false
if (!(queue.length === 0)) runQueue()
return Promise.reject(error);
});
const httpPost = async ({
url,
method = 'POST',
data = {},
params = {},
clearToken = false,
customHeader = false,
headerObj = {},
onUploadProgress = () => {},
headerType = "",
}) => {
return new Promise((resolve, reject) => {
if (!data.noLoading) store.dispatch("SetLoding", true);
console.log(data, "data");
let _fun=null;
if (method=="GET"||method=="DELETE") {
_fun=(params)=>{
return Qs.stringify(params, { arrayFormat: 'repeat' })
}
}
queue.push({
request: () => {
request({
method,
url,
data,
params,
clearToken,
customHeader,
headerObj,
onUploadProgress,
headerType,
paramsSerializer:_fun
}).then(res => {
resolve(res)
}).catch(e => {
reject(e)
})
}
})
if (!isRefreshing) runQueue()
})
}
export {
httpPost
}
Original: https://www.cnblogs.com/wxchun/p/16161131.html
Author: 春春&
Title: axios二次封装
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/586323/
转载文章受原作者版权保护。转载请注明原作者出处!