111 lines
3.6 KiB
JavaScript
111 lines
3.6 KiB
JavaScript
"use strict";
|
|
const common_vendor = require("../common/vendor.js");
|
|
const ENV_BASE_URL = {
|
|
development: "http://localhost:3000",
|
|
production: "https://api.example.com"
|
|
// 部署时替换为真实域名
|
|
};
|
|
const BASE_URL = ENV_BASE_URL["development"];
|
|
function toCamelCase(obj) {
|
|
if (obj === null || typeof obj !== "object")
|
|
return obj;
|
|
if (Array.isArray(obj)) {
|
|
return obj.map((item) => toCamelCase(item));
|
|
}
|
|
const result = {};
|
|
for (const key in obj) {
|
|
if (Object.prototype.hasOwnProperty.call(obj, key)) {
|
|
const camelKey = key.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
result[camelKey] = toCamelCase(obj[key]);
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
function getToken() {
|
|
return common_vendor.index.getStorageSync("token") || "";
|
|
}
|
|
function request(options) {
|
|
const { url, method = "GET", data, header = {} } = options;
|
|
const token = getToken();
|
|
return new Promise((resolve, reject) => {
|
|
common_vendor.index.request({
|
|
url: `${BASE_URL}${url}`,
|
|
method,
|
|
data,
|
|
header: {
|
|
"Content-Type": "application/json",
|
|
...token ? { Authorization: `Bearer ${token}` } : {},
|
|
...header
|
|
},
|
|
success(res) {
|
|
const statusCode = res.statusCode;
|
|
if (statusCode === 401) {
|
|
common_vendor.index.removeStorageSync("token");
|
|
common_vendor.index.showToast({ title: "请重新登录", icon: "none" });
|
|
autoLogin();
|
|
reject(new Error("未授权"));
|
|
return;
|
|
}
|
|
if (statusCode >= 200 && statusCode < 300) {
|
|
const body = res.data;
|
|
if (body.code === 0) {
|
|
const camelData = toCamelCase(body.data);
|
|
resolve(camelData);
|
|
} else {
|
|
common_vendor.index.showToast({ title: body.message || "请求失败", icon: "none" });
|
|
reject(new Error(body.message));
|
|
}
|
|
} else {
|
|
common_vendor.index.showToast({ title: "网络异常,请稍后重试", icon: "none" });
|
|
reject(new Error(`HTTP ${statusCode}`));
|
|
}
|
|
},
|
|
fail(err) {
|
|
common_vendor.index.showToast({ title: "网络异常,请稍后重试", icon: "none" });
|
|
reject(err);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
function autoLogin() {
|
|
return new Promise((resolve, reject) => {
|
|
common_vendor.index.login({
|
|
provider: "weixin",
|
|
success: async (loginRes) => {
|
|
if (loginRes.code) {
|
|
try {
|
|
const data = await request({
|
|
url: "/api/auth/wx-login",
|
|
method: "POST",
|
|
data: { code: loginRes.code }
|
|
});
|
|
common_vendor.index.setStorageSync("token", data.token);
|
|
resolve();
|
|
} catch (err) {
|
|
common_vendor.index.__f__("error", "at utils/request.ts:109", "登录接口调用失败:", err);
|
|
reject(err);
|
|
}
|
|
} else {
|
|
common_vendor.index.__f__("error", "at utils/request.ts:113", "微信登录获取 code 失败");
|
|
reject(new Error("获取微信 code 失败"));
|
|
}
|
|
},
|
|
fail: (err) => {
|
|
common_vendor.index.__f__("error", "at utils/request.ts:118", "uni.login 失败:", err);
|
|
reject(err);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
const get = (url, data) => request({ url, method: "GET", data });
|
|
const post = (url, data) => request({ url, method: "POST", data });
|
|
const put = (url, data) => request({ url, method: "PUT", data });
|
|
const del = (url, data) => request({ url, method: "DELETE", data });
|
|
exports.BASE_URL = BASE_URL;
|
|
exports.autoLogin = autoLogin;
|
|
exports.del = del;
|
|
exports.get = get;
|
|
exports.post = post;
|
|
exports.put = put;
|
|
//# sourceMappingURL=../../.sourcemap/mp-weixin/utils/request.js.map
|