/** * 登录守卫工具(三端通用:train-frontend 小程序) * * 需求:登录前可浏览课程信息,但班级/报名/投票/打卡/支付等实际操作必须登录。 * 未登录触发 requireLogin() 时:toast 提示 + 跳回首页 tab + 触发登录浮层(showLoginSheet)。 */ export function requireLogin() { var loggedIn = false try { if (getApp() && getApp().$store && getApp().$store.getters && getApp().$store.getters.isLoggedIn) { loggedIn = true } } catch (e) { console.error('[guard] store 判定异常,改用 storage', e) } // 兜底:mp-weixin 下 getApp().$store 可能不可达,此时直读 storage token。 // storage token 是登录态唯一可信载体(setToken 总是同步写入,401 清理时同步移除) if (!loggedIn && uni.getStorageSync('token')) { loggedIn = true } if (loggedIn) return true uni.showToast({ title: '请先登录', icon: 'none' }) setTimeout(function() { uni.switchTab({ url: '/pages/index/index' }) }, 600) setTimeout(function() { uni.$emit('showLoginSheet', {}) }, 800) return false } /** 页面级守卫:在 onShow/onLoad 首行调用,未登录返回 false 阻止后续加载 */ export function guardPage() { return requireLogin() }