You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

267 lines
6.2 KiB

  1. <template>
  2. <view class="order-detail-page">
  3. <!-- 订单内容区域 -->
  4. <view class="order-detail-content">
  5. <!-- 服务地址组件 -->
  6. <service-address :address="orderDetail.address"></service-address>
  7. <!-- 服务宠物组件 -->
  8. <service-pets :pets="orderDetail.pets"></service-pets>
  9. <!-- 服务项目及费用组件 -->
  10. <service-items :items="orderDetail.items" :totalAmount="orderDetail.totalAmount"
  11. :discount="orderDetail.discount" :finalAmount="orderDetail.finalAmount"></service-items>
  12. <!-- 服务备注组件 -->
  13. <service-remarks :remarks="orderDetail.remarks"></service-remarks>
  14. <!-- 其他信息组件 -->
  15. <order-info :orderInfo="orderDetail.orderInfo"></order-info>
  16. </view>
  17. <!-- 底部按钮区域 -->
  18. <view class="order-detail-footer">
  19. <view class="footer-btn cancel-btn" v-if="orderDetail.status === '1'" @click="$refs.cancelOrderPopup.open()">
  20. <text>取消订单</text>
  21. </view>
  22. <view class="footer-btn pay-btn" v-if="orderDetail.status === '1'" @click="goToPay">
  23. <text>去付款</text>
  24. </view>
  25. <view class="footer-btn review-btn" @click="goToReview">
  26. <text>评价订单</text>
  27. </view>
  28. <view class="footer-btn contact-btn">
  29. <text>联系客服</text>
  30. </view>
  31. </view>
  32. <!-- 取消订单弹窗 -->
  33. <cancel-order-popup
  34. ref="cancelOrderPopup"
  35. @cancel="handleCancelOrder"
  36. ></cancel-order-popup>
  37. <!-- 客服组件 -->
  38. <Kefu></Kefu>
  39. </view>
  40. </template>
  41. <script>
  42. import Kefu from '@/pages/common/kefu.vue'
  43. import ServiceAddress from '@/pages_order/components/order/ServiceAddress.vue'
  44. import ServicePets from '@/pages_order/components/order/ServicePets.vue'
  45. import ServiceItems from '@/pages_order/components/order/ServiceItems.vue'
  46. import ServiceRemarks from '@/pages_order/components/order/ServiceRemarks.vue'
  47. import OrderInfo from '@/pages_order/components/order/OrderInfo.vue'
  48. import CancelOrderPopup from '@/pages_order/components/order/CancelOrderPopup.vue'
  49. import { getOrderList } from "@/api/system/user.js"
  50. import { getOpenIdKey } from '@/utils/auth'
  51. export default {
  52. components: {
  53. Kefu,
  54. ServiceAddress,
  55. ServicePets,
  56. ServiceItems,
  57. ServiceRemarks,
  58. OrderInfo,
  59. CancelOrderPopup
  60. },
  61. data() {
  62. return {
  63. orderId: null,
  64. orderDetail: {
  65. status: '1', // 1-待付款, 2-已接单, 3-服务中, 4-已完成
  66. address: {
  67. address: '上海青浦区盈港路888号1-2号-东部公寓',
  68. contact: '联系电话: 18629356678'
  69. },
  70. pets: [
  71. {
  72. name: '小咪',
  73. avatar: '/static/images/personal/pet.png',
  74. tag: '猫',
  75. gender: '女生',
  76. serviceDays: 2,
  77. serviceDates: ['03-20', '03-22']
  78. },
  79. {
  80. name: '小汪',
  81. avatar: '/static/images/personal/pet.png',
  82. tag: '狗',
  83. gender: '男生',
  84. serviceDays: 3,
  85. serviceDates: ['03-20', '03-22', '03-25']
  86. }
  87. ],
  88. items: [
  89. {
  90. id: '07-07',
  91. name: '专业喂养',
  92. price: 75.00,
  93. pet: '小咪',
  94. quantity: 1
  95. },
  96. {
  97. id: '07-08',
  98. name: '专业喂养 + 定制服务1项',
  99. price: 75.00,
  100. pet: '小汪',
  101. quantity: 1,
  102. customServices: [
  103. {
  104. name: '专业喂养',
  105. price: 75.00,
  106. quantity: 1
  107. },
  108. {
  109. name: '上门遛狗',
  110. price: 40.00,
  111. quantity: 1
  112. }
  113. ]
  114. },
  115. {
  116. id: '07-10',
  117. name: '专业喂养 + 定制服务2项',
  118. price: 95.00,
  119. pet: '小汪',
  120. quantity: 1,
  121. customServices: [
  122. {
  123. name: '专业喂养',
  124. price: 75.00,
  125. quantity: 1
  126. },
  127. {
  128. name: '上门遛狗',
  129. price: 40.00,
  130. quantity: 1
  131. },
  132. {
  133. name: '梳毛',
  134. price: 40.00,
  135. quantity: 1
  136. }
  137. ]
  138. }
  139. ],
  140. totalAmount: 290.00,
  141. discount: 10.00,
  142. memberDiscount: 20.00,
  143. finalAmount: 260.00,
  144. remarks: {
  145. paymentMethod: '存于平台账户',
  146. isUrgent: true,
  147. notes: '* 到达05/2楼\n* 猫咪很胆小,请轻声说话,保持安静。猫粮放在门口柜子上,猫砂盆在卫生间。\n* 狗狗很活泼,喜欢玩球,球放在客厅的篮子里。'
  148. },
  149. orderInfo: {
  150. orderNumber: 'fc241200396263',
  151. orderTime: '2024-12-03 13:05:57',
  152. paymentTime: '2024-12-03 13:06:06'
  153. }
  154. }
  155. };
  156. },
  157. onLoad(options) {
  158. if (options.id) {
  159. this.orderId = options.id;
  160. this.getOrderDetail();
  161. }
  162. },
  163. methods: {
  164. // 获取订单详情
  165. getOrderDetail() {
  166. // 实际项目中应调用API获取订单详情
  167. // 示例代码:
  168. /*
  169. const params = {
  170. openId: getOpenIdKey(),
  171. orderId: this.orderId
  172. };
  173. getOrderDetail(params).then(res => {
  174. if (res && res.code === 200) {
  175. this.orderDetail = res.data;
  176. }
  177. }).catch(err => {
  178. console.error('获取订单详情失败', err);
  179. });
  180. */
  181. // 这里使用模拟数据
  182. console.log('获取订单详情,ID:', this.orderId);
  183. },
  184. // 去付款
  185. goToPay() {
  186. uni.navigateTo({
  187. url: `/pages/details/order?id=${this.orderId}`
  188. });
  189. },
  190. // 去评价
  191. goToReview() {
  192. uni.navigateTo({
  193. url: `/pages_order/order/orderReview?id=${this.orderId}`
  194. });
  195. },
  196. // 处理取消订单
  197. handleCancelOrder() {
  198. }
  199. }
  200. }
  201. </script>
  202. <style lang="scss" scoped>
  203. .order-detail-page {
  204. background-color: #f5f5f5;
  205. min-height: 100vh;
  206. display: flex;
  207. flex-direction: column;
  208. }
  209. .order-detail-content {
  210. flex: 1;
  211. padding: 20rpx;
  212. }
  213. .order-detail-footer {
  214. display: flex;
  215. justify-content: flex-end;
  216. align-items: center;
  217. padding: 20rpx 30rpx;
  218. background-color: #FFFFFF;
  219. border-top: 1px solid #EEEEEE;
  220. .footer-btn {
  221. padding: 16rpx 30rpx;
  222. border-radius: 30rpx;
  223. font-size: 26rpx;
  224. margin-left: 20rpx;
  225. }
  226. .cancel-btn {
  227. background-color: #FFFFFF;
  228. color: #666;
  229. border: 1px solid #DDDDDD;
  230. }
  231. .pay-btn {
  232. background-color: #FFAA48;
  233. color: #FFFFFF;
  234. }
  235. .review-btn {
  236. background-color: #FFAA48;
  237. color: #FFFFFF;
  238. }
  239. .contact-btn {
  240. background-color: #FFFFFF;
  241. color: #666;
  242. border: 1px solid #DDDDDD;
  243. }
  244. }
  245. </style>