import { loadBackendAuthTokens, loadBackendBaseUrl } from '../../utils/backendAuth' import { getMyResults, getSessionResult, type BackendSessionResultView } from '../../utils/backendApi' type ResultPageData = { sessionId: string statusText: string sessionTitleText: string sessionSubtitleText: string rows: Array<{ label: string; value: string }> recentResults: BackendSessionResultView[] } function getAccessToken(): string | null { const app = getApp() const tokens = app.globalData && app.globalData.backendAuthTokens ? app.globalData.backendAuthTokens : loadBackendAuthTokens() return tokens && tokens.accessToken ? tokens.accessToken : null } function formatValue(value: unknown): string { if (value === null || value === undefined || value === '') { return '--' } return String(value) } Page({ data: { sessionId: '', statusText: '准备加载结果', sessionTitleText: '结果页', sessionSubtitleText: '未加载', rows: [], recentResults: [], } as ResultPageData, onLoad(query: { sessionId?: string }) { const sessionId = query && query.sessionId ? decodeURIComponent(query.sessionId) : '' this.setData({ sessionId }) if (sessionId) { this.loadSingleResult(sessionId) return } this.loadRecentResults() }, async loadSingleResult(sessionId: string) { const accessToken = getAccessToken() if (!accessToken) { wx.redirectTo({ url: '/pages/login/login' }) return } this.setData({ statusText: '正在加载单局结果', }) try { const result = await getSessionResult({ baseUrl: loadBackendBaseUrl(), accessToken, sessionId, }) this.setData({ statusText: '单局结果加载完成', sessionTitleText: result.session.eventName || result.session.eventDisplayName || result.session.eventId || result.session.id || result.session.sessionId, sessionSubtitleText: `${result.session.status || result.session.sessionStatus} / ${result.result.status}`, rows: [ { label: '最终得分', value: formatValue(result.result.finalScore) }, { label: '最终用时(秒)', value: formatValue(result.result.finalDurationSec) }, { label: '完成点数', value: formatValue(result.result.completedControls) }, { label: '总点数', value: formatValue(result.result.totalControls) }, { label: '累计里程(m)', value: formatValue(result.result.distanceMeters) }, { label: '平均速度(km/h)', value: formatValue(result.result.averageSpeedKmh) }, { label: '最大心率', value: formatValue(result.result.maxHeartRateBpm) }, ], }) } catch (error) { const message = error && (error as { message?: string }).message ? (error as { message: string }).message : '未知错误' this.setData({ statusText: `结果加载失败:${message}`, }) } }, async loadRecentResults() { const accessToken = getAccessToken() if (!accessToken) { wx.redirectTo({ url: '/pages/login/login' }) return } this.setData({ statusText: '正在加载最近结果', }) try { const results = await getMyResults({ baseUrl: loadBackendBaseUrl(), accessToken, limit: 20, }) this.setData({ statusText: '最近结果加载完成', sessionSubtitleText: '最近结果列表', recentResults: results, }) } catch (error) { const message = error && (error as { message?: string }).message ? (error as { message: string }).message : '未知错误' this.setData({ statusText: `结果加载失败:${message}`, }) } }, handleOpenResult(event: WechatMiniprogram.TouchEvent) { const sessionId = event.currentTarget.dataset.sessionId as string | undefined if (!sessionId) { return } wx.redirectTo({ url: `/pages/result/result?sessionId=${encodeURIComponent(sessionId)}`, }) }, handleBackToList() { this.setData({ sessionId: '', rows: [], }) this.loadRecentResults() }, })