orderrefund.vue 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295
  1. <template>
  2. <base-page>
  3. <view class="goodslist">
  4. <view class="goodslist-box">
  5. <view class="goodslist-left">
  6. <view class="goods-title">
  7. 退款维权
  8. <text class="iconfont icongengduo1"></text>
  9. </view>
  10. <view class="goods-search">
  11. <view class="search">
  12. <text class="iconfont icon31sousuo"></text>
  13. <input type="text" v-model="search_text" @input="search" placeholder="搜索订单号/商品名称" />
  14. </view>
  15. </view>
  16. <block v-if="!one_judge && order_list.length > 0">
  17. <scroll-view scroll-y="true" class="goods-list-scroll" :show-scrollbar="false" @scrolltolower="getOrderList">
  18. <view
  19. class="item"
  20. @click="getOrderDetail(item.order_goods_id, index)"
  21. v-for="(item, index) in order_list"
  22. :key="index"
  23. :class="index == selectGoodsKeys ? 'itemhover' : ''"
  24. >
  25. <view class="title">
  26. <view>退款编号:{{ item.order_no }}</view>
  27. <view>{{ item.order_type_name }}</view>
  28. </view>
  29. <view class="total-money-num">
  30. <view class="box">
  31. <view>订单金额</view>
  32. <view>¥{{ item.real_goods_money }}</view>
  33. </view>
  34. <view class="box">
  35. <view>退款金额</view>
  36. <view>¥{{ item.refund_apply_money }}</view>
  37. </view>
  38. </view>
  39. <view class="total-money-num">
  40. <view class="member-info">
  41. <view>退款状态:</view>
  42. <view>{{ item.refund_status_name }}({{ item.refund_type == 1 ? '仅退款' : '退款退货' }})</view>
  43. </view>
  44. </view>
  45. </view>
  46. </scroll-view>
  47. </block>
  48. <view class="notYet" v-else-if="!one_judge && order_list.length == 0">暂无数据</view>
  49. </view>
  50. <view class="goodslist-right">
  51. <view class="goods-title">订单详情</view>
  52. <view class="order-information tab-wrap" v-if="Object.keys(order_detail).length">
  53. <view class="tab-head">
  54. <text v-for="(item, index) in tabObj.list" :key="index" :class="{ active: tabObj.index == item.value }" @click="tabObj.index = item.value">
  55. {{ item.name }}
  56. </text>
  57. </view>
  58. <view class="tab-content">
  59. <view class="other-information" v-if="tabObj.index == 1">
  60. <view class="item-box">
  61. <view class="item">
  62. <view>买家:</view>
  63. <view v-if="order_detail.nickname">{{ order_detail.nickname }}</view>
  64. <view v-else>散客</view>
  65. </view>
  66. <view class="item">
  67. <view>退款编号:</view>
  68. <view>{{ order_detail.refund_no }}</view>
  69. </view>
  70. <view class="item">
  71. <view>申请时间:</view>
  72. <view>{{ $util.timeFormat(order_detail.refund_action_time) }}</view>
  73. </view>
  74. <view class="item">
  75. <view>维权类型:</view>
  76. <view>{{ order_detail.refund_mode > 1 ? '售后' : '退款' }}</view>
  77. </view>
  78. <view class="item">
  79. <view>退款方式:</view>
  80. <view>
  81. {{ order_detail.shop_active_refund == 1 ? '主动退款' : order_detail.refund_type == 1 ? '仅退款' : '退货退款' }} ({{
  82. (order_detail.refund_type == 1 && '原路退款') || (order_detail.refund_type == 2 && '线下退款') || '退款到余额'
  83. }})
  84. </view>
  85. </view>
  86. <view class="item">
  87. <view>退款金额:</view>
  88. <view>¥{{ order_detail.refund_status == 3 ? order_detail.refund_real_money : order_detail.refund_apply_money }}</view>
  89. </view>
  90. <view class="item">
  91. <view>退款原因:</view>
  92. <view>{{ order_detail.refund_reason || '--' }}</view>
  93. </view>
  94. <view class="item">
  95. <view>退款说明:</view>
  96. <view>{{ order_detail.refund_remark || '--' }}</view>
  97. </view>
  98. <view class="item">
  99. <view>商家退款说明:</view>
  100. <view>{{ order_detail.shop_refund_remark || '--' }}</view>
  101. </view>
  102. <view class="item">
  103. <view>退款状态:</view>
  104. <view>{{ order_detail.refund_status_name }}</view>
  105. </view>
  106. </view>
  107. </view>
  108. <view class="goods-info" v-if="tabObj.index == 2">
  109. <view class="table">
  110. <view class="table-th table-all">
  111. <view class="table-td" style="width:45%">商品(元)</view>
  112. <view class="table-td" style="width:15%">价格</view>
  113. <view class="table-td" style="width:10%">数量</view>
  114. <view class="table-td" style="width:15%;">小计(元)</view>
  115. <view class="table-td" style="width:15%;justify-content: flex-end;">状态</view>
  116. </view>
  117. <view class="table-tr table-all">
  118. <view class="table-td" style="width:45%">{{ order_detail.sku_name }}</view>
  119. <view class="table-td" style="width:15%">{{ order_detail.price }}</view>
  120. <view class="table-td" style="width:10%">{{ order_detail.num }}</view>
  121. <view class="table-td" style="width:15%">{{ order_detail.goods_money }}</view>
  122. <view class="table-td uni-column" style="width:15%;align-items: flex-end;">{{ order_detail.refund_status_name }}</view>
  123. </view>
  124. </view>
  125. </view>
  126. <view class="other-information journal" v-if="tabObj.index == 3"><nsjournal :list="order_detail.refund_log_list"></nsjournal></view>
  127. </view>
  128. </view>
  129. <block v-else><image class="cart-empty" :src="$util.img('public/uniapp/cashier/cart_empty.png')" mode="widthFix"></image></block>
  130. </view>
  131. </view>
  132. </view>
  133. </base-page>
  134. </template>
  135. <script>
  136. import nsjournal from '@/components/ns-journal/ns-journal.vue';
  137. export default {
  138. components: {
  139. nsjournal
  140. },
  141. data() {
  142. return {
  143. selectGoodsKeys: 0,
  144. //获取订单的页数
  145. page: 1,
  146. //每次获取订单的条数
  147. page_size: 8,
  148. // 订单搜索是用到的数据
  149. search_text: '',
  150. //初始时加载详情数据判断
  151. one_judge: true,
  152. // 订单列表数据
  153. order_list: [],
  154. //订单详情数据
  155. order_detail: {},
  156. tabObj: {
  157. list: [
  158. {
  159. value: 1,
  160. name: '基础信息'
  161. },
  162. {
  163. value: 2,
  164. name: '商品信息'
  165. },
  166. {
  167. value: 3,
  168. name: '订单日志'
  169. }
  170. ],
  171. index: 1
  172. }
  173. };
  174. },
  175. onLoad(option) {
  176. this.getOrderList();
  177. },
  178. methods: {
  179. // 搜索
  180. search() {
  181. this.page = 1;
  182. this.order_list = [];
  183. this.one_judge = true;
  184. this.getOrderList();
  185. },
  186. /**
  187. * 获取订单列表
  188. */
  189. getOrderList() {
  190. this.$api.sendRequest({
  191. url: '/cashier/storeapi/cashierorderrefund/lists',
  192. data: {
  193. page: this.page,
  194. page_size: this.page_size,
  195. search: this.search_text
  196. },
  197. success: res => {
  198. if (res.data.list.length == 0) {
  199. this.order_detail = {};
  200. this.one_judge = false;
  201. }
  202. if (res.code >= 0) {
  203. this.page += 1;
  204. if (this.order_list.length == 0) {
  205. this.order_list = res.data.list;
  206. } else {
  207. this.order_list = this.order_list.concat(res.data.list);
  208. }
  209. //初始时加载一遍详情数据
  210. if (this.one_judge) {
  211. this.getOrderDetail(this.order_list[0].order_goods_id);
  212. }
  213. }
  214. }
  215. });
  216. },
  217. /**
  218. * 获取订单详情数据
  219. */
  220. getOrderDetail(order_goods_id, keys = 0, callback) {
  221. this.selectGoodsKeys = keys;
  222. this.$api.sendRequest({
  223. url: '/cashier/storeapi/cashierorderrefund/detail',
  224. data: {
  225. order_goods_id
  226. },
  227. success: res => {
  228. if (res.code >= 0) {
  229. this.order_detail = res.data;
  230. if (typeof callback == 'function') {
  231. callback();
  232. }
  233. this.$forceUpdate();
  234. this.one_judge = false;
  235. }
  236. }
  237. });
  238. }
  239. }
  240. };
  241. </script>
  242. <style scoped lang="scss">
  243. @import './public/css/orderlist.scss';
  244. .total-money-num .box {
  245. margin-top: 0;
  246. }
  247. .goodslist {
  248. .goodslist-right {
  249. .other-information {
  250. .title {
  251. margin-bottom: 0.1rem !important;
  252. }
  253. .item-box {
  254. margin-bottom: 0.15rem;
  255. .item {
  256. &:nth-child(1),
  257. &:nth-child(2) {
  258. margin-top: 0 !important;
  259. }
  260. view:nth-child(1) {
  261. width: 1rem !important;
  262. }
  263. }
  264. }
  265. }
  266. }
  267. }
  268. .tab-wrap {
  269. padding: 0 !important;
  270. background-color: #fff !important;
  271. .tab-head {
  272. display: flex;
  273. background-color: #f8f8f8;
  274. text {
  275. width: 1.15rem;
  276. height: 0.55rem;
  277. line-height: 0.55rem;
  278. text-align: center;
  279. font-size: $uni-font-size-lg;
  280. &.active {
  281. background-color: #fff;
  282. }
  283. }
  284. }
  285. }
  286. .item-box {
  287. padding: 0.1rem;
  288. }
  289. </style>