UNPKG

ipink-util

Version:

util.js

168 lines (165 loc) 4.93 kB
import { HttpConfig, getSdk, interceptor } from './config.mjs'; import { toast } from './toast.mjs'; import { Storage } from './cache.mjs'; function genRequestUrl(url, path = "", prefix = "") { url = url || HttpConfig.base_url; prefix = prefix || HttpConfig.api_prefix; if (path.startsWith("http://") || path.startsWith("https://")) { return path; } if (prefix && (path.includes(prefix) || url.includes(prefix))) { return url + path; } return url + prefix + path; } const addHeaderToken = (header) => { if (!header.Authorization) { let token = ""; if (HttpConfig.getToken) { token = HttpConfig.getToken(); } else { token = Storage.get(HttpConfig.token_key); } if (token) { header.Authorization = token ? `${HttpConfig.token_type}${HttpConfig.token_type ? " " : ""}${token}` : ""; } } }; const request = (baseConfig, data, superConfig) => { if (typeof baseConfig === "string") baseConfig = { api: baseConfig }; if (typeof baseConfig === "object" && baseConfig.data) { data = { ...baseConfig.data, ...data || {} }; } let config = { ...baseConfig, ...superConfig }; let { api, url, method = HttpConfig.default_method, isLoading, showLoading = isLoading, closeLoading = HttpConfig.closeLoading, loading = HttpConfig.loading, loadingText, isToast, showToast = isToast, toastText, toast: toast$1 = HttpConfig.toast, header, prefix = HttpConfig.api_prefix, // 前缀 timeout = HttpConfig.timeout, useIdSuffix = false } = config; if (typeof showToast == "undefined") { showToast = HttpConfig.show_toast; } if (typeof showLoading == "undefined") { showLoading = HttpConfig.show_loading; } let reqUrl = genRequestUrl(url || HttpConfig.base_url, api, prefix); let sdk = getSdk(); if (showLoading) { if (typeof loading == "function") { loading(loadingText || ""); } else if (sdk) { typeof uni !== "undefined" ? uni.showLoading({ title: loadingText || "", icon: "none" }) : wx.showLoading({ title: loadingText || "", icon: "none" }); } } return new Promise((reslove) => { if (useIdSuffix && data && data.id) { let id = "" + data.id; delete data.id; reqUrl = reqUrl + "/" + id; } let _options = { url: reqUrl, method: method || HttpConfig.default_method, timeout, data, header: { "content-type": HttpConfig.content_type, ...header } }; addHeaderToken(_options.header); _options = interceptor("BeforeRequest", _options); const request2 = { ..._options, success: (res) => { res.data = interceptor("AfterRequest", res.data || {}); let ok = false; let errMsg = ""; if (res.statusCode === 200) { ok = res.data[HttpConfig.code_key] == HttpConfig.code_value; if (!ok) { errMsg = res.data?.msg || res.data?.message || res.data?.Message || toastText || "参数错误"; } } else if (res.statusCode === 401) { errMsg = "您的登录已过期,请重新登录!"; interceptor("401", res); } else if (res.statusCode === 403) { errMsg = "您没有访问的权限!"; interceptor("403", res); } else if (res.statusCode === 404) { errMsg = "您访问的资源不存在!"; interceptor("404", res); } else { errMsg = "您的访问出现了一点问题,请稍后再做尝试!"; interceptor("" + res.statusCode, res); } if (showLoading) { if (typeof closeLoading == "function") { closeLoading(); } else if (sdk) { typeof uni !== "undefined" ? uni.hideLoading() : wx.hideLoading(); } } if (showToast) { if (typeof toast$1 === "function") { toast$1(errMsg); } else { toast(errMsg); } } reslove({ ok, ...res.data || {} }); }, fail: (err) => { if (showLoading) { if (typeof closeLoading == "function") { closeLoading(); } else if (sdk) { typeof uni !== "undefined" ? uni.hideLoading() : wx.hideLoading(); } } let errMsg = err && err.errMsg || toastText; if (showToast && errMsg) { if (typeof toast$1 === "function") { toast$1(errMsg); } else { toast(errMsg); } } reslove({ ok: false, err }); }, complete: () => { } }; const requestTask = typeof uni !== "undefined" ? uni.request(request2) : wx.request(request2); interceptor("ExecRequest", requestTask); }); }; export { addHeaderToken, genRequestUrl, request };