const api = require('../../utils/api'); const auth = require('../../utils/auth'); function errMessage(err) { if (err && typeof err === 'object') { if (err.detail) return String(err.detail); if (err.error) return String(err.error); if (err.message) return String(err.message); } return '加载失败,请稍后再试'; } Page({ data: { greeting: '', displayName: '', encouragement: '', modules: [], loading: true, error: '', skeletonItems: [0, 1, 2, 3, 4, 5, 6, 7, 8] }, onShow() { this.loadHome(); }, loadHome(silent) { if (!silent) { this.setData({ loading: true, error: '' }); } return auth.ensureLogin() .then((token) => { if (!token) { // 新用户未绑定手机号,引导去「我的」完成绑定,避免无 token 请求受保护接口导致 401 this.setData({ loading: false, error: '请先完成微信绑定后再进入' }); setTimeout(() => wx.switchTab({ url: '/pages/profile/profile' }), 500); return; } return api.request({ url: '/api/v1/pages/home' }); }) .then((res) => { if (!res) return; this.setData({ loading: false, error: '', greeting: res.greeting || '', displayName: res.display_name || '', encouragement: res.encouragement || '', modules: (res.modules || []).filter((m) => m.visible) }); }) .catch((err) => { this.setData({ loading: false, error: errMessage(err) }); }); }, onPullDownRefresh() { this.loadHome(true).then(() => { wx.stopPullDownRefresh(); }); }, onRetry() { this.loadHome(); }, onModuleTap(e) { const url = e.currentTarget.dataset.url; if (!url) return; const token = auth.getToken(); const sep = url.indexOf('?') >= 0 ? '&' : '?'; const target = url + sep + 'token=' + encodeURIComponent(token); wx.navigateTo({ url: '/pages/webview/webview?url=' + encodeURIComponent(target) }); } });