home.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. import { clearBackendAuthTokens, loadBackendAuthTokens, loadBackendBaseUrl } from '../../utils/backendAuth'
  2. import { getEntryHome, type BackendCardResult, type BackendEntryHomeResult } from '../../utils/backendApi'
  3. const DEFAULT_CHANNEL_CODE = 'mini-demo'
  4. const DEFAULT_CHANNEL_TYPE = 'wechat_mini'
  5. type HomePageData = {
  6. loading: boolean
  7. statusText: string
  8. userNameText: string
  9. tenantText: string
  10. channelText: string
  11. ongoingSessionText: string
  12. recentSessionText: string
  13. cards: BackendCardResult[]
  14. }
  15. function requireAuthToken(): string | null {
  16. const app = getApp<IAppOption>()
  17. const tokens = app.globalData && app.globalData.backendAuthTokens
  18. ? app.globalData.backendAuthTokens
  19. : loadBackendAuthTokens()
  20. return tokens && tokens.accessToken ? tokens.accessToken : null
  21. }
  22. Page({
  23. data: {
  24. loading: false,
  25. statusText: '准备加载首页',
  26. userNameText: '--',
  27. tenantText: '--',
  28. channelText: '--',
  29. ongoingSessionText: '无',
  30. recentSessionText: '无',
  31. cards: [],
  32. } as HomePageData,
  33. onLoad() {
  34. this.loadEntryHome()
  35. },
  36. onShow() {
  37. this.loadEntryHome()
  38. },
  39. async loadEntryHome() {
  40. const accessToken = requireAuthToken()
  41. if (!accessToken) {
  42. wx.redirectTo({ url: '/pages/login/login' })
  43. return
  44. }
  45. this.setData({
  46. loading: true,
  47. statusText: '正在加载首页聚合',
  48. })
  49. try {
  50. const result = await getEntryHome({
  51. baseUrl: loadBackendBaseUrl(),
  52. accessToken,
  53. channelCode: DEFAULT_CHANNEL_CODE,
  54. channelType: DEFAULT_CHANNEL_TYPE,
  55. })
  56. this.applyEntryHomeResult(result)
  57. } catch (error) {
  58. const message = error && (error as { message?: string }).message ? (error as { message: string }).message : '未知错误'
  59. this.setData({
  60. loading: false,
  61. statusText: `首页加载失败:${message}`,
  62. })
  63. }
  64. },
  65. applyEntryHomeResult(result: BackendEntryHomeResult) {
  66. this.setData({
  67. loading: false,
  68. statusText: '首页加载完成',
  69. userNameText: result.user.nickname || result.user.publicId || result.user.id,
  70. tenantText: `${result.tenant.name} (${result.tenant.code})`,
  71. channelText: `${result.channel.displayName} / ${result.channel.code}`,
  72. ongoingSessionText: result.ongoingSession
  73. ? `${result.ongoingSession.eventName || result.ongoingSession.eventDisplayName || result.ongoingSession.eventId || result.ongoingSession.id || result.ongoingSession.sessionId} / ${result.ongoingSession.status || result.ongoingSession.sessionStatus}`
  74. : '无',
  75. recentSessionText: result.recentSession
  76. ? `${result.recentSession.eventName || result.recentSession.eventDisplayName || result.recentSession.eventId || result.recentSession.id || result.recentSession.sessionId} / ${result.recentSession.status || result.recentSession.sessionStatus}`
  77. : '无',
  78. cards: result.cards || [],
  79. })
  80. },
  81. handleRefresh() {
  82. this.loadEntryHome()
  83. },
  84. handleOpenCard(event: WechatMiniprogram.TouchEvent) {
  85. const eventId = event.currentTarget.dataset.eventId as string | undefined
  86. if (!eventId) {
  87. wx.showToast({
  88. title: '该卡片暂无活动入口',
  89. icon: 'none',
  90. })
  91. return
  92. }
  93. wx.navigateTo({
  94. url: `/pages/event/event?eventId=${encodeURIComponent(eventId)}`,
  95. })
  96. },
  97. handleOpenRecentResult() {
  98. wx.navigateTo({
  99. url: '/pages/result/result',
  100. })
  101. },
  102. handleLogout() {
  103. clearBackendAuthTokens()
  104. const app = getApp<IAppOption>()
  105. if (app.globalData) {
  106. app.globalData.backendAuthTokens = null
  107. }
  108. wx.redirectTo({
  109. url: '/pages/login/login',
  110. })
  111. },
  112. })