金诚优选前端代码
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.

721 lines
24 KiB

  1. <template>
  2. <view id="order-index">
  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}}
  7. <span class="triangle" v-if="index == 0 && activeIndex == 0"></span>
  8. </view>
  9. </view>
  10. </block>
  11. <view class="navbar-slider" :style="'width: ' + width + 'px; transform: translateX(' + sliderOffset + 'px); -webkit-transform: translateX(' + sliderOffset + 'px);'"></view>
  12. <!-- <view class="tab-switch" @tap="tabSwitch">
  13. <i class="iconfont icon-qiehuan"></i>
  14. </view> -->
  15. <view class="select-list" v-if="isShow">
  16. <view class="item mx-1px-bottom" :class="activeType == 'all' ? 'activeItem' : ''" @tap="changeType" data-type="all">
  17. <span>全部会员</span>
  18. <span class="iconfont icon-Group96"></span>
  19. </view>
  20. <view class="item mx-1px-bottom" :class="activeType == 'level1' ? 'activeItem' : ''" @tap="changeType" data-type="level1">
  21. <span>一级会员</span>
  22. <span class="iconfont icon-Group96"></span>
  23. </view>
  24. <view class="item mx-1px-bottom" :class="activeType == 'level2' ? 'activeItem' : ''" @tap="changeType" data-type="level2">
  25. <span>二级会员</span>
  26. <span class="iconfont icon-Group96"></span>
  27. </view>
  28. </view>
  29. </view>
  30. <view class="tab-panel">
  31. <view class="tab-content" :hidden="activeIndex != 0">
  32. <view class="order-box">
  33. <view class="order-item__none" v-if="dataList[status[activeIndex]][0] == '' && tabList[activeIndex].init">
  34. 暂无数据
  35. </view>
  36. <view v-for="(item,idx) in dataList[status[activeIndex]][0]" :key="idx">
  37. <view class="order-item" :data-no="order.order.order_no" v-for="(order, index) in dataList[status[activeIndex]][0][idx]" :key="index" @tap="jump">
  38. <view class="item-add mx-1px-bottom">
  39. <view class="left-info">
  40. 分销佣金<span>¥ {{order.commission}}</span>
  41. </view>
  42. <view class="right-info" v-if="order.status == 0">待结算</view>
  43. <view class="right-info" v-if="order.status == 1">已入账</view>
  44. <view class="right-info" v-if="order.status == 2">已失效</view>
  45. </view>
  46. <view class="item-top">
  47. <view class="indent mx-1px-bottom">
  48. <view class="order-num">
  49. 订单编号{{order.agent_order_no}}
  50. </view>
  51. <view class="order-type">
  52. <block v-if="!order.has_refund">
  53. {{typeList[order.order.status]}}
  54. </block>
  55. <block v-else>
  56. 售后中
  57. </block>
  58. </view>
  59. </view>
  60. </view>
  61. <view class="item-middle">
  62. <view class="middle-item mx-1px-bottom" v-for="(good, index) in order.order.items" :key="index" >
  63. <image :src="good.item_meta.image"></image>
  64. <view class="text">
  65. <view class="names">
  66. {{good.item_name}}
  67. </view>
  68. <view class="model">
  69. {{good.item_meta.specs_text}}
  70. </view>
  71. </view>
  72. <view class="money-box">
  73. <view>
  74. {{good.quantity}}
  75. </view>
  76. <view>
  77. {{good.total_yuan}}
  78. </view>
  79. </view>
  80. </view>
  81. </view>
  82. </view>
  83. </view>
  84. <view class="loadingbox" :hidden="!tabList[0].show">
  85. {{showText}}
  86. </view>
  87. </view>
  88. </view>
  89. <view class="tab-content" :hidden="activeIndex != 1">
  90. <view class="order-box">
  91. <view class="order-item__none" v-if="dataList[status[activeIndex]][1] == '' && tabList[activeIndex].init">
  92. 暂无数据
  93. </view>
  94. <view v-for="(item, idx) in dataList[status[activeIndex]][1]" :key="idx" >
  95. <view class="order-item" :data-no="order.order.order_no" v-for="(order, index) in dataList[status[activeIndex]][1][idx]" :key="index" @tap="jump">
  96. <view class="item-add mx-1px-bottom">
  97. <view class="left-info">
  98. 分销佣金<span>¥ {{order.commission}}</span>
  99. </view>
  100. <view class="right-info">待结算</view>
  101. </view>
  102. <view class="item-top">
  103. <view class="indent mx-1px-bottom">
  104. <view class="order-num">
  105. 订单编号{{order.agent_order_no}}
  106. </view>
  107. <view class="order-type">
  108. <block v-if="!order.has_refund">
  109. {{typeList[order.order.status]}}
  110. </block>
  111. <block v-else>
  112. 售后中
  113. </block>
  114. </view>
  115. </view>
  116. </view>
  117. <view class="item-middle">
  118. <view class="middle-item mx-1px-bottom" v-for="(good, index) in order.order.items" :key="index" >
  119. <image :src="good.item_meta.image"></image>
  120. <view class="text">
  121. <view class="names">
  122. {{good.item_name}}
  123. </view>
  124. <view class="model">
  125. {{good.item_meta.specs_text}}
  126. </view>
  127. </view>
  128. <view class="money-box">
  129. <view>
  130. {{good.quantity}}
  131. </view>
  132. <view>
  133. {{good.total_yuan}}
  134. </view>
  135. </view>
  136. </view>
  137. </view>
  138. </view>
  139. </view>
  140. <view class="loadingbox" :hidden="!tabList[1].show">
  141. {{showText}}
  142. </view>
  143. </view>
  144. </view>
  145. <view class="tab-content" :hidden="activeIndex != 2">
  146. <view class="order-box">
  147. <view class="order-item__none" v-if="dataList[status[activeIndex]][2] == '' && tabList[activeIndex].init">
  148. 暂无数据
  149. </view>
  150. <view v-for="(item, idx) in dataList[status[activeIndex]][2]" :key="idx" >
  151. <view class="order-item" :data-no="order.order.order_no" v-for="(order, index) in dataList[status[activeIndex]][2][idx]" :key="index" @tap="jump">
  152. <view class="item-add mx-1px-bottom">
  153. <view class="left-info">
  154. 分销佣金<span>¥{{order.commission}}</span>
  155. </view>
  156. <view class="right-info">已入账</view>
  157. </view>
  158. <view class="item-top">
  159. <view class="indent mx-1px-bottom">
  160. <view class="order-num">
  161. 订单编号{{order.agent_order_no}}
  162. </view>
  163. <view class="order-type">
  164. <block v-if="!order.has_refund">
  165. {{typeList[order.order.status]}}
  166. </block>
  167. <block v-else>
  168. 售后中
  169. </block>
  170. </view>
  171. </view>
  172. </view>
  173. <view class="item-middle">
  174. <view class="middle-item mx-1px-bottom" v-for="(good, index) in order.order.items" :key="index" >
  175. <image :src="good.item_meta.image"></image>
  176. <view class="text">
  177. <view class="names">
  178. {{good.item_name}}
  179. </view>
  180. <view class="model">
  181. {{good.item_meta.specs_text}}
  182. </view>
  183. </view>
  184. <view class="money-box">
  185. <view>
  186. {{good.quantity}}
  187. </view>
  188. <view>
  189. {{good.total_yuan}}
  190. </view>
  191. </view>
  192. </view>
  193. </view>
  194. </view>
  195. </view>
  196. <view class="loadingbox" :hidden="!tabList[2].show">
  197. {{showText}}
  198. </view>
  199. </view>
  200. </view>
  201. <view class="tab-content" :hidden="activeIndex != 3">
  202. <view class="order-box">
  203. <view class="order-item__none" v-if="dataList[status[activeIndex]][3] == '' && tabList[activeIndex].init">
  204. 暂无数据
  205. </view>
  206. <view v-for="(item, idx) in dataList[status[activeIndex]][3]" :key="idx">
  207. <view class="order-item" :data-no="order.order.order_no" v-for="(order, index) in dataList[status[activeIndex]][3][idx]" :key="index" @tap="jump">
  208. <view class="item-add mx-1px-bottom">
  209. <view class="left-info">
  210. 分销佣金<span>¥ {{order.commission}}</span>
  211. </view>
  212. <view class="right-info">已失效</view>
  213. </view>
  214. <view class="item-top">
  215. <view class="indent mx-1px-bottom">
  216. <view class="order-num">
  217. 订单编号{{order.agent_order_no}}
  218. </view>
  219. <view class="order-type">
  220. <block v-if="!order.has_refund">
  221. {{typeList[order.order.status]}}
  222. </block>
  223. <block v-else>
  224. 售后中
  225. </block>
  226. </view>
  227. </view>
  228. </view>
  229. <view class="item-middle">
  230. <view class="middle-item mx-1px-bottom" v-for="(good, index) in order.order.items" :key="index" >
  231. <image :src="good.item_meta.image"></image>
  232. <view class="text">
  233. <view class="names">
  234. {{good.item_name}}
  235. </view>
  236. <view class="model">
  237. {{good.item_meta.specs_text}}
  238. </view>
  239. </view>
  240. <view class="money-box">
  241. <view>
  242. {{good.quantity}}
  243. </view>
  244. <view>
  245. {{good.total_yuan}}
  246. </view>
  247. </view>
  248. </view>
  249. </view>
  250. </view>
  251. </view>
  252. <view class="loadingbox" :hidden="!tabList[3].show">
  253. {{showText}}
  254. </view>
  255. </view>
  256. </view>
  257. </view>
  258. <view class="mask" v-if="isShow" @tap="closeType"></view>
  259. </view>
  260. </template>
  261. <script>
  262. import {pageLogin, getUrl,config,is} from '@/common/js/utils.js';
  263. export default {
  264. data() {
  265. return {
  266. status: {
  267. 0: 0,
  268. 1: 0,
  269. 2: 0,
  270. 3: 0,
  271. 4: 0
  272. },
  273. activeType: 'all',
  274. isShow: false,
  275. activeIndex: 0,
  276. sliderOffset: 0,
  277. sliderLeft: 0,
  278. width: 0,
  279. dataList: {
  280. //0 是线上 , 1 是线下
  281. 0: {
  282. 0: [],
  283. 1: [],
  284. 2: [],
  285. 3: [],
  286. 4: []
  287. },
  288. 1: {
  289. 0: [],
  290. 1: [],
  291. 2: [],
  292. 3: [],
  293. 4: []
  294. }
  295. },
  296. tabList: [{
  297. title: "全部会员",
  298. init: false,
  299. statusNum: {
  300. 0: {
  301. page: 0,
  302. more: true
  303. },
  304. 1: {
  305. page: 0,
  306. more: true
  307. }
  308. },
  309. show: false
  310. }, {
  311. title: "待结算",
  312. init: false,
  313. statusNum: {
  314. 0: {
  315. page: 0,
  316. more: true
  317. },
  318. 1: {
  319. page: 0,
  320. more: true
  321. }
  322. },
  323. show: false
  324. }, {
  325. title: "已入账",
  326. init: false,
  327. statusNum: {
  328. 0: {
  329. page: 0,
  330. more: true
  331. },
  332. 1: {
  333. page: 0,
  334. more: true
  335. }
  336. },
  337. show: false
  338. }, {
  339. title: "已失效",
  340. init: false,
  341. statusNum: {
  342. 0: {
  343. page: 0,
  344. more: true
  345. },
  346. 1: {
  347. page: 0,
  348. more: true
  349. }
  350. },
  351. show: false
  352. }],
  353. typeList: {
  354. 0: '临时订单',
  355. 1: '待付款',
  356. 2: '付款成功',
  357. 3: '已发货',
  358. 4: '已完成',
  359. 5: '已完成',
  360. 6: '已取消',
  361. 7: '已退款',
  362. 8: '已作废',
  363. 9: '已删除',
  364. 31: '部分已发货'
  365. },
  366. showText: '正在加载下一页数据'
  367. };
  368. },
  369. onReachBottom(e) {
  370. // debugger
  371. var status = this.activeIndex;
  372. var statusPage = this.status[status];
  373. var page = this.tabList[status].statusNum[statusPage].page + 1;
  374. var tabList = `tabList[${status}]`;
  375. if (this.tabList[status].statusNum[statusPage].more) {
  376. this.setData({
  377. [`${tabList}.show`]: true
  378. });
  379. this.orderList(status, page, this.activeType);
  380. } else {
  381. wx.showToast({
  382. image: '../../../static/error.png',
  383. title: '再拉也没有啦'
  384. });
  385. }
  386. },
  387. onShow(e) {
  388. wx.showLoading({
  389. title: "加载中",
  390. mask: true
  391. });
  392. wx.getSystemInfo({
  393. success: res => {
  394. this.setData({
  395. width: res.windowWidth / this.tabList.length,
  396. sliderOffset: res.windowWidth / this.tabList.length * this.activeIndex
  397. });
  398. }
  399. });
  400. var tabStatus = this.status[this.activeIndex]; // 都是0,线上
  401. this.orderList(tabStatus, 1, this.activeType);
  402. },
  403. onLoad(e) {
  404. pageLogin(getUrl());
  405. if (e.type) {
  406. this.setData({
  407. activeIndex: e.type
  408. });
  409. }
  410. },
  411. methods: {
  412. jump(e) {
  413. wx.navigateTo({
  414. url: '/pages/distribution/pusherOrder/pusherOrder?order_no=' + e.currentTarget.dataset.no
  415. });
  416. },
  417. jumpSearch() {
  418. wx.navigateTo({
  419. url: '/pages/order/search/search'
  420. });
  421. },
  422. closeType() {
  423. this.setData({
  424. isShow: false
  425. });
  426. },
  427. //切换一级会员,二级会员
  428. changeType(e) {
  429. var type = e.currentTarget.dataset.type;
  430. var txt = '';
  431. if (type == 'all') {
  432. txt = "全部会员";
  433. } else if (type == 'level1') {
  434. txt = "一级会员";
  435. } else {
  436. txt = "二级会员";
  437. }
  438. this.tabList.forEach(val => {
  439. val.init = false;
  440. }); // 重新赋值
  441. var newDataLsit = {
  442. 0: {
  443. 0: [],
  444. 1: [],
  445. 2: [],
  446. 3: [],
  447. 4: []
  448. },
  449. 1: {
  450. 0: [],
  451. 1: [],
  452. 2: [],
  453. 3: [],
  454. 4: []
  455. }
  456. };
  457. this.tabList[0].title = txt;
  458. this.setData({
  459. activeType: type,
  460. tabList: this.tabList,
  461. isShow: false,
  462. dataList: newDataLsit
  463. });
  464. this.orderList(0, 1, this.activeType);
  465. },
  466. tabClick(e) {
  467. var status = e.currentTarget.id; // 0,1,2,3
  468. if (status == 0) {
  469. this.setData({
  470. isShow: !this.isShow,
  471. sliderOffset: e.currentTarget.offsetLeft,
  472. activeIndex: status
  473. });
  474. }
  475. if (!this.isShow) {
  476. this.setData({
  477. sliderOffset: e.currentTarget.offsetLeft,
  478. activeIndex: status
  479. });
  480. }
  481. if (!this.tabList[status].init) {
  482. if (!this.isShow) {
  483. wx.showLoading({
  484. title: "加载中",
  485. mask: true
  486. });
  487. this.orderList(status, 1, this.activeType);
  488. }
  489. }
  490. },
  491. pay(e) {
  492. var order_no = e.currentTarget.dataset.no;
  493. wx.navigateTo({
  494. url: '/pages/store/payment/payment?order_no=' + order_no
  495. });
  496. },
  497. delete(e) {
  498. wx.showModal({
  499. title: '',
  500. content: '是否删除该订单',
  501. success: res => {
  502. if (res.confirm) {
  503. this.deleteOrder(e.currentTarget.dataset.no);
  504. }
  505. }
  506. });
  507. },
  508. submit(e) {
  509. wx.showModal({
  510. title: '',
  511. content: '是否确认收货',
  512. success: res => {
  513. if (res.confirm) {
  514. this.receiveOrder(e.currentTarget.dataset.no);
  515. }
  516. }
  517. });
  518. },
  519. // 获取订单列表
  520. orderList(status, page, type) {
  521. var token = this.$cookieStorage.get('user_token');
  522. var newstatus = '';
  523. if (status == 0) {
  524. newstatus = '';
  525. } else if (status == 1) {
  526. newstatus = "wait";
  527. } else if (status == 2) {
  528. newstatus = "close";
  529. } else if (status == 3) {
  530. newstatus = "lose";
  531. }
  532. this.$http.get({
  533. api: 'api/distribution/order/list',
  534. header: {
  535. Authorization: token
  536. },
  537. data: {
  538. status: newstatus,
  539. type: type,
  540. page: page
  541. }
  542. }).then(res => {
  543. if (res.statusCode == 200) {
  544. res = res.data;
  545. if (res.status) {
  546. var pages = res.meta.pagination;
  547. var current_page = pages.current_page;
  548. var total_pages = pages.total_pages;
  549. var tabList = `tabList[${status}]`;
  550. var statusPage = `status[${status}]`;
  551. var dataStatus = this.status[this.activeIndex]; //0 线上
  552. // this.setData({
  553. // [`dataList.${dataStatus}[${status}][${page - 1}]`]: res.data,
  554. // [`${tabList}.init`]: true,
  555. // [`${tabList}.statusNum.${dataStatus}.page`]: current_page,
  556. // [`${tabList}.statusNum.${dataStatus}.more`]: current_page < total_pages,
  557. // [`${tabList}.show`]: false
  558. // });
  559. this.$set(this.dataList[dataStatus][status], page -1, res.data);
  560. this.tabList[status].init=true;
  561. this.tabList[status].statusNum[dataStatus].page=current_page;
  562. this.tabList[status].statusNum[dataStatus].more=current_page < total_pages;
  563. this.tabList[status].show=false;
  564. /*console.log(this.tabList[status].statusNum[dataStatus]);*/
  565. } else {
  566. wx.showToast({
  567. title: res.message,
  568. image: '../../../static/error.png'
  569. });
  570. }
  571. } else {
  572. wx.showModal({
  573. title: '',
  574. content: '请求失败',
  575. showCancel: false
  576. });
  577. }
  578. wx.hideLoading();
  579. }).catch(rej => {
  580. wx.showToast({
  581. title: "请求失败",
  582. image: '../../../static/error.png'
  583. });
  584. wx.hideLoading();
  585. });
  586. },
  587. // 确认收货
  588. receiveOrder(orderNo) {
  589. var token = this.$cookieStorage.get('user_token');
  590. this.$http.post({
  591. api: 'api/shopping/order/received',
  592. header: {
  593. Authorization: token
  594. },
  595. data: {
  596. order_no: orderNo
  597. }
  598. }).then(res => {
  599. if (res.statusCode == 200) {
  600. res = res.data;
  601. wx.showModal({
  602. title: '',
  603. content: res.message,
  604. showCancel: false,
  605. success: res => {
  606. if (res.confirm) {
  607. this.orderList(0, this.activeIndex);
  608. }
  609. }
  610. });
  611. } else {
  612. wx.showModal({
  613. title: '',
  614. content: '取消订单失败, 请检查您的网络状态',
  615. showCancel: false
  616. });
  617. }
  618. }).catch(rej => {
  619. wx.showModal({
  620. title: '',
  621. content: '取消订单失败, 请检查您的网络状态',
  622. showCancel: false
  623. });
  624. });
  625. },
  626. // 删除订单
  627. deleteOrder(orderNo) {
  628. var token = this.$cookieStorage.get('user_token');
  629. this.$http.post({
  630. api: 'api/shopping/order/delete',
  631. header: {
  632. Authorization: token
  633. },
  634. data: {
  635. 'order_no': orderNo
  636. }
  637. }).then(res => {
  638. if (res.statusCode == 200) {
  639. wx.showToast({
  640. title: res.data.message
  641. });
  642. this.orderList(0, this.activeIndex);
  643. } else {
  644. wx.showModal({
  645. title: '',
  646. content: '删除订单失败, 请检查您的网络状态',
  647. showCancel: false
  648. });
  649. }
  650. }).catch(rej => {
  651. wx.showModal({
  652. title: '',
  653. content: '删除订单失败, 请检查您的网络状态',
  654. showCancel: false
  655. });
  656. });
  657. },
  658. setData: function (obj) {
  659. let that = this;
  660. let keys = [];
  661. let val, data;
  662. Object.keys(obj).forEach(function (key) {
  663. keys = key.split('.');
  664. val = obj[key];
  665. data = that.$data;
  666. keys.forEach(function (key2, index) {
  667. if (index + 1 == keys.length) {
  668. that.$set(data, key2, val);
  669. } else {
  670. if (!data[key2]) {
  671. that.$set(data, key2, {});
  672. }
  673. }
  674. data = data[key2];
  675. });
  676. });
  677. }
  678. },
  679. computed: {},
  680. watch: {}
  681. };
  682. </script>
  683. <style rel="stylesheet/less" lang="less">
  684. @import "order";
  685. </style>