金诚优选前端代码
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

475 lines
16 KiB

  1. <template>
  2. <view id="afterSales-center">
  3. <view class="navbar mx-1px-bottom">
  4. <block v-for="(item, index) in tabList" :key="index" >
  5. <view :id="index" class="navbar-item" :class="activeIndex == index ? 'activity' : ''" @tap="tabClick">
  6. <view class="navbar-title">{{item.title}}</view>
  7. </view>
  8. </block>
  9. <view class="navbar-slider" :style="'width: ' + width + 'px; transform: translateX(' + sliderOffset + 'px); -webkit-transform: translateX(' + sliderOffset + 'px);'"></view>
  10. </view>
  11. <view class="tab-panel">
  12. <view class="tab-content" :hidden="activeIndex != 0">
  13. <view class="order-box">
  14. <view v-for="(item, idx) in dataList[0]" :key="idx" >
  15. <view class="order-item" v-if="order.can_refund" :data-no="order.order_no" v-for="(order, index) in dataList[0][idx]" :key="index">
  16. <view class="item-top">
  17. <view class="indent mx-1px-bottom">
  18. <view class="order-num">
  19. 订单编号{{order.order_no}}
  20. </view>
  21. <view class="order-type">
  22. {{statusList[order.status]}}
  23. </view>
  24. </view>
  25. </view>
  26. <view class="item-middle">
  27. <view class="middle-item mx-1px-bottom" v-if="!good.is_refunded" v-for="(good, index) in order.items" :key="index" >
  28. <image :src="good.item_meta.image"></image>
  29. <view class="text">
  30. <view class="names">
  31. {{good.item_name}}
  32. </view>
  33. <view class="model">
  34. {{good.item_meta.specs_text}}
  35. </view>
  36. </view>
  37. <view class="money-box">
  38. <view>
  39. {{good.quantity}}
  40. </view>
  41. <view>
  42. <view class="button-box" @tap="viewRetreat" :data-id="good.id" :data-no="order.order_no" v-if="!good.is_refunded">
  43. 申请售后
  44. </view>
  45. </view>
  46. </view>
  47. </view>
  48. </view>
  49. <view class="item-bottom">
  50. <view class="all-money">
  51. 下单时间:{{order.submit_time}}
  52. </view>
  53. </view>
  54. </view>
  55. </view>
  56. <view class="loadingbox" :hidden="!tabList[0].show">
  57. {{showText}}
  58. </view>
  59. </view>
  60. </view>
  61. <view class="tab-content" :hidden="activeIndex != 1">
  62. <view class="order-box">
  63. <view v-for="(item, idx) in dataList[1]" :key="idx" >
  64. <view class="order-item" :data-no="order.refund_no" :data-status="order.status" v-for="(order, index) in dataList[1][idx]" :key="index" @tap="viewSales">
  65. <view class="item-top">
  66. <view class="indent mx-1px-bottom">
  67. <view class="order-num">
  68. 订单编号{{order.order.order_no}}
  69. </view>
  70. <view class="order-type">
  71. {{typeList[order.status]}}
  72. </view>
  73. </view>
  74. </view>
  75. <view class="item-middle">
  76. <view class="middle-item mx-1px-bottom">
  77. <image :src="order.order_item.item_meta.image"></image>
  78. <view class="text">
  79. <view class="names">
  80. {{order.order_item.item_name}}
  81. </view>
  82. <view class="model">
  83. {{order.order_item.item_meta.specs_text}}
  84. </view>
  85. </view>
  86. <view class="money-box">
  87. <view>
  88. {{order.order_item.quantity}}
  89. </view>
  90. </view>
  91. </view>
  92. </view>
  93. <view class="item-bottom">
  94. <view class="all-money">
  95. 申请时间:{{order.updated_at}}
  96. </view>
  97. <view class="button-box" v-if="order.status === 1">
  98. 立即退货
  99. </view>
  100. <view class="button-box" v-if="order.status === 0">
  101. 取消申请
  102. </view>
  103. </view>
  104. </view>
  105. </view>
  106. <view class="loadingbox" :hidden="!tabList[1].show">
  107. {{showText}}
  108. </view>
  109. </view>
  110. </view>
  111. <view class="tab-content" :hidden="activeIndex != 2">
  112. <view class="order-box">
  113. <view v-for="(item, idx) in dataList[2]" :key="idx">
  114. <view class="order-item" :data-no="order.refund_no" :data-status="order.status" v-for="(order, index) in dataList[2][idx]" :key="index" @tap="viewSales">
  115. <view class="item-top">
  116. <view class="indent mx-1px-bottom">
  117. <view class="order-num">
  118. 订单编号{{order.order.order_no}}
  119. </view>
  120. <view class="order-type">
  121. {{typeList[order.status]}}
  122. </view>
  123. </view>
  124. </view>
  125. <view class="item-middle">
  126. <view class="middle-item mx-1px-bottom">
  127. <image :src="order.order_item.item_meta.image"></image>
  128. <view class="text">
  129. <view class="names">
  130. {{order.order_item.item_name}}
  131. </view>
  132. <view class="model">
  133. {{order.order_item.item_meta.specs_text}}
  134. </view>
  135. </view>
  136. <view class="money-box">
  137. <view>
  138. {{order.order_item.quantity}}
  139. </view>
  140. </view>
  141. </view>
  142. </view>
  143. <view class="item-bottom">
  144. <view class="all-money">
  145. 申请时间:{{order.updated_at}}
  146. </view>
  147. </view>
  148. </view>
  149. </view>
  150. <view class="loadingbox" :hidden="!tabList[1].show">
  151. {{showText}}
  152. </view>
  153. </view>
  154. </view>
  155. </view>
  156. </view>
  157. </template>
  158. <script>
  159. // pages/order/index/index.js
  160. import {pageLogin, getUrl,config,is} from '@/common/js/utils.js';
  161. export default {
  162. data() {
  163. return {
  164. activeIndex: 0,
  165. sliderOffset: 0,
  166. sliderLeft: 0,
  167. width: 0,
  168. tabList: [{
  169. title: "可申请",
  170. init: false,
  171. page: 0,
  172. id: 0,
  173. name: "after",
  174. more: true,
  175. show: false
  176. }, {
  177. title: "申请中",
  178. init: false,
  179. page: 0,
  180. id: 1,
  181. name: "process",
  182. more: true,
  183. show: false
  184. }, {
  185. title: "已结束",
  186. init: false,
  187. page: 0,
  188. id: 2,
  189. name: "end",
  190. more: true,
  191. show: false
  192. }],
  193. dataList: {
  194. 0: [],
  195. 1: [],
  196. 2: []
  197. },
  198. statusList: ['临时订单', '待付款', '付款成功', '已发货', '已完成', '已完成', '已取消', '已退款', '已作废', '已删除'],
  199. typeList: ['申请审核中', '申请已通过', '拒绝申请', '退款成功', '售后已关闭', '等待用户退货', '退货中', '等待商城发货'],
  200. showText: '正在加载下一页数据',
  201. token: ''
  202. };
  203. },
  204. onReachBottom(e) {
  205. var status = this.activeIndex;
  206. var page = this.tabList[status].page + 1;
  207. var tabList = `tabList[${status}]`;
  208. if (this.tabList[status].more) {
  209. this.setData({
  210. [`${tabList}.show`]: true
  211. });
  212. if (status == 0) {
  213. [];
  214. this.operabale(0, page);
  215. } else {
  216. this.orderList(0, status, page);
  217. }
  218. } else {
  219. wx.showToast({
  220. title: '再拉也没有啦'
  221. });
  222. }
  223. },
  224. onShow(e) {
  225. wx.showLoading({
  226. title: "加载中",
  227. mask: true
  228. });
  229. wx.getSystemInfo({
  230. success: res => {
  231. this.setData({
  232. width: res.windowWidth / this.tabList.length,
  233. sliderOffset: res.windowWidth / this.tabList.length * this.activeIndex
  234. });
  235. }
  236. });
  237. pageLogin(getUrl(), () => {
  238. this.operabale(0, 1);
  239. }); // let app =getApp();
  240. // app.isBirthday().then(()=>{
  241. // if(this.$cookieStorage.get("birthday_gift")){
  242. // var giftData=this.$cookieStorage.get("birthday_gift").data;
  243. // new app.ToastPannel().__page.showText(giftData);
  244. // }
  245. // });
  246. // this.orderList(0, this.activeIndex);
  247. },
  248. components: {},
  249. props: {},
  250. methods: {
  251. // jump(e) {
  252. // wx.navigateTo({
  253. // url: '/pages/afterSales/apply/apply?no=' + e.currentTarget.dataset.no
  254. // })
  255. // },
  256. tabClick(e) {
  257. var status = e.currentTarget.id;
  258. this.setData({
  259. sliderOffset: e.currentTarget.offsetLeft,
  260. activeIndex: status
  261. });
  262. wx.showLoading({
  263. title: "加载中",
  264. mask: true
  265. });
  266. if (status == 0) {
  267. this.operabale(0, 1);
  268. } else {
  269. this.orderList(0, status);
  270. }
  271. },
  272. viewRetreat(e) {
  273. wx.navigateTo({
  274. url: '/pages/afterSales/apply/apply?no=' + e.currentTarget.dataset.no + '&id=' + e.currentTarget.dataset.id
  275. });
  276. },
  277. viewSales(e) {
  278. var refund_no = e.currentTarget.dataset.no;
  279. var refund_status = e.currentTarget.dataset.status;
  280. var type = e.currentTarget.dataset.type;
  281. if (refund_no == null) {
  282. return;
  283. } else {
  284. wx.navigateTo({
  285. url: '/pages/afterSales/detail/detail?no=' + refund_no
  286. });
  287. }
  288. },
  289. operabale(status = 0, pages = 1, type = [0, 1, 2]) {
  290. var token = this.$cookieStorage.get('user_token');
  291. this.$http.get({
  292. api: 'api/order/refund/list',
  293. header: {
  294. Authorization: token
  295. },
  296. data: {
  297. pages,
  298. type
  299. }
  300. }).then(res => {
  301. res = res.data;
  302. var page = res.meta.pagination;
  303. var total_pages = page.total_pages;
  304. // this.setData({
  305. // [`dataList.${status}[${pages - 1}]`]: res.data,
  306. // [`${tabList}.init`]: true,
  307. // [`${tabList}.page`]: pages,
  308. // [`${tabList}.more`]: pages < total_pages
  309. // });
  310. this.$set(this.dataList[status], pages-1, res.data);
  311. this.tabList[status].init=true;
  312. this.tabList[status].page=pages;
  313. this.tabList[status].more=pages < total_pages;
  314. wx.hideLoading();
  315. }).catch(rej => {
  316. wx.hideLoading();
  317. });
  318. },
  319. // 获取订单列表
  320. orderList(offline = 0, status = 1, pages = 1, type = 0) {
  321. var token = this.$cookieStorage.get('user_token');
  322. var state = this.tabList[status].name;
  323. var params = status ? {
  324. status
  325. } : {};
  326. params.page = pages;
  327. params.status = state; // params.offline = offline;
  328. this.$http.get({
  329. api: 'api/refund/list',
  330. header: {
  331. Authorization: token
  332. },
  333. data: params
  334. }).then(res => {
  335. res = res.data;
  336. var page = res.meta.pagination;
  337. var current_page = page.current_page;
  338. var total_pages = page.total_pages;
  339. var tabList = `tabList[${status}]`;
  340. // this.setData({
  341. // [`dataList.${status}[${pages - 1}]`]: res.data,
  342. // [`${tabList}.init`]: true,
  343. // [`${tabList}.page`]: current_page,
  344. // [`${tabList}.more`]: current_page < total_pages
  345. // });
  346. this.$set(this.dataList[status], pages-1, res.data);
  347. this.tabList[status].init=true;
  348. this.tabList[status].page=pages;
  349. this.tabList[status].more=pages < total_pages;
  350. wx.hideLoading();
  351. }).catch(rej => {
  352. wx.hideLoading();
  353. });
  354. },
  355. // 确认收货
  356. receiveOrder(orderNo) {
  357. var token = this.token;
  358. this.$http.post({
  359. api: 'api/shopping/order/received',
  360. header: {
  361. Authorization: token
  362. },
  363. data: {
  364. order_no: orderNo
  365. }
  366. }).then(res => {
  367. res = res.data;
  368. wx.showModal({
  369. title: '',
  370. content: res.message,
  371. showCancel: false,
  372. success: res => {
  373. if (res.confirm) {
  374. this.orderList(0, this.activeIndex);
  375. }
  376. }
  377. });
  378. }).catch(rej => {
  379. if (rej.statusCode == 404) {
  380. wx.showModal({
  381. title: '',
  382. content: '接口不存在',
  383. showCancel: false
  384. });
  385. } else {
  386. wx.showModal({
  387. title: '',
  388. content: '取消订单失败, 请检查您的网络状态',
  389. showCancel: false
  390. });
  391. }
  392. });
  393. },
  394. // 删除订单
  395. deleteOrder(orderNo) {
  396. var token = this.token;
  397. this.$http.post({
  398. api: 'api/shopping/order/delete',
  399. header: {
  400. Authorization: token
  401. },
  402. data: {
  403. 'order_no': orderNo
  404. }
  405. }).then(res => {
  406. wx.showToast({
  407. title: res.data.message
  408. });
  409. this.orderList(0, this.activeIndex);
  410. }).catch(rej => {
  411. wx.showModal({
  412. title: '',
  413. content: '删除订单失败, 请检查您的网络状态',
  414. showCancel: false
  415. });
  416. });
  417. },
  418. setData: function (obj) {
  419. let that = this;
  420. let keys = [];
  421. let val, data;
  422. Object.keys(obj).forEach(function (key) {
  423. keys = key.split('.');
  424. val = obj[key];
  425. data = that.$data;
  426. keys.forEach(function (key2, index) {
  427. if (index + 1 == keys.length) {
  428. that.$set(data, key2, val);
  429. } else {
  430. if (!data[key2]) {
  431. that.$set(data, key2, {});
  432. }
  433. }
  434. data = data[key2];
  435. });
  436. });
  437. }
  438. },
  439. computed: {},
  440. watch: {}
  441. };
  442. </script>
  443. <style rel="stylesheet/less" lang="less">
  444. @import "index";
  445. </style>