101 lines
2.2 KiB
JavaScript
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);
|
|
},
|
|
});
|
|
});
|
|
}
|