// utils/request.js import { buildClubHeaders } from './club-context'; function getLoginFallbackUrl() { try { const { getLoginPageUrl } = require('./fighter-only.js'); return getLoginPageUrl(); } catch (e) { return '/pages/fighter/fighter'; } } function goLoginPage(hint) { try { const { kickToLoginPage, LOGIN_HINT_KEY, clearAuthSession } = require('./fighter-only.js'); if (typeof kickToLoginPage === 'function') { kickToLoginPage(hint); return; } if (hint) wx.setStorageSync(LOGIN_HINT_KEY || 'login_page_hint', hint); clearAuthSession && clearAuthSession({ hint }); } catch (e) { try { if (hint) wx.setStorageSync('login_page_hint', hint); wx.removeStorageSync('token'); } catch (e2) {} } const url = getLoginFallbackUrl(); wx.reLaunch({ url, fail: () => { try { wx.redirectTo({ url }); } catch (e2) {} }, }); } function clearAuthAndGoLogin(hint) { goLoginPage( hint || '账号状态异常,您的账号可能已被封禁或登录已失效。请点击一键登录重试;若仍无法进入,请联系客服。' ); } function showAuthFailModal(serverMsg) { const hint = (serverMsg && String(serverMsg).trim()) || '账号状态异常,您的账号可能已被封禁或登录已失效。请点击一键登录重试;若仍无法进入,请联系客服。'; // 直接清会话进登录页,避免卡在「伪已登录」我的页且不再发请求 clearAuthAndGoLogin(hint); } function request(options) { const app = getApp(); const token = wx.getStorageSync('token'); if (!token) { return Promise.resolve({ statusCode: 401, data: { code: 401, msg: '未登录' }, errMsg: 'request:ok', }); } const header = buildClubHeaders({ 'Content-Type': 'application/json', ...options.header, }); if (token) { header['Authorization'] = 'Bearer ' + token; } return new Promise((resolve) => { wx.request({ url: app.globalData.apiBaseUrl + options.url, method: options.method || 'GET', data: options.data || {}, header, timeout: options.timeout || 15000, success: async (res) => { if (res.statusCode === 401 || res.statusCode === 403) { const serverMsg = (res.data && (res.data.msg || res.data.message)) || ''; // 业务封禁文案优先;登录页会展示 if (app.globalData.loginPromise) { try { await app.globalData.loginPromise; const retryRes = await request(options); resolve(retryRes); } catch (err) { showAuthFailModal(serverMsg); resolve(res); } return; } showAuthFailModal(serverMsg); resolve(res); return; } resolve(res); }, fail: (err) => { console.warn('request fail:', options.url, err && err.errMsg); resolve({ statusCode: 0, data: { code: 408, msg: (err && err.errMsg) || '网络请求失败', }, errMsg: (err && err.errMsg) || 'request:fail', }); }, }); }); } export default request; export { goLoginPage, clearAuthAndGoLogin }; // 兼容旧引用 export { LOGIN_HINT_KEY } from './fighter-only.js';