index.vue 20 KB

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