const competition = require('../../../utils/competition'); Page({ data: { eventId: null, progress: null, viewState: 'loading', errorMessage: '', refreshing: false }, onLoad(options) { const eventId = Number(options && options.eventId); if (!eventId) { this.setData({ viewState: 'error', errorMessage: '缺少赛事ID,无法查询检录进度' }); return; } this.setData({ eventId }); this.loadProgress(); }, onPullDownRefresh() { this.setData({ refreshing: true }); this.loadProgress(true).finally(() => { this.setData({ refreshing: false }); wx.stopPullDownRefresh(); }); }, onRetry() { this.loadProgress(); }, loadProgress(silent = false) { if (!this.data.eventId) return Promise.resolve(); if (!silent) this.setData({ viewState: 'loading', errorMessage: '' }); return competition.fetchCheckinProgress(this.data.eventId) .then((progress) => { this.setData({ progress, viewState: progress.hasData ? 'content' : 'empty', errorMessage: '' }); }) .catch((error) => { const statusCode = Number(error && error.statusCode); const forbidden = statusCode === 401 || statusCode === 403; this.setData({ progress: null, viewState: forbidden ? 'forbidden' : 'error', errorMessage: forbidden ? (statusCode === 401 ? '登录状态已失效,请重新登录' : '当前账号无权查看该赛事检录进度') : ((error && error.message) || '检录进度加载失败,请稍后重试') }); }); } });