完善多赛道联调与全局产品架构
This commit is contained in:
104
miniprogram/pages/results/results.ts
Normal file
104
miniprogram/pages/results/results.ts
Normal file
@@ -0,0 +1,104 @@
|
||||
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<IAppOption>()
|
||||
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)}`,
|
||||
})
|
||||
},
|
||||
})
|
||||
Reference in New Issue
Block a user