event-prepare.wxml 9.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187
  1. <scroll-view class="page" scroll-y>
  2. <view class="shell">
  3. <view class="hero">
  4. <view class="hero__eyebrow">Prepare</view>
  5. <view class="hero__title">{{titleText}}</view>
  6. <view class="hero__desc">{{summaryText}}</view>
  7. </view>
  8. <view class="panel">
  9. <view class="panel__title">当前准备状态</view>
  10. <view class="summary">先确认赛道、设备和权限,再进入地图开始本局。</view>
  11. <view class="row">
  12. <view class="row__label">当前发布</view>
  13. <view class="row__value">{{releaseText}}</view>
  14. </view>
  15. <view class="row">
  16. <view class="row__label">当前动作</view>
  17. <view class="row__value">{{actionText}}</view>
  18. </view>
  19. <view class="row">
  20. <view class="row__label">进入状态</view>
  21. <view class="row__value">{{statusText}}</view>
  22. </view>
  23. <view class="summary">赛道模式:{{variantModeText}}</view>
  24. <view class="summary">赛道摘要:{{variantSummaryText}}</view>
  25. <view class="summary">当前选择:{{selectedVariantText}}</view>
  26. </view>
  27. <view class="panel">
  28. <view class="panel__title">活动版本摘要</view>
  29. <view class="summary">这里展示本次进入地图将会使用的发布对象摘要,方便你确认当前活动版本。</view>
  30. <view class="row">
  31. <view class="row__label">当前发布展示版本</view>
  32. <view class="row__value">{{presentationText}}</view>
  33. </view>
  34. <view class="row">
  35. <view class="row__label">当前发布内容包版本</view>
  36. <view class="row__value">{{contentBundleText}}</view>
  37. </view>
  38. </view>
  39. <view class="panel">
  40. <view class="panel__title">本局对象预览</view>
  41. <view class="summary">进入地图前先用已知信息做预览,最终绑定以后端 launch 返回结果为准。</view>
  42. <view class="row">
  43. <view class="row__label">地点</view>
  44. <view class="row__value">{{runtimePlaceText}}</view>
  45. </view>
  46. <view class="row">
  47. <view class="row__label">地图</view>
  48. <view class="row__value">{{runtimeMapText}}</view>
  49. </view>
  50. <view class="row">
  51. <view class="row__label">赛道</view>
  52. <view class="row__value">{{runtimeVariantText}}</view>
  53. </view>
  54. <view class="row">
  55. <view class="row__label">RouteCode</view>
  56. <view class="row__value">{{runtimeRouteCodeText}}</view>
  57. </view>
  58. <view class="preview-card" wx:if="{{previewVisible}}">
  59. <view class="preview-card__header">
  60. <view class="preview-card__title">地图预览</view>
  61. <view class="preview-card__status">{{previewStatusText}}</view>
  62. </view>
  63. <view class="preview-card__variant">{{previewVariantText}}</view>
  64. <view class="preview-frame">
  65. <view class="preview-stage">
  66. <image
  67. wx:for="{{previewTiles}}"
  68. wx:key="url"
  69. class="preview-tile"
  70. src="{{item.url}}"
  71. mode="scaleToFill"
  72. style="{{item.styleText}}"
  73. />
  74. <view class="preview-wash"></view>
  75. <view
  76. wx:for="{{previewControls}}"
  77. wx:key="styleText"
  78. class="preview-control {{item.kindClass}}"
  79. style="{{item.styleText}}"
  80. ></view>
  81. <view wx:if="{{previewLoading}}" class="preview-loading">预览加载中...</view>
  82. </view>
  83. </view>
  84. <view class="summary">{{previewHintText}}</view>
  85. </view>
  86. </view>
  87. <view class="panel" wx:if="{{showVariantSelector}}">
  88. <view class="panel__title">赛道选择</view>
  89. <view class="summary">如果当前活动支持手动选赛道,请先在这里确认你的本局路线。</view>
  90. <view wx:if="{{!selectableVariants.length}}" class="summary">{{variantSelectorEmptyText}}</view>
  91. <view wx:if="{{selectableVariants.length}}" class="variant-list">
  92. <view wx:for="{{selectableVariants}}" wx:key="id" class="variant-card {{item.selected ? 'variant-card--active' : ''}}" data-variant-id="{{item.id}}" bindtap="handleSelectVariant">
  93. <view class="variant-card__main">
  94. <view class="variant-card__title-row">
  95. <text class="variant-card__name">{{item.name}}</text>
  96. <text class="variant-card__badge" wx:if="{{item.selected}}">已选中</text>
  97. </view>
  98. <text class="variant-card__meta">{{item.routeCodeText}}</text>
  99. <text class="variant-card__meta">{{item.descriptionText}}</text>
  100. </view>
  101. </view>
  102. </view>
  103. </view>
  104. <view class="panel">
  105. <view class="panel__title">设备准备</view>
  106. <view class="summary">定位权限建议先在这里确认;如果需要心率带,也建议先连接后再进入地图。</view>
  107. <view class="row">
  108. <view class="row__label">定位状态</view>
  109. <view class="row__value">{{locationStatusText}}</view>
  110. </view>
  111. <view class="summary" wx:if="{{locationPermissionGranted && !locationBackgroundPermissionGranted}}">已完成前台定位授权;如果后续需要后台持续定位,请在系统设置中补齐后台权限。</view>
  112. <view class="actions">
  113. <button class="btn btn--secondary" bindtap="handleRequestLocationPermission">申请定位权限</button>
  114. <button class="btn btn--ghost" bindtap="handleOpenLocationSettings">打开系统设置</button>
  115. </view>
  116. <view class="row">
  117. <view class="row__label">心率带</view>
  118. <view class="row__value">{{heartRateStatusText}}</view>
  119. </view>
  120. <view class="row">
  121. <view class="row__label">当前设备</view>
  122. <view class="row__value">{{heartRateDeviceText}}</view>
  123. </view>
  124. <view class="row">
  125. <view class="row__label">扫描状态</view>
  126. <view class="row__value">{{heartRateScanText}}</view>
  127. </view>
  128. <view class="row" wx:if="{{showMockSourceSummary}}">
  129. <view class="row__label">模拟源</view>
  130. <view class="row__value">{{mockSourceStatusText}}</view>
  131. </view>
  132. <view class="actions">
  133. <button class="btn btn--secondary" bindtap="handleOpenHeartRateDevicePicker">选择设备</button>
  134. <button class="btn btn--ghost" bindtap="handlePrepareHeartRateConnect">重新扫描</button>
  135. <button class="btn btn--ghost" bindtap="handlePrepareHeartRateDisconnect">断开连接</button>
  136. <button class="btn btn--ghost" bindtap="handlePrepareHeartRateClearPreferred">清除首选</button>
  137. </view>
  138. </view>
  139. <view class="panel">
  140. <view class="panel__title">进入地图</view>
  141. <view class="summary">进入地图后无需再次点开始;按玩法规则前往开始点,即可正式开始比赛。</view>
  142. <view wx:if="{{launchInFlight}}" class="launch-progress">
  143. <view class="launch-progress__row">
  144. <text class="launch-progress__label">当前进度</text>
  145. <text class="launch-progress__value">{{launchProgressText}}</text>
  146. </view>
  147. <view class="launch-progress__track">
  148. <view class="launch-progress__fill" style="width: {{launchProgressPercent}}%;"></view>
  149. </view>
  150. </view>
  151. <view class="actions">
  152. <button class="btn btn--secondary" bindtap="handleBack" disabled="{{launchInFlight}}">返回活动页</button>
  153. <button class="btn btn--ghost" bindtap="handleRefresh" disabled="{{launchInFlight}}">刷新</button>
  154. <button class="btn btn--primary" bindtap="handleLaunch" disabled="{{!canLaunch || launchInFlight}}">{{launchInFlight ? '正在进入地图...' : '进入地图'}}</button>
  155. </view>
  156. </view>
  157. </view>
  158. <view wx:if="{{showHeartRateDevicePicker}}" class="picker-mask" bindtap="handleCloseHeartRateDevicePicker"></view>
  159. <view wx:if="{{showHeartRateDevicePicker}}" class="picker-sheet">
  160. <view class="picker-sheet__header">
  161. <view class="picker-sheet__title">选择心率带设备</view>
  162. <button class="picker-sheet__close" bindtap="handleCloseHeartRateDevicePicker">关闭</button>
  163. </view>
  164. <view class="summary">扫描状态:{{heartRateScanText}}</view>
  165. <view wx:if="{{!heartRateDiscoveredDevices.length}}" class="summary">当前还没有发现设备,可先点“重新扫描”。</view>
  166. <view wx:if="{{heartRateDiscoveredDevices.length}}" class="device-list">
  167. <view wx:for="{{heartRateDiscoveredDevices}}" wx:key="deviceId" class="device-card">
  168. <view class="device-card__main">
  169. <view class="device-card__title-row">
  170. <text class="device-card__name">{{item.name}}</text>
  171. <text class="device-card__badge" wx:if="{{item.preferred}}">首选</text>
  172. <text class="device-card__badge device-card__badge--active" wx:if="{{item.connected}}">已连接</text>
  173. </view>
  174. <text class="device-card__meta">{{item.rssiText}}</text>
  175. </view>
  176. <button class="btn {{item.connected ? 'btn--ghost' : 'btn--secondary'}} device-card__action" data-device-id="{{item.deviceId}}" bindtap="handlePrepareHeartRateDeviceConnect">{{item.connected ? '已连接' : '连接'}}</button>
  177. </view>
  178. </view>
  179. </view>
  180. </scroll-view>