2025-11-30 19:36:08 +08:00

216 lines
5.9 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* @description: HTTP请求方法枚举
*/
export const HttpMethod = {
GET: "GET",
POST: "POST",
OPTIONS: "OPTIONS",
PUT: "PUT",
DELETE: "DELETE",
};
/**
* @description: HTTP请求配置
* @typedef {Object} RequestConfig
* @property {string} [url] - API路径
* @property {HttpMethod} [method] - Method类型
* @property {any} [data] - 接口返回数据
* @property {boolean} [needToken] - 无TOKEN触发异常捕获时是否执行异常逻辑
* @property {object} [header] - Header头部
* @property {string} [dataType] - 返回的数据格式
* @property {boolean} [noShowMsg] - 请求报错时是否弹出message提示默认弹出
*/
class HttpRequest {
static instance = null;
constructor() {}
static getInstance() {
if (!this.instance) {
this.instance = new HttpRequest();
}
return this.instance;
}
// 处理请求异常状态码
handerErrorStatus(statusCode, requestConfig) {
let msg = "服务找不到";
if (statusCode === 502 || statusCode === 503) {
msg = "服务器开小差了~";
}
!requestConfig.noShowMsg &&
uni.showToast({
title: `${msg},错误码:${statusCode}`,
icon: "none",
});
return msg;
}
// 处理请求异常
handerError(err, requestConfig) {
let msg = `请求异常`;
if (/timeout/.test(err.errMsg)) {
msg = "请求超时";
}
!requestConfig.noShowMsg &&
uni.showToast({
title: msg,
icon: "none",
});
return msg;
}
// 服务器接口请求
request(requestConfig) {
const _this = this;
// 兼容H5字符串和微信小程序对象场景
let user_info = uni.getStorageSync("user_info") || {};
if (typeof user_info === "string") {
try {
user_info = JSON.parse(user_info) || {};
} catch (e) {
user_info = {};
}
}
const reqData = Object.assign(requestConfig.data, {
buyerId: user_info.buyerId,
flag: user_info.flag,
});
return new Promise((resolve, reject) => {
uni.request({
method: requestConfig.method,
url: `${requestConfig.url}`,
data: reqData,
header: { ...(requestConfig?.header || {}), token: user_info.token },
dataType: "json",
success(res) {
const code = res.statusCode || -404;
const data = res.data;
/** 接口请求成功*/
if (code == 200) {
if (["1003", "1004", "1005", "1006"].includes(data.code)) {
uni.showModal({
content: data.msg,
success(res) {
if (res.confirm) {
uni.removeStorageSync("user_info");
uni.navigateTo({ url: "/pages/login/index" });
} else if (res.cancel) {
try {
uni.removeStorageSync("user_info");
} catch (e) {
console.log("登录失效catch", e);
}
uni.reLaunch({ url: "/pages/index/index" });
uni.hideLoading();
}
},
});
} else {
resolve(data);
}
} else if (code === 401) {
// 未授权
!requestConfig.noShowMsg &&
uni.showModal({
title: "登录失效",
content: "登录失效,请重新登录",
success: (resModa) => {
if (resModa.confirm) {
uni.removeStorageSync("user_info");
uni.navigateTo({ url: "/pages/login/index" });
} else if (resModa.cancel) {
try {
uni.removeStorageSync("user_info");
uni.reLaunch({ url: "/pages/index/index" });
} catch (e) {
console.log("登录失效catch", e);
}
}
},
});
reject({ code, msg: "未登录", data: data });
} else {
//非200及401状态码-数据处理
const errMsg = _this.handerErrorStatus(code, requestConfig);
reject({ code, msg: errMsg, data });
}
},
fail: (err) => {
console.log("失败了", err);
let msg = _this.handerError(err, requestConfig);
reject({ msg });
},
});
});
}
/**
* @description: get请求函数
* @param {string} url 请求地址
* @param {Object} data 请求参数
* @param {RequestConfig} OtherConfig request其他配置
* @return {*}
*/
get(url, data, OtherConfig) {
return this.request({
method: HttpMethod.GET,
url,
data,
...OtherConfig,
});
}
/**
* @description: post请求函数
* @param {string} url 请求地址
* @param {Object} data 请求参数
* @param {Object} thrid 三方接口
* @param {RequestConfig} OtherConfig request其他配置
* @return {*}
*/
post(url, data, OtherConfig) {
return this.request({
method: HttpMethod.POST,
url,
data,
...OtherConfig,
});
}
/**
* @description: delete请求函数
* @param {string} url 请求地址
* @param {Object} data 请求参数
* @param {RequestConfig} OtherConfig request其他配置
* @return {*}
*/
delete(url, data, OtherConfig) {
return this.request({
method: HttpMethod.DELETE,
url,
data,
...OtherConfig,
});
}
/**
* @description: put请求函数
* @param {string} url 请求地址
* @param {Object} data 请求参数
* @param {RequestConfig} OtherConfig request其他配置
* @return {*}
*/
put(url, data, OtherConfig) {
return this.request({
method: HttpMethod.PUT,
url,
data,
...OtherConfig,
});
}
}
export const httpRequest = HttpRequest.getInstance();