Files
2026-05-08 13:28:09 +08:00

109 lines
3.3 KiB
JavaScript
Raw Permalink 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.
// const baseUrl = "https://api.collect.hs.hnzhwlkj.club/"; //这里放置url域名32044
// const baseUrl = "https://api.collect.xyh.muzili.top/"; //这里放置url域名32044
const baseUrl = "https://bsh.info.yw.hnzhwlkj.cn/"; //这里放置url域名32044
// const baseUrl = "https://114.215.24.240:8106/api/v1/"; //这里放置url域名32044
import { loginOnce } from '@/utils/auth.js';
// 正在重试的请求队列
const retryQueue = [];
let isRefreshing = false;
/**
* 处理 401 错误,重新登录后重试请求
*/
async function handle401Error(originalOptions) {
return new Promise((resolve, reject) => {
// 将请求加入队列
retryQueue.push({ options: originalOptions, resolve, reject });
// 如果没有正在刷新 token,开始刷新
if (!isRefreshing) {
isRefreshing = true;
loginOnce().then((result) => {
isRefreshing = false;
if (result.success) {
// 登录成功,重试所有队列中的请求
retryQueue.forEach(({ options, resolve, reject }) => {
request(options).then(resolve).catch(reject);
});
// 清空队列
retryQueue.length = 0;
} else {
// 登录失败,拒绝所有队列中的请求并跳转登录页
retryQueue.forEach(({ reject }) => {
reject({ data: { message: '登录失败,请重新登录' } });
});
retryQueue.length = 0;
}
});
}
});
}
export function request(options){//封装的requset
let { url,data,method } = options;
data = data || {},
uni.showLoading({
title: ''
});
return new Promise((resolve,rejext)=>{
uni.request({//这里是uniapp网络请求的api
url: baseUrl + url, //仅为示例,并非真实接口地址。
data,
header:{'content-type': 'application/x-www-form-urlencoded','Fdesk-Auth-Token': 'Bearer ' + uni.getStorageSync('token'),'Fdesk-Language': uni.getStorageSync('i18locale')?uni.getStorageSync('i18locale'):'zh','Fdesk-Login-Type': 'wechat','Fdesk-System-Code':'wechat'},
method:method||"GET",//默认请求方式是get
success: async (res) => {
uni.hideLoading();
// 检查 401 错误(可能是 res.statusCode === 401 或 res.data.code === 401)
if (res.statusCode === 401 || (res.data && res.data.code === 401)) {
console.log('Token expired, attempting silent login...');
try {
const retryResult = await handle401Error(options);
resolve(retryResult);
} catch (error) {
resolve(res); // 返回原始错误响应
}
} else {
resolve(res);
}
},
fail: (err) => {
uni.hideLoading();
rejext(err);
},
complete: (data)=>{
uni.hideLoading();
}
});
})
}
export function requestx(options){//封装的requset
let { url,data,method } = options;
data = data || {};
return new Promise((resolve,rejext)=>{
uni.request({//这里是uniapp网络请求的api
url: baseUrl + url, //仅为示例,并非真实接口地址。
data,
header:{'content-type': 'application/x-www-form-urlencoded','Fdesk-Auth-Token': 'Bearer ' + uni.getStorageSync('openid')},
method:method||"GET",//默认请求方式是get
success: (res) => {
resolve(res)
},
complete: (data)=>{
}
});
})
}
export function showToast(options){//封装Toast
let { title,duration,icon } = options;
uni.showToast({
title:title,
duration: 2000,
icon:icon || "none"
});
}