2025-12-03 14:07:17 +08:00
|
|
|
// 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.hb.hnzhwlkj.cn/"; //这里放置url域名32044
|
|
|
|
|
// const baseUrl = "https://114.215.24.240:8106/api/v1/"; //这里放置url域名32044
|
2026-03-13 10:18:07 +08:00
|
|
|
|
|
|
|
|
// 是否正在重新登录中
|
|
|
|
|
let isRelogining = false
|
|
|
|
|
// 等待重新登录完成的队列
|
|
|
|
|
let loginPendingQueue = []
|
|
|
|
|
|
|
|
|
|
// 执行队列中的请求
|
|
|
|
|
function flushLoginPendingQueue() {
|
|
|
|
|
loginPendingQueue.forEach(callback => callback && callback())
|
|
|
|
|
loginPendingQueue = []
|
|
|
|
|
isRelogining = false
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-03 14:07:17 +08:00
|
|
|
export function request(options){//封装的requset
|
|
|
|
|
let { url,data,method } = options;
|
|
|
|
|
data = data || {},
|
|
|
|
|
uni.showLoading({
|
|
|
|
|
title: ''
|
|
|
|
|
});
|
2026-03-13 10:18:07 +08:00
|
|
|
|
2025-12-03 14:07:17 +08:00
|
|
|
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: (res) => {
|
|
|
|
|
uni.hideLoading();
|
2026-03-13 10:18:07 +08:00
|
|
|
|
|
|
|
|
// 处理 token 过期情况 (根据后端返回的 code 判断)
|
|
|
|
|
// 常见的过期 code: 401, 403, 或后端自定义的 code
|
|
|
|
|
if (res.statusCode === 401 || res.statusCode === 403 ||
|
|
|
|
|
(res.data && (res.data.code === 401 || res.data.code === 403 || res.data.code === -100))) {
|
|
|
|
|
|
|
|
|
|
// 如果正在重新登录,将当前请求加入队列
|
|
|
|
|
if (isRelogining) {
|
|
|
|
|
loginPendingQueue.push(() => {
|
|
|
|
|
request(options).then(resolve).catch(rejext)
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 标记正在重新登录
|
|
|
|
|
isRelogining = true
|
|
|
|
|
|
|
|
|
|
// 重新登录
|
|
|
|
|
reLogin().then(() => {
|
|
|
|
|
// 登录成功后,重新发起当前请求
|
|
|
|
|
request(options).then(resolve).catch(rejext)
|
|
|
|
|
flushLoginPendingQueue()
|
|
|
|
|
}).catch((err) => {
|
|
|
|
|
// 登录失败,清空队列
|
|
|
|
|
flushLoginPendingQueue()
|
|
|
|
|
rejext(err)
|
|
|
|
|
})
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-03 14:07:17 +08:00
|
|
|
resolve(res)
|
|
|
|
|
},
|
2026-03-13 10:18:07 +08:00
|
|
|
fail: (err) => {
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
rejext(err)
|
|
|
|
|
},
|
2025-12-03 14:07:17 +08:00
|
|
|
complete: (data)=>{
|
|
|
|
|
uni.hideLoading();
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
})
|
|
|
|
|
}
|
2026-03-13 10:18:07 +08:00
|
|
|
|
|
|
|
|
// 重新登录方法
|
|
|
|
|
function reLogin() {
|
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
|
uni.login({
|
|
|
|
|
provider: 'weixin',
|
|
|
|
|
success: (loginRes) => {
|
|
|
|
|
uni.request({
|
|
|
|
|
url: baseUrl + 'miniapp/login',
|
|
|
|
|
method: 'POST',
|
|
|
|
|
data: { code: loginRes.code },
|
|
|
|
|
header: {
|
|
|
|
|
'content-type': 'application/x-www-form-urlencoded'
|
|
|
|
|
},
|
|
|
|
|
success: (res) => {
|
|
|
|
|
if (res.data.code === 200) {
|
|
|
|
|
// 更新本地存储
|
|
|
|
|
uni.setStorageSync('openid', res.data.data.openid)
|
|
|
|
|
uni.setStorageSync('token', res.data.data.token)
|
|
|
|
|
uni.setStorageSync('user_id', res.data.data.id)
|
|
|
|
|
uni.setStorageSync('is_login', !!res.data.data.mobile)
|
|
|
|
|
resolve(res.data.data)
|
|
|
|
|
} else {
|
|
|
|
|
reject(res.data)
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
reject(err)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
fail: (err) => {
|
|
|
|
|
reject(err)
|
|
|
|
|
}
|
|
|
|
|
})
|
|
|
|
|
})
|
|
|
|
|
}
|
2025-12-03 14:07:17 +08:00
|
|
|
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"
|
|
|
|
|
});
|
|
|
|
|
}
|