other-detail.wxml 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. <!--module/order/pages/other-detail/other-detail.wxml-->
  2. <t-navbar title="{{title}}" left-arrow />
  3. <scroll-view class="page-scroll__container" type="list" scroll-y style="{{containerStyle}}">
  4. <view class="info-box">
  5. </view>
  6. <!-- 实体商品 -->
  7. <view>
  8. <view class="goods-list" wx:if="{{sellTypeFirstItems.length > 0}}">
  9. <view class="category-title">实体商品</view>
  10. <view wx:for="{{sellTypeFirstItems}}" wx:for-item="goods" wx:for-index="goodsIndex" wx:key="id">
  11. <!-- 线下取货小标题:当遇到第一个线下取货商品时显示 -->
  12. <view class="offline-title" wx:if="{{goods.receiptType === '1' && (goodsIndex === 0 || sellTypeFirstItems[goodsIndex - 1].receiptType === '0')}}">线下取货</view>
  13. <!-- 快递信息 -->
  14. <view bindtap="{{goods.receiptStatus !== '0' ? 'goLogistics' : ''}}" data-goods="{{goods}}">
  15. <view class="express-info" wx:if="{{goods.receiptType === '0' && goods.receiptStatus === '1'}}">
  16. <view class="express-text">
  17. <view style="font-weight:600;margin-right: 10rpx;display: flex;align-items: center;">
  18. <text style="font-size: 25rpx;"> 快件{{goodsIndex + 1}}</text>
  19. <!-- <i class="iconfont {{goods.expressTypeIcon}}" style="font-size:15px" wx:if="{{goods.expressTypeIcon}}"></i> -->
  20. </view>
  21. <view style="color:#9b9797;font-size: 25rpx;">{{goods.expressTypeName}} {{goods.expressNo}}</view>
  22. </view>
  23. <t-icon name="chevron-right" color="#000" size="40rpx" slot="note" />
  24. </view>
  25. <view class="goods-status {{goods.statusClass}}" wx:if="{{goods.statusText && orderStatus !== 'closed'}}">{{goods.statusText}}</view>
  26. </view>
  27. <view>
  28. <view class="goods-item">
  29. <image class="goods-image" src="{{goods.image}}" mode="aspectFill" wx:if="{{goods.image}}" />
  30. <view class="service-package-placeholder" wx:else>
  31. <text class="placeholder-icon">📦</text>
  32. </view>
  33. <view class="goods-info">
  34. <view class="goods-name-row">
  35. <text class="goods-name">{{goods.name}}</text>
  36. <text class="goods-price">¥{{goods.price}}</text>
  37. </view>
  38. <view class="goods-desc-row">
  39. <view class="goods-desc" wx:if="{{goods.description}}">{{goods.description}}</view>
  40. <view class="quantity-text">x{{goods.quantity}}</view>
  41. </view>
  42. <!-- 确认收货按钮 -->
  43. <view class="confirm-receipt-btn" wx:if="{{goods.receiptStatus === '1'}}" bindtap="onConfirmReceipt" data-patientConditioningRecordId="{{goods.patientConditioningRecordId}}" data-index="{{goodsIndex}}">
  44. 确认收货
  45. </view>
  46. <!-- 申请售后 + 退款状态 + 评价 -->
  47. <view class="action-btns">
  48. <view class="btn-aftersale" wx:if="{{goods.isShowAftersaleButton}}" catchtap="onApplyAfterSale" data-goods="{{goods}}">申请售后</view>
  49. <view class="btn-aftersale-status" wx:elif="{{goods.aftersaleProgressStr}}" catchtap="onAftersaleProgress" data-goods="{{goods}}">{{goods.aftersaleProgressStr}}</view>
  50. <view class="btn-review" catchtap="onReview" data-goods="{{goods}}" wx:if="{{goods.isCanEvaluate}}">{{goods.evaluateTime?"已评价":"评价"}}</view>
  51. </view>
  52. </view>
  53. </view>
  54. </view>
  55. </view>
  56. </view>
  57. <!-- 线下服务商品 -->
  58. <view class="goods-list" wx:if="{{sellTypeSecondItems.length > 0}}">
  59. <view class="category-title">线下服务商品</view>
  60. <view wx:for="{{sellTypeSecondItems}}" wx:for-item="goods" wx:for-index="goodsIndex" wx:key="id" data-id="{{goods.id}}" bindtap="goAppointment">
  61. <view>
  62. <view class="goods-status {{goods.statusClass}}" wx:if="{{goods.statusText && orderStatus !== 'closed'}}">{{goods.statusText}}</view>
  63. <view class="goods-item">
  64. <image class="goods-image" src="{{goods.image}}" mode="aspectFill" wx:if="{{goods.image}}" />
  65. <view class="service-package-placeholder" wx:else>
  66. <text class="placeholder-icon">📦</text>
  67. </view>
  68. <view class="goods-info">
  69. <view class="goods-name-row">
  70. <text class="goods-name">{{goods.name}}</text>
  71. <text class="goods-price">¥{{goods.price}}</text>
  72. </view>
  73. <view class="goods-desc-row">
  74. <view class="goods-desc" wx:if="{{goods.description}}">{{goods.description}}</view>
  75. <view class="quantity-text">x{{goods.quantity}}</view>
  76. </view>
  77. <!-- 申请售后 + 退款状态 + 评价 -->
  78. <view class="action-btns" catchtap="preventTap">
  79. <view class="btn-aftersale" wx:if="{{goods.isShowAftersaleButton}}" catchtap="onApplyAfterSale" data-goods="{{goods}}">申请售后</view>
  80. <view class="btn-aftersale-status" wx:elif="{{goods.aftersaleProgressStr}}" catchtap="onAftersaleProgress" data-goods="{{goods}}">{{goods.aftersaleProgressStr}}</view>
  81. <view class="btn-review" catchtap="onReview" data-goods="{{goods}}" wx:if="{{goods.isCanEvaluate}}">{{goods.evaluateTime?"已评价":"评价"}}</view>
  82. </view>
  83. </view>
  84. </view>
  85. </view>
  86. </view>
  87. </view>
  88. <!-- 线上权益商品 -->
  89. <view class="goods-list" wx:if="{{sellTypeThirdItems.length > 0}}">
  90. <view class="category-title">线上权益商品</view>
  91. <view wx:for="{{sellTypeThirdItems}}" wx:for-item="goods" wx:for-index="goodsIndex" wx:key="id">
  92. <view>
  93. <view class="goods-status {{goods.statusClass}}" wx:if="{{goods.statusText && orderStatus !== 'closed'}}">{{goods.statusText}}</view>
  94. <view class="goods-item">
  95. <image class="goods-image" src="{{goods.image}}" mode="aspectFill" wx:if="{{goods.image}}" />
  96. <view class="service-package-placeholder" wx:else>
  97. <text class="placeholder-icon">📦</text>
  98. </view>
  99. <view class="goods-info">
  100. <view class="goods-name-row">
  101. <text class="goods-name">{{goods.name}}</text>
  102. <text class="goods-price">¥{{goods.price}}</text>
  103. </view>
  104. <view class="goods-desc-row">
  105. <view class="goods-desc" wx:if="{{goods.description}}">{{goods.description}}</view>
  106. <view class="quantity-text">x{{goods.quantity}}</view>
  107. </view>
  108. <!-- 申请售后 + 退款状态 + 评价 -->
  109. <view class="action-btns">
  110. <view class="btn-aftersale" wx:if="{{goods.isShowAftersaleButton}}" catchtap="onApplyAfterSale" data-goods="{{goods}}">申请售后</view>
  111. <view class="btn-aftersale-status" wx:elif="{{goods.aftersaleProgressStr}}" catchtap="onAftersaleProgress" data-goods="{{goods}}">{{goods.aftersaleProgressStr}}</view>
  112. <view class="btn-review" catchtap="onReview" data-goods="{{goods}}" wx:if="{{goods.isCanEvaluate}}">{{goods.evaluateTime?"已评价":"评价"}}</view>
  113. </view>
  114. </view>
  115. </view>
  116. </view>
  117. </view>
  118. </view>
  119. <!-- 商品总价 -->
  120. <view class="price-total-wrapper">
  121. <view class="price-total">
  122. <text class="price-label">商品总价:</text>
  123. <text class="price-value">¥{{orderDetail.cost}}</text>
  124. </view>
  125. </view>
  126. </view>
  127. <!-- 实际付款 -->
  128. <view class="price-summary-section">
  129. <view class="price-summary-card price-row">
  130. <text class="price-label">{{orderStatus==='closed'?'应付款':'实付款'}}:</text>
  131. <text class="price-value payable-value">¥{{orderStatus === 'received' ? orderDetail.realAmount : orderDetail.cost}}</text>
  132. </view>
  133. </view>
  134. <!-- 最下方的信息 -->
  135. <view class="order-info-section">
  136. <!-- 备注 -->
  137. <view class="info-card">
  138. <view class="remark-item">
  139. <text class="info-label">备注</text>
  140. <view class="remark-input-wrapper">
  141. <textarea class="remark-textarea" placeholder="请输入备注信息" value="{{orderDetail.remark || '无'}}" maxlength="200" bindinput="onRemarkInput" auto-height show-confirm-bar="{{false}}" disabled="{{orderStatus!=='pending'}}" />
  142. <view class="remark-count">
  143. <text class="remark-count-text" wx:if="{{orderDetail.remark}}">{{remarkLength}}/200</text>
  144. </view>
  145. </view>
  146. </view>
  147. </view>
  148. <!-- 订单详情 -->
  149. <view class="info-card">
  150. <view class="info-item" wx:if="{{orderDetail.orderNo}}">
  151. <text class="info-label" style="font-weight:600">订单编号</text>
  152. <view class="info-value-row">
  153. <text class="info-value">{{orderDetail.orderNo || ''}}</text>
  154. <text class="copy-btn" bindtap="copyOrderNo" data-orderno="{{orderDetail.orderNo}}">复制</text>
  155. </view>
  156. </view>
  157. <view class="info-divider"></view>
  158. <view class="info-item">
  159. <text class="info-label">创建时间</text>
  160. <text class="info-value">{{orderDetail.operateTime || ''}}</text>
  161. </view>
  162. <view class="info-divider"></view>
  163. <view class="info-item" wx:if="{{orderStatus!=='closed'}}">
  164. <text class="info-label">付款时间</text>
  165. <text class="info-value">{{orderDetail.payTime || ''}}</text>
  166. </view>
  167. <view class="info-divider" wx:if="{{orderStatus!=='closed'}}"></view>
  168. <view class="info-item" wx:if="{{orderStatus==='completed'}}">
  169. <text class="info-label">成交时间</text>
  170. <text class="info-value">{{orderDetail.finishTime || ''}}</text>
  171. </view>
  172. <view class="info-divider" wx:if="{{orderStatus==='completed'}}"></view>
  173. <view class="info-item" wx:if="{{orderStatus==='closed'}}">
  174. <text class="info-label">关闭时间</text>
  175. <text class="info-value">{{orderDetail.cancelTime || ''}}</text>
  176. </view>
  177. <view class="info-divider" wx:if="{{orderStatus==='closed'}}"></view>
  178. <view class="info-item" wx:if="{{orderStatus!=='closed'}}">
  179. <text class="info-label">微信交易号</text>
  180. <text class="info-value">{{orderDetail.payTransactionNo || ''}}</text>
  181. </view>
  182. </view>
  183. <!-- 服务包详情 -->
  184. <view class="info-card">
  185. <view class="info-item" wx:if="{{orderDetail.conditioningWrapName}}">
  186. <text class="info-label" style="font-weight:600">服务包</text>
  187. <text class="info-value">{{orderDetail.conditioningWrapName || ''}}</text>
  188. </view>
  189. <view class="info-divider" wx:if="{{orderDetail.operateBy}}"></view>
  190. <view class="info-item" wx:if="{{orderDetail.operateBy}}">
  191. <text class="info-label">开具医生</text>
  192. <text class="info-value">{{orderDetail.operateBy || ''}}</text>
  193. </view>
  194. <view class="info-divider" wx:if="{{orderDetail.operateTime}}"></view>
  195. <view class="info-item" wx:if="{{orderDetail.operateTime}}">
  196. <text class="info-label">开具时间</text>
  197. <text class="info-value">{{orderDetail.operateTime || ''}}</text>
  198. </view>
  199. <view class="info-divider" wx:if="{{orderDetail.estimatedStartDate}}"></view>
  200. <view class="info-item" wx:if="{{orderDetail.estimatedStartDate}}">
  201. <text class="info-label">开始调养日期</text>
  202. <text class="info-value">{{orderDetail.estimatedStartDate || ''}}</text>
  203. </view>
  204. </view>
  205. </view>
  206. </scroll-view>
  207. <after-sale-type-popup
  208. visible="{{afterSalePopupVisible}}"
  209. site-option="{{afterSaleSiteOption}}"
  210. bind:close="onAfterSalePopupClose"
  211. bind:next="onAfterSaleNext"
  212. />
  213. <refund-reason-popup
  214. visible="{{refundReasonPopupVisible}}"
  215. initial-reason="{{selectedRefundReason}}"
  216. bind:close="onRefundReasonPopupClose"
  217. bind:next="onRefundReasonNext"
  218. />
  219. <refund-confirm-popup
  220. visible="{{refundConfirmPopupVisible}}"
  221. goods-name="{{afterSaleSiteOption.name}}"
  222. goods-image="{{afterSaleSiteOption.image}}"
  223. goods-price="{{afterSaleSiteOption.price}}"
  224. goods-meta1="{{afterSaleSiteOption.meta1}}"
  225. goods-meta2="{{afterSaleSiteOption.meta2}}"
  226. refund-reason="{{selectedRefundReason}}"
  227. refund-status="{{refundStatus}}"
  228. refund-amount="{{refundAmount}}"
  229. max-amount="{{refundMaxAmount}}"
  230. proof-images="{{refundProofImages}}"
  231. show-receipt-status="{{afterSaleSiteOption.sellType === '1'}}"
  232. bind:close="onRefundConfirmClose"
  233. bind:changeStatus="onChangeRefundStatus"
  234. bind:editReason="onOpenRefundReasonAgain"
  235. bind:editProof="onOpenRefundProofEditor"
  236. bind:amountConfirm="onRefundAmountConfirm"
  237. bind:submit="onSubmitRefundApply"
  238. />
  239. <refund-proof-popup
  240. visible="{{refundProofPopupVisible}}"
  241. desc="{{refundDesc}}"
  242. images="{{refundProofImages}}"
  243. bind:close="onRefundProofPopupClose"
  244. bind:confirm="onRefundProofConfirm"
  245. />