| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- 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<IAppOption>()
- 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()
- },
- })
|