75 lines
2.0 KiB
JavaScript
75 lines
2.0 KiB
JavaScript
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) });
|
|
}
|
|
});
|