import { loadBackendAuthTokens, loadBackendBaseUrl } from '../../utils/backendAuth' import { getMyResults, type BackendSessionResultView } from '../../utils/backendApi' type ResultsPageData = { loading: boolean statusText: string results: Array<{ sessionId: string titleText: string statusText: string scoreText: string routeText: string }> } 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 formatRouteSummary(result: BackendSessionResultView): string { const session = result.session if (session.variantName && session.routeCode) { return `${session.variantName} / ${session.routeCode}` } if (session.variantName) { return session.variantName } if (session.routeCode) { return session.routeCode } return '默认赛道' } function buildResultCardView(result: BackendSessionResultView) { return { sessionId: result.session.id, titleText: result.session.eventName || result.session.id, statusText: `${result.result.status} / ${result.session.status}`, scoreText: `得分 ${result.result.finalScore || '--'} / 用时 ${result.result.finalDurationSec || '--'}s`, routeText: `赛道 ${formatRouteSummary(result)}`, } } Page({ data: { loading: false, statusText: '准备加载历史结果', results: [], } as ResultsPageData, onLoad() { this.loadResults() }, onShow() { this.loadResults() }, async loadResults() { const accessToken = getAccessToken() if (!accessToken) { wx.redirectTo({ url: '/pages/login/login' }) return } this.setData({ loading: true, statusText: '正在加载历史结果', }) try { const results = await getMyResults({ baseUrl: loadBackendBaseUrl(), accessToken, limit: 20, }) this.setData({ loading: false, statusText: `历史结果加载完成,共 ${results.length} 条`, results: results.map(buildResultCardView), }) } catch (error) { const message = error && (error as { message?: string }).message ? (error as { message: string }).message : '未知错误' this.setData({ loading: false, statusText: `历史结果加载失败:${message}`, }) } }, handleOpenResult(event: WechatMiniprogram.TouchEvent) { const sessionId = event.currentTarget.dataset.sessionId as string | undefined if (!sessionId) { return } wx.navigateTo({ url: `/pages/result/result?sessionId=${encodeURIComponent(sessionId)}`, }) }, })