| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- import { loadBackendAuthTokens, loadBackendBaseUrl } from '../../utils/backendAuth'
- import { getEventPlay, launchEvent, type BackendEventPlayResult } from '../../utils/backendApi'
- import { adaptBackendLaunchResultToEnvelope } from '../../utils/backendLaunchAdapter'
- import { prepareMapPageUrlForLaunch } from '../../utils/gameLaunch'
- type EventPageData = {
- eventId: string
- loading: boolean
- titleText: string
- summaryText: string
- releaseText: string
- actionText: string
- statusText: 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
- }
- Page({
- data: {
- eventId: '',
- loading: false,
- titleText: '活动详情',
- summaryText: '未加载',
- releaseText: '--',
- actionText: '--',
- statusText: '待加载',
- } as EventPageData,
- onLoad(query: { eventId?: string }) {
- const eventId = query && query.eventId ? decodeURIComponent(query.eventId) : ''
- if (!eventId) {
- this.setData({
- statusText: '缺少 eventId',
- })
- return
- }
- this.setData({ eventId })
- this.loadEventPlay(eventId)
- },
- async loadEventPlay(eventId?: string) {
- const targetEventId = eventId || this.data.eventId
- const accessToken = getAccessToken()
- if (!accessToken) {
- wx.redirectTo({ url: '/pages/login/login' })
- return
- }
- this.setData({
- loading: true,
- statusText: '正在加载活动上下文',
- })
- try {
- const result = await getEventPlay({
- baseUrl: loadBackendBaseUrl(),
- eventId: targetEventId,
- accessToken,
- })
- this.applyEventPlay(result)
- } catch (error) {
- const message = error && (error as { message?: string }).message ? (error as { message: string }).message : '未知错误'
- this.setData({
- loading: false,
- statusText: `活动加载失败:${message}`,
- })
- }
- },
- applyEventPlay(result: BackendEventPlayResult) {
- this.setData({
- loading: false,
- titleText: result.event.displayName,
- summaryText: result.event.summary || '暂无活动简介',
- releaseText: result.resolvedRelease
- ? `${result.resolvedRelease.configLabel} / ${result.resolvedRelease.releaseId}`
- : '当前无可用 release',
- actionText: `${result.play.primaryAction} / ${result.play.reason}`,
- statusText: result.play.canLaunch ? '可启动' : '当前不可启动',
- })
- },
- handleRefresh() {
- this.loadEventPlay()
- },
- async handleLaunch() {
- const accessToken = getAccessToken()
- if (!accessToken) {
- wx.redirectTo({ url: '/pages/login/login' })
- return
- }
- this.setData({
- statusText: '正在创建 session 并进入地图',
- })
- try {
- const result = await launchEvent({
- baseUrl: loadBackendBaseUrl(),
- eventId: this.data.eventId,
- accessToken,
- clientType: 'wechat',
- deviceKey: 'mini-dev-device-001',
- })
- const envelope = adaptBackendLaunchResultToEnvelope(result)
- wx.navigateTo({
- url: prepareMapPageUrlForLaunch(envelope),
- })
- } catch (error) {
- const message = error && (error as { message?: string }).message ? (error as { message: string }).message : '未知错误'
- this.setData({
- statusText: `launch 失败:${message}`,
- })
- }
- },
- })
|