| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- import { clearBackendAuthTokens, loadBackendAuthTokens, loadBackendBaseUrl } from '../../utils/backendAuth'
- import { getEntryHome, type BackendCardResult, type BackendEntryHomeResult } from '../../utils/backendApi'
- import { reportBackendClientLog } from '../../utils/backendClientLogs'
- import { setGlobalMockDebugBridgeEnabled } from '../../utils/globalMockDebugBridge'
- const DEFAULT_CHANNEL_CODE = 'mini-demo'
- const DEFAULT_CHANNEL_TYPE = 'wechat_mini'
- type HomePageData = {
- loading: boolean
- statusText: string
- userNameText: string
- tenantText: string
- channelText: string
- ongoingSessionText: string
- recentSessionText: string
- ongoingRuntimeText: string
- recentRuntimeText: string
- cards: BackendCardResult[]
- }
- function formatSessionSummary(session?: BackendEntryHomeResult['ongoingSession'] | null): string {
- if (!session) {
- return '无'
- }
- const title = session.eventName || session.eventDisplayName || session.eventId || session.id || session.sessionId
- const status = session.status || session.sessionStatus || '--'
- const route = session.routeCode || session.variantName || '默认赛道'
- return `${title} / ${status} / ${route}`
- }
- function formatRuntimeSummary(session?: BackendEntryHomeResult['ongoingSession'] | null): string {
- if (!session || !session.runtime) {
- return '运行对象 --'
- }
- const runtime = session.runtime
- const placeText = runtime.placeName || runtime.placeId || '--'
- const mapText = runtime.mapName || runtime.mapId || '--'
- const variantText = runtime.courseVariantId || session.variantName || session.variantId || '--'
- return `地点 ${placeText} / 地图 ${mapText} / 赛道 ${variantText}`
- }
- function requireAuthToken(): string | null {
- const app = getApp<IAppOption>()
- const tokens = app.globalData && app.globalData.backendAuthTokens
- ? app.globalData.backendAuthTokens
- : loadBackendAuthTokens()
- return tokens && tokens.accessToken ? tokens.accessToken : null
- }
- Page({
- data: {
- loading: false,
- statusText: '准备加载首页',
- userNameText: '--',
- tenantText: '--',
- channelText: '--',
- ongoingSessionText: '无',
- recentSessionText: '无',
- ongoingRuntimeText: '运行对象 --',
- recentRuntimeText: '运行对象 --',
- cards: [],
- } as HomePageData,
- onLoad() {
- this.loadEntryHome()
- },
- onShow() {
- this.loadEntryHome()
- },
- async loadEntryHome() {
- const accessToken = requireAuthToken()
- if (!accessToken) {
- wx.redirectTo({ url: '/pages/login/login' })
- return
- }
- this.setData({
- loading: true,
- statusText: '正在加载首页聚合',
- })
- try {
- const result = await getEntryHome({
- baseUrl: loadBackendBaseUrl(),
- accessToken,
- channelCode: DEFAULT_CHANNEL_CODE,
- channelType: DEFAULT_CHANNEL_TYPE,
- })
- this.applyEntryHomeResult(result)
- } catch (error) {
- const message = error && (error as { message?: string }).message ? (error as { message: string }).message : '未知错误'
- this.setData({
- loading: false,
- statusText: `首页加载失败:${message}`,
- })
- }
- },
- applyEntryHomeResult(result: BackendEntryHomeResult) {
- reportBackendClientLog({
- level: 'info',
- category: 'entry-home',
- message: 'entry home loaded',
- details: {
- ongoingSessionId: result.ongoingSession && result.ongoingSession.id ? result.ongoingSession.id : '',
- ongoingEventId: result.ongoingSession && result.ongoingSession.eventId ? result.ongoingSession.eventId : '',
- recentSessionId: result.recentSession && result.recentSession.id ? result.recentSession.id : '',
- recentEventId: result.recentSession && result.recentSession.eventId ? result.recentSession.eventId : '',
- cardEventIds: (result.cards || []).map((item) => (item.event && item.event.id ? item.event.id : '')),
- },
- })
- this.setData({
- loading: false,
- statusText: '首页加载完成',
- userNameText: result.user.nickname || result.user.publicId || result.user.id,
- tenantText: `${result.tenant.name} (${result.tenant.code})`,
- channelText: `${result.channel.displayName} / ${result.channel.code}`,
- ongoingSessionText: formatSessionSummary(result.ongoingSession),
- recentSessionText: formatSessionSummary(result.recentSession),
- ongoingRuntimeText: formatRuntimeSummary(result.ongoingSession),
- recentRuntimeText: formatRuntimeSummary(result.recentSession),
- cards: result.cards || [],
- })
- },
- handleRefresh() {
- this.loadEntryHome()
- },
- handleOpenCard(event: WechatMiniprogram.TouchEvent) {
- const eventId = event.currentTarget.dataset.eventId as string | undefined
- if (!eventId) {
- wx.showToast({
- title: '该卡片暂无活动入口',
- icon: 'none',
- })
- return
- }
- wx.navigateTo({
- url: `/pages/event/event?eventId=${encodeURIComponent(eventId)}`,
- })
- },
- handleOpenRecentResult() {
- wx.navigateTo({
- url: '/pages/results/results',
- })
- },
- handleOpenEventList() {
- wx.navigateTo({
- url: '/pages/events/events',
- })
- },
- handleLogout() {
- clearBackendAuthTokens()
- setGlobalMockDebugBridgeEnabled(false)
- const app = getApp<IAppOption>()
- if (app.globalData) {
- app.globalData.backendAuthTokens = null
- }
- wx.redirectTo({
- url: '/pages/login/login',
- })
- },
- })
|