index.vue 25 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123
  1. <template>
  2. <view>
  3. <view class="order-details">
  4. <view class="header" v-if="orderInfo.shippingType === 1">
  5. <view class="picTxt">
  6. <image v-if="!orderInfo.paid" src="@/static/images/shop/daifukuan@2x.png" mode=""></image>
  7. <image v-else-if="orderInfo.status === 0 || orderInfo.status === 1" src="@/static/images/shop/daifahuo@2x.png" mode=""></image>
  8. <image v-else-if="orderInfo.status === 3" src="@/static/images/shop/yiwancheng@2x.png" mode=""></image>
  9. <view class="data">{{ curOrderStepTxt }}</view>
  10. <view class="state">{{ orderInfo.orderStatusMsg }}</view>
  11. </view>
  12. <view class="header-bot">
  13. <image src="@/static/images/shop/dingwei@2x.png" mode=""></image>
  14. <view class="header-bot-right">
  15. <view class="header-bot-address">{{ orderInfo.userAddress }}</view>
  16. <view class="header-bot-name">
  17. <text>{{ orderInfo.realName
  18. }}</text>
  19. <text>{{ orderInfo.userPhone }}</text>
  20. </view>
  21. </view>
  22. </view>
  23. </view>
  24. <view v-if="!isGoodsReturn">
  25. <view v-if="orderInfo.shippingType == 2 && orderInfo.paid" class="writeOff borRadius14">
  26. <view class="title">核销信息</view>
  27. <view class="grayBg">
  28. <view class="pictrue">
  29. <image :src="codeImg"></image>
  30. </view>
  31. </view>
  32. <view class="gear">
  33. <image src="@/static/images/writeOff.jpg"></image>
  34. </view>
  35. <view class="num">{{ orderInfo.verifyCode }}</view>
  36. <view class="rules" v-if="orderInfo.systemStore">
  37. <view class="item">
  38. <view class="rulesTitle acea-row row-middle">
  39. <text class="iconfont icon-shijian"></text>核销时间
  40. </view>
  41. <view class="info">
  42. 每日:<text class="time">{{
  43. orderInfo.systemStore.dayTime.replace(",", "-")
  44. }}</text>
  45. </view>
  46. </view>
  47. <view class="item">
  48. <view class="rulesTitle acea-row row-middle">
  49. <text class="iconfont icon-shuoming1"></text>使用说明
  50. </view>
  51. <view class="info">可将二维码出示给店员扫描或提供数字核销码</view>
  52. </view>
  53. </view>
  54. </view>
  55. <view v-if="orderInfo.shippingType === 1" class=""></view>
  56. <view v-else class="address" style="margin-top: 15rpx">
  57. <view class="name" @tap="makePhone">{{ orderInfo.systemStore ? orderInfo.systemStore.name : ""
  58. }}<text class="phone">{{
  59. orderInfo.systemStore ? orderInfo.systemStore.phone : ""
  60. }}</text><text class="iconfont icon-tonghua font-color"></text></view>
  61. <view>{{
  62. orderInfo.systemStore ? orderInfo.systemStore.detailedAddress : ""
  63. }}</view>
  64. </view>
  65. </view>
  66. <view class="wrapper">
  67. <orderGoods :mallType="orderInfo.mallType" :evaluate="evaluate" :productType="orderInfo.type"
  68. :orderId="order_id" :ids="id" :uniId="uniId" :cartInfo="cartInfo"
  69. :sbMerchant="orderInfo.sbMerchant"></orderGoods>
  70. <view class="wrapper-return" v-if="
  71. orderInfo.paid === true &&
  72. orderInfo.refundStatus === 0 &&
  73. orderInfo.type !== 1 &&
  74. orderInfo.mallType !== 1 &&
  75. type === 'normal' && isGoodsReturn == false
  76. ">
  77. <navigator hover-class="none" :url="
  78. '/pages/users/goods_return/index?orderId=' + orderInfo.orderId
  79. " class="cancel">
  80. 申请退款
  81. </navigator>
  82. </view>
  83. <view class="wrapper-list">
  84. <view class="item">
  85. <view class="">商品总价</view>
  86. <view class="txt">¥{{ orderInfo.proTotalPrice }}</view>
  87. </view>
  88. <view class="item" v-if="orderInfo.payPostage > 0">
  89. <view class="">运费</view>
  90. <view class="txt">¥{{ orderInfo.payPostage }}</view>
  91. </view>
  92. <view class="item" v-if="orderInfo.payPostage > 0 && orderInfo?.additionalAmount">
  93. <view class="">附加费</view>
  94. <view class="txt">¥{{ orderInfo.additionalAmount }}</view>
  95. </view>
  96. <view class="item" v-if="orderInfo.mallType === 0">
  97. <view class="">会员折扣</view>
  98. <view class="red">-¥{{ orderInfo.vipLevelDis }}</view>
  99. </view>
  100. <view class="item">
  101. <view class="">实付款</view>
  102. <view class="txt">
  103. {{ orderInfo.mallType === 0 ? `¥${orderInfo.payPrice}` : `${ Number(orderInfo.proTotalPrice)}贝币` }}
  104. </view>
  105. </view>
  106. </view>
  107. </view>
  108. <view class="wrapper">
  109. <view class="wrapper-title">订单信息</view>
  110. <view class="item">
  111. <view>订单编号</view>
  112. <view class="conter acea-row row-middle row-right">{{ orderInfo.orderId }}
  113. <!-- #ifndef H5 -->
  114. <text class="copy" @tap="copy">复制</text>
  115. <!-- #endif -->
  116. <!-- #ifdef H5 -->
  117. <text class="copy copy-data" @click="setOrderId">复制</text>
  118. <!-- #endif -->
  119. </view>
  120. </view>
  121. <view class="item">
  122. <view>下单时间</view>
  123. <view class="conter">{{ orderInfo.createTime || 0 }}</view>
  124. </view>
  125. <view class="item">
  126. <view>支付状态</view>
  127. <view class="conter" v-if="orderInfo.paid">已支付</view>
  128. <view class="conter" v-else>未支付</view>
  129. </view>
  130. <view class="item">
  131. <view>支付方式</view>
  132. <view class="conter" v-if="orderInfo.mallType === 0">{{
  133. orderInfo.payTypeStr
  134. }}</view>
  135. <view class="conter" v-else>贝币</view>
  136. </view>
  137. <view class="item" v-if="orderInfo.mark">
  138. <view>买家留言</view>
  139. <view class="conter">{{ orderInfo.mark }}</view>
  140. </view>
  141. </view>
  142. <view class="">
  143. <view class="nav refund" v-if="orderInfo.refundStatus > 0">
  144. <view class="title">
  145. <image src="@/static/images/shuoming.png" mode=""></image>
  146. {{ getRefundStatus() }}
  147. </view>
  148. <view class="con pad30">{{ getRefundReason() }}</view>
  149. </view>
  150. <!-- 退款订单详情 "-->
  151. <view v-if="isGoodsReturn" class="wrapper">
  152. <view class="wrapper-title">退款信息</view>
  153. <view class="item">
  154. <view>收货人</view>
  155. <view class="conter">{{ orderInfo.realName }}</view>
  156. </view>
  157. <view class="item">
  158. <view>联系电话</view>
  159. <view class="conter">{{ orderInfo.userPhone }}</view>
  160. </view>
  161. <view class="item">
  162. <view>收货地址</view>
  163. <view class="conter">{{ orderInfo.userAddress }}</view>
  164. </view>
  165. <view class="item">
  166. <view>退款快递单号</view>
  167. <view class="conter">{{ orderInfo.refundExpressNum }}</view>
  168. </view>
  169. </view>
  170. <view v-if="orderInfo.status > 0">
  171. <view class="wrapper" v-if="orderInfo.deliveryType == 'express'">
  172. <view class="wrapper-title">物流信息</view>
  173. <view class="item">
  174. <view>配送方式</view>
  175. <view class="conter">发货</view>
  176. </view>
  177. <view class="item">
  178. <view>快递公司</view>
  179. <view class="conter">{{ orderInfo.deliveryName || "" }}</view>
  180. </view>
  181. <view class="item">
  182. <view>快递号</view>
  183. <view class="conter">{{ orderInfo.deliveryId || "" }}</view>
  184. </view>
  185. </view>
  186. <view class="wrapper" v-else-if="orderInfo.deliveryType == 'send'">
  187. <view class="item acea-row row-between">
  188. <view>配送方式:</view>
  189. <view class="conter">送货</view>
  190. </view>
  191. <view class="item acea-row row-between">
  192. <view>配送人姓名:</view>
  193. <view class="conter">{{ orderInfo.deliveryName || "" }}</view>
  194. </view>
  195. <view class="item acea-row row-between">
  196. <view>联系电话:</view>
  197. <view class="conter acea-row row-middle row-right">{{ orderInfo.deliveryId || ""
  198. }}<text class="copy" @tap="goTel">拨打</text></view>
  199. </view>
  200. </view>
  201. <view class="wrapper borRadius14" v-else-if="orderInfo.deliveryType == 'fictitious'">
  202. <view class="item acea-row row-between">
  203. <view>虚拟发货:</view>
  204. <view class="conter">已发货,请注意查收</view>
  205. </view>
  206. </view>
  207. </view>
  208. </view>
  209. </view>
  210. <!-- && orderInfo.status != 0 -->
  211. <template v-if="isGoodsReturn == false && orderInfo.status != 0 || orderInfo.status == 0 && !orderInfo.paid">
  212. <view class="kong"></view>
  213. <view class="footer">
  214. <view class="footer-box">
  215. <view class="qs-btn" v-if="!orderInfo.paid" @click.stop="cancelOrder">
  216. <image src="@/static/images/shop/closeOrder@2x.png" mode=""></image>
  217. <view class="">取消订单</view>
  218. </view>
  219. <view class="buyPlay" v-if="!orderInfo.paid" @tap="pay_open(orderInfo.orderId)">
  220. <view class="buyPlay-left">
  221. <view class="buyPlay-left-top">
  222. <text>合计:</text>
  223. <text>{{ orderInfo.mallType === 0 ? `¥${orderInfo.payPrice}` : `${ Number(orderInfo.proTotalPrice)}贝币` }}</text>
  224. </view>
  225. <view class="buyPlay-left-bot" v-if="orderInfo.mallType === 0">共减¥{{ orderInfo.vipLevelDis }}</view>
  226. </view>
  227. <view class="buyPlay-btn">立即付款</view>
  228. </view>
  229. <view class="qs-btn" v-if="orderInfo.status == 3" @tap="delOrder">
  230. <image src="@/static/images/shop/delorder@2x.png" mode=""></image>
  231. <view class="">删除订单</view>
  232. </view>
  233. <navigator class="wuliu align-center" v-if="orderInfo.deliveryType == 'express' && orderInfo.status > 0"
  234. hover-class="none" :url="`/pages/users/goods_logistics/index?orderId=${orderInfo.orderId}`">查看物流
  235. </navigator>
  236. <view class="wuliu align-center buy" v-if="orderInfo.status == 3 && orderInfo.type !== 1" @click="goOrderConfirm">再次购买
  237. </view>
  238. <view class="align-center shouhuo" v-if="orderInfo.status == 1" @tap="confirmOrder">确认收货</view>
  239. </view>
  240. </view>
  241. </template>
  242. <payment :payMode="payMode" :showPopup="showPopup" @payComplete="payComplete" @close="payClose"
  243. :order_id="pay_order_id" :totalPrice="totalPrice" :mallType="orderInfo.mallType"></payment>
  244. </view>
  245. </template>
  246. <script setup>
  247. import {
  248. ref,
  249. reactive,
  250. computed
  251. } from "vue";
  252. import {
  253. useAppStore
  254. } from "@/stores/app.js";
  255. import {
  256. onLoad,
  257. onShow,
  258. onHide
  259. } from "@dcloudio/uni-app";
  260. import {
  261. getOrderDetail,
  262. orderTake,
  263. orderDel,
  264. orderCancel,
  265. qrcodeApi,
  266. } from "@/api/order.js";
  267. import {
  268. openOrderRefundSubscribe
  269. } from "@/utils/SubscribeMessage.js";
  270. import payment from "@/components/payment";
  271. import orderGoods from "@/components/orderGoods";
  272. import {
  273. toLogin
  274. } from "@/libs/login.js";
  275. import {
  276. useToast
  277. } from "@/hooks/useToast";
  278. import {
  279. getPreOrder
  280. } from "@/libs/order";
  281. const appStore = useAppStore();
  282. const {
  283. Toast
  284. } = useToast();
  285. const codeImg = ref("");
  286. const order_id = ref("");
  287. const evaluate = ref(0);
  288. const cartInfo = ref([]);
  289. const orderInfo = reactive({
  290. systemStore: {},
  291. pstatus: {},
  292. });
  293. const system_store = ref({});
  294. const isGoodsReturn = ref(false);
  295. const status = ref({});
  296. const isClose = ref(false);
  297. const payMode = ref([
  298. // {
  299. // name: "支付宝支付",
  300. // icon: "icon-zhifubao",
  301. // value: "alipay",
  302. // title: "支付宝快捷支付",
  303. // payChannel: "appAliPay",
  304. // },
  305. // {
  306. // name: "微信支付",
  307. // icon: "icon-wechat",
  308. // value: "weixin",
  309. // title: "微信快捷支付",
  310. // payChannel: "weixinApp",
  311. // },
  312. {
  313. name: "余额支付",
  314. icon: "icon-balance",
  315. value: "yue",
  316. title: "可用余额:",
  317. payChannel: "yue",
  318. number: 0,
  319. },
  320. ]);
  321. const showPopup = ref(false);
  322. const pay_order_id = ref("");
  323. const totalPrice = ref("0");
  324. const id = ref(0);
  325. const uniId = ref("");
  326. const type = ref("normal");
  327. function payComplete() {
  328. showPopup.value = false;
  329. pay_order_id.value = "";
  330. getOrderInfo();
  331. }
  332. function openSubcribe(page) {
  333. uni.showLoading({
  334. title: "正在加载"
  335. });
  336. openOrderRefundSubscribe()
  337. .then(() => {
  338. uni.hideLoading();
  339. uni.navigateTo({
  340. url: page
  341. });
  342. })
  343. .catch(() => {
  344. uni.hideLoading();
  345. });
  346. }
  347. function makePhone() {
  348. uni.makePhoneCall({
  349. phoneNumber: system_store.value.phone,
  350. });
  351. }
  352. function payClose() {
  353. showPopup.value = false;
  354. }
  355. function pay_open() {
  356. showPopup.value = true;
  357. pay_order_id.value = orderInfo.orderId;
  358. totalPrice.value = orderInfo.payPrice;
  359. }
  360. function getRefundStatus() {
  361. const statusMap = {
  362. 1: "商家审核中",
  363. 2: "商家已退款",
  364. 3: "商家退款中",
  365. };
  366. return orderInfo?.refundStatus ? statusMap[orderInfo.refundStatus] : "";
  367. }
  368. function getRefundReason() {
  369. if (orderInfo.refundStatus == 1) {
  370. return "您已成功发起退款申请,请耐心等待商家处理;退款前请与商家协商一致,有助于更好的处理售后问题";
  371. } else if (orderInfo.refundStatus == 2) {
  372. return "退款已成功受理,如商家已寄出商品请尽快退回;感谢您的支持";
  373. } else if (orderInfo?.refundReason) {
  374. return "拒绝原因:" + orderInfo?.refundReason;
  375. }
  376. }
  377. // 订单步骤配置
  378. const orderSteps = ref([{
  379. title: "待付款"
  380. },
  381. {
  382. title: "待发货"
  383. },
  384. {
  385. title: "待收货"
  386. },
  387. {
  388. title: "已完成"
  389. },
  390. ]);
  391. // 当前的订单状态
  392. const curOrderStep = computed(() => {
  393. let step = 0;
  394. if (!orderInfo.paid) {
  395. step = 0; // 待付款
  396. } else if (orderInfo.status === 0) {
  397. step = 1; // 待发货
  398. } else if (orderInfo.status === 1) {
  399. step = 2; // 待收货
  400. } else if (orderInfo.status === 2 || orderInfo.status === 3) {
  401. step = 3; // 已完成
  402. }
  403. return step;
  404. });
  405. // 当前的订单状态
  406. const curOrderStepTxt = computed(() => {
  407. let step = '';
  408. if (!orderInfo.paid) {
  409. step = '待付款'; // 待付款
  410. } else if (orderInfo.status === 0) {
  411. step = '待发货'; // 待发货
  412. } else if (orderInfo.status === 1) {
  413. step = '待收货'; // 待收货
  414. } else if (orderInfo.status === 2 || orderInfo.status === 3) {
  415. step = '已完成'; // 已完成
  416. }
  417. return step;
  418. });
  419. function getOrderInfo() {
  420. uni.showLoading({
  421. title: "正在加载中"
  422. });
  423. getOrderDetail(order_id.value)
  424. .then((res) => {
  425. uni.hideLoading();
  426. Object.assign(orderInfo, res.data);
  427. evaluate.value = res.data.status == 2 ? 2 : 0;
  428. system_store.value = res.data.systemStore;
  429. id.value = res.data.id;
  430. cartInfo.value = res.data.orderInfoList;
  431. if (res.data.refundStatus != 0) isGoodsReturn.value = true;
  432. if (orderInfo.shippingType == 2 && orderInfo.paid)
  433. markCode(res.data.verifyCode);
  434. if (orderInfo.refundStatus > 0) {
  435. // uni.setNavigationBarColor({
  436. // frontColor: "#ffffff",
  437. // backgroundColor: "#666666",
  438. // });
  439. }
  440. })
  441. .catch((err) => {
  442. uni.hideLoading();
  443. Toast({
  444. title: err
  445. }, "/pages/users/order_list/index");
  446. });
  447. }
  448. function markCode(text) {
  449. qrcodeApi({
  450. height: "145",
  451. text: text,
  452. width: "145",
  453. }).then((res) => {
  454. codeImg.value = res.data.code;
  455. });
  456. }
  457. // #ifndef H5
  458. function copy() {
  459. uni.setClipboardData({
  460. data: orderInfo.orderId,
  461. });
  462. }
  463. // #endif
  464. function goTel() {
  465. uni.makePhoneCall({
  466. phoneNumber: orderInfo.deliveryId,
  467. });
  468. }
  469. function getOrderStatus() {
  470. let _orderInfo = orderInfo || {},
  471. _status = _orderInfo.pstatus || {
  472. type: 0
  473. },
  474. _statusObj = {};
  475. let typeVal = parseInt(_status.type),
  476. delivery_type = _orderInfo.deliveryType,
  477. seckill_id = _orderInfo.seckillId ? parseInt(_orderInfo.seckillId) : 0,
  478. bargain_id = _orderInfo.bargainId ? parseInt(_orderInfo.bargainId) : 0,
  479. combination_id = _orderInfo.combinationId ?
  480. parseInt(_orderInfo.combinationId) :
  481. 0;
  482. _statusObj = {
  483. type: typeVal == 9 ? -9 : typeVal,
  484. class_status: 0,
  485. };
  486. if (typeVal == 1 && combination_id > 0) _statusObj.class_status = 1;
  487. if (typeVal == 2 && delivery_type == "express") _statusObj.class_status = 2;
  488. if (typeVal == 2) _statusObj.class_status = 3;
  489. if (typeVal == 4 || typeVal == 0) _statusObj.class_status = 4;
  490. if (
  491. !seckill_id &&
  492. !bargain_id &&
  493. !combination_id &&
  494. (typeVal == 3 || typeVal == 4)
  495. )
  496. _statusObj.class_status = 5;
  497. status.value = _statusObj;
  498. }
  499. function goJoinPink() {
  500. uni.navigateTo({
  501. url: "/pages/activity/goods_combination_status/index?id=" + orderInfo.pinkId,
  502. });
  503. }
  504. function goOrderConfirm() {
  505. const params = {
  506. mallType: orderInfo.mallType,
  507. preOrderType: "again",
  508. orderDetails: [{
  509. orderNo: order_id.value
  510. }],
  511. };
  512. getPreOrder(params);
  513. }
  514. function confirmOrder() {
  515. uni.showModal({
  516. title: "确认收货",
  517. content: "为保障权益,请收到货确认无误后,再确认收货",
  518. success: function(res) {
  519. if (res.confirm) {
  520. orderTake(id.value)
  521. .then(() => {
  522. Toast({
  523. title: "操作成功",
  524. icon: "success"
  525. }, function() {
  526. getOrderInfo();
  527. });
  528. })
  529. .catch((err) => {
  530. Toast({
  531. title: err
  532. });
  533. });
  534. }
  535. },
  536. });
  537. }
  538. function delOrder() {
  539. orderDel(id.value)
  540. .then(() => {
  541. Toast({
  542. title: "删除成功",
  543. icon: "success"
  544. }, {
  545. tab: 3,
  546. url: 1
  547. });
  548. })
  549. .catch((err) => {
  550. Toast({
  551. title: err
  552. });
  553. });
  554. }
  555. function cancelOrder() {
  556. uni.showModal({
  557. title: "提示",
  558. content: "确认取消该订单?",
  559. success: function(res) {
  560. if (res.confirm) {
  561. orderCancel(orderInfo.id)
  562. .then(() => {
  563. Toast({
  564. title: "取消成功"
  565. });
  566. uni.navigateTo({
  567. url: "/pages/order_list/index"
  568. });
  569. })
  570. .catch((err) => {
  571. Toast({
  572. title: err
  573. });
  574. getOrderInfo();
  575. });
  576. }
  577. },
  578. });
  579. }
  580. // 生命周期
  581. onLoad((options) => {
  582. type.value =
  583. options.type == undefined || options.type == null ? "normal" : options.type;
  584. if (!options.order_id && !options.uniId) {
  585. Toast({
  586. title: "缺少参数"
  587. }, {
  588. tab: 3,
  589. url: 1
  590. });
  591. return;
  592. }
  593. order_id.value = options.order_id;
  594. });
  595. onShow(() => {
  596. if (appStore.isLogin) {
  597. getOrderInfo();
  598. payMode.value[0].number = appStore.$userInfo.nowMoney;
  599. payMode.value = [...payMode.value];
  600. } else {
  601. toLogin();
  602. }
  603. });
  604. onHide(() => {
  605. isClose.value = true;
  606. });
  607. const setOrderId = () => {
  608. uni.setClipboardData({
  609. data: orderInfo.orderId,
  610. success: function() {
  611. Toast({
  612. title: "复制成功"
  613. });
  614. },
  615. });
  616. };
  617. </script>
  618. <style>
  619. page {
  620. background: #F9F7F0;
  621. }
  622. </style>
  623. <style scoped lang="scss">
  624. .order-details {
  625. padding: 16rpx;
  626. .header {
  627. padding: 16rpx;
  628. border-radius: 16rpx;
  629. background: #FFFFFF;
  630. .picTxt {
  631. margin-bottom: 16rpx;
  632. display: flex;
  633. font-size: 28rpx;
  634. align-items: center;
  635. image {
  636. width: 40rpx;
  637. height: 40rpx;
  638. }
  639. .data {
  640. margin: 0 8rpx;
  641. color: #F8C008;
  642. font-weight: bold;
  643. }
  644. }
  645. .header-bot {
  646. display: flex;
  647. color: #333333;
  648. font-size: 28rpx;
  649. .header-bot-right {
  650. flex: 1;
  651. }
  652. image {
  653. width: 40rpx;
  654. height: 40rpx;
  655. margin-right: 8rpx;
  656. }
  657. .header-bot-address {
  658. font-weight: bold;
  659. }
  660. .header-bot-name {
  661. text {
  662. &:first-child {
  663. margin-right: 32rpx;
  664. }
  665. }
  666. }
  667. }
  668. }
  669. .nav {
  670. background-color: #fff;
  671. font-size: 26rpx;
  672. color: #282828;
  673. padding: 27rpx 0;
  674. width: 100%;
  675. border-radius: 14rpx;
  676. }
  677. .address {
  678. font-size: 26rpx;
  679. color: #868686;
  680. background-color: #fff;
  681. margin-top: 15rpx;
  682. padding: 30rpx 24rpx;
  683. .name {
  684. font-size: 30rpx;
  685. color: #282828;
  686. margin-bottom: 15rpx;
  687. .phone {
  688. margin-left: 40rpx;
  689. }
  690. .iconfont {
  691. font-size: 34rpx;
  692. margin-left: 10rpx;
  693. }
  694. }
  695. }
  696. .line {
  697. width: 100%;
  698. height: 3rpx;
  699. image {
  700. width: 100%;
  701. height: 100%;
  702. display: block;
  703. }
  704. }
  705. .wrapper {
  706. background-color: #FFFFFF;
  707. margin-top: 16rpx;
  708. padding: 16rpx;
  709. border-radius: 16rpx;
  710. .wrapper-return {
  711. display: flex;
  712. margin-top: 16rpx;
  713. justify-content: flex-end;
  714. .cancel {
  715. color: #333333;
  716. width: 190rpx;
  717. height: 60rpx;
  718. display: flex;
  719. align-items: center;
  720. justify-content: center;
  721. font-size: 28rpx;
  722. background: #F1F3F8;
  723. border-radius: 8rpx;
  724. }
  725. }
  726. .wrapper-title {
  727. color: #333333;
  728. font-size: 32rpx;
  729. font-weight: bold;
  730. }
  731. .item {
  732. font-size: 28rpx;
  733. color: #666666;
  734. display: flex;
  735. margin-top: 16rpx;
  736. justify-content: space-between;
  737. view {
  738. &:last-child {
  739. color: #333333;
  740. }
  741. &.red {
  742. color: #FD5F3C;
  743. font-weight: bold;
  744. }
  745. &.txt {
  746. font-weight: bold;
  747. }
  748. }
  749. .conter {
  750. flex: 1;
  751. text-align:right;
  752. margin-left: 16rpx;
  753. .copy {
  754. font-size: 28rpx;
  755. color: #F8C008;
  756. font-weight: bold;
  757. margin-left: 8rpx;
  758. padding-left: 8rpx;
  759. border-left: 2rpx solid #D8D8D8;
  760. }
  761. }
  762. }
  763. .actualPay {
  764. border-top: 1rpx solid #eee;
  765. margin-top: 30rpx;
  766. padding-top: 30rpx;
  767. .money {
  768. font-weight: bold;
  769. font-size: 30rpx;
  770. }
  771. }
  772. }
  773. .writeOff {
  774. background-color: #fff;
  775. margin-top: 15rpx;
  776. padding-bottom: 50rpx;
  777. .title {
  778. font-size: 30rpx;
  779. color: #282828;
  780. height: 87rpx;
  781. border-bottom: 1px solid #f0f0f0;
  782. padding: 0 24rpx;
  783. line-height: 87rpx;
  784. }
  785. .grayBg {
  786. background-color: #f2f5f7;
  787. width: 590rpx;
  788. height: 384rpx;
  789. border-radius: 20rpx 20rpx 0 0;
  790. margin: 50rpx auto 0 auto;
  791. padding-top: 55rpx;
  792. .pictrue {
  793. width: 290rpx;
  794. height: 290rpx;
  795. margin: 0 auto;
  796. image {
  797. width: 100%;
  798. height: 100%;
  799. display: block;
  800. }
  801. }
  802. }
  803. .gear {
  804. width: 590rpx;
  805. height: 30rpx;
  806. margin: 0 auto;
  807. image {
  808. width: 100%;
  809. height: 100%;
  810. display: block;
  811. }
  812. }
  813. .num {
  814. background-color: #f0c34c;
  815. width: 590rpx;
  816. height: 84rpx;
  817. color: #282828;
  818. font-size: 48rpx;
  819. margin: 0 auto;
  820. border-radius: 0 0 20rpx 20rpx;
  821. text-align: center;
  822. padding-top: 4rpx;
  823. }
  824. .rules {
  825. margin: 46rpx 30rpx 0 30rpx;
  826. border-top: 1px solid #f0f0f0;
  827. padding-top: 10rpx;
  828. .item {
  829. margin-top: 20rpx;
  830. .rulesTitle {
  831. font-size: 28rpx;
  832. color: #282828;
  833. .iconfont {
  834. font-size: 30rpx;
  835. color: #333;
  836. margin-right: 8rpx;
  837. margin-top: 5rpx;
  838. }
  839. }
  840. .info {
  841. font-size: 28rpx;
  842. color: #999;
  843. margin-top: 7rpx;
  844. .time {
  845. margin-left: 20rpx;
  846. }
  847. }
  848. }
  849. }
  850. }
  851. .map {
  852. height: 86rpx;
  853. font-size: 30rpx;
  854. color: #282828;
  855. line-height: 86rpx;
  856. border-bottom: 1px solid #f0f0f0;
  857. margin-top: 15rpx;
  858. background-color: #fff;
  859. padding: 0 24rpx;
  860. .place {
  861. font-size: 26rpx;
  862. width: 176rpx;
  863. height: 50rpx;
  864. border-radius: 25rpx;
  865. line-height: 50rpx;
  866. text-align: center;
  867. .iconfont {
  868. font-size: 27rpx;
  869. height: 27rpx;
  870. line-height: 27rpx;
  871. margin: 2rpx 3rpx 0 0;
  872. }
  873. }
  874. }
  875. .refund {
  876. padding: 0 !important;
  877. margin-top: 15rpx;
  878. background-color: #fff;
  879. .title {
  880. display: flex;
  881. align-items: center;
  882. font-size: 30rpx;
  883. color: #333;
  884. height: 86rpx;
  885. border-bottom: 1px solid #f5f5f5;
  886. font-weight: 400;
  887. padding: 0 24rpx;
  888. image {
  889. width: 32rpx;
  890. height: 32rpx;
  891. margin-right: 10rpx;
  892. }
  893. }
  894. .con {
  895. font-size: 25rpx;
  896. color: #666666;
  897. padding: 30rpx 24rpx;
  898. }
  899. }
  900. }
  901. .goodCall {
  902. color: $theme-color;
  903. text-align: center;
  904. width: 100%;
  905. height: 86rpx;
  906. padding: 0 30rpx;
  907. border-bottom: 1rpx solid #eee;
  908. font-size: 30rpx;
  909. line-height: 86rpx;
  910. background: #fff;
  911. .icon-kefu {
  912. font-size: 36rpx;
  913. margin-right: 15rpx;
  914. }
  915. /* #ifdef MP */
  916. button {
  917. display: flex;
  918. align-items: center;
  919. justify-content: center;
  920. height: 86rpx;
  921. font-size: 30rpx;
  922. color: $theme-color;
  923. }
  924. /* #endif */
  925. }
  926. .kong {
  927. height: calc(132rpx + constant(safe-area-inset-bottom));
  928. height: calc(132rpx + env(safe-area-inset-bottom));
  929. }
  930. .footer {
  931. position: fixed;
  932. bottom: 0;
  933. width: 100%;
  934. padding-bottom: constant(safe-area-inset-bottom);
  935. padding-bottom: env(safe-area-inset-bottom);
  936. z-index: 9;
  937. background: #FFFFFF;
  938. box-shadow: inset 0rpx 1rpx 0rpx 0rpx #F1F3F8;
  939. .footer-box {
  940. display: flex;
  941. align-items: center;
  942. justify-content: space-between;
  943. padding: 22rpx 32rpx;
  944. padding: 22rpx 32rpx;
  945. }
  946. .qs-btn {
  947. display: flex;
  948. align-items: center;
  949. justify-content: center;
  950. flex-direction: column;
  951. image {
  952. width: 40rpx;
  953. height: 40rpx;
  954. }
  955. view {
  956. color: #333333;
  957. font-size: 20rpx;
  958. line-height: 36rpx;
  959. }
  960. }
  961. .buyPlay {
  962. display: flex;
  963. align-items: center;
  964. .buyPlay-left {
  965. text-align: right;
  966. .buyPlay-left-top {
  967. text {
  968. color: #333333;
  969. font-size: 24rpx;
  970. font-weight: bold;
  971. &:last-child {
  972. color: #FD5F3C;
  973. }
  974. }
  975. }
  976. .buyPlay-left-bot {
  977. color: #FD5F3C;
  978. font-size: 24rpx;
  979. line-height: 40rpx;
  980. }
  981. }
  982. .buyPlay-btn {
  983. color: #333333;
  984. width: 224rpx;
  985. height: 88rpx;
  986. display: flex;
  987. font-size: 32rpx;
  988. font-weight: bold;
  989. align-items: center;
  990. justify-content: center;
  991. background: #F8C008;
  992. border-radius: 16rpx;
  993. margin-left: 16rpx;
  994. }
  995. }
  996. .wuliu {
  997. width: 252rpx;
  998. background: rgba(248,192,8,0.1);
  999. }
  1000. .shouhuo {
  1001. width: 418rpx;
  1002. background: #F8C008;
  1003. }
  1004. .align-center {
  1005. height: 88rpx;
  1006. border-radius: 16rpx;
  1007. color: #333333;
  1008. font-size: 32rpx;
  1009. font-weight: bold;
  1010. display: flex;
  1011. align-items: center;
  1012. justify-content: center;
  1013. }
  1014. .buy {
  1015. background: #F8C008;
  1016. }
  1017. }
  1018. </style>