@fmdevui/fm-dev
Version:
Page level components developed based on Element Plus.
229 lines (224 loc) • 7.16 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var axios = require('axios');
require('../../utils/index.js');
var elementPlus = require('element-plus');
var index = require('../../utils/const/index.js');
var index$1 = require('../../utils/storage/index.js');
const abortControllerMap = /* @__PURE__ */ new Map();
const service = axios.create({
baseURL: window.__env__.VITE_API_URL,
timeout: 5e4
// headers: { 'Content-Type': 'application/json' },
});
const accessTokenKey = index.PUB.accessTokenKey;
const refreshAccessTokenKey = index.PUB.refreshAccessTokenKey;
const getToken = () => {
return index$1.Local.get(accessTokenKey);
};
const clearTokens = () => {
index$1.Local.remove(accessTokenKey);
index$1.Local.remove(refreshAccessTokenKey);
index$1.Session.clear();
};
const clearAccessTokens = () => {
clearTokens();
window.location.reload();
};
const axiosInstance = axios;
let loadingCount = 0;
let loadingInstance = null;
function startLoading() {
if (loadingCount === 0) {
loadingInstance = elementPlus.ElLoading.service({
lock: true,
text: "\u52A0\u8F7D\u4E2D...",
background: "rgba(0, 0, 0, 0.7)"
});
}
loadingCount++;
}
function endLoading() {
if (loadingCount <= 0) return;
loadingCount--;
if (loadingCount === 0 && loadingInstance) {
setTimeout(() => {
loadingInstance?.close();
loadingInstance = null;
}, 200);
}
}
service.interceptors.request.use(
(config) => {
const customConfig = config;
if (customConfig.loading) {
startLoading();
}
const controller = new AbortController();
config.signal = controller.signal;
const url = config.url || "";
abortControllerMap.set(url, controller);
const accessToken = index$1.Local.get(accessTokenKey);
if (accessToken) {
config.headers["Authorization"] = `Bearer ${accessToken}`;
const jwt = decryptJWT(accessToken);
const exp = getJWTDate(jwt.exp);
if (/* @__PURE__ */ new Date() >= exp) {
const refreshAccessToken = index$1.Local.get(refreshAccessTokenKey);
if (refreshAccessToken) {
config.headers["X-Authorization"] = `Bearer ${refreshAccessToken}`;
}
}
if (config.method?.toLowerCase() === "get" && config.data) {
let url2 = config.url + "?" + tansParams(config.data);
url2 = url2.slice(0, -1);
config.data = {};
config.url = url2;
}
}
return config;
},
(error) => {
const customConfig = error.config;
if (customConfig?.loading === true) {
endLoading();
}
return Promise.reject(error);
}
);
service.interceptors.response.use(
(res) => {
const customConfig = res.config;
if (customConfig.loading === true) {
endLoading();
}
const url = res.config.url || "";
abortControllerMap.delete(url);
var status = res.status;
var serve = res.data;
if (status === 401) {
clearAccessTokens();
}
if (status >= 400) {
throw new Error(res.statusText || "Request Error.");
}
if (serve && serve.hasOwnProperty("errors") && serve.errors) {
throw new Error(JSON.stringify(serve.errors || "Request Error."));
}
var accessToken = res.headers[accessTokenKey];
var refreshAccessToken = res.headers[refreshAccessTokenKey];
if (accessToken === "invalid_token") {
clearAccessTokens();
} else if (refreshAccessToken && accessToken) {
index$1.Local.set(accessTokenKey, accessToken);
index$1.Local.set(refreshAccessTokenKey, refreshAccessToken);
}
if (serve.code === 401) {
clearAccessTokens();
} else if (serve.code === void 0) {
return Promise.resolve(res);
} else if (serve.code !== 200) {
var message;
if (serve.message && typeof serve.message == "object") {
message = JSON.stringify(serve.message);
} else {
message = serve.message;
}
elementPlus.ElMessage.error(message);
throw new Error(message);
}
return res;
},
(error) => {
const customConfig = error.config;
if (customConfig?.loading === true) {
endLoading();
}
if (error.response) {
if (error.response.status === 401) {
clearAccessTokens();
} else if (error.response.statusCode === 404) {
elementPlus.ElMessage.error("\u63A5\u53E3\u5F02\u5E38\uFF0C\u8BF7\u8054\u7CFB\u7BA1\u7406\u5458");
}
}
if (error.message.indexOf("timeout") != -1) {
elementPlus.ElMessage.error("\u7F51\u7EDC\u8D85\u65F6");
} else if (error.message == "Network Error") {
elementPlus.ElMessage.error("\u7F51\u7EDC\u8FDE\u63A5\u9519\u8BEF");
} else {
if (error.response.data) elementPlus.ElMessage.error(error.response.statusText);
else elementPlus.ElMessage.error("\u63A5\u53E3\u8DEF\u5F84\u627E\u4E0D\u5230");
}
return Promise.reject(error);
}
);
const cancelRequest = (url) => {
const urlList = Array.isArray(url) ? url : [url];
for (const _url of urlList) {
abortControllerMap.get(_url)?.abort();
abortControllerMap.delete(_url);
}
};
const cancelAllRequest = () => {
for (const [_, controller] of abortControllerMap) {
controller.abort();
}
abortControllerMap.clear();
};
function tansParams(params) {
let result = "";
for (const propName of Object.keys(params)) {
const value = params[propName];
var part = encodeURIComponent(propName) + "=";
if (value !== null && value !== "" && typeof value !== "undefined") {
if (typeof value === "object") {
for (const key of Object.keys(value)) {
if (value[key] !== null && value[key] !== "" && typeof value[key] !== "undefined") {
let params2 = propName + "[" + key + "]";
var subPart = encodeURIComponent(params2) + "=";
result += subPart + encodeURIComponent(value[key]) + "&";
}
}
} else {
result += part + encodeURIComponent(value) + "&";
}
}
}
return result;
}
function decryptJWT(token) {
token = token.replace(/_/g, "/").replace(/-/g, "+");
var json = decodeURIComponent(escape(window.atob(token.split(".")[1])));
return JSON.parse(json);
}
function getJWTDate(timestamp) {
return new Date(timestamp * 1e3);
}
function request2(config) {
return new Promise((resolve, reject) => {
service(config).then((res) => {
if (res.data.type == "success") {
resolve(res.data.result);
} else {
elementPlus.ElMessage.success(res.data.message);
}
}).catch((res) => {
elementPlus.ElMessage.error(res);
reject(res);
});
});
}
exports.accessTokenKey = accessTokenKey;
exports.axiosInstance = axiosInstance;
exports.cancelAllRequest = cancelAllRequest;
exports.cancelRequest = cancelRequest;
exports.clearAccessTokens = clearAccessTokens;
exports.clearTokens = clearTokens;
exports.decryptJWT = decryptJWT;
exports.default = service;
exports.getJWTDate = getJWTDate;
exports.getToken = getToken;
exports.refreshAccessTokenKey = refreshAccessTokenKey;
exports.request2 = request2;
exports.service = service;
exports.tansParams = tansParams;