// app.ts import { checkUpdate } from './utils/updateManager' import { BASE_URL } from './env' // 域名包含 .test. 则为测试环境,不拦截登录 const isTestDomain = (): boolean => BASE_URL.includes('.test.'); // 判断是否在 PC/Mac 环境运行 const isPCEnvironment = (): boolean => { const sysInfo = wx.getSystemInfoSync(); return ['windows', 'mac'].includes(sysInfo.platform); }; // 需要随登录态一起清理的 storage key const LOGIN_STORAGE_KEYS = [ 'mbuId', 'userName', 'openId', 'unionId', 'addressId', 'defualtAddress' ] as const; // 获取安全区域信息(延迟初始化,避免模块加载时调用 wx API) function getSafeArea() { // @ts-ignore const info = wx.getWindowInfo(); return { safeBottom: info.safeArea.bottom - info.safeArea.height, safeTop: info.safeArea.top * 2, }; } export { }; App({ globalData: { isLogin: false, wasLogin: false, safeBottom: 0, safeTop: 0, store: {}, joinedArray: [], sseStore: { chat: [], system: [], product: [] }, isModalShowing: false, }, async onLaunch(props: any) { // 初始化安全区域 const { safeBottom, safeTop } = getSafeArea(); this.globalData.safeBottom = safeBottom; this.globalData.safeTop = safeTop; // PC/Mac 环境拦截(测试域名不拦截) if (!isTestDomain() && isPCEnvironment()) { wx.showModal({ title: "提示", content: "该环境无法使用", showCancel: false, confirmText: "我知道了" }); return; } // 处理 OAuth state const state = props.query?.state; if (state) { wx.setStorageSync('state', state); } else { wx.removeStorageSync('state'); } // 检查小程序版本更新 checkUpdate(); }, onHide() { }, checkLoginState() { const openId = wx.getStorageSync('openId'); const userId = wx.getStorageSync('userId'); const isLoggedIn = !!(openId && userId); if (!isLoggedIn) { // 清理登录相关缓存 LOGIN_STORAGE_KEYS.forEach(key => wx.removeStorageSync(key)); } // 记录上一次登录状态,用于判断是否从已登录变为未登录 const prev = this.globalData.isLogin; this.globalData.isLogin = isLoggedIn; this.globalData.wasLogin = prev; return isLoggedIn; }, login(value: string) { if (!this.checkLoginState()) { wx.reLaunch({ url: `/pages/login/login?back=${value}` }); return false; } return true; }, redirectLogin() { if (this.checkLoginState()) { return true; } // 已有 modal 在展示,避免重复弹窗 if (this.globalData.isModalShowing) { return false; } this.globalData.isModalShowing = true; const content = this.globalData.wasLogin ? '登录状态失效,请重新登录!' : '请登录获取完整服务!'; wx.showModal({ title: '登录提示', content, confirmText: '去登录', success: (options) => { if (options.confirm) { wx.navigateTo({ url: '/pages/login/login' }); } }, complete: () => { this.globalData.isModalShowing = false; } }); return false; } });