ipink-util
Version:
util.js
168 lines (165 loc) • 4.93 kB
JavaScript
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 };