return-detail.vue 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583
  1. <template>
  2. <div class="content">
  3. <div class="return-detail">
  4. <div class="crumbs">
  5. <nuxt-link to="/user-center/uc-return" class="item-a">{{$t('applyReturn.refundList')}}</nuxt-link>
  6. <span class="arrow">></span>
  7. <span class="item-span">{{$t('applyReturn.refundDetails')}}</span>
  8. </div>
  9. <div class="return-step">
  10. <div
  11. :class="['item', ((refundDetail.returnMoneySts <= 4 && refundDetail.returnMoneySts != -1) || refundDetail.returnMoneySts == 5)?'active':'']"
  12. >
  13. <div class="number">●</div>
  14. <div class="text">{{$t('applyReturn.buyerSubmits')}}</div>
  15. <div class="time">{{refundDetail.applyTime}}</div>
  16. </div>
  17. <div
  18. :class="['item', (refundDetail.returnMoneySts >=2 && refundDetail.returnMoneySts <=5)?'active':'']"
  19. >
  20. <div class="number">●</div>
  21. <div class="text">{{$t('applyReturn.sellerProcessing')}}</div>
  22. <div
  23. class="time"
  24. v-if="refundDetail.returnMoneySts >=2 && refundDetail.returnMoneySts <=5"
  25. >{{refundDetail.handelTime}}</div>
  26. </div>
  27. <div
  28. :class="['item', (refundDetail.returnMoneySts >=3 && refundDetail.returnMoneySts <=5)?'active':'']"
  29. v-if="refundDetail.applyType == 2"
  30. >
  31. <div class="number">●</div>
  32. <div class="text">{{$t('applyReturn.buyerReturns')}}</div>
  33. <div
  34. class="time"
  35. v-if="refundDetail.returnMoneySts >=3 && refundDetail.returnMoneySts <=5"
  36. >{{refundDetail.shipTime}}</div>
  37. </div>
  38. <div :class="['item', (refundDetail.returnMoneySts == 5)?'active':'']">
  39. <div class="number">●</div>
  40. <div class="text">{{$t('applyReturn.refundCompleted')}}</div>
  41. <div class="time" v-if="refundDetail.returnMoneySts == 5">{{refundDetail.refundTime}}</div>
  42. </div>
  43. </div>
  44. <div :class="['return-order',this.$store.state.locale == 'en'?'en':'']">
  45. <table cellspacing="0" cellpadding="0" class="order-box">
  46. <tbody>
  47. <tr class="box-tit">
  48. <th>{{$t('applyReturn.productInformation')}}</th>
  49. <th width="130">{{$t('applyReturn.transactionTime')}}</th>
  50. <th width="127">{{$t('applyReturn.numberOfApplications')}}</th>
  51. <th width="160">{{$t('applyReturn.refundAmount')}}</th>
  52. <th width="127">{{$t('status')}}</th>
  53. <th width="127">{{$t('operation')}}</th>
  54. </tr>
  55. <tr class="box-space">
  56. <td colspan="6"></td>
  57. </tr>
  58. <!-- 表格头 -->
  59. <tr class="box-hd">
  60. <td colspan="6">
  61. <div class="order-number">
  62. {{$t('applyReturn.orderNumber')}}:
  63. <span class="num">{{refundDetail.orderNumber}}</span>
  64. </div>
  65. <div class="return-number">
  66. {{$t('applyReturn.refundNumber')}}:
  67. <span class="num">{{refundSn}}</span>
  68. </div>
  69. <nuxt-link :to="'/shopIndex?sid='+refundDetail.shopId" class="shop">
  70. <span class="shop-icon"></span>
  71. {{refundDetail.shopName}}
  72. </nuxt-link>
  73. </td>
  74. </tr>
  75. <tr class="box-tr" v-for="(refundItem,index) in prodList" :key="index">
  76. <!-- 商品信息 -->
  77. <td>
  78. <div
  79. class="goods-info"
  80. :class="{'gift-goods-info': refundItem.giveawayOrderItemId}"
  81. @click="toProdDetails(refundItem.prodId, refundItem.giveawayOrderItemId)">
  82. <div class="img">
  83. <img v-if="refundItem.pic" :src="refundItem.pic.indexOf('http') == -1 ? picDomain + refundItem.pic : refundItem.pic" @error="handlePicError"/>
  84. <img v-else src="~/assets/img/def.png" alt />
  85. </div>
  86. <div class="name-sku">
  87. <div class="name">{{refundItem.prodName}}</div>
  88. <div class="sku">
  89. <span v-if="refundItem.giveawayOrderItemId" class="gift-icon">{{$t('prodDetail.gift')}}</span>
  90. <span>{{refundItem.skuName}} x{{refundItem.prodCount}}</span>
  91. <!-- <span v-if="refundItem.giveawayOrderItemId">×{{ refundItem.prodCount }}</span> -->
  92. </div>
  93. </div>
  94. </div>
  95. <!-- 赠品:多件商品时展示 -->
  96. <div
  97. v-if="refundDetail.orderItems.length > 1 && refundItem.giveawayList && refundItem.giveawayList.length"
  98. class="gift-info">
  99. <div
  100. v-for="(gitfItem, gitfIndex) in refundItem.giveawayList"
  101. :key="gitfIndex"
  102. class="gift-item"
  103. @click="toProdDetails(gitfItem.prodId, gitfItem.giveawayOrderItemId)"
  104. >
  105. <span class="name">{{ '【' + $t('prodDetail.gift') + '】' + gitfItem.prodName }}</span>
  106. <span class="num">×{{ gitfItem.prodCount }}</span>
  107. </div>
  108. </div>
  109. <!-- / 赠品 -->
  110. </td>
  111. <!-- 成交时间 -->
  112. <td :rowspan="prodList.length" v-if="index==0">
  113. <div class="deal-time">{{refundDetail.orderPayTime}}</div>
  114. </td>
  115. <!-- 数量 -->
  116. <td :rowspan="prodList.length" v-if="index==0">
  117. <div class="apply-number">{{refundDetail.goodsNum}}</div>
  118. </td>
  119. <!-- 金额 -->
  120. <td :rowspan="prodList.length" v-if="index==0">
  121. <div class="price-box">
  122. <div class="all-price">{{$t('applyReturn.total')}}:<i v-if="refundDetail.orderAmount">¥{{Number(refundDetail.orderAmount).toFixed(2)}}</i><i v-if="refundDetail.orderAmount && refundDetail.refundScore">&nbsp;+&nbsp;</i><i v-if="refundDetail.refundScore">{{refundDetail.refundScore}}{{$t('applyReturn.points')}}</i></div>
  123. <div class="return-price">{{$t('applyReturn.refunds')}}:<i v-if="refundDetail.refundAmount">¥{{Number(refundDetail.refundAmount).toFixed(2)}}</i><i v-if="refundDetail.refundAmount && refundDetail.refundScore">&nbsp;+&nbsp;</i><i v-if="refundDetail.refundScore">{{refundDetail.refundScore}}{{$t('applyReturn.points')}}</i></div>
  124. <!--
  125. 修改退款金额:
  126. 1、仅退款(applyTyp:1):买家申请(returnMoneySts:1)状态下可以修改
  127. 2、退货退款(applyTyp:2):买家申请(returnMoneySts:1) ||
  128. 卖家处理(returnMoneySts:2) ||
  129. 买家发货(returnMoneySts:3)
  130. 状态下可以修改
  131. 3、整单退款(refundType:1):不可修改
  132. 4、isUsedPlatformReduce 是否使用了平台优惠 (是 则不可修改)
  133. -->
  134. <div
  135. v-if="refundDetail.refundType !== 1 &&
  136. ((refundDetail.applyType == 1 &&
  137. refundDetail.returnMoneySts == 1) ||
  138. (refundDetail.applyType == 2 &&
  139. (refundDetail.returnMoneySts == 1 ||
  140. refundDetail.returnMoneySts == 2 ||
  141. refundDetail.returnMoneySts == 3))) && !isUsedPlatformReduce"
  142. class="action-a"
  143. @click="modifyRefundAmount()">{{$t('applyReturn.modifyRefundAmount')}}</div>
  144. </div>
  145. </td>
  146. <!-- 状态 -->
  147. <td :rowspan="prodList.length" v-if="index==0">
  148. <div class="status-box">
  149. <div class="type">{{['',$t('applyReturn.refundsOnly'),$t('applyReturn.returnsAndRefunds')][refundDetail.applyType]}}</div>
  150. <div
  151. class="status"
  152. >{{['',$t('applyReturn.buyerApplication'),$t('applyReturn.sellerAcceptance'),$t('applyReturn.buyerShipping'),$t('applyReturn.sellerReceipt'),$t('applyReturn.successfulRefund'),$t('applyReturn.buyerWithdrawsApplication'),$t('applyReturn.merchantRefusal')][refundDetail.returnMoneySts]}}</div>
  153. <div class="status" v-if="refundDetail.returnMoneySts == -1">{{$t('applyReturn.refundClose')}}</div>
  154. </div>
  155. </td>
  156. <!-- 操作 -->
  157. <td :rowspan="prodList.length" v-if="index==0">
  158. <div>
  159. <!-- (买家申请 || 卖家接受 || 商家拒绝) || isCancel可撤销 -->
  160. <a
  161. href="JavaScript:void(0)"
  162. class="action-a"
  163. @click="cancelApply"
  164. v-if="(refundDetail.returnMoneySts == 1 || refundDetail.returnMoneySts == 2 || refundDetail.returnMoneySts == 7) && refundDetail.isCancel"
  165. >{{$t('applyReturn.applicationTips5')}}</a>
  166. <a href="JavaScript:void(0)" v-else class="action-a cannotuse">{{$t('applyReturn.applicationTips5')}}</a>
  167. </div>
  168. <a
  169. href="JavaScript:void(0)"
  170. v-if="refundDetail.returnMoneySts == 2 && refundDetail.applyType == 2"
  171. class="action-a"
  172. @click="writeLogisticsMsg"
  173. >{{$t('applyReturn.fillLogistics')}}</a>
  174. <a
  175. href="JavaScript:void(0)"
  176. v-if="refundDetail.returnMoneySts == 3 && refundDetail.applyType == 2"
  177. class="action-a"
  178. @click="writeLogisticsMsg"
  179. >{{$t('applyReturn.modifyLogistics')}}</a>
  180. <!-- <a
  181. href="JavaScript:void(0)"
  182. v-if="refundDetail.returnMoneySts == 2 && refundDetail.applyType == 2 && refundDetail.isCancel"
  183. class="action-b"
  184. @click="cancelApply"
  185. >撤销申请</a> -->
  186. </td>
  187. </tr>
  188. </tbody>
  189. </table>
  190. </div>
  191. <!-- 退款进度 -->
  192. <div class="return-progress">
  193. <div class="tit">{{$t('applyReturn.refundProgress')}}</div>
  194. <!-- 申请关闭 -->
  195. <div class="item" v-if="refundDetail.returnMoneySts == -1">
  196. <div class="time">{{refundDetail.updateTime}}</div>
  197. <div class="text-box">
  198. <!-- <div class="name">{{nickName}}</div> -->
  199. <div class="name">{{$t('applyReturn.applicationClosed')}}</div>
  200. </div>
  201. </div>
  202. <!-- 买家撤销 -->
  203. <div
  204. class="item"
  205. v-if="(refundDetail.returnMoneySts == 6 || refundDetail.returnMoneySts == -1) && refundDetail.cancelTime"
  206. >
  207. <div class="time">{{refundDetail.cancelTime}}</div>
  208. <div class="text-box">
  209. <div class="name">{{nickName}}</div>
  210. <div class="text">{{$t('applyReturn.refundReason14')}}</div>
  211. </div>
  212. </div>
  213. <!-- 商家拒绝 -->
  214. <div
  215. class="item"
  216. v-if="(refundDetail.returnMoneySts == 7 || refundDetail.returnMoneySts == -1) && refundDetail.rejectTime || refundDetail.rejectMessage"
  217. >
  218. <div class="time">{{refundDetail.rejectTime}}</div>
  219. <div class="text-box">
  220. <div class="name">{{refundDetail.shopName}}</div>
  221. <div class="text">
  222. <p>{{$t('applyReturn.refundReason15')}}</p>
  223. <p v-if="refundDetail.rejectMessage">{{$t('applyReturn.reasonsRejection')}}:"{{refundDetail.rejectMessage}}"</p>
  224. <p v-if="refundDetail.sellerMsg">{{$t('applyReturn.sellerRemarks')}}:"{{refundDetail.sellerMsg}}"</p>
  225. <p>{{$t('applyReturn.refundReason16')}}</p>
  226. </div>
  227. </div>
  228. </div>
  229. <!-- 退款成功 -->
  230. <div class="item" v-if="refundDetail.returnMoneySts == 5 && refundDetail.refundTime">
  231. <div class="time">{{refundDetail.refundTime}}</div>
  232. <div class="text-box">
  233. <div class="name">{{refundDetail.shopName}}</div>
  234. <div class="text">{{$t('applyReturn.refundReason17')}}</div>
  235. <p v-if="refundDetail.sellerMsg">{{$t('applyReturn.sellerRemarks')}}:"{{refundDetail.sellerMsg}}"</p>
  236. </div>
  237. </div>
  238. <!-- 卖家收到寄回货物 -->
  239. <div
  240. class="item"
  241. v-if="((refundDetail.returnMoneySts == 4 || refundDetail.returnMoneySts == 5) && refundDetail.applyType == 2) && refundDetail.receiveTime"
  242. >
  243. <div class="time">{{refundDetail.receiveTime}}</div>
  244. <div class="text-box">
  245. <div class="name">{{refundDetail.shopName}}</div>
  246. <div class="text">{{$t('applyReturn.refundReason18')}}</div>
  247. <p v-if="refundDetail.sellerMsg">{{$t('applyReturn.sellerRemarks')}}:"{{refundDetail.sellerMsg}}"</p>
  248. </div>
  249. </div>
  250. <!-- 买家寄出 -->
  251. <div
  252. class="item"
  253. v-if="((refundDetail.returnMoneySts > 2 && refundDetail.returnMoneySts < 6) && refundDetail.applyType == 2) && refundDetail.shipTime"
  254. >
  255. <div class="time">{{refundDetail.shipTime}}</div>
  256. <div class="text-box">
  257. <div class="name">{{nickName}}</div>
  258. <div class="text">
  259. {{$t('applyReturn.refundReason19')}}
  260. <span class="distance">{{$t('applyReturn.logisticsCompany')}}:{{refundDelivery.deyName}}</span>
  261. <span class="distance">{{$t('applyReturn.shipmentNumber')}}:{{refundDelivery.deyNu}}</span>
  262. </div>
  263. </div>
  264. </div>
  265. <!-- 卖家同意,给出地址 -->
  266. <div
  267. class="item"
  268. v-if="((refundDetail.returnMoneySts > 1 && refundDetail.returnMoneySts < 6) && refundDetail.applyType == 2) && refundDetail.handelTime"
  269. >
  270. <!-- (refundDetail.returnMoneySts == 2 && refundDetail.applyType == 2) && -->
  271. <div class="time">{{refundDetail.handelTime}}</div>
  272. <div class="text-box">
  273. <div class="name">{{refundDetail.shopName}}</div>
  274. <div class="text">
  275. <p>{{$t('applyReturn.refundReason20')}}</p>
  276. <p>{{$t('applyReturn.refundAddress')}}:{{ refundDelivery.receiverName}}&nbsp;&nbsp;{{refundDelivery.receiverMobile}}&nbsp;&nbsp;{{refundDelivery.receiverAddr}}</p>
  277. <p v-if="refundDetail.sellerMsg">{{$t('applyReturn.sellerRemarks')}}:"{{refundDetail.sellerMsg}}"</p>
  278. </div>
  279. </div>
  280. </div>
  281. <!-- 卖家同意 -->
  282. <div
  283. class="item"
  284. v-if="((refundDetail.returnMoneySts > 1 && refundDetail.returnMoneySts < 6) && refundDetail.applyType == 1) && refundDetail.decisionTime"
  285. >
  286. <div class="time">{{refundDetail.decisionTime}}</div>
  287. <div class="text-box">
  288. <div class="name">{{refundDetail.shopName}}</div>
  289. <div class="text">
  290. <p>{{$t('applyReturn.refundReason20')}}</p>
  291. <p v-if="refundDetail.sellerMsg">{{$t('applyReturn.sellerRemarks')}}:"{{refundDetail.sellerMsg}}"</p>
  292. </div>
  293. </div>
  294. </div>
  295. <!-- 买家申请 -->
  296. <div class="item">
  297. <div class="time">{{refundDetail.applyTime}}</div>
  298. <div class="text-box">
  299. <div class="name">{{nickName}}</div>
  300. <div class="text">
  301. <p>
  302. <span class="distance ft">{{$t('applyReturn.buyerRequestRefund')}}</span>
  303. <span class="distance">{{$t('applyReturn.refundType')}}:{{['',$t('applyReturn.refundsOnly'),$t('applyReturn.returnsAndRefunds')][refundDetail.applyType]}}</span>
  304. <span class="distance">{{$t('applyReturn.refundAmount')}}:<i v-if="refundDetail.refundAmount">¥{{Number(refundDetail.refundAmount).toFixed(2)}}</i><i v-if="refundDetail.refundAmount && refundDetail.refundScore">&nbsp;+&nbsp;</i><i v-if="refundDetail.refundScore">{{refundDetail.refundScore}}{{$t('applyReturn.points')}}</i></span>
  305. <span class="distance">{{$t('applyReturn.refundReason')}}:{{refundReasonArray[refundDetail.buyerReason]}}</span>
  306. </p>
  307. <p v-if="refundDetail.buyerDesc">{{$t('applyReturn.refundDescription')}}:"{{refundDetail.buyerDesc}}"</p>
  308. <p class="ref-voucher" v-if="refundDetail.photoFiles">{{$t('applyReturn.refundVoucher')}}:
  309. <el-image class="ref-img" :key="pic" :src="pic" v-for="pic in refundDetail.photoFiles.split(',')" :preview-src-list="refundDetail.photoFiles.split(',')"></el-image>
  310. </p>
  311. </div>
  312. </div>
  313. </div>
  314. </div>
  315. <!-- 物流进度 -->
  316. <div class="return-progress" v-if="deliveryDto && deliveryDto.traceFlag">
  317. <div v-if="deliveryDto.traceFlag">
  318. <div class="tit">{{$t('orderDetails.logisticsStatus')}}</div>
  319. <!-- 申请关闭 -->
  320. <div class="item" v-for="(logItem,logIndex) in deliveryDto.traces" :key="logIndex">
  321. <div class="time">{{logItem.acceptTime}}</div>
  322. <div class="text-box">
  323. <!-- <div class="name">{{nickName}}</div> -->
  324. <div class="name acceptStation">{{logItem.acceptStation}}</div>
  325. </div>
  326. </div>
  327. </div>
  328. </div>
  329. </div>
  330. <!-- 修改退款金额弹窗 -->
  331. <div class="popup-mask" v-if="isModifyRefundAmount"></div>
  332. <div class="popup-box" v-if="isModifyRefundAmount">
  333. <div class="tit">
  334. <div class="text">{{$t('applyReturn.modifyRefundAmount')}}</div>
  335. <div class="close" @click="isModifyRefundAmount = false"></div>
  336. </div>
  337. <div class="con modify-amount">
  338. <div class="int-box">
  339. <input
  340. v-model="modifyAmount"
  341. type="text"
  342. class="int"
  343. :placeholder="this.$t('applyReturn.pleaseEnterAmount')"
  344. @blur="handleAmountInput"
  345. @focus="handleAmountInput"
  346. >
  347. <div v-if="!refundAmountError" class="max-amount">
  348. {{$t('applyReturn.maximumRefundable')}}¥{{maxRefundAmount}}
  349. </div>
  350. <div v-if="refundAmountError" class="error">
  351. {{ modifyAmount && Number.parseFloat(modifyAmount) > Number.parseFloat(maxRefundAmount)
  352. ? `${$t('applyReturn.maximumRefundable')}¥${maxRefundAmount},${$t('applyReturn.reEnter')}`
  353. : $t('applyReturn.pleaseEnterAmount')}}
  354. </div>
  355. </div>
  356. <div class="foot-btn">
  357. <span class="confirm" @click="requestModify">{{$t('login.confirmChanges')}}</span>
  358. </div>
  359. </div>
  360. </div>
  361. <!-- / 修改退款金额弹窗 -->
  362. <!-- 物流信息弹框 -->
  363. <writeLogisticsInfo
  364. v-if="showAdd"
  365. @toggleAddrPop="refreshChange"
  366. :refundSn="refundSn"
  367. :orderNumber="refundDetail.orderNumber"
  368. :refundDelivery="refundDetail.refundDelivery"
  369. :returnMoneySts="refundDetail.returnMoneySts"
  370. ></writeLogisticsInfo>
  371. <!-- /物流信息弹框 -->
  372. </div>
  373. </template>
  374. <script>
  375. import writeLogisticsInfo from '~/components/write-logistics-info'
  376. import { picDomain } from '~/plugins/config.js'
  377. import big from '~/plugins/big.min.js'
  378. export default {
  379. components: {
  380. writeLogisticsInfo
  381. },
  382. data () {
  383. return {
  384. // 图片地址
  385. picDomain: picDomain,
  386. // refundReasonArray: ['拍错/多拍/不喜欢', '协商一致退款', '商品破损/少件', '商品与描述不符', '卖家发错货', '质量问题', '其他','','拼团失败'],
  387. refundSn: this.$route.query.refundSn, //退款编号
  388. refundDetail: {}, //退款订单详情对象
  389. // orderItems: [], //订单项
  390. refundDelivery: {}, //收货地址对象
  391. deliveryDto:{}, // 物流进度
  392. nickName: '', //用户名
  393. showAdd: false, //物流信息弹框显隐
  394. prodList: [], // 赠品列表
  395. isModifyRefundAmount: false, // 修改金额弹窗
  396. modifyAmount: '', // 修改金额
  397. refundAmountError: false,
  398. // 退款项中是否使用了平台优惠 (使用了则不能修改退款金额)
  399. isUsedPlatformReduce: false,
  400. maxRefundAmount: 0
  401. }
  402. },
  403. mounted () {
  404. let nickName = this.$store.state.user.nickName
  405. this.nickName = nickName
  406. this.getRefundDetail() //获取退款订单详情
  407. },
  408. computed: {
  409. // 退款原因(总)
  410. refundReasonArray: function(){
  411. return [this.$i18n.t('applyReturn.refundReason1'), this.$i18n.t('applyReturn.refundReason2'), this.$i18n.t('applyReturn.refundReason3'), this.$i18n.t('applyReturn.refundReason4'), this.$i18n.t('applyReturn.refundReason5'), this.$i18n.t('applyReturn.refundReason6'), this.$i18n.t('applyReturn.refundReason7'), '', this.$i18n.t('applyReturn.refundReason8')]
  412. }
  413. },
  414. methods: {
  415. /**
  416. * 加载默认图片
  417. */
  418. handlePicError(e){
  419. e.target.src=require('@/assets/img/def.png')
  420. },
  421. /**
  422. * 获取退款订单详情
  423. */
  424. getRefundDetail () {
  425. this.$axios.get('/p/orderRefund/info?refundSn=' + this.refundSn)
  426. .then(({ data }) => {
  427. let isUsedPlatformReduce = false
  428. data.orderItems.forEach(orderItem => {
  429. if (orderItem.platformShareReduce && !isUsedPlatformReduce) {
  430. isUsedPlatformReduce = true
  431. }
  432. })
  433. this.maxRefundAmount = data.maxRefundAmount
  434. this.isUsedPlatformReduce = isUsedPlatformReduce
  435. this.refundDetail = data
  436. this.orderItems = data.orderItems[0]
  437. this.refundDelivery = data.refundDelivery
  438. this.deliveryDto = data.deliveryDto
  439. if (this.deliveryDto) {
  440. if (!data.deliveryDto.traces || !data.deliveryDto.traces.length) {
  441. this.deliveryDto.traceFlag = false
  442. }
  443. else { this.deliveryDto.traceFlag = true}
  444. } else {
  445. this.deliveryDto = {}
  446. this.deliveryDto.traceFlag = false
  447. }
  448. // 商品列表
  449. this.prodList = this.prodList.splice(0, this.prodList)
  450. const prods = data.orderItems
  451. this.prodList = prods
  452. if (prods && prods.length === 1 && prods[0].giveawayList && prods[0].giveawayList.length) {
  453. // 如果有赠品,单个商品时,将主商品和赠品放在同一级列表展示
  454. this.prodList = [...prods, ...prods[0].giveawayList]
  455. }
  456. })
  457. },
  458. /**
  459. * 撤销申请
  460. */
  461. cancelApply () {
  462. // 买家申请 || 卖家接受 || 卖家拒绝
  463. if (this.refundDetail.returnMoneySts == 1 || this.refundDetail.returnMoneySts == 7 || this.refundDetail.returnMoneySts == 2) {
  464. this.$confirm(this.$i18n.t('applyReturn.refundReason11'), this.$i18n.t('applyReturn.tips'), {
  465. confirmButtonText: this.$i18n.t('determine'),
  466. cancelButtonText: this.$i18n.t('cancel'),
  467. type: 'warning'
  468. }).then(() => {
  469. this.$axios.put('/p/orderRefund/cancel', this.refundSn)
  470. .then(({ data }) => {
  471. this.$message({
  472. message: this.$i18n.t('applyReturn.refundReason12'),
  473. duration: 1000,
  474. type: 'success'
  475. });
  476. // this.$router.push({ path: '/user-center/uc-return' })
  477. this.getRefundDetail()
  478. })
  479. }).catch(() => { });
  480. }
  481. },
  482. /**
  483. * 填写 || 修改物流信息
  484. */
  485. writeLogisticsMsg () {
  486. this.showAdd = true
  487. },
  488. /**
  489. * 刷新回调
  490. */
  491. refreshChange (visible) {
  492. this.showAdd = visible
  493. },
  494. /**
  495. * 跳转到商品详情页
  496. */
  497. toProdDetails (prodId, giveawayOrderItemId) {
  498. if (!giveawayOrderItemId) {
  499. return
  500. }
  501. this.$router.push({ path: '/detail/' + prodId })
  502. },
  503. /**
  504. * 修改退款金额
  505. */
  506. modifyRefundAmount() {
  507. this.modifyAmount = ''
  508. this.refundAmountError = false
  509. this.isModifyRefundAmount = true
  510. },
  511. handleAmountInput() {
  512. this.refundAmountError = false
  513. if (!this.modifyAmount || !this.modifyAmount.trim()) {
  514. this.modifyAmount = this.modifyAmount.trim()
  515. return
  516. }
  517. this.modifyAmount = this.checkInput(this.modifyAmount)
  518. },
  519. checkInput (num) {
  520. if (num) {
  521. var tmpVal = num.replace(/[^\d^\\.]/g, '')
  522. var reg = /^(0|([1-9]\d*))(\.\d{1,2})?$/ // 最多允许后输入两位小数
  523. if (!reg.test(tmpVal)) {
  524. tmpVal = tmpVal + ''
  525. tmpVal = tmpVal.substring(0, tmpVal.indexOf('.') + 3)
  526. var n = (tmpVal.split('.')).length - 1
  527. if (n > 1) {
  528. tmpVal = tmpVal.substring(0, tmpVal.indexOf('.'))
  529. }
  530. }
  531. return tmpVal
  532. } else {
  533. return ''
  534. }
  535. },
  536. requestModify() {
  537. if (!this.modifyAmount || !this.modifyAmount.trim() || this.modifyAmount <= 0) {
  538. this.modifyAmount = this.modifyAmount.trim()
  539. this.refundAmountError = true
  540. return
  541. }
  542. if (Number.parseFloat(this.modifyAmount) > Number.parseFloat(this.maxRefundAmount)) {
  543. this.refundAmountError = true
  544. return
  545. }
  546. const param = {
  547. refundAmount: this.modifyAmount,
  548. refundSn: this.refundSn
  549. }
  550. this.$axios.put('/p/orderRefund/updateRefundAmount', param)
  551. .then(({ data }) => {
  552. this.$message({
  553. message: '修改成功',
  554. type: 'success',
  555. duration: 1000
  556. })
  557. this.isModifyRefundAmount = false
  558. this.refundAmountError = false
  559. this.refundAmount = ''
  560. this.getRefundDetail()
  561. })
  562. }
  563. },
  564. }
  565. </script>
  566. <style scoped src='~/assets/css/return-detail.css'></style>