// 课程中心:全屏 web-view 加载线上课程列表 // // 注意:课程页部署在 www.muguaclub.cn,与首页 H5 的 m.muguaclub.cn 是不同主机名, // www 必须单独加入微信公众平台「开发设置 → 业务域名」并在该站点根目录放校验文件, // 否则真机打开会白屏。 // 登录态:课程页本体是公开的,但产品要求「未登录不进课程页」——未登录时切到「我的」引导登录, // 因此也不需要走 webview/redirect 换 cookie。 const auth = require('../../utils/auth'); const COURSE_URL = 'https://www.muguaclub.cn/courses/index.html'; Page({ data: { webviewUrl: '', webviewError: false, errorMsg: '', webviewKey: 0 }, _webviewKey: 0, _redirecting: false, onShow() { this.ensureAccess(); }, // 未登录不进课程页,直接切到「我的」引导登录 ensureAccess() { if (auth.getToken()) { this.loadWebview(); return; } // token 可能还在 App.onLaunch 发起的登录流程里,复用同一个登录单例再判一次,避免冷启动误跳 return auth.ensureLogin() .then((token) => { if (token) { this.loadWebview(); return; } this.denyAccess(); }) .catch(() => { this.denyAccess(); }); }, // 清掉可能残留的 web-view(如退出登录后切回本 tab),再切到「我的」 denyAccess() { if (this.data.webviewUrl) { this.setData({ webviewUrl: '', webviewError: false, errorMsg: '' }); } if (this._redirecting) { return; } this._redirecting = true; wx.switchTab({ url: '/pages/profile/profile', complete: () => { this._redirecting = false; } }); }, loadWebview() { // key 自增 + 时间戳:强制 web-view 销毁重建,避免切 tab 回来白屏或读到上一次的缓存 this._webviewKey += 1; this.setData({ webviewUrl: COURSE_URL + '?_t=' + Date.now(), webviewError: false, errorMsg: '', webviewKey: this._webviewKey }); }, onWebviewError(e) { this.setData({ webviewError: true, errorMsg: (e && e.detail && e.detail.errMsg) || '加载失败,请检查网络后重试' }); }, onRetry() { this.setData({ webviewUrl: '', webviewError: false, errorMsg: '' }); setTimeout(() => { this.loadWebview(); }, 60); }, // ---- 分享 ---- onShareAppMessage() { return { title: '明缘云道场 · 全部课程', path: '/pages/course/course' }; }, onShareTimeline() { return { title: '明缘云道场 · 全部课程', query: 'from=timeline' }; } });