index.wxml 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. <view class="page-container">
  2. <!-- 背景图片放在最底层 -->
  3. <view class="map-container" style="height: {{layoutConfig.map * 100}}vh">
  4. <map
  5. id="map"
  6. longitude="118.0"
  7. latitude="36.5"
  8. scale="7"
  9. markers="{{markers}}"
  10. bindmarkertap="onMarkerTap"
  11. longitude="{{longitude}}"
  12. latitude="{{latitude}}"
  13. scale="{{scale}}"
  14. markers="{{markers}}"
  15. style="width: 100%; height: 60vh;"
  16. ></map>
  17. <view class="map-fade"></view>
  18. </view>
  19. <!-- 自定义全屏弹窗 -->
  20. <view
  21. wx:if="{{showImageModal}}"
  22. class="custom-modal"
  23. bindtap="hideImageModal"
  24. >
  25. <!-- 弹窗内容容器(阻止事件冒泡) -->
  26. <view
  27. class="modal-content"
  28. catchtap="stopPropagation"
  29. >
  30. <!-- 可滚动区域(增加最小高度确保内容完整显示) -->
  31. <scroll-view
  32. scroll-y
  33. class="scroll-container"
  34. style="height: 70vh;"
  35. >
  36. <!-- 图片 -->
  37. <image
  38. src="{{currentMarker.imageUrl}}"
  39. mode="widthFix"
  40. class="modal-image"
  41. />
  42. <!-- 主要内容区域 -->
  43. <view class="main-content">
  44. <!-- 标题和地址 -->
  45. <view class="header">
  46. <view class="modal-title">{{currentMarker.title}}</view>
  47. <view class="modal-address">
  48. <text class="icon">📍</text>
  49. {{currentMarker.address}}
  50. </view>
  51. </view>
  52. <!-- 描述文本 -->
  53. <view class="modal-description">
  54. {{currentMarker.description}}
  55. </view>
  56. <!-- 详情列表部分 -->
  57. <view class="detail-list">
  58. <block wx:for="{{currentMarker.detail}}" wx:key="label">
  59. <view class="detail-item {{item.label.includes('门票') ? 'highlight-item' : ''}}">
  60. <text class="detail-label">{{item.label}}</text>
  61. <view class="detail-value-container">
  62. <text wx:if="{{!item.label.includes('门票')}}">{{item.value}}</text>
  63. <block wx:else>
  64. <text class="{{item.value === '免费' ? 'free-text' : 'fee-text'}}">
  65. {{item.value}}
  66. </text>
  67. <text wx:if="{{item.value === '免费'}}" class="free-badge">免费</text>
  68. </block>
  69. </view>
  70. </view>
  71. </block>
  72. </view>
  73. </view>
  74. </scroll-view>
  75. <!-- 底部操作栏 -->
  76. <view class="action-bar">
  77. <button class="nav-btn" bindtap="openLocation">
  78. 导航前往
  79. </button>
  80. <button class="close-btn" bindtap="hideImageModal">
  81. 关闭
  82. </button>
  83. </view>
  84. </view>
  85. <!-- 顶部关闭图标 -->
  86. <view class="top-close" bindtap="hideImageModal">
  87. <text class="close-icon">×</text>
  88. </view>
  89. </view>
  90. <view class="menu">
  91. <view class="service-container">
  92. <block wx:for="{{weightedMenuItems}}" wx:key="url">
  93. <view
  94. class="item-container {{item.isTop ? 'main-item' : 'side-item'}}"
  95. style="{{item.isTop ? '' : (index < 1 ? 'order:2' : 'order:3')}}"
  96. >
  97. <view class="item-frame" bindtap="navigateTopage" data-url="{{item.url}}">
  98. <view class="item-content">
  99. <view class="icon-container">
  100. <image src="{{item.icon}}" class="img"/>
  101. </view>
  102. <text class="title">{{item.title}}</text>
  103. </view>
  104. <view wx:if="{{item.isTop}}" class="top-tag">推荐</view>
  105. </view>
  106. </view>
  107. </block>
  108. </view>
  109. </view>
  110. <view class="vr-container" style="height: {{layoutConfig.vr * 100}}vh">
  111. <view class="section-header">
  112. <text class="section-title">VR全景体验</text>
  113. <view class="brush-stroke"></view>
  114. </view>
  115. <!-- VR全景体验模块 -->
  116. <!-- 横向滚动VR列表 -->
  117. <scroll-view
  118. class="vr-scroll"
  119. scroll-x
  120. enhanced
  121. show-scrollbar="{{false}}"
  122. >
  123. <view class="vr-list">
  124. <block wx:for="{{vrList}}" wx:key="id">
  125. <view
  126. class="vr-card"
  127. bindtap="showWebView"
  128. data-url="{{item.url}}"
  129. data-title="{{item.title}}"
  130. >
  131. <image src="{{item.thumb}}" mode="aspectFill" class="vr-image"/>
  132. <view class="vr-info">
  133. <text class="vr-title">{{item.title}}</text>
  134. <text class="vr-desc">{{item.desc}}</text>
  135. </view>
  136. </view>
  137. </block>
  138. </view>
  139. </scroll-view>
  140. </view>
  141. <!-- WebView弹窗 -->
  142. <view wx:if="{{showWebView}}" class="vr-modal">
  143. <view class="modal-header">
  144. <text class="modal-title">{{currentVrTitle}}</text>
  145. <text class="close-btn" bindtap="hideWebView">×</text>
  146. </view>
  147. <web-view
  148. src="{{webViewUrl}}"
  149. style="height: 85vh; width: 100%;"
  150. ></web-view>
  151. </view>
  152. <!-- 悬浮按钮容器 -->
  153. <view class="float-container">
  154. <!-- 悬浮按钮 -->
  155. <image
  156. src="/images/鸽子.png"
  157. class="float-btn {{walking ? 'walking' : ''}}"
  158. bindtap="showFloatMenu"
  159. bindtouchstart="touchStart"
  160. bindtouchmove="touchMove"
  161. bindtouchend="touchEnd"
  162. style="left: {{positionX}}px; top: {{positionY}}px;"
  163. ></image>
  164. <!-- 弹出菜单 -->
  165. <view class="float-menu" wx:if="{{showMenu}}">
  166. <view class="menu-item"><navigator url="/pages/quiz/quiz">红史问答堂</navigator></view>
  167. </view>
  168. </view>
  169. <!-- 遮罩层 -->
  170. <view class="mask" wx:if="{{showMenu}}" bindtap="hideFloatMenu"></view>
  171. <view class="dynamic-features">
  172. <block wx:for="{{featureLayout}}" wx:key="feature">
  173. <view
  174. class="feature-item {{item.size}}"
  175. bindtap="navigateToFeature"
  176. data-feature="{{item.feature}}"
  177. >
  178. <image
  179. src="{{getFeatureImage(item.feature)}}"
  180. mode="aspectFit"
  181. class="feature-icon"
  182. />
  183. <text class="feature-title">{{getFeatureName(item.feature)}}</text>
  184. </view>
  185. </block>
  186. </view>
  187. </view>