index.vue 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602
  1. <script setup lang="ts">
  2. import type { MapMarker, MapPolyline } from '@uni-helper/uni-types'
  3. import { StaticUrl } from '@/config'
  4. import router from '@/router'
  5. const plugins = requirePlugin('logisticsPlugin')
  6. const { statusBarHeight, MenuButtonHeight } = storeToRefs(useSysStore())
  7. const { userInfo } = storeToRefs(useUserStore())
  8. definePage({
  9. name: 'xsb-orderDetaile',
  10. islogin: true,
  11. style: {
  12. navigationBarTitleText: '订单详情',
  13. navigationStyle: 'custom',
  14. },
  15. })
  16. const collapse = ref(true)
  17. const orderInfo = ref<Api.xsbOrderList>()
  18. const orderNum = ref()
  19. const mapInfo = ref<Api.RiderInfo>()
  20. const mapMarkers = ref<MapMarker[]>([])
  21. const mapPolyLine = ref<MapPolyline[]>([])
  22. const showNode = ref(false)
  23. const NodeList = ref<Api.DeliveryNode[]>([])
  24. const refundStatus = ['进行中', '已完成', '退款成功', '已取消', '已驳回']
  25. const viewDevyBtn = computed(() => { // 2026.3.31,后端说这个字段返回的10是最新的快递,需要兼容1,所以1和10都需要显示
  26. return orderInfo.value?.actualTotal && [1, 10].includes(Number(orderInfo.value.dvyType))
  27. })
  28. const showMapStatus = [OrderStatus.OrderAccepted, OrderStatus.OrderWaitDelivery, OrderStatus.OrderDelivering, OrderStatus.OrderArrived]
  29. const mapStaticShopImg = {
  30. [OrderStatus.OrderAccepted]: `${StaticUrl}/order-map-jian.png`,
  31. [OrderStatus.OrderWaitDelivery]: `${StaticUrl}/order-map-wait.png`,
  32. [OrderStatus.OrderDelivering]: `${StaticUrl}/order-map-qishou.png`,
  33. [OrderStatus.OrderArrived]: `${StaticUrl}/order-map-qishou.png`,
  34. }
  35. const mapTextShop = {
  36. [OrderStatus.OrderAccepted]: '商家拣货中',
  37. [OrderStatus.OrderWaitDelivery]: orderInfo.value?.dvyType === 3 ? '等待骑手配送' : '待发货',
  38. [OrderStatus.OrderDelivering]: orderInfo.value?.dvyType === 3 ? '骑手配送中' : '待收货',
  39. [OrderStatus.OrderArrived]: '已送达',
  40. }
  41. const mapLation = computed(() => {
  42. const lation = {
  43. latitude: mapInfo.value?.shopLatitude,
  44. longitude: mapInfo.value?.shopLongitude,
  45. scale: 16,
  46. }
  47. if (orderInfo.value && mapInfo.value) {
  48. const lations = calculateCenterPointSpherical({ lat: orderInfo.value.latitude, lng: orderInfo.value.longitude }, { lat: mapInfo.value.shopLatitude as number, lng: mapInfo.value.shopLongitude as number })
  49. lation.latitude = lations.lat
  50. lation.longitude = lations.lng
  51. lation.scale = 6
  52. }
  53. return lation
  54. })
  55. onLoad((options: any) => {
  56. orderNum.value = options.id
  57. getDetail(options.id)
  58. })
  59. async function getDetail(id: string) {
  60. const { data } = await Apis.xsb.orderInfo({
  61. data: {
  62. orderNo: id,
  63. },
  64. })
  65. orderInfo.value = data
  66. if (showMapStatus.includes(data.hbOrderStatus)) {
  67. getOrderMapInf()
  68. }
  69. }
  70. function handleCollapse() {
  71. collapse.value = !collapse.value
  72. }
  73. async function handleCancel() {
  74. await useUserStore().handleCommonCancelOrder(orderInfo.value as Api.xsbOrderList)
  75. getDetail(String(unref(orderInfo)?.orderNumber))
  76. }
  77. async function handlePay() {
  78. const res = await useUserStore().handleCommonPayMent(String(unref(orderInfo)?.orderNumber))
  79. if (res.payType !== 1) {
  80. await useUserStore().getWxCommonPayment(res)
  81. getDetail(String(unref(orderInfo)?.orderNumber))
  82. }
  83. else {
  84. getDetail(String(unref(orderInfo)?.orderNumber))
  85. }
  86. }
  87. async function handelDel() {
  88. await useUserStore().handleCommonDeleteOrder(unref(orderInfo) as Api.xsbOrderList)
  89. router.back()
  90. }
  91. async function handleFinish() {
  92. uni.showLoading({ mask: true })
  93. setTimeout(async () => {
  94. await getDetail(String(unref(orderInfo)?.orderNumber))
  95. uni.hideLoading()
  96. }, 2000)
  97. }
  98. function handleCopy() {
  99. uni.setClipboardData({
  100. data: String(orderInfo.value?.orderNumber),
  101. showToast: true,
  102. })
  103. }
  104. async function handleAfterSale() {
  105. if (!orderInfo.value?.orderItemList) {
  106. useGlobalToast().show('商品异常!')
  107. return
  108. }
  109. await useSysStore().getRefunOrder(orderInfo.value.orderNumber as string)
  110. }
  111. async function getOrderMapInf() {
  112. const res = await Apis.xsb.riderInfo({ data: { orderNumber: orderNum.value } })
  113. mapInfo.value = res.data
  114. mapMarkers.value.push({
  115. id: 1,
  116. latitude: Number(mapInfo.value?.shopLatitude),
  117. longitude: Number(mapInfo.value?.shopLongitude),
  118. iconPath: mapStaticShopImg[orderInfo.value?.hbOrderStatus as keyof typeof mapStaticShopImg],
  119. width: 70,
  120. height: 80,
  121. label: {
  122. content: mapTextShop[orderInfo.value?.hbOrderStatus as keyof typeof mapTextShop],
  123. color: '#333',
  124. fontSize: 14,
  125. x: 0,
  126. y: 0,
  127. anchorX: 40,
  128. anchorY: -120,
  129. borderRadius: 8,
  130. borderWidth: 0,
  131. borderColor: '',
  132. bgColor: '#fff',
  133. padding: 5,
  134. display: 'BYCLICK',
  135. textAlign: 'left',
  136. customCallout: {
  137. display: 'BYCLICK',
  138. anchorX: 0,
  139. anchorY: 0,
  140. },
  141. ariaLabel: '',
  142. joinCluster: false,
  143. },
  144. }, {
  145. id: 2,
  146. longitude: Number(orderInfo.value?.longitude),
  147. latitude: Number(orderInfo.value?.latitude),
  148. iconPath: userInfo.value.avatarUrl || `${StaticUrl}/9.png`,
  149. width: 50,
  150. height: 50,
  151. })
  152. if (mapInfo.value?.riderLatitude && mapInfo.value?.riderLongitude) {
  153. mapMarkers.value.push({
  154. id: 3,
  155. longitude: Number(mapInfo.value?.riderLongitude),
  156. latitude: Number(mapInfo.value?.riderLatitude),
  157. iconPath: `${StaticUrl}/order-map-qishou.png`,
  158. width: 70,
  159. height: 80,
  160. label: {
  161. content: '骑手正在送货',
  162. color: '#333',
  163. fontSize: 14,
  164. x: 0,
  165. y: 0,
  166. anchorX: 40,
  167. anchorY: -120,
  168. borderRadius: 8,
  169. borderWidth: 0,
  170. borderColor: '',
  171. bgColor: '#fff',
  172. padding: 5,
  173. display: 'BYCLICK',
  174. textAlign: 'left',
  175. customCallout: {
  176. display: 'BYCLICK',
  177. anchorX: 0,
  178. anchorY: 0,
  179. },
  180. ariaLabel: '',
  181. joinCluster: false,
  182. },
  183. })
  184. mapPolyLine.value.push({
  185. points: [
  186. {
  187. longitude: Number(mapInfo.value?.riderLongitude),
  188. latitude: Number(mapInfo.value?.riderLatitude),
  189. },
  190. {
  191. longitude: Number(orderInfo.value?.longitude),
  192. latitude: Number(orderInfo.value?.latitude),
  193. },
  194. ],
  195. color: '#9ED605',
  196. width: 3,
  197. })
  198. // 绘制路径骑手和店家只能存在一个
  199. return
  200. }
  201. else {
  202. mapPolyLine.value.push({
  203. points: [
  204. {
  205. longitude: Number(orderInfo.value?.longitude),
  206. latitude: Number(orderInfo.value?.latitude),
  207. },
  208. {
  209. longitude: Number(mapInfo.value?.shopLongitude),
  210. latitude: Number(mapInfo.value?.shopLatitude),
  211. },
  212. ],
  213. color: '#9ED605',
  214. width: 3,
  215. })
  216. }
  217. console.log(mapPolyLine.value, 'mapPolyLine')
  218. }
  219. async function handleMarkerTap(e: UniHelper.MapOnMarkertapEvent) {
  220. console.log(e, 'sadada')
  221. if (orderInfo.value?.dvyType === 3) {
  222. const res = await useUserStore().getOrderNode(String(orderInfo.value?.orderNumber))
  223. NodeList.value = res as Api.DeliveryNode[]
  224. showNode.value = true
  225. }
  226. if (viewDevyBtn.value) {
  227. uni.showLoading({ mask: true })
  228. try {
  229. const res = await Apis.xsb.getWaybillToken({ data: { orderNumber: String(orderInfo.value?.orderNumber) } })
  230. uni.hideLoading()
  231. const jsData = JSON.parse(res.data)
  232. if (jsData.errmsg === 'ok') {
  233. plugins.openWaybillTracking({
  234. waybillToken: jsData.waybill_token,
  235. })
  236. }
  237. }
  238. catch {
  239. uni.hideLoading()
  240. }
  241. }
  242. }
  243. async function handleReceive() {
  244. await useUserStore().handleCommonOrderReceive(orderInfo.value as Api.xsbOrderList)
  245. getDetail(String(unref(orderInfo)?.orderNumber))
  246. }
  247. function handleRefundDetail(item: any) {
  248. router.push({ name: 'common-afterSalesDetail', params: { refundNumber: String(item.refundNumber) } })
  249. }
  250. </script>
  251. <template>
  252. <page-meta :page-style="showNode ? 'overflow: hidden;' : ''" />
  253. <view
  254. v-if="orderInfo" class="page-xsb"
  255. :style="{ paddingTop: `${showMapStatus.includes(orderInfo?.hbOrderStatus) ? '850rpx' : (`${Number(statusBarHeight) + Number(MenuButtonHeight) + 10}px`)}` }"
  256. >
  257. <wd-navbar
  258. title="订单详情" :bordered="false" :z-index="99" safe-area-inset-top left-arrow fixed
  259. @click-left="router.back()"
  260. />
  261. <view v-if="showMapStatus.includes(orderInfo?.hbOrderStatus)">
  262. <map
  263. id="orderMap" :polyline="mapPolyLine" :scale="mapLation.scale" :markers="mapMarkers"
  264. :latitude="mapLation.latitude" :longitude="mapLation.longitude" class="fixed top-0 z80 h-900rpx w-screen"
  265. @markertap="handleMarkerTap"
  266. />
  267. </view>
  268. <view class="relative z-90 box-border bg-[#f6f6f6] px-24rpx">
  269. <view class="pt-20rpx">
  270. <view class="text-36rpx font-semibold">
  271. <view v-if="orderInfo.hbOrderStatus === OrderStatus.PaddingPay">
  272. <view class="flex items-center">
  273. 请在
  274. <wd-count-down format="mm:ss" :time="useUserStore().handleXSBCommonOrderStatusText(orderInfo)" @finish="handleFinish">
  275. <template #default="{ current }">
  276. <view class="flex items-center">
  277. <view> {{ current.minutes }} 分</view>
  278. <view> {{ current.seconds }} 秒</view>
  279. </view>
  280. </template>
  281. </wd-count-down>
  282. 内支付
  283. </view>
  284. <!-- <view class="mt-20rpx text-28rpx text-[#AAAAAA]">
  285. 现在支付:预计10:40-10:55送达
  286. </view> -->
  287. <view class="btn mt-20rpx flex items-center justify-between">
  288. <view class="info-btn mr-20rpx w-226rpx">
  289. <wd-button type="info" @click="handleCancel">
  290. 取消订单
  291. </wd-button>
  292. </view>
  293. <view class="ml-20rpx flex-1">
  294. <wd-button @click="handlePay">
  295. 立即支付¥{{ orderInfo.actualTotal }}
  296. </wd-button>
  297. </view>
  298. </view>
  299. </view>
  300. <view
  301. v-if="orderInfo.hbOrderStatus !== OrderStatus.PaddingPay" class="flex items-center"
  302. @click="handleCollapse"
  303. >
  304. <view v-if="orderInfo.hbOrderStatus === OrderStatus.OrderAccepted" class="mr-10rpx">
  305. 商家拣货中
  306. </view>
  307. <view v-if="orderInfo.hbOrderStatus === OrderStatus.OrderWaitDelivery" class="mr-10rpx">
  308. 订单待配送
  309. </view>
  310. <view v-if="orderInfo.hbOrderStatus === OrderStatus.OrderDelivering" class="mr-10rpx">
  311. 订单配送中
  312. </view>
  313. <view v-if="orderInfo.hbOrderStatus === OrderStatus.OrderCancelAudit" class="mr-10rpx">
  314. 订单取消审核
  315. </view>
  316. <view v-if="orderInfo.hbOrderStatus === OrderStatus.OrderCancel" class="mr-10rpx">
  317. 订单取消
  318. </view>
  319. <view v-if="orderInfo.hbOrderStatus === OrderStatus.OrderArrived" class="mr-10rpx">
  320. 订单已送达
  321. </view>
  322. <view v-if="orderInfo.hbOrderStatus === OrderStatus.OrderCompleted" class="mr-10rpx">
  323. 订单已完成
  324. </view>
  325. <view :class="[collapse ? 'rotate-90' : '']">
  326. <wd-icon name="arrow-right" size="22px" />
  327. </view>
  328. </view>
  329. <view v-if="orderInfo.hbOrderStatus === OrderStatus.OrderCancel" class="mt-20rpx text-28rpx text-[#AAAAAA]">
  330. 取消原因:{{ orderInfo.cancelReason }}
  331. </view>
  332. </view>
  333. </view>
  334. <view class="mt-20rpx rounded-16rpx bg-white p-24rpx">
  335. <view v-if="orderInfo.dvyFlowId" class="mb-24rpx text-24rpx">
  336. <view class="mb-20rpx">
  337. {{ orderInfo.dvyName }}
  338. </view>
  339. <view class="text-48rpx font-semibold">
  340. {{ orderInfo.dvyFlowId }}
  341. </view>
  342. </view>
  343. <view class="grid grid-cols-5 text-28rpx text-[#222]">
  344. <view
  345. v-if="orderInfo.hbOrderStatus === OrderStatus.OrderArrived" class="flex flex-col items-center"
  346. @click="handleReceive"
  347. >
  348. <image :src="`${StaticUrl}/orderDetaile-submit-order.png`" class="h-40rpx w-40rpx" />
  349. <view class="mt-40rpx">
  350. 确认收货
  351. </view>
  352. </view>
  353. <view
  354. v-if="[OrderStatus.OrderCancel, OrderStatus.OrderCompleted].includes(Number(orderInfo.hbOrderStatus))"
  355. class="flex flex-col items-center" @click="handelDel"
  356. >
  357. <image :src="`${StaticUrl}/orderDetaile-del.png`" class="h-40rpx w-40rpx" />
  358. <view class="mt-40rpx">
  359. 删除订单
  360. </view>
  361. </view>
  362. <view class="contact relative flex flex-col items-center">
  363. <image :src="`${StaticUrl}/orderDetaile-wx.png`" class="h-40rpx w-40rpx" />
  364. <Zcontact>
  365. <view class="mt-40rpx text-28rpx">
  366. 联系商家
  367. </view>
  368. </Zcontact>
  369. </view>
  370. <view
  371. v-if="orderInfo.refundStatus != 2 && [OrderStatus.OrderCompleted, OrderStatus.OrderWaitDelivery, OrderStatus.OrderAccepted].includes(orderInfo.hbOrderStatus)"
  372. class="flex flex-col items-center" @click="handleAfterSale"
  373. >
  374. <image :src="`${StaticUrl}/orderDetaile-shou.png`" class="h-40rpx w-40rpx" />
  375. <view class="mt-40rpx">
  376. 申请售后
  377. </view>
  378. </view>
  379. <!-- <view class="flex flex-col items-center " @click="router.push({ name: 'common-revalue' })">
  380. <image
  381. :src="`${StaticUrl}/orderDetaile-pj.png`"
  382. class="h40rpx w40rpx"
  383. />
  384. <view class="mt40rpx">
  385. 评价晒单
  386. </view>
  387. </view> -->
  388. <!-- <view class="flex flex-col items-center">
  389. <image
  390. :src="`${StaticUrl}/orderDetaile-bao.png`"
  391. class="h40rpx w40rpx"
  392. />
  393. <view class="mt40rpx">
  394. 再次购买
  395. </view>
  396. </view> -->
  397. </view>
  398. </view>
  399. <view class="mt-20rpx rounded-16rpx bg-white p-24rpx">
  400. <view class="flex items-center">
  401. <image :src="`${StaticUrl}/orderDetaile-user.png`" class="mr-20rpx h-40rpx w-40rpx" />
  402. <view class="text-32rpx text-[#222] font-semibold">
  403. {{ orderInfo?.consigneeName }} {{ orderInfo?.consigneeMobile }}
  404. </view>
  405. </view>
  406. <view class="mt-20rpx text-28rpx text-[#AAAAAA]">
  407. {{ orderInfo?.consigneeAddress }}
  408. </view>
  409. </view>
  410. <view class="mt-20rpx rounded-16rpx bg-white p-24rpx">
  411. <view class="flex items-center">
  412. <image :src="`${StaticUrl}/order-icon.png`" class="h-36rpx w-36rpx" />
  413. <view class="ml-20rpx text-32rpx font-semibold">
  414. {{ orderInfo?.shopName }}
  415. </view>
  416. </view>
  417. <view class="my-24rpx h-2rpx w-full bg-[#F0F0F0]" />
  418. <CollapsePanel :line-height="150">
  419. <view v-for="item in orderInfo?.orderItemList" :key="item.skuId" class="mb-20rpx w-full flex items-center">
  420. <view class="mr-20rpx w-120rpx flex-shrink-0">
  421. <image :src="item.pic" class="h-120rpx w-120rpx" />
  422. </view>
  423. <view class="flex-1">
  424. <view class="w-full flex items-center justify-between font-semibold">
  425. <view class="text-28rpx">
  426. {{ item.skuName }}
  427. </view>
  428. <view class="text-32rpx text-[#FF4D3A]">
  429. ¥{{ item.price }}
  430. </view>
  431. </view>
  432. <view class="text-24rpx text-[#AAAAAA]">
  433. 规格:{{ item.spec }}
  434. </view>
  435. <view class="text-24rpx text-[#AAAAAA]">
  436. ×{{ item.prodCount }}
  437. </view>
  438. </view>
  439. </view>
  440. </CollapsePanel>
  441. <view class="mt-24rpx h-2rpx w-full bg-[#F0F0F0]" />
  442. <view class="mt-24rpx flex items-center justify-between">
  443. <view class="text-28rpx">
  444. 商品金额
  445. </view>
  446. <view class="text-[#FF4A39] font-semibold">
  447. ¥{{ orderInfo?.total }}
  448. </view>
  449. </view>
  450. <view class="mt-24rpx flex items-center justify-between">
  451. <view v-if="orderInfo.dvyType == 3">
  452. 配送费(即时配送)
  453. </view>
  454. <view v-if="orderInfo.dvyType == 1">
  455. 快递
  456. </view>
  457. <view class="text-[#FF4A39] font-semibold">
  458. ¥{{ orderInfo?.freightAmount }}
  459. </view>
  460. </view>
  461. <view class="mt-24rpx flex items-center justify-between">
  462. <view class="text-28rpx">
  463. 积分
  464. </view>
  465. <view class="text-[#FF4A39] font-semibold">
  466. -¥{{ Number(orderInfo?.offsetPoints) / 100 }}
  467. </view>
  468. </view>
  469. <view class="my-24rpx h-2rpx w-full bg-[#F0F0F0]" />
  470. <view class="flex items-center justify-end">
  471. <view class="text-28rpx">
  472. 总计{{ orderInfo.orderMoney }} 共减 {{ Number(orderInfo.offsetPoints) / 100 }}
  473. </view>
  474. <view class="ml-20rpx text-28rpx text-[#FF4D3A] font-semibold">
  475. {{ [OrderStatus.PaddingPay, OrderStatus.OrderCancel].includes(Number(orderInfo.hbOrderStatus)) ? '需' : '实'
  476. }}付款¥{{
  477. orderInfo.actualTotal }}
  478. </view>
  479. </view>
  480. </view>
  481. <view v-if="orderInfo.refundOrderList" class="mt-20rpx rounded-16rpx bg-white p-24rpx">
  482. <view v-for="item in orderInfo.refundOrderList" :key="item.createTime" class="mb10rpx" @click="handleRefundDetail(item)">
  483. <view class="flex items-center justify-between">
  484. <view>{{ item.refundName }} </view>
  485. <view class="flex items-center">
  486. <view>查看详情</view>
  487. <wd-icon name="arrow-right" size="22px" />
  488. </view>
  489. </view>
  490. <view class="mt10rpx flex items-center text-24rpx text-#AAA">
  491. <view>
  492. {{ refundStatus[Number(item.refundOrderStatus)] }}
  493. </view>
  494. <view v-if="[1, 2].includes(Number(item.refundOrderStatus))" class="ml-10rpx">
  495. 退款金额: {{ item.refundMoney }} 元
  496. </view>
  497. </view>
  498. </view>
  499. </view>
  500. <view class="mt-20rpx rounded-16rpx bg-white p-24rpx">
  501. <view class="mb-24rpx text-28rpx font-semibold">
  502. 订单信息
  503. </view>
  504. <view class="pb-20rpx">
  505. <view class="mb-28rpx flex items-center justify-between">
  506. <view class="text-28rpx text-[#AAAAAA]">
  507. 订单编号
  508. </view>
  509. <view class="flex items-center">
  510. <text class="text-[#222]">
  511. {{ orderInfo?.orderNumber }}
  512. </text>
  513. <view class="ml-10rpx" @click="handleCopy">
  514. <wd-icon name="file-copy" size="22px" />
  515. </view>
  516. </view>
  517. </view>
  518. <view class="mb-28rpx flex items-center justify-between">
  519. <view class="text-28rpx text-[#AAAAAA]">
  520. 支付方式
  521. </view>
  522. <view class="text-[#222]">
  523. 微信支付
  524. </view>
  525. </view>
  526. <view class="mb-28rpx flex items-center justify-between">
  527. <view class="text-28rpx text-[#AAAAAA]">
  528. 下单时间
  529. </view>
  530. <view class="text-[#222]">
  531. {{ orderInfo?.createTime }}
  532. </view>
  533. </view>
  534. <view class="mb-28rpx flex items-center justify-between">
  535. <view class="text-28rpx text-[#AAAAAA]">
  536. 备注信息
  537. </view>
  538. <view class="text-[#222]">
  539. {{ orderInfo?.remarks || '无' }}
  540. </view>
  541. </view>
  542. </view>
  543. </view>
  544. <view class="h-80rpx" />
  545. </view>
  546. <Zpopup v-model="showNode" :showfooter="false">
  547. <view class="p-24rpx">
  548. <view class="text-center text-32rpx font-semibold">
  549. 订单追踪
  550. </view>
  551. <wd-steps :active="0" vertical dot>
  552. <wd-step v-for="item in NodeList" :key="item.id">
  553. <template #title>
  554. {{ item.content }}
  555. </template>
  556. <template #description>
  557. {{ item.createTime }}
  558. </template>
  559. </wd-step>
  560. </wd-steps>
  561. </view>
  562. </Zpopup>
  563. </view>
  564. </template>
  565. <style scoped lang="scss">
  566. .page-xsb {
  567. :deep() {
  568. .info-btn .wd-button {
  569. background: #fff !important;
  570. color: #aaa !important;
  571. }
  572. .btn .wd-button {
  573. width: 100% !important;
  574. }
  575. .wd-count-down {
  576. color: #FF4D3A !important;
  577. font-size: 36rpx !important;
  578. }
  579. .contact .wd-button {
  580. font-size: 28rpx !important;
  581. height: 40rpx !important;
  582. padding: 0 !important;
  583. margin-top: 40rpx !important;
  584. }
  585. }
  586. }
  587. </style>