Files
threeonecheck_web/request/request.js
2025-12-29 14:59:44 +08:00

112 lines
3.9 KiB
JavaScript

import Request from './luch-request/index.js';
// 基础的url
// const baseUrl = 'https://xyb.hexieweb.cn/xyb100zz';
const baseUrl = 'http://192.168.1.168:5004';
const http = new Request({
baseURL: baseUrl,
timeout: 10000,
header: {
// 'content-type': 'application/json',
'Authorization': "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiNzQ5NGU2MzAtNTRlYS00ZTM5LWIxYjUtNzc2MzY5NTRhYmJmIn0.7l5CMwFitlpXniZ6PTR5DqN8ASFTFZ1DCUZKjOtr5CpuXWiPHeSW19nY8XKfGdxMvB7j-OnXuSznLRjx-N7K9g"
}
})
// 固定的 token
const AUTH_TOKEN = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImxvZ2luX3VzZXJfa2V5IjoiNTQyMjJlODYtZDUyNS00ZTA0LWI3Y2QtMGU1ZWYzYmIwM2EwIn0.x8zPXafDGVjIDIcAdWsWT3F2fU20QHVLFR15b251LfwpfRt_UaDo1-bvHEyi8hxqVkiStOqi09TTUTPBgjPYkw";
// 请求之前查看是否为空
const isEmptyObject = (obj) => {
return Object.keys(obj).length === 0;
};
// 将对象转换为查询字符串
const objectToQueryString = (obj) => {
const keyValuePairs = [];
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
keyValuePairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
}
}
return keyValuePairs.join('&');
};
// 提示
function showToast(title) {
uni.showToast({
title,
icon: 'none',
duration: 1000,
});
}
// 请求
const requestAPI = (config) => {
// 支持对象参数或传统参数
let { url, method = 'GET', data = {} } = typeof config === 'object' && config.url ? config : { url: config, method: arguments[1] || 'GET', data: arguments[2] || {} };
if (method == 'GET' && !isEmptyObject(data)) {
url += '?' + objectToQueryString(data);
}
// 显示加载状态
uni.showLoading({
title: '加载中...'
});
return new Promise((resolve, reject) => {
uni.request({
url: baseUrl + url,
method,
data,
header: {
'Authorization': AUTH_TOKEN
},
success: (res) => {
uni.hideLoading();
// 检查HTTP状态码
if (res.statusCode !== 200) {
console.error('HTTP错误:', res.statusCode);
// showToast(`请求失败 ${res.statusCode}`);
reject(`HTTP_${res.statusCode}`);
return;
}
// 检查业务状态码(如果后端有的话)
if (res.data && res.data.code !== undefined) {
// 支持 code === 200 或 code === 0 作为成功状态
if (res.data.code === 200 || res.data.code === 0) {
resolve(res.data);
} else if (res.data.code === 401) {
// token过期处理
uni.removeStorageSync('_user_token_');
showToast('登录已过期,请重新登录');
reject('401');
} else {
showToast(res.data.msg || '请求失败');
reject(res.data.code);
}
} else {
// 没有业务状态码,直接返回数据
resolve(res.data);
}
},
fail: (err) => {
console.error('网络请求失败:', err);
uni.hideLoading();
// 区分不同的错误类型
if (err.errMsg && err.errMsg.includes('request:fail')) {
showToast('网络连接失败,请检查网络设置');
} else if (err.errMsg && err.errMsg.includes('timeout')) {
showToast('请求超时,请稍后重试');
} else {
showToast('网络异常,请稍后重试');
}
reject(err);
}
});
});
};
// 文件末尾应该导出
export { requestAPI,baseUrl,AUTH_TOKEN };