OrderDetails.vue 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851
  1. <template>
  2. <div class="order-details">
  3. <NavBar title="订单详情"></NavBar>
  4. <!-- 给header上与data上加on为退款订单-->
  5. <div
  6. class="header bg-color-red acea-row row-middle"
  7. :class="refundOrder ? 'on' : ''"
  8. >
  9. <div class="pictrue" v-if="!refundOrder">
  10. <img :src="orderInfo.status_pic" />
  11. </div>
  12. <div class="data" :class="refundOrder ? 'on' : ''">
  13. <div class="state">{{ orderInfo._status._msg }}</div>
  14. <div>
  15. {{ orderInfo.add_time_y
  16. }}<span class="time">{{ orderInfo.add_time_h }}</span>
  17. </div>
  18. </div>
  19. </div>
  20. <template v-if="!refundOrder">
  21. <div class="nav">
  22. <div class="navCon acea-row row-between-wrapper">
  23. <div :class="{ on: status.type === 0 || status.type === 9 }">
  24. 待付款
  25. </div>
  26. <div
  27. :class="{ on: status.type === 1 }"
  28. v-if="orderInfo.shipping_type === 2"
  29. >
  30. 待核销
  31. </div>
  32. <div :class="{ on: status.type === 1 }" v-else>待发货</div>
  33. <div
  34. :class="{ on: status.type === 2 }"
  35. v-if="orderInfo.shipping_type === 1"
  36. >
  37. 待收货
  38. </div>
  39. <div :class="{ on: status.type === 3 }">待评价</div>
  40. <div :class="{ on: status.type === 4 }">已完成</div>
  41. </div>
  42. <div class="progress acea-row row-between-wrapper">
  43. <div
  44. class="iconfont"
  45. :class="[
  46. status.type === 0 || status.type === 9
  47. ? 'icon-webicon318'
  48. : 'icon-yuandianxiao',
  49. status.type >= 0 ? 'font-color-red' : ''
  50. ]"
  51. ></div>
  52. <div
  53. class="line"
  54. :class="{ 'bg-color-red': status.type > 0 && status.type != 9 }"
  55. ></div>
  56. <div
  57. class="iconfont"
  58. :class="[
  59. status.type === 1 ? 'icon-webicon318' : 'icon-yuandianxiao',
  60. status.type >= 1 && status.type != 6 && status.type != 9
  61. ? 'font-color-red'
  62. : ''
  63. ]"
  64. ></div>
  65. <div
  66. class="line"
  67. :class="{
  68. 'bg-color-red':
  69. status.type > 1 && status.type != 6 && status.type != 9
  70. }"
  71. v-if="orderInfo.shipping_type === 1"
  72. ></div>
  73. <div
  74. class="iconfont"
  75. :class="[
  76. status.type === 2 ? 'icon-webicon318' : 'icon-yuandianxiao',
  77. status.type >= 2 && status.type != 6 && status.type != 9
  78. ? 'font-color-red'
  79. : ''
  80. ]"
  81. v-if="orderInfo.shipping_type === 1"
  82. ></div>
  83. <div
  84. class="line"
  85. :class="{
  86. 'bg-color-red':
  87. status.type > 2 && status.type != 6 && status.type != 9
  88. }"
  89. ></div>
  90. <div
  91. class="iconfont"
  92. :class="[
  93. status.type === 3 ? 'icon-webicon318' : 'icon-yuandianxiao',
  94. status.type >= 3 && status.type != 6 && status.type != 9
  95. ? 'font-color-red'
  96. : ''
  97. ]"
  98. ></div>
  99. <div
  100. class="line"
  101. :class="{
  102. 'bg-color-red':
  103. status.type > 3 && status.type != 6 && status.type != 9
  104. }"
  105. ></div>
  106. <div
  107. class="iconfont"
  108. :class="[
  109. status.type == 4 ? 'icon-webicon318' : 'icon-yuandianxiao',
  110. status.type >= 4 && status.type != 6 && status.type != 9
  111. ? 'font-color-red'
  112. : ''
  113. ]"
  114. ></div>
  115. </div>
  116. </div>
  117. <div
  118. class="writeOff"
  119. v-if="orderInfo.shipping_type === 2 && orderInfo.paid === 1"
  120. >
  121. <div class="title">核销信息</div>
  122. <div class="grayBg">
  123. <div class="pictrue"><img :src="orderInfo.code" /></div>
  124. </div>
  125. <div class="gear"><img src="@assets/images/writeOff.jpg" /></div>
  126. <div class="num">{{ orderInfo._verify_code }}</div>
  127. <div class="rules">
  128. <div class="item">
  129. <div class="rulesTitle acea-row row-middle">
  130. <span class="iconfont icon-shijian"></span>核销时间
  131. </div>
  132. <div class="info">
  133. 每日:<span class="time">{{ system_store.day_time }}</span>
  134. </div>
  135. </div>
  136. <div class="item">
  137. <div class="rulesTitle acea-row row-middle">
  138. <span class="iconfont icon-shuoming1"></span>使用说明
  139. </div>
  140. <div class="info">可将二维码出示给店员扫描或提供数字核销码</div>
  141. </div>
  142. </div>
  143. </div>
  144. <div
  145. class="map acea-row row-between-wrapper"
  146. v-if="orderInfo.shipping_type === 2 && orderInfo.paid === 1"
  147. >
  148. <div>自提地址信息</div>
  149. <div
  150. class="place cart-color acea-row row-center-wrapper"
  151. @click="showChang"
  152. >
  153. <span class="iconfont icon-weizhi"></span>查看位置
  154. </div>
  155. </div>
  156. <div class="address" v-if="orderInfo.shipping_type === 1">
  157. <div class="name">
  158. {{ orderInfo.real_name
  159. }}<span class="phone">{{ orderInfo.user_phone }}</span>
  160. </div>
  161. <div>{{ orderInfo.user_address }}</div>
  162. </div>
  163. <div class="address" v-else>
  164. <div class="name">
  165. {{ system_store.name
  166. }}<span class="phone">{{ system_store.phone }}</span>
  167. <a
  168. class="iconfont icon-tonghua font-color-red"
  169. :href="'tel:' + system_store.phone"
  170. ></a>
  171. </div>
  172. <div>{{ system_store._detailed_address }}</div>
  173. </div>
  174. <div class="line" v-if="orderInfo.shipping_type === 1">
  175. <img src="@assets/images/line.jpg" />
  176. </div>
  177. </template>
  178. <OrderGoods
  179. :evaluate="status.type || 0"
  180. :cartInfo="orderInfo.cartInfo || []"
  181. ></OrderGoods>
  182. <div
  183. class="goodCall"
  184. @click="
  185. $router.push({
  186. path: '/customer/list?orderId=' + orderInfo.order_id
  187. })
  188. "
  189. >
  190. <span class="iconfont icon-kefu"></span><span>联系客服</span>
  191. </div>
  192. <div class="wrapper">
  193. <div class="item acea-row row-between">
  194. <div>订单编号:</div>
  195. <div class="conter acea-row row-middle row-right">
  196. {{ orderInfo.order_id
  197. }}<span
  198. class="copy copy-data"
  199. :data-clipboard-text="orderInfo.order_id"
  200. >复制</span
  201. >
  202. </div>
  203. </div>
  204. <div class="item acea-row row-between">
  205. <div>下单时间:</div>
  206. <div class="conter">
  207. {{ orderInfo.add_time_y + " " + orderInfo.add_time_h }}
  208. </div>
  209. </div>
  210. <div class="item acea-row row-between">
  211. <div>订单类型:</div>
  212. <div class="conter">
  213. {{ orderTypeName }}
  214. </div>
  215. </div>
  216. <div class="item acea-row row-between">
  217. <div>支付状态:</div>
  218. <div class="conter">{{ orderInfo.paid ? "已支付" : "未支付" }}</div>
  219. </div>
  220. <div class="item acea-row row-between">
  221. <div>支付方式:</div>
  222. <div class="conter">{{ orderInfo._status._payType }}</div>
  223. </div>
  224. <div class="item acea-row row-between" v-if="orderInfo.mark">
  225. <div>买家留言:</div>
  226. <div class="conter">{{ orderInfo.mark }}</div>
  227. </div>
  228. </div>
  229. <div v-if="orderInfo.status != 0">
  230. <div class="wrapper" v-if="orderInfo.delivery_type === 'express'">
  231. <div class="item acea-row row-between">
  232. <div>配送方式:</div>
  233. <div class="conter">
  234. 发货
  235. </div>
  236. </div>
  237. <div class="item acea-row row-between">
  238. <div>快递公司:</div>
  239. <div class="conter">{{ orderInfo.delivery_name || "" }}</div>
  240. </div>
  241. <div class="item acea-row row-between">
  242. <div>快递号:</div>
  243. <div class="conter">{{ orderInfo.delivery_id || "" }}</div>
  244. </div>
  245. </div>
  246. <div class="wrapper" v-if="orderInfo.delivery_type === 'send'">
  247. <div class="item acea-row row-between">
  248. <div>配送方式:</div>
  249. <div class="conter">
  250. 送货
  251. </div>
  252. </div>
  253. <div class="item acea-row row-between">
  254. <div>配送人:</div>
  255. <div class="conter">{{ orderInfo.delivery_name || "" }}</div>
  256. </div>
  257. <div class="item acea-row row-between">
  258. <div>配送电话:</div>
  259. <div class="conter acea-row row-middle row-right">
  260. {{ orderInfo.delivery_id || ""
  261. }}<a :href="'tel:' + orderInfo.delivery_id"
  262. ><span class="copy">拨打</span></a
  263. >
  264. </div>
  265. </div>
  266. </div>
  267. </div>
  268. <!-- 退款订单详情 -->
  269. <div class="wrapper" v-if="refundOrder">
  270. <div class="item acea-row row-between">
  271. <div>收货人:</div>
  272. <div class="conter">{{ orderInfo.real_name }}</div>
  273. </div>
  274. <div class="item acea-row row-between">
  275. <div>联系电话:</div>
  276. <div class="conter">{{ orderInfo.user_phone }}</div>
  277. </div>
  278. <div class="item acea-row row-between">
  279. <div>收货地址:</div>
  280. <div class="conter">{{ orderInfo.user_address }}</div>
  281. </div>
  282. </div>
  283. <div class="wrapper">
  284. <div class="item acea-row row-between">
  285. <div>支付金额:</div>
  286. <div class="conter">¥{{ orderInfo.total_price }}</div>
  287. </div>
  288. <div class="item acea-row row-between" v-if="orderInfo.coupon_price > 0">
  289. <div>优惠券抵扣:</div>
  290. <div class="conter">-¥{{ orderInfo.coupon_price }}</div>
  291. </div>
  292. <div class="item acea-row row-between" v-if="orderInfo.use_integral > 0">
  293. <div>积分抵扣:</div>
  294. <div class="conter">-¥{{ orderInfo.deduction_price }}</div>
  295. </div>
  296. <div class="item acea-row row-between" v-if="orderInfo.pay_postage > 0">
  297. <div>运费:</div>
  298. <div class="conter">¥{{ orderInfo.pay_postage }}</div>
  299. </div>
  300. <div class="actualPay acea-row row-right">
  301. 实付款:<span class="money font-color-red"
  302. >¥{{ orderInfo.pay_price }}</span
  303. >
  304. </div>
  305. </div>
  306. <div style="height:1.2rem;" v-if="!refundOrder && offlineStatus"></div>
  307. <div
  308. class="footer acea-row row-right row-middle"
  309. v-if="!refundOrder && offlineStatus"
  310. >
  311. <template v-if="status.type === 0">
  312. <div class="bnt cancel" @click="cancelOrder">取消订单</div>
  313. <div class="bnt bg-color-red" @click="pay = true">立即付款</div>
  314. </template>
  315. <template v-if="status.type === 1">
  316. <div
  317. class="bnt cancel"
  318. @click="$router.push({ path: '/order/refund/' + orderInfo.order_id })"
  319. >
  320. 申请退款
  321. </div>
  322. </template>
  323. <template v-if="status.type === 2">
  324. <div
  325. v-if="orderInfo.paid === 1 && orderInfo.refund_status === 0"
  326. class="bnt cancel"
  327. @click="$router.push({ path: '/order/refund/' + orderInfo.order_id })"
  328. >
  329. 申请退款
  330. </div>
  331. <div
  332. class="bnt default"
  333. @click="
  334. $router.push({ path: '/order/logistics/' + orderInfo.order_id })
  335. "
  336. v-if="orderInfo.delivery_type === 'express'"
  337. >
  338. 查看物流
  339. </div>
  340. <div class="bnt bg-color-red" @click="takeOrder">
  341. 确认收货
  342. </div>
  343. </template>
  344. <template v-if="status.type === 3">
  345. <div
  346. v-if="orderInfo.paid === 1 && orderInfo.refund_status === 0"
  347. class="bnt cancel"
  348. @click="$router.push({ path: '/order/refund/' + orderInfo.order_id })"
  349. >
  350. 申请退款
  351. </div>
  352. <div
  353. class="bnt default"
  354. @click="
  355. $router.push({ path: '/order/logistics/' + orderInfo.order_id })
  356. "
  357. v-if="orderInfo.delivery_type === 'express'"
  358. >
  359. 查看物流
  360. </div>
  361. </template>
  362. <template v-if="status.type === 4">
  363. <div
  364. v-if="orderInfo.paid === 1 && orderInfo.refund_status === 0"
  365. class="bnt cancel"
  366. @click="$router.push({ path: '/order/refund/' + orderInfo.order_id })"
  367. >
  368. 申请退款
  369. </div>
  370. <div class="bnt cancel" @click="delOrder">
  371. 删除订单
  372. </div>
  373. <div
  374. class="bnt default"
  375. @click="
  376. $router.push({ path: '/order/logistics/' + orderInfo.order_id })
  377. "
  378. v-if="orderInfo.delivery_type === 'express'"
  379. >
  380. 查看物流
  381. </div>
  382. </template>
  383. <template v-if="status.type === 6">
  384. <div
  385. v-if="orderInfo.paid === 1 && orderInfo.refund_status === 0"
  386. class="bnt cancel"
  387. @click="$router.push({ path: '/order/refund/' + orderInfo.order_id })"
  388. >
  389. 申请退款
  390. </div>
  391. <div
  392. class="bnt bg-color-red"
  393. @click="
  394. $router.push({
  395. path: '/activity/group_rule/' + orderInfo.pink_id
  396. })
  397. "
  398. >
  399. 查看拼团
  400. </div>
  401. </template>
  402. <div
  403. class="bnt bg-color-red"
  404. @click="goOrderConfirm(orderInfo)"
  405. v-if="
  406. orderInfo.paid === 1 &&
  407. orderInfo.refund_status === 0 &&
  408. orderInfo.status >= 2
  409. "
  410. >
  411. 再次购买
  412. </div>
  413. </div>
  414. <Payment
  415. v-model="pay"
  416. :types="payType"
  417. @checked="toPay"
  418. :balance="userInfo.now_money"
  419. ></Payment>
  420. <div class="geoPage" v-if="mapShow">
  421. <iframe
  422. width="100%"
  423. height="100%"
  424. frameborder="0"
  425. scrolling="no"
  426. :src="
  427. 'https://apis.map.qq.com/uri/v1/geocoder?coord=' +
  428. system_store.latitude +
  429. ',' +
  430. system_store.longitude +
  431. '&referer=' +
  432. mapKey
  433. "
  434. >
  435. </iframe>
  436. </div>
  437. <GeneralWindow
  438. :generalActive="generalActive"
  439. @closeGeneralWindow="closeGeneralWindow"
  440. :generalContent="generalContent"
  441. ></GeneralWindow>
  442. </div>
  443. </template>
  444. <style scoped>
  445. .goodCall {
  446. color: #ff1f44;
  447. text-align: center;
  448. width: 100%;
  449. height: 0.86rem;
  450. padding: 0 0.3rem;
  451. border-bottom: 0.01rem solid #eee;
  452. font-size: 0.3rem;
  453. line-height: 0.86rem;
  454. background: #fff;
  455. }
  456. .iconfont {
  457. margin-right: 0.15rem;
  458. }
  459. .geoPage {
  460. position: fixed;
  461. width: 100%;
  462. height: 100%;
  463. top: 0;
  464. z-index: 10000;
  465. }
  466. .order-details .writeOff {
  467. background-color: #fff;
  468. margin-top: 0.13rem;
  469. padding-bottom: 0.3rem;
  470. }
  471. .order-details .writeOff .title {
  472. font-size: 0.3rem;
  473. color: #282828;
  474. height: 0.87rem;
  475. border-bottom: 1px solid #f0f0f0;
  476. padding: 0 0.3rem;
  477. line-height: 0.87rem;
  478. }
  479. .order-details .writeOff .grayBg {
  480. background-color: #f2f5f7;
  481. width: 5.9rem;
  482. height: 3.84rem;
  483. border-radius: 0.2rem 0.2rem 0 0;
  484. margin: 0.5rem auto 0 auto;
  485. padding-top: 0.55rem;
  486. }
  487. .order-details .writeOff .grayBg .pictrue {
  488. width: 2.9rem;
  489. height: 2.9rem;
  490. margin: 0 auto;
  491. }
  492. .order-details .writeOff .grayBg .pictrue img {
  493. width: 100%;
  494. height: 100%;
  495. display: block;
  496. }
  497. .order-details .writeOff .gear {
  498. width: 5.9rem;
  499. height: 0.3rem;
  500. margin: 0 auto;
  501. }
  502. .order-details .writeOff .gear img {
  503. width: 100%;
  504. height: 100%;
  505. display: block;
  506. }
  507. .order-details .writeOff .num {
  508. background-color: #f0c34c;
  509. width: 5.9rem;
  510. height: 0.84rem;
  511. color: #282828;
  512. font-size: 0.48rem;
  513. margin: 0 auto;
  514. border-radius: 0 0 0.2rem 0.2rem;
  515. text-align: center;
  516. padding-top: 0.04rem;
  517. }
  518. .order-details .writeOff .rules {
  519. margin: 0.46rem 0.3rem 0 0.3rem;
  520. border-top: 0.01rem solid #f0f0f0;
  521. padding-top: 0.1rem;
  522. }
  523. .order-details .writeOff .rules .item {
  524. margin-top: 0.15rem;
  525. }
  526. .order-details .writeOff .rules .item .rulesTitle {
  527. font-size: 0.28rem;
  528. color: #282828;
  529. }
  530. .order-details .writeOff .rules .item .rulesTitle .iconfont {
  531. font-size: 0.3rem;
  532. color: #333;
  533. margin-right: 0.08rem;
  534. margin-top: 0.05rem;
  535. }
  536. .order-details .writeOff .rules .item .info {
  537. font-size: 0.28rem;
  538. color: #999;
  539. margin-top: 0.05rem;
  540. }
  541. .order-details .writeOff .rules .item .info .time {
  542. margin-left: 0.2rem;
  543. }
  544. .order-details .map {
  545. height: 0.86rem;
  546. font-size: 0.3rem;
  547. color: #282828;
  548. line-height: 0.86rem;
  549. border-bottom: 0.01rem solid #f0f0f0;
  550. margin-top: 0.13rem;
  551. background-color: #fff;
  552. padding: 0 0.3rem;
  553. }
  554. .order-details .map .place {
  555. font-size: 0.26rem;
  556. width: 1.76rem;
  557. height: 0.5rem;
  558. border-radius: 0.25rem;
  559. line-height: 0.5rem;
  560. text-align: center;
  561. }
  562. .order-details .map .place .iconfont {
  563. font-size: 0.27rem;
  564. height: 0.27rem;
  565. line-height: 0.27rem;
  566. margin: 0.02rem 0.03rem 0 0;
  567. }
  568. .order-details .address .name .iconfont {
  569. font-size: 0.34rem;
  570. margin-left: 0.1rem;
  571. }
  572. </style>
  573. <script>
  574. import OrderGoods from "@components/OrderGoods";
  575. import { orderDetail, orderAgain } from "@api/order";
  576. import ClipboardJS from "clipboard";
  577. import Payment from "@components/Payment";
  578. import { isWeixin } from "@utils";
  579. import { mapGetters } from "vuex";
  580. import {
  581. cancelOrderHandle,
  582. takeOrderHandle,
  583. delOrderHandle,
  584. payOrderHandle
  585. } from "@libs/order";
  586. import { wechatEvevt } from "@libs/wechat";
  587. import GeneralWindow from "@components/GeneralWindow";
  588. import NavBar from "@components/NavBar";
  589. const NAME = "OrderDetails";
  590. export default {
  591. name: NAME,
  592. components: {
  593. OrderGoods,
  594. Payment,
  595. GeneralWindow,
  596. NavBar
  597. },
  598. props: {},
  599. data: function() {
  600. return {
  601. offlinePayStatus: 2,
  602. orderTypeName: "普通订单",
  603. orderTypeNameStatus: true,
  604. offlineStatus: true,
  605. id: this.$route.params.id,
  606. orderInfo: {
  607. _status: {}
  608. },
  609. status: {},
  610. pay: false,
  611. payType: ["yue", "weixin"],
  612. from: isWeixin() ? "weixin" : "weixin",
  613. system_store: {},
  614. mapKay: "",
  615. mapShow: false,
  616. generalActive: false,
  617. generalContent: {
  618. promoterNum: "",
  619. title: ""
  620. }
  621. };
  622. },
  623. computed: {
  624. refundOrder() {
  625. return this.orderInfo.refund_status > 0;
  626. },
  627. ...mapGetters(["userInfo"])
  628. },
  629. watch: {
  630. $route(n) {
  631. if (n.name === NAME && this.id !== n.params.id) {
  632. this.id = n.params.id;
  633. this.getDetail();
  634. }
  635. }
  636. },
  637. inject: ["app"],
  638. mounted: function() {
  639. this.getDetail();
  640. this.$nextTick(function() {
  641. let copybtn = document.getElementsByClassName("copy-data");
  642. const clipboard = new ClipboardJS(copybtn);
  643. clipboard.on("success", () => {
  644. this.$dialog.success("复制成功");
  645. });
  646. });
  647. },
  648. methods: {
  649. // 再次购买
  650. goOrderConfirm(e) {
  651. orderAgain(e.order_id)
  652. .then(res => {
  653. this.$router.push({
  654. path: "/order/submit/" + res.data.cateId
  655. });
  656. })
  657. .catch(res => {
  658. this.$dialog.error(res.msg);
  659. });
  660. },
  661. showChang: function() {
  662. if (isWeixin()) {
  663. let config = {
  664. latitude: parseFloat(this.system_store.latitude),
  665. longitude: parseFloat(this.system_store.longitude),
  666. name: this.system_store.name,
  667. address: this.system_store._detailed_address
  668. };
  669. wechatEvevt("openLocation", config)
  670. .then(res => {
  671. console.log(res);
  672. })
  673. .catch(res => {
  674. if (res.is_ready) {
  675. res.wx.openLocation(config);
  676. }
  677. });
  678. } else {
  679. if (!this.mapKey)
  680. return this.$dialog.error(
  681. "暂无法使用查看地图,请配置您的腾讯地图key"
  682. );
  683. this.mapShow = true;
  684. }
  685. },
  686. goBack() {
  687. const history = this.app.history,
  688. last = history[history.length - 1] || {};
  689. if (last.name === "MyOrder") return this.$router.go(-1);
  690. else return this.$router.replace({ path: "/order/list/" });
  691. },
  692. cancelOrder() {
  693. cancelOrderHandle(this.orderInfo.order_id)
  694. .then(() => {
  695. setTimeout(() => this.goBack(), 300);
  696. })
  697. .catch(() => {
  698. this.getDetail();
  699. });
  700. },
  701. takeOrder() {
  702. this.$dialog.loading.open("正在加载中");
  703. takeOrderHandle(this.orderInfo.order_id)
  704. .then(res => {
  705. if (
  706. (res.data.gain_integral != "0.00" &&
  707. res.data.gain_coupon != "0.00") ||
  708. (res.data.gain_integral > 0 && res.data.gain_coupon > 0)
  709. ) {
  710. this.$dialog.loading.close();
  711. this.generalActive = true;
  712. this.generalContent = {
  713. promoterNum: `恭喜您获得${res.data.gain_coupon}元优惠券以及${
  714. res.data.gain_integral
  715. }积分,购买商品时可抵现哦~`,
  716. title: "恭喜您获得优惠礼包"
  717. };
  718. return;
  719. } else if (
  720. res.data.gain_integral != "0.00" ||
  721. res.data.gain_integral > 0
  722. ) {
  723. this.$dialog.loading.close();
  724. this.generalActive = true;
  725. this.generalContent = {
  726. promoterNum: `恭喜您获得${
  727. res.data.gain_integral
  728. }积分,购买商品时可抵现哦~`,
  729. title: "赠送积分"
  730. };
  731. return;
  732. } else if (
  733. res.data.gain_coupon != "0.00" ||
  734. res.data.gain_coupon > 0
  735. ) {
  736. this.$dialog.loading.close();
  737. this.generalActive = true;
  738. this.generalContent = {
  739. promoterNum: `恭喜您获得${
  740. res.data.gain_coupon
  741. }元优惠券,购买商品时可抵现哦~`,
  742. title: "恭喜您获得优惠券"
  743. };
  744. return;
  745. } else {
  746. this.$dialog.loading.close();
  747. this.$dialog.success("收货成功");
  748. }
  749. this.getDetail();
  750. })
  751. .catch(res => {
  752. this.$dialog.loading.close();
  753. this.$dialog.error(res.msg);
  754. });
  755. },
  756. closeGeneralWindow(msg) {
  757. this.generalActive = msg;
  758. this.getDetail();
  759. },
  760. delOrder() {
  761. delOrderHandle(this.orderInfo.order_id).then(() => {
  762. setTimeout(() => this.goBack(), 300);
  763. });
  764. },
  765. setOfflinePayStatus: function(status) {
  766. var that = this;
  767. that.offlinePayStatus = status;
  768. if (status === 1 && that.orderTypeNameStatus === true) {
  769. that.payType.push("offline");
  770. }
  771. },
  772. getOrderStatus: function() {
  773. let orderInfo = this.orderInfo || {},
  774. _status = orderInfo._status || { _type: 0 },
  775. status = {};
  776. let type = parseInt(_status._type),
  777. delivery_type = orderInfo.delivery_type,
  778. seckill_id = orderInfo.seckill_id ? parseInt(orderInfo.seckill_id) : 0,
  779. bargain_id = orderInfo.bargain_id ? parseInt(orderInfo.bargain_id) : 0,
  780. combination_id = orderInfo.combination_id
  781. ? parseInt(orderInfo.combination_id)
  782. : 0;
  783. status = {
  784. type: type,
  785. class_status: 0
  786. };
  787. if (type === 1 && combination_id > 0) {
  788. status.type = 6;
  789. status.class_status = 1;
  790. } //查看拼团
  791. if (type === 2 && delivery_type === "express") status.class_status = 2; //查看物流
  792. if (type === 2) status.class_status = 3; //确认收货
  793. if (type === 4 || type === 0) status.class_status = 4; //删除订单
  794. if (
  795. !seckill_id &&
  796. !bargain_id &&
  797. !combination_id &&
  798. (type === 3 || type === 4)
  799. )
  800. status.class_status = 5; //再次购买
  801. if (type == 9) {
  802. //线下付款
  803. status.class_status = 0;
  804. this.offlineStatus = false;
  805. }
  806. this.status = status;
  807. },
  808. getDetail() {
  809. const id = this.id;
  810. if (!id) return this.$dialog.error("订单不存在");
  811. orderDetail(id)
  812. .then(res => {
  813. this.orderInfo = res.data;
  814. this.getOrderStatus();
  815. if (this.orderInfo.combination_id > 0) {
  816. this.orderTypeName = "拼团订单";
  817. this.orderTypeNameStatus = false;
  818. } else if (this.orderInfo.bargain_id > 0) {
  819. this.orderTypeName = "砍价订单";
  820. this.orderTypeNameStatus = false;
  821. } else if (this.orderInfo.seckill_id > 0) {
  822. this.orderTypeName = "秒杀订单";
  823. this.orderTypeNameStatus = false;
  824. }
  825. this.system_store = res.data.system_store || {};
  826. this.mapKey = res.data.mapKey;
  827. this.setOfflinePayStatus(this.orderInfo.offlinePayStatus);
  828. this.$nextTick(function() {
  829. let copybtn = document.getElementsByClassName("copy-data");
  830. const clipboard = new ClipboardJS(copybtn);
  831. clipboard.on("success", () => {
  832. this.$dialog.success("复制成功");
  833. });
  834. });
  835. })
  836. .catch(err => {
  837. this.$dialog.error(err.msg);
  838. this.$router.go(-1);
  839. });
  840. },
  841. async toPay(type) {
  842. var that = this;
  843. await payOrderHandle(this.orderInfo.order_id, type, that.from);
  844. that.getDetail();
  845. }
  846. }
  847. };
  848. </script>