order.wxml 8.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. <view class="order-page {{isCharter ? 'charter-theme' : ''}}">
  2. <!-- 活动信息 -->
  3. <view class="activity-header">
  4. <view class="activity-title">{{activityName}}</view>
  5. </view>
  6. <!-- 班次信息 -->
  7. <view class="schedule-card {{isCharter ? 'charter-card' : ''}}">
  8. <view class="schedule-header">
  9. <view class="schedule-title">{{isCharter ? '包车服务' : '班次信息'}}</view>
  10. <view class="schedule-type">{{schedule.type === 'business-charter' ? '专车包车' : (schedule.type === 'business-share' ? '商务拼车' : '大巴拼车')}}</view>
  11. </view>
  12. <view class="schedule-details">
  13. <view class="detail-row">
  14. <text class="label">出发时间:</text>
  15. <text class="value">{{schedule.time}}</text>
  16. </view>
  17. <view class="detail-row">
  18. <text class="label">车辆型号:</text>
  19. <text class="value">{{schedule.model}}</text>
  20. </view>
  21. <view class="detail-row">
  22. <text class="label">上车地点:</text>
  23. <text class="value">{{schedule.fromLoc}}</text>
  24. </view>
  25. <view class="detail-row">
  26. <text class="label">下车地点:</text>
  27. <text class="value">{{schedule.toLoc}}</text>
  28. </view>
  29. <view class="detail-row">
  30. <text class="label">行程时长:</text>
  31. <text class="value">{{schedule.duration}}</text>
  32. </view>
  33. <view class="detail-row">
  34. <text class="label">{{isCharter ? '包车价格' : '单人票价'}}:</text>
  35. <text class="value price">¥{{schedule.price}}{{isCharter ? '/车' : '/人'}}</text>
  36. </view>
  37. <view wx:if="{{!isCharter}}" class="detail-row">
  38. <text class="label">剩余座位:</text>
  39. <text class="value">{{schedule.left}}个</text>
  40. </view>
  41. </view>
  42. <view class="policy-info">
  43. <text class="policy-text">{{schedule.refundPolicy}}</text>
  44. </view>
  45. </view>
  46. <!-- 手机号获取 -->
  47. <view class="phone-section">
  48. <view class="section-title">联系方式</view>
  49. <view wx:if="{{hasPhoneNumber}}" class="phone-display">
  50. <view class="phone-info">
  51. <text class="phone-icon">📱</text>
  52. <text class="phone-number">{{phoneNumber}}</text>
  53. <text class="phone-status">已验证</text>
  54. </view>
  55. </view>
  56. <button wx:else
  57. open-type="getPhoneNumber"
  58. bindgetphonenumber="onGetPhoneNumber"
  59. class="phone-btn {{isCharter ? 'charter-btn' : ''}}">
  60. <text class="btn-icon">📱</text>
  61. 微信一键获取手机号
  62. </button>
  63. </view>
  64. <!-- 乘车人信息 -->
  65. <view class="passenger-section">
  66. <view class="section-header">
  67. <view class="section-title">{{isCharter ? '乘车人信息' : '购票人信息'}}</view>
  68. <view class="passenger-count">{{passengers.length}}{{isCharter ? '人' : '张票'}}</view>
  69. </view>
  70. <view wx:if="{{passengers.length > 0}}" class="passenger-list">
  71. <view wx:for="{{passengers}}" wx:key="index" class="passenger-item">
  72. <view class="passenger-info">
  73. <view class="passenger-name">{{item.name}}</view>
  74. <view class="passenger-details">
  75. <text class="id-type">{{item.idtype}}</text>
  76. <text class="id-number">{{item.idcard}}</text>
  77. </view>
  78. <view class="passenger-phone">{{item.phone}}</view>
  79. </view>
  80. <button class="delete-btn" bindtap="deletePassenger" data-index="{{index}}">删除</button>
  81. </view>
  82. </view>
  83. <button class="add-passenger-btn {{isCharter ? 'charter-btn' : ''}}"
  84. bindtap="addPassenger">
  85. <text class="btn-icon">➕</text>
  86. {{passengers.length === 0 ? '添加乘车人' : '继续添加'}}
  87. </button>
  88. <view wx:if="{{!isCharter && passengers.length > 0}}" class="passenger-tip">
  89. <text class="tip-text">最多可购买{{schedule.left}}张票</text>
  90. </view>
  91. </view>
  92. <!-- 会员折扣和优惠券 -->
  93. <view class="discount-section">
  94. <!-- 会员信息 -->
  95. <view class="member-info">
  96. <view class="member-level">
  97. <text class="level-icon">{{memberLevel.icon}}</text>
  98. <text class="level-name">{{memberLevel.name}}</text>
  99. <text class="discount-text">享受{{(1-memberLevel.discount)*100}}折优惠</text>
  100. </view>
  101. </view>
  102. <!-- 优惠券选择 -->
  103. <view class="coupon-section" bindtap="selectCoupon">
  104. <view class="coupon-info">
  105. <text class="coupon-icon">🎫</text>
  106. <view class="coupon-text">
  107. <text wx:if="{{selectedCoupon}}" class="coupon-selected">{{selectedCoupon.name}} (-¥{{selectedCoupon.value}})</text>
  108. <text wx:else class="coupon-placeholder">{{availableCoupons.length > 0 ? '选择优惠券' : '暂无可用优惠券'}}</text>
  109. </view>
  110. </view>
  111. <text class="arrow">></text>
  112. </view>
  113. </view>
  114. <!-- 价格统计 -->
  115. <view class="price-section {{isCharter ? 'charter-price' : ''}}">
  116. <view class="price-breakdown">
  117. <view wx:if="{{isCharter}}" class="price-item">
  118. <text class="price-label">包车费用</text>
  119. <text class="price-value">¥{{schedule.price}}</text>
  120. </view>
  121. <view wx:else class="price-item">
  122. <text class="price-label">票价 × {{passengers.length}}人</text>
  123. <text class="price-value">¥{{schedule.price}} × {{passengers.length}}</text>
  124. </view>
  125. <view class="price-item">
  126. <text class="price-label">原价小计</text>
  127. <text class="price-value">¥{{originalPrice}}</text>
  128. </view>
  129. <view wx:if="{{memberDiscount > 0}}" class="price-item discount">
  130. <text class="price-label">{{memberLevel.name}}折扣</text>
  131. <text class="price-value discount-value">-¥{{memberDiscount}}</text>
  132. </view>
  133. <view wx:if="{{selectedCoupon}}" class="price-item discount">
  134. <text class="price-label">优惠券</text>
  135. <text class="price-value discount-value">-¥{{couponDiscount}}</text>
  136. </view>
  137. </view>
  138. <view class="total-price">
  139. <text class="total-label">实付金额</text>
  140. <text class="total-value">¥{{totalPrice}}</text>
  141. </view>
  142. </view>
  143. <!-- 支付按钮 -->
  144. <view class="pay-section">
  145. <button class="pay-btn {{isCharter ? 'charter-pay-btn' : ''}}"
  146. bindtap="pay">
  147. <text class="pay-icon">💳</text>
  148. {{isCharter ? '立即包车支付' : '立即购票支付'}} ¥{{totalPrice}}
  149. </button>
  150. </view>
  151. <!-- 乘车人选择器模态框 -->
  152. <view wx:if="{{showPassengerSelector}}" class="passenger-modal-overlay" bindtap="closePassengerSelector">
  153. <view class="passenger-modal-content" catchtap="">
  154. <view class="passenger-modal-header">
  155. <view class="passenger-modal-title">选择乘车人</view>
  156. <button class="passenger-modal-close" bindtap="closePassengerSelector">✕</button>
  157. </view>
  158. <view class="passenger-modal-body">
  159. <view wx:if="{{savedPassengers.length === 0}}" class="no-saved-passengers">
  160. <view class="no-passengers-icon">👥</view>
  161. <view class="no-passengers-text">暂无已保存的乘车人</view>
  162. <view class="no-passengers-desc">添加后可快速选择</view>
  163. </view>
  164. <view wx:else class="saved-passenger-list">
  165. <view wx:for="{{savedPassengers}}" wx:key="id"
  166. class="saved-passenger-item"
  167. bindtap="selectSavedPassenger"
  168. data-id="{{item.id}}">
  169. <view class="saved-passenger-info">
  170. <view class="saved-passenger-name">{{item.name}}</view>
  171. <view class="saved-passenger-details">
  172. <text class="saved-passenger-type">{{item.idtype}}</text>
  173. <text class="saved-passenger-id">{{item.idcard}}</text>
  174. </view>
  175. <view class="saved-passenger-phone">{{item.phone}}</view>
  176. </view>
  177. <view class="select-icon">➕</view>
  178. </view>
  179. </view>
  180. </view>
  181. <view class="passenger-modal-actions">
  182. <button class="passenger-action-btn secondary" bindtap="addNewPassenger">
  183. ➕ 添加新乘车人
  184. </button>
  185. <button wx:if="{{savedPassengers.length > 0}}"
  186. class="passenger-action-btn primary"
  187. bindtap="managePassengers">
  188. 🔧 管理乘车人
  189. </button>
  190. </view>
  191. </view>
  192. </view>
  193. </view>