// 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 // 是否正在重新登录中 let isRelogining = false // 等待重新登录完成的队列 let loginPendingQueue = [] // 执行队列中的请求 function flushLoginPendingQueue() { loginPendingQueue.forEach(callback => callback && callback()) loginPendingQueue = [] isRelogining = false } 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: (res) => { uni.hideLoading(); // 处理 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 } resolve(res) }, fail: (err) => { uni.hideLoading(); rejext(err) }, complete: (data)=>{ uni.hideLoading(); } }); }) } // 重新登录方法 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) } }) }) } 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" }); }