order-detail.vue 53 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318
  1. <template>
  2. <div :class="['order-detail',this.$store.state.locale == 'en'?'order-detail-en':'']">
  3. <div class="content">
  4. <div class="crumbs">
  5. <a class="item-a" @click="userCenter()">{{$t('orderDetails.personalCenter')}}</a>
  6. <span class="arrow">></span>
  7. <span class="item-span">{{$t('orderDetails.orderDetails')}}</span>
  8. </div>
  9. <!-- 订单状态 -->
  10. <div class="status-process">
  11. <div class="status-box">
  12. <div class="order-number">{{$t('orderDetails.orderNumber')}}:{{ orderNumber }}</div>
  13. <div class="status">
  14. {{
  15. [
  16. '',
  17. $t('obligation'),
  18. $t('pendingDelivery'),
  19. $t('pendingReceipt'),
  20. $t('pendinEvaluation'),
  21. $t('completed'),
  22. $t('canceled'),
  23. $t('grouping')
  24. ][orderInfo.status]
  25. }}
  26. </div>
  27. <div
  28. :class="['invoice-detail',$t('language') === 'zh'?'':'en-width']"
  29. v-if="((orderInfo.orderInvoiceId && orderInfo.status !== 6) || (orderInfo.orderInvoiceId && (orderInfo.status === 6 && orderInfo.finalRefundId))) && (!orderInfo.refundStatus || orderInfo.refundStatus === 4)" @click="toInvoice(orderNumber)">{{ $t('invoice.viewInvoiceDetail') }}</div>
  30. <div
  31. class="description"
  32. v-if="orderInfo.status == 1 && betweenTime.signs == 1"
  33. >
  34. {{$t('orderDetails.remainingTime')}} {{ betweenTime.min + ':' + betweenTime.sec }}
  35. </div>
  36. <div class="action" v-if="orderInfo.cancelTime === null">
  37. <a
  38. href="javascript:void(0);"
  39. class="action-a red"
  40. v-if="orderInfo.status == 1"
  41. @click="toPayment()"
  42. >{{$t('orderDetails.payNow')}}</a
  43. >
  44. <a
  45. href="javascript:void(0);"
  46. class="action-a"
  47. v-if="orderInfo.status == 1"
  48. @click="showTips = true"
  49. >{{$t('orderDetails.cancellation')}}</a
  50. >
  51. <!-- <a href="javascript:void(0);" class="action-a btn" v-if="orderInfo.status==2 || orderInfo.status == 3">申请退款</a>
  52. <a href="javascript:void(0);" class="action-a btn" v-if="orderInfo.status==4">立即评价</a>
  53. <a href="javascript:void(0);" class="action-a btn" v-if="orderInfo.status==5">再次购买</a>
  54. <a href="javascript:void(0);" class="action-a btn" v-if="orderInfo.status==5">立即购买</a>-->
  55. </div>
  56. </div>
  57. <div class="process-box">
  58. <div class="tip">
  59. {{$t('orderDetails.informationTips')}}
  60. </div>
  61. <div class="process">
  62. <div :class="['item', orderInfo.status >= 1 ? 'active' : '']">
  63. <div class="img process01"></div>
  64. <div class="text">{{$t('orderDetails.submitOrder')}}</div>
  65. <div class="time">{{ orderInfo.createTime }}</div>
  66. </div>
  67. <div
  68. :class="[
  69. 'item',
  70. orderInfo.status >= 2 && orderInfo.payTime !== null
  71. ? 'active'
  72. : ''
  73. ]"
  74. >
  75. <div class="img process02"></div>
  76. <div class="text">{{$t('orderDetails.buyerPayment')}}</div>
  77. <div class="time">{{ orderInfo.payTime }}</div>
  78. </div>
  79. <div
  80. :class="[
  81. 'item',
  82. orderInfo.status >= 3 && orderInfo.dvyTime !== null
  83. ? 'active'
  84. : ''
  85. ]"
  86. >
  87. <div class="img process03"></div>
  88. <div class="text">{{$t('orderDetails.goodsOut')}}</div>
  89. <div class="time">{{ orderInfo.dvyTime }}</div>
  90. </div>
  91. <div
  92. :class="[
  93. 'item',
  94. orderInfo.status >= 3 && orderInfo.dvyTime !== null
  95. ? 'active'
  96. : ''
  97. ]"
  98. >
  99. <div class="img process04"></div>
  100. <div class="text">{{$t('orderDetails.waitingForReceipt')}}</div>
  101. <div class="time">{{ orderInfo.dvyTime }}</div>
  102. </div>
  103. <div
  104. :class="[
  105. 'item',
  106. orderInfo.status >= 5 && orderInfo.fianllyTime !== null
  107. ? 'active'
  108. : ''
  109. ]"
  110. >
  111. <div class="img process05"></div>
  112. <div class="text">{{$t('orderDetails.orderCompletion')}}</div>
  113. <div class="time">{{ orderInfo.fianllyTime }}</div>
  114. </div>
  115. </div>
  116. </div>
  117. </div>
  118. <!-- /订单状态 -->
  119. <!-- 配送信息 -->
  120. <div class="delivery-box" v-if="deliveryList.length && orderInfo.status !=6">
  121. <div class="box-tab" v-if="deliveryList.length > 1">
  122. <div
  123. :class="indexs === index ? 'item active' : 'item'"
  124. v-for="(item, index) in deliveryList"
  125. :key="index"
  126. @click="onClickTabDelivery(index)"
  127. >
  128. {{$t('orderDetails.packages')}}{{ index + 1 }}
  129. </div>
  130. </div>
  131. <div class="box-con" v-if="deliveryExpresse">
  132. <div class="deliver-msg">
  133. <div class="d-item">
  134. <div class="text">{{$t('submitOrder.deliveryMethod')}}:</div>
  135. <div class="res">{{['',$t('submitOrder.courierDelivery'),$t('orderDetails.buyerPickup'),$t('orderDetails.noExpressDelivery'),$t('orderDetails.sameCityDelivery')][deliveryExpresse.deliveryType]}}</div>
  136. </div>
  137. <div class="d-item">
  138. <div class="text">{{$t('orderDetails.shipmenttime')}}:</div>
  139. <div class="res">{{ deliveryExpresse.createTime }}</div>
  140. </div>
  141. <div class="d-item" v-if="deliveryExpresse.deliveryDto">
  142. <div class="text">{{$t('orderDetails.courierCompany')}}:</div>
  143. <div class="res">
  144. {{ deliveryExpresse.deliveryDto.companyName }}
  145. </div>
  146. </div>
  147. <div class="d-item" v-if="deliveryExpresse.deliveryDto">
  148. <div class="text">{{$t('orderDetails.waybillNumber')}}:</div>
  149. <div class="res">
  150. {{ deliveryExpresse.deliveryDto.dvyFlowId }}
  151. </div>
  152. </div>
  153. <div
  154. class="d-goods"
  155. :class="{ over: deliveryExpresse.orderItems.length > 5 }"
  156. >
  157. <div
  158. class="arrow prev"
  159. @click="prevItem"
  160. :class="{
  161. disable:
  162. deliveryExpresse.orderItems.length - 5 <= 0 ||
  163. this.offsetCount < 1
  164. }"
  165. ></div>
  166. <div
  167. class="arrow next"
  168. @click="nextItem"
  169. :class="{
  170. disable:
  171. deliveryExpresse.orderItems.length - 5 <= 0 ||
  172. this.offsetCount >= deliveryExpresse.orderItems.length - 5
  173. }"
  174. ></div>
  175. <div class="item-goods">
  176. <div class="goods-box" ref="carouser">
  177. <div
  178. class="item"
  179. v-for="(orderItem, index) in deliveryExpresse.orderItems"
  180. :key="index"
  181. >
  182. <div class="img">
  183. <img v-if="orderItem.pic" :src="orderItem.pic" alt @error="handlePicError"/>
  184. <img v-else src="~/assets/img/def.png" alt />
  185. <div class="number">×{{ orderItem.prodCount }}</div>
  186. </div>
  187. <div class="name">{{ orderItem.prodName }}</div>
  188. </div>
  189. </div>
  190. </div>
  191. </div>
  192. </div>
  193. <div class="logistics" v-if="deliveryExpresse.deliveryType !== 3">
  194. <div class="l-tit" v-if="deliveryExpresse">
  195. <span class="text">{{$t('orderDetails.LogisticsInformation')}}:</span>
  196. <!-- <span
  197. class="l-state"
  198. v-if="deliveryExpresse.deliveryDto.state === 0"
  199. >{{$t('orderDetails.noRecords')}}</span
  200. >
  201. <span
  202. class="l-state"
  203. v-if="deliveryExpresse.deliveryDto.state === 1"
  204. >{{$t('orderDetails.received')}}</span
  205. >
  206. <span
  207. class="l-state"
  208. v-if="deliveryExpresse.deliveryDto.state === 2"
  209. >{{$t('orderDetails.inTransit')}}</span
  210. >
  211. <span
  212. class="l-state"
  213. v-if="deliveryExpresse.deliveryDto.state === 3"
  214. >{{$t('orderDetails.signed')}}</span
  215. >
  216. <span
  217. class="l-state"
  218. v-if="deliveryExpresse.deliveryDto.state === 201"
  219. >{{$t('orderDetails.reachCity')}}</span
  220. >
  221. <span
  222. class="l-state"
  223. v-if="deliveryExpresse.deliveryDto.state === 4"
  224. >{{$t('orderDetails.faultyPackages')}}</span
  225. > -->
  226. </div>
  227. <div class="logistics-box">
  228. <div v-if="deliveryExpresse.deliveryDto.traces && deliveryExpresse.deliveryDto.traces.length">
  229. <div
  230. class="item"
  231. v-for="(trace, index) in deliveryExpresse.deliveryDto.traces"
  232. :key="index"
  233. >
  234. <div class="time">{{ trace.acceptTime }}</div>
  235. <div class="text">{{ trace.acceptStation }}</div>
  236. </div>
  237. </div>
  238. <div
  239. class="item"
  240. v-if="!deliveryExpresse.deliveryDto.traces || !deliveryExpresse.deliveryDto.traces.length"
  241. >
  242. {{$t('orderDetails.logisticsTips1')}}
  243. </div>
  244. <div
  245. class="item"
  246. v-if="orderInfo.status >= 3 && orderInfo.dvyTime !== null"
  247. >
  248. <div class="time">{{ orderInfo.dvyTime }}</div>
  249. <div class="text">{{$t('orderDetails.logisticsTips2')}}</div>
  250. </div>
  251. <div
  252. class="item"
  253. v-if="orderInfo.status >= 2 && orderInfo.payTime !== null"
  254. >
  255. <div class="time">{{ orderInfo.payTime }}</div>
  256. <div class="text">{{$t('orderDetails.logisticsTips3')}}</div>
  257. </div>
  258. <div :class="['item', orderInfo.status >= 1?'left-line':'']" v-if="orderInfo.status >= 1">
  259. <div class="time">{{ orderInfo.createTime }}</div>
  260. <div class="text">{{$t('orderDetails.logisticsTips4')}}</div>
  261. </div>
  262. </div>
  263. </div>
  264. </div>
  265. </div>
  266. <!-- /配送信息 -->
  267. <!-- 订单信息 -->
  268. <div class="order-info">
  269. <!-- 收货信息/自提信息(orderMold=1虚拟商品不展示收货/自提信息) -->
  270. <div v-if="orderInfo.orderMold !== 1" class="item">
  271. <div class="tit">{{['', $t('orderDetails.receiptInformation'), $t('orderDetails.selfPickupInformation'), $t('orderDetails.receiptInformation'), $t('orderDetails.receiptInformation')][dvyType]}}</div>
  272. <div class="con">
  273. <div class="con-item">
  274. <span class="item-tit">{{['', $t('orderDetails.receiver'), $t('orderDetails.picker'), $t('orderDetails.receiver'), $t('orderDetails.receiver')][dvyType]}}:</span>
  275. <span class="item-con">{{dvyType==2?stationUserName:userAddrDto.receiver}}</span>
  276. </div>
  277. <div class="con-item">
  278. <span class="item-tit">{{$t('orderDetails.contactInformation')}}:</span>
  279. <span class="item-con">{{dvyType==2?stationUserMobile:userAddrDto.mobile}}</span>
  280. </div>
  281. <div class="con-item">
  282. <span class="item-tit">{{['', $t('orderDetails.receiptAddress'), $t('orderDetails.pickupAddress'), $t('orderDetails.receiptAddress'), $t('orderDetails.receiptAddress')][dvyType]}}:</span>
  283. <span class="item-con">{{dvyType==2?stationAddress:userAddrDto.province+userAddrDto.city+userAddrDto.area+userAddrDto.addr}}</span>
  284. </div>
  285. </div>
  286. </div>
  287. <!-- 配送信息(orderMold=1虚拟商品不展示配送信息) -->
  288. <div v-if="orderInfo.orderMold !== 1" class="item">
  289. <div class="tit">{{$t('orderDetails.deliveryInformation')}}</div>
  290. <div class="con">
  291. <div class="con-item">
  292. <span class="item-tit">{{$t('orderDetails.deliveryMethod')}}:</span>
  293. <span class="item-con" v-if="dvyType">{{
  294. [$t('orderDetails.generalDelivery'), $t('orderDetails.buyerPickup'), $t('orderDetails.noExpressDelivery'), $t('orderDetails.sameCityDelivery')][dvyType - 1]
  295. }}</span>
  296. <span class="item-con" v-if="!dvyType">{{$t('orderDetails.none')}}</span>
  297. </div>
  298. <div class="con-item">
  299. <span class="item-tit">{{$t('orderDetails.shippingFee')}}:</span>
  300. <span class="item-con"
  301. >¥{{ parsePrice(orderInfo.transfee)[0] }}.{{
  302. parsePrice(orderInfo.transfee)[1]
  303. }}</span
  304. >
  305. </div>
  306. </div>
  307. </div>
  308. <!--
  309. 虚拟商品-券码列表显隐:
  310. 1、订单状态为status==1“待支付”时隐藏
  311. 2、订单状态为status==6“已取消”时
  312. 2.1 含有退款编号(即退款成功)时显示
  313. 2.2 不含退款编号(即取消支付)时隐藏
  314. 3、订单状态status != 7(status:7拼团中)时显示
  315. 4、writeOffNum!==0 需要核销的虚拟商品才显示
  316. -->
  317. <div
  318. v-if="orderInfo.orderMold === 1 &&
  319. orderInfo.status != 1 &&
  320. orderInfo.status != 7 &&
  321. ((orderInfo.status == 6 && orderInfo.orderItemDtos[0].refundSn) ||orderInfo.status != 6) &&
  322. orderInfo.writeOffNum !== 0
  323. "
  324. class="item virtual-goods-code">
  325. <!-- 待使用/未使用 (unusedCount待使用的核销券) -->
  326. <div v-if="unusedCount && orderInfo.status != 6" class="tit">{{$t('orderDetails.toBeUsed')}}({{unusedCount}}{{$t('orderDetails.sheets')}})</div>
  327. <!-- 确认收货(已完成) & 没有待核销的券码 -->
  328. <div v-if="orderInfo.status == 5 && !unusedCount" class="tit">{{$t('orderDetails.used')}}({{orderInfo.orderItemDtos[0].prodCount - unusedCount}}{{$t('orderDetails.sheets')}})</div>
  329. <!-- 退款成功 -->
  330. <div v-if="orderInfo.status == 6 && orderInfo.orderItemDtos[0].refundSn" class="tit">{{$t('orderDetails.used')}}({{orderInfo.orderItemDtos[0].prodCount - unusedCount}}{{$t('orderDetails.sheets')}})</div>
  331. <div class="con">
  332. <!-- 券码列表 -->
  333. <div v-for="(item,index) in virtualInfoList" :key="index" class="con-item">
  334. <!-- isWriteOff:0未使用 1已使用 -->
  335. <div :class="{'used': item.isWriteOff === 1 || orderInfo.status == 6}">
  336. <div class="item-tit">
  337. {{$t('orderDetails.voucherCode')}}<span v-if="virtualInfoList.length > 1">{{index+1}}</span>:
  338. </div>
  339. <span class="code">{{item.writeOffCode}}</span>
  340. <span v-if="item.isWriteOff === 0 && orderInfo.status == 6 && orderInfo.orderItemDtos[0].refundSn" class="grey">({{$t('orderDetails.refunded')}})</span>
  341. </div>
  342. </div>
  343. </div>
  344. </div>
  345. <!-- 全部留言(虚拟商品)-->
  346. <div
  347. v-if="orderInfo.orderMold === 1
  348. && virtualRemarks.length"
  349. class="item all-msg">
  350. <div class="tit">{{$t('submitOrder.allMessages')}}</div>
  351. <div class="con">
  352. <div v-for="(item,index) in virtualRemarks" :key="index" class="con-item">
  353. <div class="item-tit">{{item.name}}:</div>
  354. <div class="msg-con">{{item.value}}</div>
  355. </div>
  356. </div>
  357. </div>
  358. <!-- 付款信息 -->
  359. <div v-if="orderInfo.status>1 && orderInfo.payType" class="item">
  360. <div class="tit">{{$t('orderDetails.paymentInformation')}}</div>
  361. <div class="con">
  362. <!-- 支付方式 -->
  363. <div class="con-item">
  364. <span class="item-tit">{{$t('orderDetails.paymentMethod')}}:</span>
  365. <!-- <span class="item-con">{{$t('orderDetails.onlinePayment')}}</span> -->
  366. {{ [$t('payment.pointPay'),$t('payment.wechatPay'),$t('payment.aliPay'),$t('payment.wechatPay'),$t('payment.wechatPay'),$t('payment.wechatPay'),$t('payment.aliPay'),$t('payment.aliPay'),$t('payment.wechatPay'),$t('payment.balancePay')][orderInfo.payType] }}
  367. </div>
  368. <!-- 付款时间 -->
  369. <div class="con-item">
  370. <span class="item-tit">{{$t('orderDetails.paymentTime')}}:</span>
  371. <span class="item-con">{{ orderInfo.payTime }}</span>
  372. </div>
  373. </div>
  374. </div>
  375. <!-- 订单备注 -->
  376. <div class="item">
  377. <div class="tit">{{$t('orderDetails.orderRemarks')}}</div>
  378. <div class="con">
  379. <div class="con-item">
  380. <!-- <span class="item-tit">发票类型:</span> -->
  381. <span class="item-con">{{ orderInfo.remarks }}</span>
  382. </div>
  383. <!-- <div class="con-item">
  384. <span class="item-tit">发票抬头:</span>
  385. <span class="item-con">个人</span>
  386. </div>
  387. <div class="con-item">
  388. <span class="item-tit">发票内容:</span>
  389. <span class="item-con">商品明细</span>
  390. </div>-->
  391. </div>
  392. </div>
  393. <!-- <div class="item">
  394. <div class="tit">发票信息</div>
  395. <div class="con">
  396. <div class="con-item">
  397. <span class="item-tit">发票类型:</span>
  398. <span class="item-con">电子普通发票</span>
  399. </div>
  400. <div class="con-item">
  401. <span class="item-tit">发票抬头:</span>
  402. <span class="item-con">个人</span>
  403. </div>
  404. <div class="con-item">
  405. <span class="item-tit">发票内容:</span>
  406. <span class="item-con">商品明细</span>
  407. </div>
  408. </div>
  409. </div>-->
  410. </div>
  411. <!-- /订单信息 -->
  412. <!-- 商品信息 -->
  413. <div class="goods-box">
  414. <div class="goods-con">
  415. <div class="shop">
  416. <span class="name">{{$t('chat.stores')}}:</span>
  417. <a
  418. href="javascript:void(0)"
  419. @click="toShopPage(orderInfo.shopId)"
  420. class="name"
  421. >{{ orderInfo.shopName }}</a
  422. >
  423. </div>
  424. <div class="order-table">
  425. <table cellspacing="0" cellpadding="0" class="box">
  426. <tbody>
  427. <tr class="box-tit">
  428. <th>{{$t('products')}}</th>
  429. <th width="100" class="tal">{{$t('quantity')}}</th>
  430. <th width="140">{{$t('priceOne')}}</th>
  431. <th width="140">{{$t('totalAll')}}</th>
  432. <th width="140">{{$t('operation')}}</th>
  433. </tr>
  434. <tr
  435. class="box-tr"
  436. v-for="(prod, prodIndex) in orderInfo.orderItemDtos"
  437. :key="prodIndex"
  438. >
  439. <td>
  440. <div class="goods-info">
  441. <a
  442. href="javascript:void(0);"
  443. @click="toDetail(prod)"
  444. class="img"
  445. >
  446. <img v-if="prod.pic" :src="prod.pic" alt @error="handlePicError"/>
  447. <img v-else src="~/assets/img/def.png" alt />
  448. </a>
  449. <div class="name-sku">
  450. <a
  451. href="javascript:void(0);"
  452. @click="toDetail(prod)"
  453. class="name"
  454. >{{ prod.prodName }}</a
  455. >
  456. <span class="sku">{{ prod.skuName }}</span>
  457. </div>
  458. </div>
  459. <!-- 赠品:多件商品时展示 -->
  460. <div
  461. v-if="orderInfo.orderItemDtos.length > 1 && prod.giveawayList && prod.giveawayList.length"
  462. class="gift-info">
  463. <div
  464. v-for="gitfItem in prod.giveawayList"
  465. :key="gitfItem.orderItemId"
  466. class="gift-item"
  467. @click="toProdDetails(gitfItem.prodId)"
  468. >
  469. <span class="name">{{ '【' + $t('prodDetail.gift') + '】' + gitfItem.prodName }}</span>
  470. <span class="num">×{{ gitfItem.prodCount }}</span>
  471. </div>
  472. </div>
  473. <!-- / 赠品 -->
  474. </td>
  475. <td>
  476. <div class="goods-number">×{{ prod.prodCount }}</div>
  477. </td>
  478. <td>
  479. <span class="price"
  480. >¥{{ parsePrice(prod.price)[0] }}.{{
  481. parsePrice(prod.price)[1]
  482. }}</span
  483. >
  484. </td>
  485. <td>
  486. <span class="price"
  487. >¥{{ parsePrice(prod.productTotalAmount)[0] }}.{{
  488. parsePrice(prod.productTotalAmount)[1]
  489. }}</span
  490. >
  491. </td>
  492. <!-- <td>
  493. <div class="status">{{['','待付款','待发货','待收货','待评价','已完成','已取消'][orderInfo.status]}}</div>
  494. </td>-->
  495. <td>
  496. <div class="action">
  497. <!-- <a href="javascript:void(0)"
  498. @click="payNow(prod.prodId,orderInfo.status)"
  499. :class="['action-btn', orderInfo.status>4?'default':'active']">{{['','立即付款','提醒卖家','确认收货','发表评论','再次购买','立即购买'][5]}}</a>-->
  500. <!-- 退款条件:拟退款条件,还有未知判定条件 -->
  501. <!-- 虚拟商品-申请退款
  502. 1、canAllRefund允许退款
  503. 2、orderType==4虚拟商品
  504. 2.1 需要核销且还有未核销的券码
  505. 2.2 无需核销
  506. 3、金额为0且无使用积分时不显示
  507. -->
  508. <a
  509. href="javascript:void(0)"
  510. v-if="
  511. orderInfo.canAllRefund &&
  512. !prod.refundSn &&
  513. (prod.actualTotal || (!prod.actualTotal && prod.useScore)) &&
  514. orderInfo.orderType != 3 &&
  515. orderInfo.orderMold == 1 &&
  516. ((orderInfo.writeOffNum != 0 && unusedCount) || orderInfo.writeOffNum == 0)
  517. "
  518. :class="['action-btn']"
  519. @click="toApplyReturn(prod.orderItemId, orderInfo.orderMold == 1 ? 2 : 1)"
  520. >{{$t('orderDetails.requestRefund')}}</a
  521. >
  522. <a
  523. href="javascript:void(0)"
  524. v-if="
  525. (prod.actualTotal || (!prod.actualTotal && prod.useScore)) &&
  526. orderInfo.canRefund &&
  527. !prod.refundSn &&
  528. orderInfo.orderType != 3 &&
  529. orderInfo.orderMold != 1
  530. "
  531. :class="['action-btn']"
  532. @click="toApplyReturn(prod.orderItemId, 2)"
  533. >{{$t('orderDetails.requestRefund')}}</a
  534. >
  535. <a
  536. href="javascript:void(0)"
  537. v-if="prod.refundSn"
  538. :class="['action-btn']"
  539. @click="
  540. toViewRefund(
  541. prod.refundSn,
  542. 2,
  543. prod.orderItemId,
  544. prod.returnMoneySts
  545. )
  546. "
  547. >{{$t('orderDetails.viewRefund')}}</a
  548. >
  549. <a
  550. href="javascript:void(0)"
  551. v-if="orderInfo.status === 4"
  552. :class="['action-btn']"
  553. >{{$t('orderDetails.evaluation')}}</a
  554. >
  555. <a
  556. href="javascript:void(0)"
  557. v-if="(orderInfo.status > 4 || orderInfo.cancelTime !==null) && orderInfo.status != 7"
  558. @click="toProdDetail(prod.prodId)"
  559. :class="['action-btn']"
  560. >{{$t('orderDetails.repurchase')}}</a>
  561. <!-- @click="orderRoute(prod.prodId)" -->
  562. </div>
  563. </td>
  564. </tr>
  565. </tbody>
  566. <!-- 赠品:单个商品时展示 -->
  567. <tbody v-if="giveawayList && giveawayList.length">
  568. <tr
  569. class="box-tr"
  570. v-for="prod in giveawayList"
  571. :key="prod.orderItemId"
  572. >
  573. <td>
  574. <div class="goods-info">
  575. <nuxt-link
  576. :to="'/detail/' + prod.prodId"
  577. class="img"
  578. >
  579. <img v-if="prod.pic" :src="prod.pic.indexOf('http') === -1 ? picDomain + prod.pic : prod.pic" alt @error="handlePicError" />
  580. <img v-else src="~/assets/img/def.png" alt />
  581. </nuxt-link>
  582. <div class="name-sku">
  583. <nuxt-link :to="'/detail/' + prod.prodId"
  584. class="name"
  585. >{{ prod.prodName }}</nuxt-link
  586. >
  587. <div class="sku">
  588. <span class="gift-icon">{{ $t('prodDetail.gift')}}</span>
  589. <span>{{ prod.skuName }}</span>
  590. </div>
  591. </div>
  592. </div>
  593. </td>
  594. <td>
  595. <div class="goods-number">×{{ prod.prodCount }}</div>
  596. </td>
  597. <td>
  598. <span class="price">-</span>
  599. </td>
  600. <td>
  601. <span class="price">-</span>
  602. </td>
  603. <td>
  604. </td>
  605. </tr>
  606. <!-- / 赠品 -->
  607. </tbody>
  608. </table>
  609. <div class="total-return">
  610. <!-- 申请退款 -->
  611. <!-- 金额为0且无使用积分时不显示 -->
  612. <a
  613. href="javascript:void(0)"
  614. v-if="
  615. orderInfo.canRefund &&
  616. orderInfo.canAllRefund &&
  617. !orderInfo.orderItemDtos.refundSn &&
  618. orderInfo.orderType != 3
  619. && orderInfo.orderMold != 1
  620. && ((orderInfo.orderScore && !orderInfo.actualTotal) || orderInfo.actualTotal)
  621. "
  622. class="action-btn"
  623. @click="toApplyReturn(orderInfo.orderItemDtos.orderItemId, 1)"
  624. >{{$t('orderDetails.refundsEntireOrders')}}</a
  625. >
  626. <!-- <a
  627. href="javascript:void(0)"
  628. v-if="!orderInfo.canRefund && !orderInfo.canAllRefund && orderInfo.orderItemDtos[0].refundSn && orderInfo.orderItemDtos.length == 1"
  629. class="action-btn"
  630. @click="toViewRefund(orderInfo.orderItemDtos[0].refundSn,1,orderInfo.orderItemDtos[0].orderItemId,orderInfo.orderItemDtos[0].returnMoneySts)"
  631. >查看退款</a>-->
  632. </div>
  633. </div>
  634. <!-- 商品总额与优惠明细 -->
  635. <div class="goods-total">
  636. <!-- 商品总额 -->
  637. <div class="item">
  638. <span class="tit">{{$t('orderDetails.totalMerchandise')}}:</span>
  639. <span class="price"
  640. >¥{{ parsePrice(orderInfo.total)[0] }}.{{
  641. parsePrice(orderInfo.total)[1]
  642. }}</span
  643. >
  644. </div>
  645. <!-- 商品运费 -->
  646. <div v-if="orderInfo.orderMold !== 1" class="item">
  647. <span class="tit">{{$t('orderDetails.productShipping')}}:</span>
  648. <span class="price"
  649. ><span v-if="orderInfo.transfee && orderInfo.status === 2 && orderInfo.isRefunding" style="margin-right: 8px;">
  650. <el-popover
  651. placement="top-start"
  652. width="200"
  653. trigger="hover"
  654. :content="$t('applyReturn.refundBeforeShippingTips')">
  655. <i class="el-icon-warning" slot="reference"></i>
  656. </el-popover></span
  657. >¥{{ parsePrice(orderInfo.transfee)[0] }}.{{
  658. parsePrice(orderInfo.transfee)[1]
  659. }}
  660. </span
  661. >
  662. </div>
  663. <!-- 运费减免 -->
  664. <div v-if="orderInfo.platformFreeFreightAmount" class="item">
  665. <span class="tit">{{$t('orderDetails.shippingDiscount')}}:</span>
  666. <span class="price gray"
  667. >- ¥{{ parsePrice(orderInfo.platformFreeFreightAmount)[0] }}.{{
  668. parsePrice(orderInfo.platformFreeFreightAmount)[1]
  669. }}</span
  670. >
  671. </div>
  672. <!-- 平台优惠券 -->
  673. <div v-if="orderInfo.platformCouponAmount" class="item">
  674. <span class="tit">{{$t('submitOrder.platformCoupons')}}:</span>
  675. <span class="price gray"
  676. >- ¥{{ parsePrice(orderInfo.platformCouponAmount)[0] }}.{{
  677. parsePrice(orderInfo.platformCouponAmount)[1]
  678. }}</span
  679. >
  680. </div>
  681. <!-- 积分抵扣 -->
  682. <div v-if="orderInfo.scoreAmount" class="item">
  683. <span class="tit">{{$t('submitOrder.pointsCredit')}}:</span>
  684. <span class="price gray"
  685. >- ¥{{ parsePrice(orderInfo.scoreAmount)[0] }}.{{
  686. parsePrice(orderInfo.scoreAmount)[1]
  687. }}</span
  688. >
  689. </div>
  690. <!-- 会员折扣 -->
  691. <div v-if="orderInfo.memberAmount" class="item">
  692. <span class="tit">{{$t('submitOrder.memberDiscount')}}:</span>
  693. <span class="price gray"
  694. >- ¥{{ parsePrice(orderInfo.memberAmount)[0] }}.{{
  695. parsePrice(orderInfo.memberAmount)[1]
  696. }}</span
  697. >
  698. </div>
  699. <!-- 店铺优惠券 -->
  700. <div v-if="orderInfo.shopCouponMoney" class="item">
  701. <span class="tit">{{$t('orderDetails.storeCoupons')}}:</span>
  702. <span class="price gray"
  703. >- ¥{{ parsePrice(orderInfo.shopCouponMoney)[0] }}.{{
  704. parsePrice(orderInfo.shopCouponMoney)[1]
  705. }}</span
  706. >
  707. </div>
  708. <!-- 促销满减 -->
  709. <div v-if="orderInfo.discountMoney" class="item">
  710. <span class="tit">{{$t('submitOrder.promotionalSale')}}:</span>
  711. <span class="price gray"
  712. >- ¥{{ parsePrice(orderInfo.discountMoney)[0] }}.{{
  713. parsePrice(orderInfo.discountMoney)[1]
  714. }}</span
  715. >
  716. </div>
  717. <!-- 套餐减免 -->
  718. <div v-if="orderInfo.shopComboAmount" class="item">
  719. <span class="tit">{{$t('submitOrder.packageOffer')}}:</span>
  720. <span class="price gray"
  721. >- ¥{{ parsePrice(orderInfo.shopComboAmount)[0] }}.{{
  722. parsePrice(orderInfo.shopComboAmount)[1]
  723. }}</span
  724. >
  725. </div>
  726. <!-- 拼团/秒杀 -->
  727. <div v-if="orderInfo.orderType && orderInfo.orderType!=3 && orderInfo.shopAmount" class="item">
  728. <span class="tit">{{orderInfo.orderType === 1 ? $t('index.group') : $t('index.spike')}}{{$t('cart.offers')}}:</span>
  729. <span class="price gray"
  730. >- ¥{{ parsePrice(orderInfo.shopAmount)[0] }}.{{
  731. parsePrice(orderInfo.shopAmount)[1]
  732. }}</span
  733. >
  734. </div>
  735. <!-- 商家改价(只允许减价) -->
  736. <div v-if="orderInfo.shopChangeFreeAmount" class="item">
  737. <span class="tit">{{$t('orderDetails.merchantsModifyPrices')}}:</span>
  738. <span class="price gray"
  739. >- ¥{{ parsePrice(orderInfo.shopChangeFreeAmount)[0] }}.{{
  740. parsePrice(orderInfo.shopChangeFreeAmount)[1]
  741. }}</span>
  742. </div>
  743. <!-- 商品总优惠 -->
  744. <!-- <div class="item">
  745. <span class="tit">{{$t('orderDetails.productOffer')}}:</span>
  746. <span class="price"
  747. >-¥{{ parsePrice(orderInfo.reduceAmount)[0] }}.{{
  748. parsePrice(orderInfo.reduceAmount)[1]
  749. }}</span
  750. >
  751. </div> -->
  752. <!-- 应付金额/实付金额 -->
  753. <div class="item">
  754. <span class="tit">{{
  755. orderInfo.status == 1 ? $t('orderDetails.amountPayable') : $t('orderDetails.actualAmount')
  756. }}</span>
  757. <span class="price big">
  758. <span v-if="orderInfo.actualTotal"
  759. >¥{{ parsePrice(orderInfo.actualTotal)[0] }}.{{
  760. parsePrice(orderInfo.actualTotal)[1]
  761. }}</span
  762. >
  763. <span v-if="orderInfo.actualTotal && orderInfo.orderScore"
  764. >+</span
  765. >
  766. <span v-if="orderInfo.orderScore"
  767. >{{ orderInfo.orderScore }} {{$t('orderDetails.points')}}</span
  768. >
  769. </span>
  770. </div>
  771. </div>
  772. <!-- 商品总额与优惠明细 end -->
  773. <!-- 提示弹窗 -->
  774. <div class="popup-mask" v-if="showTips"></div>
  775. <div class="popup-box" v-if="showTips">
  776. <div class="tit">
  777. <div class="text">{{$t('tips')}}</div>
  778. <div class="close" @click="showTips = 0"></div>
  779. </div>
  780. <div class="con">
  781. <div class="tip">
  782. <div class="tip-icon warning"></div>
  783. <div class="tip-info">
  784. <div class="result">{{$t('orderDetails.confirmCancellation')}}</div>
  785. <div class="date">{{$t('orderDetails.confirmCancellationTips')}}</div>
  786. <div class="btns">
  787. <a
  788. href="javascript:void(0);"
  789. class="btn-r"
  790. @click="cancelOrder"
  791. >{{$t('determine')}}</a
  792. >
  793. <a
  794. href="javascript:void(0);"
  795. class="btn-g"
  796. @click="showTips = 0"
  797. >{{$t('cancel')}}</a
  798. >
  799. </div>
  800. </div>
  801. </div>
  802. </div>
  803. </div>
  804. </div>
  805. </div>
  806. <!-- /商品信息 -->
  807. </div>
  808. </div>
  809. </template>
  810. <script>
  811. import util from '~/plugins/util'
  812. import { picDomain } from '~/plugins/config.js'
  813. import big from '~/plugins/big.min.js'
  814. export default {
  815. data () {
  816. return {
  817. // 图片地址
  818. picDomain: picDomain,
  819. orderNumber: '',
  820. orderInfo: {},
  821. userAddrDto: {},
  822. showTips: false,
  823. betweenTime: { day: '', hou: '', min: '', sec: '' }, // 订单支付倒计时
  824. timer: '', // 定时器
  825. indexs: 0,
  826. deliveryList: [], // 包裹集合
  827. deliveryExpresse: null, // 包裹信息
  828. offsetCount: 0, // 偏移数
  829. isLastProd: false, //最后一款商品
  830. irrevocable: false, //不可撤销
  831. sum: [], //本单已申请单个退款的商品数组
  832. dvyType: 1, //配送类型 1:快递 2:自提 3:无需快递
  833. stationUserName: '', //自提人名字
  834. stationUserMobile: '', //自提人手机号
  835. stationAddress: '', //自提地址
  836. // 虚拟商品
  837. virtualRemarks: [], // 全部留言列表
  838. unusedCount: 0, // 待使用的核销券
  839. virtualInfoList: [], // 券码列表
  840. giveawayList: [] // 赠品列表
  841. }
  842. },
  843. created () {
  844. this.orderNumber = this.$route.query.orderNumber
  845. },
  846. mounted () {
  847. // 设置网页标题
  848. document.title = this.$i18n.t('orderDetails.orderDetails')
  849. this.getOrderDetail()
  850. // console.log(this.deliveryExpresse.deliveryDto.traces.length)
  851. },
  852. watch: {
  853. deliveryExpresse: function (newVal, oldVal) {
  854. this.$nextTick(() => {
  855. this.offsetCount = 0 //初始化变量
  856. if (this.deliveryExpresse && this.$refs.carouser) {
  857. this.$refs.carouser.style.left = '0px'
  858. }
  859. })
  860. }
  861. },
  862. methods: {
  863. /**
  864. * 获取支付订单详情
  865. */
  866. getOrderDet () {
  867. this.$axios.get('/p/order/getOrderPayInfoByOrderNumber', {
  868. params: {
  869. orderNumbers: this.orderNumber
  870. }
  871. }).then(({ data }) => {
  872. this.payOrderInfo = data
  873. this.betweenTimestamp = util.betweenTimestamp(new Date().getTime(), util.dateToTimestamp(data.endTime))
  874. if (this.betweenTimestamp > 0) {
  875. this.betweenTime = util.betweenTime(this.betweenTimestamp)
  876. this.countdown()
  877. } else {
  878. }
  879. })
  880. },
  881. /**
  882. * 倒计时
  883. */
  884. countdown () {
  885. this.betweenTimestamp = this.betweenTimestamp - 1000
  886. this.betweenTime = util.betweenTime(this.betweenTimestamp)
  887. if(Number(this.betweenTime.day === 0) && Number(this.betweenTime.hou === 0) && Number(this.betweenTime.min === 0) && Number(this.betweenTime.sec === 0)){
  888. clearTimeout(this.timer)
  889. history.go(0)
  890. }
  891. this.timer = setTimeout(() => {
  892. this.countdown()
  893. }, 1000)
  894. },
  895. handlePicError(e){
  896. e.target.src=require('../assets/img/def.png')
  897. },
  898. /**
  899. * 跳转详情页
  900. */
  901. toDetail(prod) {
  902. if (this.orderInfo.orderType == 2 && !this.orderInfo.seckillId) {
  903. this.$message.warning(this.$i18n.t('spike.currentSecondsAreOver'))
  904. return
  905. }
  906. this.$router.push({ path: (this.orderInfo.orderType == 3 ? '/member-center/integral-det/': this.orderInfo.orderType == 2 ? '/secdetail/' : '/detail/') + (this.orderInfo.orderType == 2 ? this.orderInfo.seckillId : prod.prodId) });
  907. },
  908. /**
  909. * 获取订单详情
  910. */
  911. getOrderDetail () {
  912. this.$axios.get('/p/myOrder/orderDetail', {
  913. params: {
  914. orderNumber: this.$route.query.orderNumber
  915. }
  916. }).then(({ data }) => {
  917. // isRefunding: 是否有订单项正在退款
  918. data.isRefunding = data.orderItemDtos.findIndex(el=> el.refundSn && el.returnMoneySts && el.returnMoneySts != 5) > -1
  919. if (data.status == 1) {
  920. // 订单待支付则获取待支付订单详情
  921. this.getOrderDet()
  922. }
  923. this.dvyType = data.dvyType
  924. this.orderInfo = data
  925. // 官方自营店判断
  926. this.orderInfo.shopId===null?this.orderInfo.shopId=0:this.orderInfo.shopId
  927. this.userAddrDto = data.userAddrDto //地址Dto
  928. if(this.orderInfo.status >= 3) {
  929. this.getDeliveryDet()
  930. }
  931. if (this.dvyType == 2) {
  932. this.getStationDetail()
  933. }
  934. // 虚拟商品
  935. if (data.orderMold === 1) {
  936. // 留言列表(过滤没有填写的留言)
  937. const virtualRemarks = data.virtualRemark ? JSON.parse(data.virtualRemark) : []
  938. let remark = []
  939. if (virtualRemarks && virtualRemarks.length) {
  940. remark = virtualRemarks.filter(el => el.value)
  941. }
  942. this.virtualRemarks = remark || []
  943. this.virtualInfoList = data.virtualInfoList || []
  944. // 计算待使用券码总数
  945. if (this.virtualInfoList && this.virtualInfoList.length) {
  946. let unusedCount = 0
  947. this.virtualInfoList.forEach(el => {
  948. if (el.isWriteOff === 0) {
  949. unusedCount = unusedCount + 1
  950. }
  951. })
  952. this.unusedCount = unusedCount
  953. }
  954. }
  955. // 赠品
  956. this.giveawayList = []
  957. if (this.orderInfo.orderItemDtos && this.orderInfo.orderItemDtos.length === 1) {
  958. this.giveawayList = this.orderInfo.orderItemDtos[0].giveawayList
  959. }
  960. })
  961. },
  962. // 获取自提点信息
  963. getStationDetail () {
  964. this.$axios.get('/p/myStationOrder/stationDetail', {
  965. params: {
  966. orderNumber: this.$route.query.orderNumber
  967. }
  968. }).then(({ data }) => {
  969. this.stationUserName = data.stationUserName //自提人的名字
  970. this.stationUserMobile = data.stationUserMobile //自提人的手机
  971. this.stationAddress = data.stationAddress //自提点的地址
  972. })
  973. },
  974. // 获取物流详情
  975. getDeliveryDet () {
  976. this.$axios.get('/p/myDelivery/orderInfo/' + this.orderNumber).then(({ data }) => {
  977. if (data.length && data[0].deliveryDto && data[0].deliveryDto.traces) {
  978. data[0].deliveryDto.traces.reverse()
  979. }
  980. this.deliveryList = data //包裹集合信息
  981. this.deliveryExpresse = data[0] //包裹信息
  982. })
  983. },
  984. // 点击包裹tab事件
  985. onClickTabDelivery (index) {
  986. this.indexs = index
  987. this.getDeliveryDtoById()
  988. },
  989. // 获取指定包裹的物流信息
  990. getDeliveryDtoById() {
  991. this.$axios.get('/p/myDelivery/deliveryOrder/' + this.deliveryList[this.indexs].orderDeliveryId).then(({ data }) => {
  992. if (data.deliveryDto && data.deliveryDto.traces) {
  993. data.deliveryDto.traces.reverse()
  994. }
  995. this.deliveryExpresse = data
  996. })
  997. },
  998. // 商品切换
  999. prevItem () {
  1000. var len = this.deliveryExpresse.orderItems.length
  1001. if (len - 5 > 0) {
  1002. if (this.offsetCount > 0) {
  1003. this.offsetCount--
  1004. this.$refs.carouser.style.left = '-' + (70 * this.offsetCount) + 'px'
  1005. } else {
  1006. return false
  1007. }
  1008. } else if (len - 5 <= 0) {
  1009. return false
  1010. } else {
  1011. return false
  1012. }
  1013. },
  1014. nextItem () {
  1015. var len = this.deliveryExpresse.orderItems.length
  1016. if (len - 5 > 0) {
  1017. if (this.offsetCount < len - 5) {
  1018. this.offsetCount++
  1019. this.$refs.carouser.style.left = '-' + (70 * this.offsetCount) + 'px'
  1020. } else if (len - 5 <= 0) {
  1021. return false
  1022. } else {
  1023. return false
  1024. }
  1025. } else {
  1026. return false
  1027. }
  1028. },
  1029. /**
  1030. * 跳转店铺页面
  1031. */
  1032. toShopPage (shopId) {
  1033. if(shopId===0){
  1034. this.$router.push({ path: '/member-center/integral-mall' })
  1035. return
  1036. }
  1037. this.$router.push({ path: '/shopIndex?sid=' + shopId })
  1038. },
  1039. /**
  1040. * 跳转到个人中心
  1041. */
  1042. userCenter () {
  1043. this.$router.push({ path: '/user-center' })
  1044. },
  1045. /**
  1046. * 跳转到商品详情页
  1047. */
  1048. toProdDetails (prodId) {
  1049. this.$router.push({ path: '/detail/' + prodId })
  1050. },
  1051. toProdDetail (prodId) {
  1052. if (this.orderInfo.orderType == 3) {
  1053. this.$router.push({ path: '/member-center/integral-det/' + prodId })
  1054. } else {
  1055. this.$router.push({ path: '/detail/' + prodId })
  1056. }
  1057. },
  1058. /**
  1059. * 根据订单状态跳转
  1060. */
  1061. // orderRoute (prodId) {
  1062. // this.toProdDetail(prodId)
  1063. // },
  1064. /**
  1065. * 是否最后一个商品在执行单个商品退款事件
  1066. */
  1067. applyLastProdRefund: function () {
  1068. if (this.orderInfo.status == 2) { //待发货状态下
  1069. if (this.orderInfo.orderItemDtos.length > 1) { //如果商品列表长度大于1
  1070. let sum = []
  1071. // 遍历商品list
  1072. this.orderInfo.orderItemDtos.forEach((el, index) => {
  1073. if (el.refundSn) { //如果拥有退款单号
  1074. sum.push(el)
  1075. this.sum = sum
  1076. }
  1077. })
  1078. if (this.sum.length == this.orderInfo.orderItemDtos.length - 1) {
  1079. // 如果拥有退款单号的商品数组长度等于商品列表数据长度-1,那么点击的这件商品就是最后一个订单项
  1080. this.isLastProd = true
  1081. }
  1082. }
  1083. }
  1084. },
  1085. /**
  1086. * 申请退款
  1087. */
  1088. toApplyReturn (orderItemId, refundType) { //refundType退款单类型(1:整单退款,2:单个物品退
  1089. const platformFreeFreightAmount = this.orderInfo.platformFreeFreightAmount
  1090. const transfee = platformFreeFreightAmount
  1091. ? Number.parseFloat(new big(platformFreeFreightAmount).minus(this.orderInfo.transfee)).valueOf()
  1092. : this.orderInfo.transfee
  1093. if (this.orderInfo.status == 2) { //待发货
  1094. if (refundType == 2) { //单个退款
  1095. this.applyLastProdRefund() //是否最后一个订单项申请退款
  1096. let orderItem = []
  1097. this.orderInfo.orderItemDtos.forEach((el, index) => {
  1098. el.isLastProd = this.isLastProd
  1099. if (el.orderItemId == orderItemId) { //如果当前的订单项id和点击传入的订单项id一致
  1100. //保存数据
  1101. orderItem.push(el)
  1102. }
  1103. })
  1104. let refundProdObj = {}
  1105. if (this.orderInfo.orderItemDtos.length == 1) {
  1106. refundProdObj.isOnlyProd = true
  1107. } else {
  1108. refundProdObj.isOnlyProd = false
  1109. }
  1110. refundProdObj.refundType = refundType
  1111. refundProdObj.orderItem = orderItem
  1112. refundProdObj.buyerMobile = this.dvyType === 2 ? this.stationUserMobile : this.orderInfo.userAddrDto ? this.orderInfo.userAddrDto.mobile : ''
  1113. localStorage.setItem('refundProdObj', JSON.stringify(refundProdObj)) //将整个订单项保存
  1114. } else if (refundType == 1) { //整单退款
  1115. let refundProdObj = {}
  1116. refundProdObj.orderItem = this.orderInfo.orderItemDtos
  1117. refundProdObj.refundType = refundType
  1118. refundProdObj.actualTotal = this.orderInfo.actualTotal
  1119. refundProdObj.buyerMobile = this.dvyType === 2 ? this.stationUserMobile : this.orderInfo.userAddrDto ? this.orderInfo.userAddrDto.mobile : ''
  1120. localStorage.setItem('refundProdObj', JSON.stringify(refundProdObj)) //将整个订单所有项保存
  1121. }
  1122. this.$router.push({
  1123. path: '/user-center/apply-return',
  1124. query: {
  1125. orderNumber: this.orderNumber,
  1126. transfee: transfee,
  1127. status: this.orderInfo.status,
  1128. // actualTotal: this.orderInfo.actualTotal,
  1129. refundType: refundType,
  1130. }
  1131. })
  1132. } else if (this.orderInfo.status != 2) {
  1133. if (refundType == 2) { //单个退
  1134. let orderItem = []
  1135. this.orderInfo.orderItemDtos.forEach((el, index) => {
  1136. if (el.orderItemId == orderItemId) { //如果当前的订单项id和点击传入的订单项id一致
  1137. //保存数据
  1138. orderItem.push(el)
  1139. }
  1140. })
  1141. let refundProdObj = {}
  1142. refundProdObj.orderItem = orderItem
  1143. // 虚拟商品
  1144. if (this.orderInfo.orderMold == 1) {
  1145. // 1.无需核销:允许用户选择退款数量(writeOffNum 0无需核销 -1多次核销 1单次核销)
  1146. refundProdObj.needWriteOffs = this.orderInfo.writeOffNum !== 0
  1147. // 2.需要核销:展示最大可退款件数,不允许选择(最大可退款件数 = 待使用的核销券数)
  1148. refundProdObj.maxRefundPieces = this.unusedCount
  1149. }
  1150. refundProdObj.buyerMobile = this.dvyType === 2 ? this.stationUserMobile : this.orderInfo.userAddrDto ? this.orderInfo.userAddrDto.mobile : ''
  1151. localStorage.setItem('refundProdObj', JSON.stringify(refundProdObj)) //将整个订单项保存
  1152. } else if (refundType == 1) { //整单退款
  1153. let refundProdObj = {}
  1154. refundProdObj.orderItem = this.orderInfo.orderItemDtos
  1155. refundProdObj.actualTotal = this.orderInfo.actualTotal
  1156. refundProdObj.orderType = this.orderInfo.orderType
  1157. refundProdObj.buyerMobile = this.dvyType === 2 ? this.stationUserMobile : this.orderInfo.userAddrDto ? this.orderInfo.userAddrDto.mobile : ''
  1158. localStorage.setItem('refundProdObj', JSON.stringify(refundProdObj)) //将整个订单所有项保存
  1159. }
  1160. this.$router.push({
  1161. path: '/user-center/apply-return',
  1162. query: {
  1163. orderNumber: this.orderNumber,
  1164. status: this.orderInfo.status,
  1165. transfee: transfee,
  1166. isLastProd: this.isLastProd,
  1167. orderItemId: orderItemId, // 订单项id
  1168. // actualTotal: this.orderInfo.actualTotal,
  1169. refundType: refundType,
  1170. orderMold: this.orderInfo.orderMold
  1171. }
  1172. })
  1173. }
  1174. },
  1175. /**
  1176. * 查看退款
  1177. */
  1178. toViewRefund (refundSn, refundType, orderItemId, returnMoneySts) {
  1179. const platformFreeFreightAmount = this.orderInfo.platformFreeFreightAmount
  1180. const transfee = platformFreeFreightAmount
  1181. ? Number.parseFloat(new big(platformFreeFreightAmount).minus(this.orderInfo.transfee)).valueOf()
  1182. : this.orderInfo.transfee
  1183. // returnMoneySts处理退款状态:(1.买家申请 2.卖家接受 3.买家发货 4.卖家收货 5.退款成功 6.买家撤回申请 7.商家拒绝 -1.退款关闭)
  1184. if (returnMoneySts < 4 && returnMoneySts != -1) {
  1185. if (refundType == 2) { //单个退款
  1186. this.orderInfo.orderItemDtos.forEach((el, index) => {
  1187. if (el.orderItemId == orderItemId) { //如果当前的订单项id和点击传入的订单项id一致
  1188. //保存数据
  1189. let orderItem = []
  1190. orderItem.push(el)
  1191. localStorage.setItem('orderItem', JSON.stringify(orderItem)) //将整个订单项保存
  1192. }
  1193. })
  1194. } else if (refundType == 1) { //整单退款
  1195. localStorage.setItem('orderItem', JSON.stringify(this.orderInfo.orderItemDtos)) //将整个订单所有项保存
  1196. }
  1197. this.toApplyReturn(orderItemId, refundType) //申请售后
  1198. //申请售后(详情)页
  1199. this.$router.push({ path: '/user-center/apply-return?refundSn=' + refundSn + '&transfee=' + transfee + '&orderNumber=' + this.orderNumber })
  1200. } else {
  1201. //退款详情页
  1202. this.$router.push({ path: '/return-detail?refundSn=' + refundSn + '&transfee=' + transfee })
  1203. }
  1204. },
  1205. /**
  1206. * 立即支付
  1207. */
  1208. toPayment () {
  1209. sessionStorage.setItem("pay_total", this.orderInfo.actualTotal)
  1210. sessionStorage.setItem("pay_orderNumber", this.orderNumber)
  1211. // this.$router.push({ path: '/payment' })
  1212. //点击立即支付时再次请求判断订单状态
  1213. this.$axios.get('/p/order/getOrderPayInfoByOrderNumber', {
  1214. params: {
  1215. orderNumbers: this.orderNumber
  1216. }
  1217. }).then(({ data }) => {
  1218. //H5其它端取消订单时对订单状态加判断
  1219. if (data.status != 1) {
  1220. this.$message({
  1221. message: this.$i18n.t('orderDetails.orderChanged'),
  1222. type: 'warning',
  1223. duration: 1000
  1224. })
  1225. setTimeout(() => {
  1226. window.location.reload(); //刷新页面
  1227. }, 1000)
  1228. } else {
  1229. this.$router.push({ path: '/payment' })
  1230. }
  1231. })
  1232. },
  1233. /**
  1234. * 取消订单
  1235. */
  1236. cancelOrder () {
  1237. this.showTips = false
  1238. this.$axios.put('/p/myOrder/cancel/' + this.orderNumber).then(({ data }) => {
  1239. this.$message({
  1240. type: 'success',
  1241. message: this.$i18n.t('orderDetails.orderCancelled'),
  1242. duration: 1000
  1243. })
  1244. this.$router.push({ path: '/user-center/uc-order' })
  1245. })
  1246. },
  1247. /**
  1248. * 价格处理
  1249. */
  1250. parsePrice: (value) => {
  1251. var val = Number(value)
  1252. if (!val) {
  1253. val = 0;
  1254. }
  1255. // 截取小数点后两位,并以小数点为切割点将val转化为数组
  1256. return val.toFixed(2).split(".");
  1257. },
  1258. /**
  1259. * 查看发票
  1260. */
  1261. toInvoice(orderNumber) {
  1262. this.$router.push({
  1263. path: '/invoice-detail',
  1264. query: {
  1265. orderNumber,
  1266. orderInvoiceId: this.orderInfo.orderInvoiceId
  1267. }
  1268. })
  1269. }
  1270. },
  1271. beforeDestroy () {
  1272. clearTimeout(this.timer)
  1273. }
  1274. }
  1275. </script>
  1276. <style soped src='~/assets/css/order-detail.css'></style>
  1277. <style scoped src='~/assets/css/user-center.css'></style>
  1278. <style>
  1279. .bg-fix {
  1280. background-color: #f9f9f9 !important;
  1281. }
  1282. .en-width {
  1283. width:120px !important;
  1284. }
  1285. </style>