UNPKG

@fmdevui/fm-dev

Version:

Page level components developed based on Element Plus.

229 lines (224 loc) 7.16 kB
'use strict'; 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;