refundOrderDetail.vue 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826
  1. <template>
  2. <div>
  3. <el-drawer :visible.sync="drawerVisible" :direction="direction" size="1000px" :before-close="handleClose">
  4. <div v-loading="loading">
  5. <div class="detailHead">
  6. <div class="acea-row row-between headerBox">
  7. <div class="full">
  8. <div class="order_icon"><span class="iconfont icon-shouhou_tuikuan-2"></span></div>
  9. <div class="text">
  10. <div class="title">退款订单</div>
  11. <div>
  12. <span class="mr20">退款单号:{{ refundInfo.refundOrderNo }}</span>
  13. </div>
  14. </div>
  15. </div>
  16. <!-- 售后状态:0:待审核 1:商家拒绝 2:退款中 3:已退款 4:用户退货 5:商家待收货 6:已撤销-->
  17. <div class="acea-row justify-content">
  18. <!-- 审核 -->
  19. <div
  20. v-if="refundInfo.refundStatus === 0 && checkPermi(['merchant:refund:order:audit'])"
  21. class="acea-row row-center-wrappe mr14"
  22. >
  23. <el-button
  24. type="primary"
  25. v-debounceClick="
  26. () => {
  27. handleApprovedReview('success');
  28. }
  29. "
  30. >{{ loadingBtn ? '提交中 ...' : '审核通过' }}</el-button
  31. >
  32. <el-button
  33. type="danger"
  34. v-debounceClick="
  35. () => {
  36. handleOrderRefuse('refuse');
  37. }
  38. "
  39. >拒绝</el-button
  40. >
  41. </div>
  42. <!-- 商家收货 -->
  43. <div v-if="refundInfo.refundStatus === 5" class="acea-row row-center-wrapper mr14">
  44. <el-button
  45. v-if="checkPermi(['merchant:refund:order:receiving'])"
  46. type="primary"
  47. v-debounceClick="handleConfirmReceipt"
  48. >{{ loadingBtn ? '提交中 ...' : '确认收货' }}</el-button
  49. >
  50. <el-button
  51. v-if="checkPermi(['merchant:refund:order:audit'])"
  52. type="danger"
  53. v-debounceClick="handleRefuseReceipt"
  54. >拒绝</el-button
  55. >
  56. </div>
  57. <el-button size="small" @click.native="onOrderMark()" v-if="checkPermi(['merchant:refund:order:mark'])"
  58. >订单备注</el-button
  59. >
  60. </div>
  61. </div>
  62. <ul class="list">
  63. <li class="item">
  64. <div class="title">退款状态</div>
  65. <div class="color-warning">{{ refundInfo.refundStatus | refundStatusFilter }}</div>
  66. </li>
  67. <li class="item">
  68. <div class="title">退款金额</div>
  69. <div>¥ {{ refundInfo.refundPrice || '0.0' }}</div>
  70. </li>
  71. <li class="item">
  72. <div class="title">实付金额</div>
  73. <div>{{ refundInfo.payPrice }}</div>
  74. </li>
  75. <li class="item">
  76. <div class="title">创建时间</div>
  77. <div>{{ refundInfo.orderInfoVo ? refundInfo.orderInfoVo.createTime : '' }}</div>
  78. </li>
  79. </ul>
  80. </div>
  81. <el-tabs type="border-card" v-model="activeName">
  82. <el-tab-pane label="售后信息" name="refund">
  83. <div class="detailSection" style="border: none">
  84. <div class="title">退款商品</div>
  85. <ul class="list">
  86. <li class="item row-middle">
  87. <div class="image mr10">
  88. <el-image
  89. :src="refundInfo.image"
  90. :preview-src-list="[refundInfo.image]"
  91. style="width: 40px; height: 40px"
  92. ></el-image>
  93. </div>
  94. <div>
  95. <div class="text666 mb10 productName line-height-15">{{ refundInfo.productName }}</div>
  96. <div class="text999">
  97. <span>{{ refundInfo.sku }}</span
  98. ><span class="ml30">售价:¥{{ refundInfo.price }}</span>
  99. </div>
  100. </div>
  101. </li>
  102. </ul>
  103. </div>
  104. <div class="detailSection">
  105. <div class="title">退款明细</div>
  106. <ul class="list">
  107. <li class="item">
  108. <div class="lang">退款数量:</div>
  109. <div class="value">{{ refundInfo.applyRefundNum }}</div>
  110. </li>
  111. <li class="item">
  112. <div class="lang">购买数量:</div>
  113. <div class="value">{{ refundInfo.payNum }}</div>
  114. </li>
  115. <li class="item">
  116. <div class="lang">预计退款方式:</div>
  117. <div class="value">原支付返还</div>
  118. </li>
  119. <li v-show="refundInfo.refundStatus === 2 || refundInfo.refundStatus === 3" class="item">
  120. <div class="lang">退回运费:</div>
  121. <div class="value">{{ refundInfo.refundFreightFee }}</div>
  122. </li>
  123. <li v-show="refundInfo.refundStatus === 2 || refundInfo.refundStatus === 3" class="item">
  124. <div class="lang">退一级佣金:</div>
  125. <div class="value">{{ refundInfo.refundFirstBrokerageFee }}</div>
  126. </li>
  127. <li v-show="refundInfo.refundStatus === 2 || refundInfo.refundStatus === 3" class="item">
  128. <div class="lang">退回抵扣积分:</div>
  129. <div class="value">{{ refundInfo.refundUseIntegral }}</div>
  130. </li>
  131. <li v-show="refundInfo.refundStatus === 2 || refundInfo.refundStatus === 3" class="item">
  132. <div class="lang">收回赠送积分:</div>
  133. <div class="value">{{ refundInfo.refundGainIntegral }}</div>
  134. </li>
  135. <li v-show="refundInfo.refundStatus === 2 || refundInfo.refundStatus === 3" class="item">
  136. <div class="lang">退二级返佣:</div>
  137. <div class="value">{{ refundInfo.refundSecondBrokerageFee }}</div>
  138. </li>
  139. </ul>
  140. </div>
  141. <!-- 退款流程信息-->
  142. <div class="detailSection">
  143. <div class="title">退款流程信息</div>
  144. <div class="detail-centent acea-row">
  145. <div>
  146. <!-- 操作类型:apply-申请退款,audit-商家审核,returning-商品退回,receiving-商家确认收货,refund-退款,compulsory-平台强制退款,revoke-撤销-->
  147. <el-steps
  148. direction="vertical"
  149. :active="
  150. refundInfo.promoterType === 'merchant' ? 2 : refundInfo.statusList && refundInfo.statusList.length
  151. "
  152. finish-status="success"
  153. >
  154. <el-step title="直接退款-商家" v-if="refundInfo.promoterType === 'merchant'">
  155. <template slot="description">
  156. <div class="mb10">
  157. {{ refundInfo.refundTime }}
  158. </div>
  159. </template>
  160. </el-step>
  161. <el-step
  162. title="申请退款-用户"
  163. v-if="
  164. refundInfo.statusList &&
  165. refundInfo.statusList.length &&
  166. refundInfo.statusList.find((item) => item.changeType === 'apply')
  167. "
  168. >
  169. <template slot="description" v-if="refundInfo.statusList && refundInfo.statusList.length">
  170. <div class="mb10">
  171. {{ refundInfo.statusList.filter((item) => item.changeType === 'apply')[0].createTime }}
  172. </div>
  173. <div class="refundReasonWap">
  174. <div class="acea-row">
  175. <div class="detail-term" style="width: 58%">
  176. <span class="detail-infoTitle">退款原因:</span
  177. ><span class="detail-info">{{ refundInfo.refundReasonWap }}</span>
  178. </div>
  179. <div class="detail-term">
  180. <span class="detail-infoTitle">退货方式:</span
  181. ><span class="detail-info">{{
  182. refundInfo.returnGoodsType === 1
  183. ? '快递退回'
  184. : refundInfo.returnGoodsType === 2
  185. ? '到店退货'
  186. : '不退货'
  187. }}</span>
  188. </div>
  189. </div>
  190. <div class="detail-term acea-row">
  191. <span class="detail-infoTitle">备注说明:</span>
  192. <div class="detail-info" style="width: 600px">
  193. {{ refundInfo.refundReasonWapExplain | filterEmpty }}
  194. </div>
  195. </div>
  196. <div class="detail-term">
  197. <div class="acea-row">
  198. <span class="detail-infoTitle">退款凭证:</span>
  199. <div v-if="refundInfo.refundReasonWapImg">
  200. <el-image
  201. v-for="(item, index) in refundInfo.refundReasonWapImg.split(',')"
  202. :key="index"
  203. style="width: 60px; height: 60px"
  204. :src="item"
  205. class="mr10"
  206. :preview-src-list="refundInfo.refundReasonWapImg.split(',')"
  207. ></el-image>
  208. </div>
  209. <div v-else>-</div>
  210. </div>
  211. </div>
  212. </div>
  213. </template>
  214. </el-step>
  215. <el-step
  216. title="商家审核-商家"
  217. v-if="
  218. refundInfo.statusList &&
  219. refundInfo.statusList.length &&
  220. refundInfo.statusList.find((item) => item.changeType === 'audit')
  221. "
  222. >
  223. <template slot="description" v-if="refundInfo.statusList && refundInfo.statusList.length">
  224. <div class="mb10">
  225. {{
  226. refundInfo.statusList.filter((item) => item.changeType === 'audit').length
  227. ? refundInfo.statusList.filter((item) => item.changeType === 'audit')[0].createTime
  228. : ''
  229. }}
  230. </div>
  231. <div v-if="refundInfo.refundStatus > 0" class="refundReasonWap">
  232. <div class="detail-term">
  233. <span class="detail-infoTitle">审核结果:</span
  234. ><span class="detail-info">{{
  235. refundInfo.refundStatus === 1 && refundInfo.statusList.length === 2
  236. ? '拒绝退款'
  237. : '同意退款'
  238. }}</span>
  239. </div>
  240. <div
  241. v-if="refundInfo.refundStatus === 1 && refundInfo.statusList.length === 2"
  242. class="detail-term"
  243. >
  244. <span class="detail-infoTitle">拒绝原因:</span>
  245. <span class="detail-info">{{ refundInfo.refundReason | filterEmpty }}</span>
  246. </div>
  247. <div
  248. v-if="refundInfo.returnGoodsType === 1 && refundInfo.refundStatus !== 1"
  249. class="detail-term"
  250. >
  251. <div>
  252. <span class="detail-infoTitle">退货地址:</span>
  253. <span class="detail-info">{{ refundInfo.receiverAddressDetail }}</span>
  254. </div>
  255. <div>
  256. <span class="detail-infoTitle"></span>
  257. <span class="detail-info">{{ refundInfo.receiver }} {{ refundInfo.receiverPhone }}</span>
  258. </div>
  259. </div>
  260. </div>
  261. </template>
  262. </el-step>
  263. <el-step
  264. title="商品退回信息-用户"
  265. v-if="
  266. refundInfo.statusList &&
  267. refundInfo.statusList.length &&
  268. refundInfo.statusList.find((item) => item.changeType === 'returning')
  269. "
  270. >
  271. <template slot="description" v-if="refundInfo.statusList && refundInfo.statusList.length">
  272. <div class="mb10">
  273. {{ refundInfo.statusList.filter((item) => item.changeType === 'returning')[0].createTime }}
  274. </div>
  275. <div v-if="refundInfo.returnGoodsType === 1" class="refundReasonWap">
  276. <div class="acea-row">
  277. <div class="detail-term" style="width: 58%">
  278. <span class="detail-infoTitle">物流公司:</span
  279. ><span class="detail-info">{{ refundInfo.expressName }}</span>
  280. </div>
  281. <div class="detail-term">
  282. <span class="detail-infoTitle">物流单号:</span>
  283. <span class="detail-info">{{ refundInfo.trackingNumber }}</span>
  284. </div>
  285. </div>
  286. <div class="detail-term">
  287. <div>
  288. <span class="detail-infoTitle">联系电话:</span>
  289. <span class="detail-info">{{ refundInfo.telephone }}</span>
  290. </div>
  291. </div>
  292. </div>
  293. <div v-if="refundInfo.returnGoodsType === 2" class="refundReasonWap">
  294. <div class="detail-term">
  295. <div>
  296. <span class="detail-infoTitle">联系电话:</span>
  297. <span class="detail-info">{{ refundInfo.telephone }}</span>
  298. </div>
  299. </div>
  300. </div>
  301. </template>
  302. </el-step>
  303. <el-step
  304. title="商家确认收货-商家"
  305. v-if="
  306. refundInfo.refundStatus !== 1 &&
  307. refundInfo.refundStatus !== 6 &&
  308. refundInfo.statusList &&
  309. refundInfo.statusList.length &&
  310. refundInfo.statusList.find((item) => item.changeType === 'receiving')
  311. "
  312. >
  313. <template slot="description" v-if="refundInfo.statusList && refundInfo.statusList.length">
  314. <div class="mb10">
  315. {{
  316. refundInfo.statusList.filter((item) => item.changeType === 'receiving').length
  317. ? refundInfo.statusList.filter((item) => item.changeType === 'receiving')[0].createTime
  318. : ''
  319. }}
  320. </div>
  321. </template>
  322. </el-step>
  323. <el-step
  324. title="商品拒绝收货-商家"
  325. v-if="
  326. refundInfo.statusList &&
  327. refundInfo.statusList.length &&
  328. refundInfo.statusList.find((item) => item.changeType === 'rejectionGoods')
  329. "
  330. >
  331. <template slot="description" v-if="refundInfo.statusList && refundInfo.statusList.length">
  332. <div class="mb10">
  333. {{
  334. refundInfo.statusList.filter((item) => item.changeType === 'rejectionGoods')[0].createTime
  335. }}
  336. </div>
  337. <div v-if="refundInfo.refundStatus > 0" class="refundReasonWap">
  338. <div class="detail-term">
  339. <span class="detail-infoTitle">审核结果:</span
  340. ><span class="detail-info">{{
  341. refundInfo.refundStatus === 1 ? '拒绝退款' : '同意退款'
  342. }}</span>
  343. </div>
  344. <div v-if="refundInfo.refundStatus === 1" class="detail-term">
  345. <span class="detail-infoTitle">拒绝原因:</span>
  346. <span class="detail-info">{{ refundInfo.refundReason | filterEmpty }}</span>
  347. </div>
  348. <div
  349. v-if="refundInfo.returnGoodsType === 1 && refundInfo.refundStatus !== 1"
  350. class="detail-term"
  351. >
  352. <div>
  353. <span class="detail-infoTitle">退货地址:</span>
  354. <span class="detail-info">{{ refundInfo.receiverAddressDetail }}</span>
  355. </div>
  356. <div>
  357. <span class="detail-infoTitle"></span>
  358. <span class="detail-info">{{ refundInfo.receiver }} {{ refundInfo.receiverPhone }}</span>
  359. </div>
  360. </div>
  361. </div>
  362. </template>
  363. </el-step>
  364. <el-step
  365. title="已撤销"
  366. v-if="
  367. refundInfo.refundStatus === 6 &&
  368. refundInfo.statusList &&
  369. refundInfo.statusList.length &&
  370. refundInfo.statusList.find((item) => item.changeType === 'revoke')
  371. "
  372. >
  373. <template slot="description" v-if="refundInfo.statusList && refundInfo.statusList.length">
  374. <div class="mb10">
  375. {{
  376. refundInfo.statusList.filter((item) => item.changeType === 'revoke').length
  377. ? refundInfo.statusList.filter((item) => item.changeType === 'revoke')[0].createTime
  378. : ''
  379. }}
  380. </div>
  381. </template>
  382. </el-step>
  383. <el-step
  384. title="平台强制退款成功"
  385. v-if="
  386. refundInfo.statusList &&
  387. refundInfo.statusList.length &&
  388. refundInfo.statusList.find((item) => item.changeType === 'compulsory')
  389. "
  390. >
  391. <template slot="description" v-if="refundInfo.statusList && refundInfo.statusList.length">
  392. <div class="mb10">
  393. {{
  394. refundInfo.statusList.filter((item) => item.changeType === 'compulsory').length
  395. ? refundInfo.statusList.filter((item) => item.changeType === 'compulsory')[0].createTime
  396. : ''
  397. }}
  398. </div>
  399. </template>
  400. </el-step>
  401. <el-step
  402. :title="refundInfo.promoterType === 'user' ? '退款成功' : '退款成功-商家直接退款'"
  403. v-if="
  404. refundInfo.refundStatus !== 1 &&
  405. refundInfo.refundStatus !== 6 &&
  406. refundInfo.statusList &&
  407. refundInfo.statusList.length &&
  408. refundInfo.statusList.find((item) => item.changeType === 'refund')
  409. "
  410. >
  411. <template slot="description" v-if="refundInfo.statusList && refundInfo.statusList.length">
  412. <div class="mb10">
  413. {{
  414. refundInfo.statusList.filter((item) => item.changeType === 'refund').length
  415. ? refundInfo.statusList.filter((item) => item.changeType === 'refund')[0].createTime
  416. : ''
  417. }}
  418. </div>
  419. </template>
  420. </el-step>
  421. <el-step
  422. title="商家审核-商家"
  423. v-if="
  424. refundInfo.refundStatus !== 1 &&
  425. refundInfo.refundStatus !== 2 &&
  426. refundInfo.refundStatus !== 6 &&
  427. refundInfo.refundStatus === 0
  428. "
  429. >
  430. </el-step>
  431. <el-step
  432. title="商品退回信息-用户"
  433. v-if="
  434. refundInfo.refundStatus !== 1 &&
  435. refundInfo.refundStatus !== 2 &&
  436. refundInfo.refundStatus !== 6 &&
  437. refundInfo.afterSalesType === 2 &&
  438. (refundInfo.refundStatus === 0 || refundInfo.refundStatus === 4)
  439. "
  440. >
  441. </el-step>
  442. <el-step
  443. title="商家确认收货-商家"
  444. v-if="
  445. refundInfo.refundStatus !== 1 &&
  446. refundInfo.refundStatus !== 2 &&
  447. refundInfo.refundStatus !== 6 &&
  448. refundInfo.afterSalesType === 2 &&
  449. (refundInfo.refundStatus === 0 ||
  450. refundInfo.refundStatus === 4 ||
  451. refundInfo.refundStatus === 5)
  452. "
  453. >
  454. </el-step>
  455. <el-step
  456. :title="refundInfo.promoterType === 'user' ? '退款成功' : '退款成功-商家直接退款'"
  457. v-if="
  458. refundInfo.refundStatus !== 1 &&
  459. refundInfo.refundStatus !== 6 &&
  460. (refundInfo.refundStatus === 0 ||
  461. refundInfo.refundStatus === 2 ||
  462. refundInfo.refundStatus === 4 ||
  463. refundInfo.refundStatus === 5)
  464. "
  465. >
  466. </el-step>
  467. </el-steps>
  468. </div>
  469. </div>
  470. </div>
  471. <div class="detailSection">
  472. <div class="title">平台备注</div>
  473. <ul class="list">
  474. <li class="item">
  475. <div>{{ refundInfo.platformRemark | filterEmpty }}</div>
  476. </li>
  477. </ul>
  478. </div>
  479. <div class="detailSection">
  480. <div class="title">商家备注</div>
  481. <ul class="list">
  482. <li class="item">
  483. <div>{{ refundInfo.merRemark | filterEmpty }}</div>
  484. </li>
  485. </ul>
  486. </div>
  487. </el-tab-pane>
  488. <el-tab-pane label="订单信息" name="detail" v-if="refundInfo.orderInfoVo">
  489. <div class="detailSection">
  490. <div class="title">用户信息</div>
  491. <ul class="list">
  492. <li class="item">
  493. <div class="lang">用户昵称:</div>
  494. <div class="value">
  495. <span class="mr5">{{ refundInfo.orderInfoVo.nickname }}</span>
  496. <span class="mr5"> | </span>
  497. <span>{{ refundInfo.orderInfoVo.uid }}</span>
  498. </div>
  499. </li>
  500. <li class="item">
  501. <div class="lang">用户电话:</div>
  502. <div class="value">{{ refundInfo.orderInfoVo.phone }}</div>
  503. </li>
  504. </ul>
  505. </div>
  506. <div
  507. v-show="refundInfo.orderInfoVo.shippingType < 3 && refundInfo.orderInfoVo.secondType !== 2"
  508. class="detailSection"
  509. >
  510. <div class="title">配送信息</div>
  511. <ul class="list">
  512. <li class="item">
  513. <div class="lang">配送方式:</div>
  514. <div class="value">{{ refundInfo.orderInfoVo.shippingType === 1 ? '外卖配送' :(refundInfo.orderInfoVo.shippingType === 2? '到店自提':'外卖配送' ) }}</div>
  515. </li>
  516. <li class="item">
  517. <div class="lang">收货电话:</div>
  518. <div class="value">{{ refundInfo.orderInfoVo.userPhone | filterEmpty }}</div>
  519. </li>
  520. <li class="item">
  521. <div class="lang">收货人:</div>
  522. <div class="value">{{ refundInfo.orderInfoVo.realName | filterEmpty }}</div>
  523. </li>
  524. </ul>
  525. <div class="userAddress acea-row">
  526. <div class="lang">收货地址:</div>
  527. <div class="value">{{ refundInfo.orderInfoVo.userAddress | filterEmpty }}</div>
  528. </div>
  529. </div>
  530. <div class="detailSection">
  531. <div class="title">订单信息</div>
  532. <ul class="list">
  533. <li class="item">
  534. <div class="lang">订单号:</div>
  535. <div class="value">{{ refundInfo.orderInfoVo.orderNo }}</div>
  536. </li>
  537. <li class="item">
  538. <div class="lang">商品总数:</div>
  539. <div class="value">{{ refundInfo.orderInfoVo.totalNum }}</div>
  540. </li>
  541. <li class="item">
  542. <div class="lang">支付状态:</div>
  543. <div class="value">{{ refundInfo.orderInfoVo.paid ? '已支付' : '未支付' }}</div>
  544. </li>
  545. <li class="item">
  546. <div class="lang">支付方式:</div>
  547. <div class="value">{{ refundInfo.orderInfoVo.payType | payTypeFilter }}</div>
  548. </li>
  549. <li class="item">
  550. <div class="lang">订单状态:</div>
  551. <div class="value textE93323">
  552. <span v-if="refundInfo.orderInfoVo.refundStatus === 3">已退款</span>
  553. <span v-else>{{ refundInfo.orderInfoVo.status | orderStatusFilter }}</span>
  554. </div>
  555. </li>
  556. <li class="item">
  557. <div class="lang">已发货数量:</div>
  558. <div class="value">{{ refundInfo.orderInfoVo.deliveryNum }}</div>
  559. </li>
  560. <li class="item">
  561. <div class="lang">创建时间:</div>
  562. <div class="value">{{ refundInfo.orderInfoVo.createTime }}</div>
  563. </li>
  564. <li class="item">
  565. <div class="lang">支付时间:</div>
  566. <div class="value">{{ refundInfo.orderInfoVo.payTime }}</div>
  567. </li>
  568. </ul>
  569. </div>
  570. <div class="detailSection">
  571. <div class="title">订单明细</div>
  572. <ul class="list">
  573. <li class="item">
  574. <div class="lang">商品总价:</div>
  575. <div class="value">¥{{ refundInfo.orderInfoVo.proTotalPrice }}</div>
  576. </li>
  577. <li class="item">
  578. <div class="lang">平台优惠金额:</div>
  579. <div class="value">¥{{ refundInfo.orderInfoVo.platCouponPrice }}</div>
  580. </li>
  581. <li class="item">
  582. <div class="lang">赠送积分:</div>
  583. <div class="value">¥{{ refundInfo.orderInfoVo.gainIntegral }}</div>
  584. </li>
  585. <li class="item">
  586. <div class="lang">实际支付:</div>
  587. <div class="value">¥{{ refundInfo.orderInfoVo.payPrice || '0.0' }}</div>
  588. </li>
  589. <li class="item">
  590. <div class="lang">扣除抵扣积分:</div>
  591. <div class="value">{{ refundInfo.orderInfoVo.useIntegral }}</div>
  592. </li>
  593. <li class="item">
  594. <div class="lang">商家优惠金额:</div>
  595. <div class="value">¥{{ refundInfo.orderInfoVo.merCouponPrice || '0.0' }}</div>
  596. </li>
  597. <li class="item">
  598. <div class="lang">会员抵扣金额:</div>
  599. <div class="value">¥{{ refundInfo.orderInfoVo.svipDiscountPrice || '0.0' }}</div>
  600. </li>
  601. <li class="item">
  602. <div class="lang">支付邮费:</div>
  603. <div class="value">¥{{ refundInfo.orderInfoVo.payPostage || '0.0' }}</div>
  604. </li>
  605. <li class="item">
  606. <div class="lang">积分抵扣金额:</div>
  607. <div class="value">¥{{ refundInfo.orderInfoVo.integralPrice || '0.0' }}</div>
  608. </li>
  609. </ul>
  610. </div>
  611. <div class="detailSection">
  612. <div class="title">用户备注</div>
  613. <ul class="list">
  614. <li class="item">
  615. <div class="value productName">{{ refundInfo.orderInfoVo.userRemark | filterEmpty }}</div>
  616. </li>
  617. </ul>
  618. </div>
  619. <div class="detailSection">
  620. <div class="title">商家备注</div>
  621. <ul class="list">
  622. <li class="item">
  623. <div class="value productName">{{ refundInfo.orderInfoVo.merchantRemark | filterEmpty }}</div>
  624. </li>
  625. </ul>
  626. </div>
  627. </el-tab-pane>
  628. </el-tabs>
  629. </div>
  630. </el-drawer>
  631. <!-- 同意退款,退货退款-->
  632. <el-dialog
  633. title="同意退款"
  634. :visible.sync="dialogVisible"
  635. width="900px"
  636. :before-close="handleCloseAgreeToReturn"
  637. class="dialog-bottom"
  638. >
  639. <agree-to-return
  640. ref="agreeToReturn"
  641. @onHandleCancel="handleCloseAgreeToReturn"
  642. @onHandleSuccess="handleSuccess"
  643. :refundInfo="refundInfo"
  644. v-if="dialogVisible"
  645. ></agree-to-return>
  646. </el-dialog>
  647. </div>
  648. </template>
  649. <script>
  650. import { orderAuditApi, refundMarkApi, refundOrderDetailApi, refundOrderReceivingRejectApi } from '@/api/order';
  651. import AgreeToReturn from './agreeToReturn.vue';
  652. import { filterEmpty, refundStatusFilter } from '@/filters';
  653. import useRefundOrder from '@/libs/useRefundOrder';
  654. const { onConfirmReceipt, onApprovedReview } = useRefundOrder();
  655. import { checkPermi } from '@/utils/permission';
  656. export default {
  657. name: 'refundOrderDetail',
  658. props: {
  659. //退款单号
  660. refundOrderNo: {
  661. type: String,
  662. default: 0,
  663. },
  664. //是否显示隐藏
  665. drawerVisible: {
  666. type: Boolean,
  667. default: false,
  668. },
  669. },
  670. components: {
  671. AgreeToReturn,
  672. },
  673. data() {
  674. return {
  675. activeName: 'refund',
  676. dialogVisible: false,
  677. loadingBtn: false,
  678. direction: 'rtl',
  679. reverse: true,
  680. orderDatalist: {},
  681. loading: false,
  682. modal2: false,
  683. result: [],
  684. resultInfo: {},
  685. refundInfo: {},
  686. };
  687. },
  688. mounted() {
  689. this.getRefundOrderDetail(this.refundOrderNo);
  690. },
  691. methods: {
  692. checkPermi,
  693. // 备注
  694. onOrderMark() {
  695. this.$modalPrompt('textarea', '备注', this.refundInfo.merRemark, '退款单备注').then((V) => {
  696. refundMarkApi({ remark: V, refundOrderNo: this.refundOrderNo }).then(() => {
  697. this.$message.success('操作成功');
  698. this.getRefundOrderDetail(this.refundOrderNo);
  699. this.$emit('getReviewSuccessful');
  700. });
  701. });
  702. },
  703. //拒绝收货
  704. handleRefuseReceipt() {
  705. this.$modalPrompt('textarea', '拒绝收货', null, '拒绝收货原因').then((V) => {
  706. refundOrderReceivingRejectApi({ reason: V, refundOrderNo: this.refundOrderNo }).then(() => {
  707. this.$message.success('拒绝收货成功');
  708. this.getSuccessful();
  709. });
  710. });
  711. },
  712. //商家确认收货
  713. handleConfirmReceipt() {
  714. onConfirmReceipt(this.refundOrderNo).then(() => {
  715. this.getSuccessful();
  716. });
  717. },
  718. //审核同意
  719. handleApprovedReview() {
  720. if (this.refundInfo.returnGoodsType !== 1) {
  721. onApprovedReview({
  722. auditType: 'success',
  723. refundOrderNo: this.refundInfo.refundOrderNo,
  724. }).then(() => {
  725. this.handleSuccess();
  726. });
  727. } else {
  728. //退货退款
  729. this.dialogVisible = true;
  730. }
  731. },
  732. //审核成功回调
  733. handleSuccess() {
  734. this.dialogVisible = false;
  735. this.getSuccessful();
  736. },
  737. //操作成功之后的回调,比如关闭弹窗,刷新列表等
  738. getSuccessful() {
  739. this.getRefundOrderDetail(this.refundOrderNo);
  740. this.$emit('getReviewSuccessful');
  741. this.handleClose();
  742. },
  743. //同意弹窗
  744. handleCloseAgreeToReturn() {
  745. this.dialogVisible = false;
  746. },
  747. //审核拒绝
  748. handleOrderRefuse() {
  749. this.$modalPrompt('textarea', '拒绝退款', null, '拒绝退款原因').then((V) => {
  750. orderAuditApi({ auditType: 'refuse', reason: V, refundOrderNo: this.refundInfo.refundOrderNo }).then(() => {
  751. this.$message.success('审核成功');
  752. this.getSuccessful();
  753. });
  754. });
  755. },
  756. handleClose() {
  757. this.$emit('onClosedrawerVisible');
  758. },
  759. // 获取订单退款信息
  760. getRefundOrderDetail(id) {
  761. this.loading = true;
  762. refundOrderDetailApi(id)
  763. .then(async (res) => {
  764. this.refundInfo = res;
  765. this.loading = false;
  766. })
  767. .catch(() => {
  768. this.loading = false;
  769. });
  770. },
  771. },
  772. };
  773. </script>
  774. <style scoped lang="scss">
  775. .userAddress {
  776. width: 100%;
  777. margin-top: 16px;
  778. font-size: 13px;
  779. color: #666;
  780. }
  781. .productName {
  782. width: 633px;
  783. }
  784. .detail-centent {
  785. margin-top: 16px;
  786. }
  787. ::v-deep .el-step__main {
  788. margin-bottom: 30px !important;
  789. }
  790. ::v-deep .el-step__title {
  791. font-size: 14px !important;
  792. }
  793. .flow-path {
  794. margin-bottom: 70px;
  795. }
  796. .refundReasonWap {
  797. width: 720px;
  798. height: auto;
  799. padding: 10px 25px 0 0;
  800. border-radius: 14px;
  801. background-color: #f3f8fe;
  802. overflow: hidden;
  803. }
  804. .image {
  805. width: 40px;
  806. height: 40px;
  807. border-radius: 4px;
  808. overflow: hidden;
  809. }
  810. .refund {
  811. &-title {
  812. font-size: 17px;
  813. color: #333333;
  814. font-weight: 600;
  815. }
  816. &-orderNo {
  817. font-size: 14px;
  818. color: #333333;
  819. }
  820. &-price {
  821. margin-right: 100px;
  822. }
  823. }
  824. </style>