| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 |
- import { loadBackendAuthTokens, loadBackendBaseUrl } from '../../utils/backendAuth'
- import {
- getExperienceMapDetail,
- getPublicExperienceMapDetail,
- type BackendContentBundleSummary,
- type BackendDefaultExperienceSummary,
- type BackendExperienceMapDetail,
- type BackendPresentationSummary,
- } from '../../utils/backendApi'
- import { reportBackendClientLog } from '../../utils/backendClientLogs'
- type DefaultExperienceCardView = {
- eventId: string
- titleText: string
- subtitleText: string
- statusText: string
- ctaText: string
- eventTypeText: string
- presentationText: string
- contentBundleText: string
- disabled: boolean
- }
- type ExperienceMapPageData = {
- mapId: string
- loading: boolean
- statusText: string
- placeText: string
- mapText: string
- summaryText: string
- tileInfoText: string
- cards: DefaultExperienceCardView[]
- }
- 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 formatPresentationSummary(summary?: BackendPresentationSummary | null): string {
- if (!summary) {
- return '当前未声明展示版本'
- }
- return summary.version || summary.templateKey || summary.presentationId || '当前未声明展示版本'
- }
- function formatContentBundleSummary(summary?: BackendContentBundleSummary | null): string {
- if (!summary) {
- return '当前未声明内容包版本'
- }
- return summary.version || summary.bundleType || summary.bundleId || '当前未声明内容包版本'
- }
- function buildDefaultExperienceCard(item: BackendDefaultExperienceSummary): DefaultExperienceCardView {
- const eventId = item.eventId || ''
- return {
- eventId,
- titleText: item.title || '未命名体验活动',
- subtitleText: item.subtitle || '当前暂无副标题',
- statusText: item.status || item.statusCode || '状态待确认',
- ctaText: item.ctaText || '查看体验',
- eventTypeText: item.eventType || '类型待确认',
- presentationText: formatPresentationSummary(item.currentPresentation),
- contentBundleText: formatContentBundleSummary(item.currentContentBundle),
- disabled: !eventId,
- }
- }
- Page({
- data: {
- mapId: '',
- loading: false,
- statusText: '准备加载地图详情',
- placeText: '地点待确认',
- mapText: '地图待确认',
- summaryText: '当前暂无地图摘要',
- tileInfoText: '瓦片信息待确认',
- cards: [],
- } as ExperienceMapPageData,
- onLoad(query: { mapId?: string }) {
- const mapId = query && query.mapId ? decodeURIComponent(query.mapId) : ''
- if (!mapId) {
- this.setData({
- statusText: '缺少 mapId',
- })
- return
- }
- this.setData({ mapId })
- this.loadMapDetail(mapId)
- },
- onShow() {
- if (this.data.mapId) {
- this.loadMapDetail(this.data.mapId)
- }
- },
- async loadMapDetail(mapId?: string) {
- const targetMapId = mapId || this.data.mapId
- const accessToken = getAccessToken()
- this.setData({
- loading: true,
- statusText: '正在加载地图详情',
- })
- try {
- const baseUrl = loadBackendBaseUrl()
- const result = accessToken
- ? await getExperienceMapDetail({
- baseUrl,
- accessToken,
- mapAssetId: targetMapId,
- })
- : await getPublicExperienceMapDetail({
- baseUrl,
- mapAssetId: targetMapId,
- })
- this.applyDetail(result)
- } catch (error) {
- const message = error && (error as { message?: string }).message ? (error as { message: string }).message : '未知错误'
- this.setData({
- loading: false,
- statusText: `地图详情加载失败:${message}`,
- cards: [],
- })
- }
- },
- applyDetail(result: BackendExperienceMapDetail) {
- const cards = (result.defaultExperiences || []).map(buildDefaultExperienceCard)
- reportBackendClientLog({
- level: 'info',
- category: 'experience-map-detail',
- message: 'experience map detail loaded',
- details: {
- guestMode: !getAccessToken(),
- mapId: result.mapId || this.data.mapId || '',
- placeId: result.placeId || '',
- defaultExperienceCount: cards.length,
- defaultExperienceEventIds: (result.defaultExperiences || []).map((item) => item.eventId || ''),
- },
- })
- const tileBase = result.tileBaseUrl || ''
- const tileMeta = result.tileMetaUrl || ''
- const tileInfoText = tileBase || tileMeta
- ? `底图 ${tileBase || '--'} / Meta ${tileMeta || '--'}`
- : '当前未声明瓦片信息'
- this.setData({
- loading: false,
- statusText: cards.length ? '地图详情加载完成' : '当前地图暂无默认体验活动',
- placeText: result.placeName || result.placeId || '地点待确认',
- mapText: result.mapName || result.mapId || '地图待确认',
- summaryText: result.summary || '当前暂无地图摘要',
- tileInfoText,
- cards,
- })
- },
- handleRefresh() {
- this.loadMapDetail()
- },
- handleOpenExperience(event: WechatMiniprogram.TouchEvent) {
- const eventId = event.currentTarget.dataset.eventId as string | undefined
- reportBackendClientLog({
- level: 'info',
- category: 'experience-map-detail',
- message: 'default experience clicked',
- eventId: eventId || '',
- details: {
- mapId: this.data.mapId || '',
- clickedEventId: eventId || '',
- },
- })
- if (!eventId) {
- wx.showToast({
- title: '该体验活动暂无入口',
- icon: 'none',
- })
- return
- }
- wx.navigateTo({
- url: `/pages/event/event?eventId=${encodeURIComponent(eventId)}`,
- })
- },
- })
|