bm-bmt/utils/request.js

101 lines
2.2 KiB
JavaScript

import serviceConfig from "../config/service";
import { getCurrentWebviewToken } from "./webview-token";
let loadingCount = 0;
function isAbsoluteUrl(url) {
return /^https?:\/\//i.test(url || "");
}
function buildRequestUrl(url) {
if (isAbsoluteUrl(url)) {
return url;
}
return serviceConfig.BASE_URL + url;
}
function showGlobalLoading(options) {
if (!options || !options.showLoading) {
return false;
}
loadingCount += 1;
if (loadingCount === 1) {
uni.showLoading({
title: options.loadingText || "加载中",
mask: options.loadingMask !== false,
});
}
return true;
}
function hideGlobalLoading(shouldHide) {
if (!shouldHide) {
return;
}
loadingCount = Math.max(0, loadingCount - 1);
if (loadingCount === 0) {
uni.hideLoading();
}
}
export default function request(options) {
const method = options.method || "GET";
const defaultContentType =
method === "POST"
? "application/x-www-form-urlencoded; charset=UTF-8"
: "application/json";
const token = getCurrentWebviewToken();
const requestHeader = Object.assign(
{
"Content-Type": defaultContentType,
"Form-type": "gzh",
},
options.header || {},
);
if (token) {
const bearerToken = "Bearer " + token;
requestHeader.Authorization = bearerToken;
}
const shouldHandleLoading = showGlobalLoading(options);
return new Promise(function (resolve, reject) {
uni.request({
url: buildRequestUrl(options.url),
method: method,
data: options.data || {},
header: requestHeader,
timeout: serviceConfig.TIMEOUT,
success: function (response) {
const statusCode = response.statusCode || 0;
if (statusCode >= 200 && statusCode < 300) {
resolve(response.data);
return;
}
reject({
statusCode: statusCode,
message: (response.data && response.data.message) || "接口请求失败",
raw: response,
});
},
fail: function (error) {
reject({
statusCode: 0,
message: error.errMsg || "网络异常",
raw: error,
});
},
complete: function () {
hideGlobalLoading(shouldHandleLoading);
},
});
});
}