2026-02-11 09:11:56 +08:00
|
|
|
|
// const BASE_URL = "https://api.ai-meng.com";
|
2026-01-31 22:01:02 +08:00
|
|
|
|
// const BASE_URL = 'http://127.0.0.1:3999'
|
2026-02-11 09:11:56 +08:00
|
|
|
|
const BASE_URL = "http://192.168.1.3:3999";
|
2026-01-25 22:49:50 +08:00
|
|
|
|
// const BASE_URL = "http://192.168.31.253:3999";
|
2026-01-15 08:43:10 +08:00
|
|
|
|
import { useUserStore } from "@/stores/user";
|
2026-02-11 23:59:51 +08:00
|
|
|
|
import { getPlatform } from "./system.js";
|
|
|
|
|
|
const platform = getPlatform();
|
2026-01-15 08:43:10 +08:00
|
|
|
|
|
|
|
|
|
|
// 环境区分
|
|
|
|
|
|
// const BASE_URL =
|
|
|
|
|
|
// process.env.NODE_ENV === 'production'
|
|
|
|
|
|
// ? 'https://apis.lihailezzc.com'
|
|
|
|
|
|
// : 'http://127.0.0.1:3999'
|
|
|
|
|
|
// 192.168.2.186
|
|
|
|
|
|
// 192.168.31.253
|
|
|
|
|
|
// const BASE_URL = 'https://apis.lihailezzc.com'
|
|
|
|
|
|
|
|
|
|
|
|
let isLoadingCount = 0; // 计数多次请求loading
|
|
|
|
|
|
|
|
|
|
|
|
function showLoadingFlag(loadingText) {
|
|
|
|
|
|
if (isLoadingCount === 0) {
|
|
|
|
|
|
uni.showLoading({ title: loadingText });
|
|
|
|
|
|
}
|
|
|
|
|
|
isLoadingCount++;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function hideLoading() {
|
|
|
|
|
|
isLoadingCount--;
|
|
|
|
|
|
if (isLoadingCount <= 0) {
|
|
|
|
|
|
isLoadingCount = 0;
|
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function getHeaders() {
|
|
|
|
|
|
const headers = {
|
|
|
|
|
|
"x-app-id": "69665538a49b8ae3be50fe5d",
|
2026-02-11 23:59:51 +08:00
|
|
|
|
"x-platform": platform,
|
2026-01-15 08:43:10 +08:00
|
|
|
|
};
|
|
|
|
|
|
const userStore = useUserStore();
|
|
|
|
|
|
if (userStore.token) {
|
|
|
|
|
|
headers["Authorization"] = userStore.token;
|
|
|
|
|
|
}
|
|
|
|
|
|
return headers;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
function handleError(err, showError = true) {
|
|
|
|
|
|
if (!showError) return;
|
|
|
|
|
|
let msg = "网络异常,请稍后重试";
|
|
|
|
|
|
if (typeof err === "string") {
|
|
|
|
|
|
msg = err;
|
|
|
|
|
|
} else if (err?.msg) {
|
|
|
|
|
|
msg = err.msg;
|
|
|
|
|
|
} else if (err?.message) {
|
|
|
|
|
|
msg = err.message;
|
|
|
|
|
|
}
|
|
|
|
|
|
uni.showModal({
|
|
|
|
|
|
title: "错误提示",
|
|
|
|
|
|
content: msg,
|
|
|
|
|
|
showCancel: false,
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|
* 请求函数,支持自动加载状态、token、错误弹窗、重试等
|
|
|
|
|
|
* @param {Object} config 请求配置
|
|
|
|
|
|
* @param {string} config.url 请求路径(必填)
|
|
|
|
|
|
* @param {string} [config.method='GET'] 请求方法
|
|
|
|
|
|
* @param {Object} [config.data={}] 请求参数
|
|
|
|
|
|
* @param {Object} [config.header={}] 额外 headers
|
|
|
|
|
|
* @param {boolean} [config.showLoading=true] 是否自动显示加载提示
|
|
|
|
|
|
* @param {boolean} [config.showError=true] 是否自动弹错误提示
|
|
|
|
|
|
* @param {number} [config.timeout=10000] 请求超时,单位毫秒
|
|
|
|
|
|
* @param {number} [config.retry=1] 失败后自动重试次数
|
|
|
|
|
|
* @returns {Promise<any>} 返回接口 data
|
|
|
|
|
|
*/
|
|
|
|
|
|
export function request(config) {
|
|
|
|
|
|
if (!config || !config.url) {
|
|
|
|
|
|
return Promise.reject(new Error("请求缺少 url 参数"));
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
const {
|
|
|
|
|
|
url,
|
|
|
|
|
|
method = "GET",
|
|
|
|
|
|
data = {},
|
|
|
|
|
|
header = {},
|
|
|
|
|
|
showLoading = false,
|
|
|
|
|
|
showError = true,
|
|
|
|
|
|
retry = 1,
|
|
|
|
|
|
loadingText = "加载中",
|
|
|
|
|
|
} = config;
|
|
|
|
|
|
|
|
|
|
|
|
const finalHeader = { ...getHeaders(), ...header };
|
|
|
|
|
|
const upperMethod = method.toUpperCase();
|
|
|
|
|
|
|
|
|
|
|
|
let attempt = 0;
|
|
|
|
|
|
|
|
|
|
|
|
const doRequest = () =>
|
|
|
|
|
|
new Promise((resolve, reject) => {
|
|
|
|
|
|
if (showLoading) showLoadingFlag(loadingText);
|
|
|
|
|
|
|
|
|
|
|
|
uni.request({
|
|
|
|
|
|
url: BASE_URL + url,
|
|
|
|
|
|
method: upperMethod,
|
|
|
|
|
|
data,
|
|
|
|
|
|
header: finalHeader,
|
|
|
|
|
|
success: (res) => {
|
|
|
|
|
|
if (showLoading) hideLoading();
|
|
|
|
|
|
const { statusCode, data: body } = res;
|
|
|
|
|
|
if (
|
|
|
|
|
|
(statusCode === 200 || statusCode === 201) &&
|
|
|
|
|
|
body?.code === 200
|
|
|
|
|
|
) {
|
|
|
|
|
|
resolve(body.data);
|
|
|
|
|
|
} else {
|
|
|
|
|
|
reject({
|
|
|
|
|
|
type: "business",
|
|
|
|
|
|
msg: body?.msg || "服务器错误",
|
|
|
|
|
|
data: body,
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
},
|
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
|
if (showLoading) hideLoading();
|
|
|
|
|
|
reject({ type: "network", msg: "网络请求失败", error: err });
|
|
|
|
|
|
},
|
|
|
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
// 自动重试
|
|
|
|
|
|
const tryRequest = () =>
|
|
|
|
|
|
doRequest().catch((err) => {
|
|
|
|
|
|
if (attempt < retry) {
|
|
|
|
|
|
attempt++;
|
|
|
|
|
|
return tryRequest();
|
|
|
|
|
|
}
|
|
|
|
|
|
if (showError) handleError(err.msg || err);
|
|
|
|
|
|
return Promise.reject(err);
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
|
|
return tryRequest();
|
|
|
|
|
|
}
|