order.vue 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480
  1. <template>
  2. <view>
  3. <!--pages/order/order.wxml-->
  4. <view class="tab">
  5. <view v-for="(item, index) in TabList" :key="index" :class="'li ' + (item.active ? 'active' : '')"
  6. :data-index="index" @tap="switchTab">{{item.label}}</view>
  7. </view>
  8. <view style="height: 100rpx;"></view>
  9. <view class="search ddflex" v-if="index == 0">
  10. <image src="../../static/pages/images/ssico.png"></image>
  11. <input v-model="search" placeholder="输入关键词搜索" placeholder-class="placeholder" class="ipt fflex" @confirm="confirmSearch" />
  12. </view>
  13. <block v-if="pageList.length > 0">
  14. <view v-for="(item, index) in pageList" :key="index" class="lists">
  15. <view class="ddbh">
  16. <view class="ddid dflex ">
  17. {{item.payTime ? item.payTime : item.createDate}} 下单
  18. <!-- <block v-if="item.state == 1 || item.state == 8">
  19. <image src="/mine/static/mine/images/ioc_hwg.png" class="ioc" v-if="item.orderType==10">
  20. </image>编号:{{item.id}}<text class="copy" @tap="copy(item.id)">复制</text>
  21. </block>
  22. <block v-else>{{item.payTime}} 下单</block> -->
  23. </view>
  24. <view class="tihuoma" v-if="item.mode == 1 && item.state < 8 && item.state > 1">
  25. 提货码:<text>{{item.code}}</text></view>
  26. <block>
  27. <image src="/static/pages/images/jishida.png" class="type" v-if="item.orderType == 5">
  28. </image>
  29. <image src="/mine/static/mine/images/tuangou.png" class="type" v-if="item.orderType == 2">
  30. </image>
  31. <image src="/mine/static/mine/images/pingtuan.png" class="type" v-if="item.orderType == 4">
  32. </image>
  33. <image src="/mine/static/mine/images/kanjia.png" class="type" v-if="item.orderType == 7">
  34. </image>
  35. <image src="/mine/static/mine/images/seckill.png" class="type" v-if="item.orderType == 3">
  36. </image>
  37. <image src="/mine/static/mine/images/newbornZone.png" class="type"
  38. v-if="item.orderType == 6"></image>
  39. </block>
  40. </view>
  41. <view @tap="showOrder" :data-code="item.code" :data-id="item.id" :data-state="item.state">
  42. <view v-for="(itempro, index2) in item.products" :key="index2" class="li">
  43. <image :src="itempro.pic + '?x-oss-process=style/w160'" mode="aspectFill" class="cimg"></image>
  44. <view class="zhinfo">
  45. <view class="zhtit ddflex">
  46. <view class="fflex tover">{{itempro.title}}</view>
  47. <view class="zhjia" v-if="item.orderType!=11">¥{{itempro.salePrice}}</view>
  48. <view class="zhjia" v-if="item.orderType==11">
  49. {{itempro.integral}}积分+¥{{itempro.salePrice}}
  50. </view>
  51. </view>
  52. <view class="gg ddflex">
  53. <view v-if="itempro.propertiesList" class="guigecontent fflex">规格:
  54. <text v-for="(itemGuige, index) in itempro.propertiesList" :key="index" class="guige"
  55. decode="true">{{itemGuige.value}}&nbsp;
  56. </text>
  57. </view>
  58. <view class="num">×{{itempro.quantity}}</view>
  59. </view>
  60. <view class="yuji" v-if="itempro.estimatedDeliveryTime">{{itempro.estimatedDeliveryTimeStr}}前发货</view>
  61. </view>
  62. </view>
  63. <view class="total dflex">
  64. <!-- <view>共{{item.count}}件商品</view> -->
  65. <view v-if="item.orderType!=11">
  66. 总金额:<text>¥{{item.money}}</text>
  67. </view>
  68. <view v-if="item.orderType==11">
  69. 合计:<text>{{item.discountMoney}}积分+¥{{item.money}}</text>
  70. </view>
  71. <view v-if="item.discountMoney>0&&item.orderType!=11">
  72. 优惠金额:<text>¥{{item.discountMoney}}</text>
  73. </view>
  74. </view>
  75. </view>
  76. <view class="status">
  77. <block v-if="item.mode == 1 && item.state == 3">
  78. <view class="flex">待配货</view>
  79. </block>
  80. <block v-else>
  81. <view class="flex">{{item.stateName}}</view>
  82. </block>
  83. <!-- <block v-if="item.orderType==4">
  84. </block>
  85. <block v-else>
  86. <view class="sta-btn" @tap="refund" :data-id="item.id" :data-index="index"
  87. v-if="item.refund>0&&item.state>=2&&item.state<=6 && isrefund==1&&(item.orderType!=4)&&item.payTime!=null ||(item.state >=20&&item.state <30&&item.isOtc=='1'&& isrefund==1&&item.payTime!=null)">
  88. 申请售后</view>
  89. </block> -->
  90. <view class="sta-btn" @tap="cancelOrder" :data-index="index" v-if="item.state == 1">取消订单</view>
  91. <!-- <view class="sta-btn" @tap="cancelOrder" :data-index="index" v-if="item.state == 3">提醒发货</view> -->
  92. <view class="sta-btn" @tap="txOrder" :data-index="index" v-if="item.state == 3&&item.isReminder==1">提醒发货</view>
  93. <block v-if="isOpenInvoice == 1 && (item.state == 2 || item.state == 3 || item.state == 4 || item.state == 5 || item.state == 6 || item.state == 7)">
  94. <view class="sta-btn" @tap="applyInvoice(item)" v-if="item.invoiceState == 0">申请开票</view>
  95. <view class="sta-btn" @tap="toInvoice()" v-else>查看发票</view>
  96. </block>
  97. <!-- <navigator class="sta-btn" url="/mine/orderDet/orderDet?id={{item.id}}" hover-class="none">查看详情</navigator> -->
  98. <view class="sta-btn red" @tap="confirmOrder" :data-index="index" v-if="item.state == 5 || item.state == 6">确认收货</view>
  99. <view @tap="payOrder(item,index)" class="sta-btn red" v-if="item.state == 1">立即付款</view>
  100. <view @tap="scoreOrder" :data-index="index" class="sta-btn red"
  101. v-if="item.state == 7 && isOpenComments==1 && item.isEvaluate == 0">立即评价</view>
  102. <navigator v-if="item.state ==22||item.state ==20||item.state==27" hover-class="none"
  103. :url="'/prescription/Consultation/index?orderId='+item.id" class="sta-btn red">
  104. 重新开方</navigator>
  105. </view>
  106. </view>
  107. </block>
  108. <view class="nodata" v-if="ishow">
  109. <image :src="picUrlss+'empty_dd.png'"></image>
  110. <text>还没有订单哦</text>
  111. </view>
  112. </view>
  113. </template>
  114. <script>
  115. // pages/order/order.js
  116. const app = getApp();
  117. const req = require("../../utils/request.js");
  118. const requsetmessage = require("../../utils/requestmessage.js");
  119. export default {
  120. data() {
  121. return {
  122. picUrlss: req.public.picUrls,
  123. TabList: [{
  124. label: '全部',
  125. active: true
  126. }, {
  127. label: '待付款',
  128. state: 1
  129. }, {
  130. label: '待发货',
  131. state: 3
  132. }, {
  133. label: '待收货',
  134. state: 5
  135. }, {
  136. label: '已完成',
  137. state: 7
  138. }],
  139. form: {
  140. page: 1,
  141. limit: 10
  142. },
  143. pageList: [],
  144. isLoad: true,
  145. index: "",
  146. ishow: false,
  147. isrefund: "",
  148. isOpenComments: "",
  149. isOpenInvoice: '',
  150. search: ''
  151. };
  152. },
  153. components: {},
  154. props: {},
  155. onLoad: function(options) {
  156. let that = this;
  157. let title = "";
  158. this.isrefundFun();
  159. this.isOpenCommentsFun();
  160. if (options.orderType) {
  161. this.form.orderType = options.orderType;
  162. if (options.orderType == 2) title = '团购订单';
  163. if (options.orderType == 4) title = '拼团订单';
  164. if (options.orderType == 7) title = '砍价订单';
  165. uni.setNavigationBarTitle({
  166. title: title
  167. });
  168. }
  169. const index = that.TabList.findIndex(it => it.state == options.state);
  170. if (options && options.state > 0) that.switchTab({
  171. currentTarget: {
  172. dataset: {
  173. index: index
  174. }
  175. }
  176. });
  177. else that.getList();
  178. this.setData({
  179. index: index
  180. });
  181. },
  182. onShow() {
  183. this.switchTab({
  184. currentTarget: {
  185. dataset: {
  186. index: this.index
  187. }
  188. }
  189. });
  190. },
  191. onReachBottom() {
  192. this.form.page++;
  193. this.getList();
  194. },
  195. methods: {
  196. switchTab(event) {
  197. let index = event.currentTarget.dataset.index;
  198. // console.log(index);
  199. let def = this.TabList.findIndex(it => it.active);
  200. let d = {};
  201. d['TabList[' + def + '].active'] = false;
  202. d['TabList[' + index + '].active'] = true;
  203. this.isLoad = true;
  204. this.form.page = 1;
  205. this.search = '';
  206. d['pageList'] = []; // this.data.form.states=this.data.TabList[index].state.toString();
  207. this.form.state = this.TabList[index].state;
  208. this.setData({
  209. index: index
  210. });
  211. this.setData(d);
  212. this.getList();
  213. },
  214. confirmSearch(){
  215. this.isLoad = true;
  216. this.form.page = 1;
  217. this.getList();
  218. },
  219. getList() {
  220. let isShowLoading = false;
  221. if (this.form.page == 1 && !isShowLoading) {
  222. req.loadIng('加载中');
  223. isShowLoading = true;
  224. }
  225. // console.log(!this.isLoad);
  226. if (!this.isLoad) return false;
  227. this.isLoad = false;
  228. let that = this;
  229. let form = this.form;
  230. if(this.search){
  231. form.search = this.search;
  232. }else{
  233. delete form.search
  234. }
  235. req.getRequest('/api/order/list', form, data => {
  236. // console.log(data);
  237. if (data && data.length == 10) this.isLoad = true;
  238. if (that.form.page > 1) data = that.pageList.concat(data);
  239. data.map(el => {
  240. el.refund = el.products.filter(it => it.quantity - (it.refundStock?it.refundStock:0) > 0).length
  241. return el
  242. })
  243. // console.log(data)
  244. that.setData({
  245. pageList: data
  246. });
  247. // console.log(data);
  248. if (data.length <= 0) {
  249. that.setData({
  250. ishow: true
  251. });
  252. } else {
  253. that.setData({
  254. ishow: false
  255. });
  256. }
  257. if (isShowLoading) {
  258. uni.hideLoading();
  259. isShowLoading = false;
  260. }
  261. });
  262. },
  263. showOrder(e) {
  264. let id = e.currentTarget.dataset.id;
  265. let code = e.currentTarget.dataset.code;
  266. let state = e.currentTarget.dataset.state; // if(state!=8){
  267. app.globalData.openPage('mine/orderDet/orderDet?id=' + id + '&isrefund=' + this.isrefund + '&code=' +
  268. code); // }else{
  269. // req.msg("订单已取消")
  270. // }
  271. },
  272. txOrder(event){
  273. let index = event.currentTarget.dataset.index;
  274. let page = this.pageList[index];
  275. let that = this;
  276. req.postRequest('/api/order/reminderOrder', {
  277. orderId: page.id
  278. },() => {
  279. req.msg('发货提醒成功');
  280. });
  281. },
  282. cancelOrder(event) {
  283. //取消订单
  284. let index = event.currentTarget.dataset.index;
  285. let page = this.pageList[index];
  286. let that = this;
  287. req.msgConfirm('确定取消该订单?', () => {
  288. req.postRequest('/api/order/cancel', {
  289. id: page.id
  290. }, () => {
  291. let d = {};
  292. d['pageList[' + index + '].stateName'] = '订单取消';
  293. d['pageList[' + index + '].state'] = 8;
  294. that.setData(d);
  295. that.switchTab({
  296. currentTarget: {
  297. dataset: {
  298. index: this.index
  299. }
  300. }
  301. });
  302. });
  303. });
  304. },
  305. confirmOrder(event) {
  306. //确认收货
  307. let index = event.currentTarget.dataset.index;
  308. let page = this.pageList[index];
  309. let that = this;
  310. // console.log(that.index);
  311. req.msgConfirm('确认执行该操作?', () => {
  312. req.postRequest('/api/order/receiving', {
  313. id: page.id
  314. }, () => {
  315. let d = {};
  316. d['pageList[' + index + '].stateName'] = '订单完成';
  317. d['pageList[' + index + '].state'] = 7;
  318. that.setData(d);
  319. that.switchTab({
  320. currentTarget: {
  321. dataset: {
  322. index: this.index
  323. }
  324. }
  325. });
  326. });
  327. });
  328. },
  329. payOrder: async function(item) {
  330. let _ts = this;
  331. let mode = item.mode;
  332. if (item.mode == 2 && item.orderType == 5) {
  333. mode = 3;
  334. }
  335. if (item.isOtc == 1) {
  336. await requsetmessage.recipel(mode).then(res => {
  337. });
  338. } else if (mode == 1) {
  339. await requsetmessage.selfRaising().then(res => {
  340. // console.log("自提", res);
  341. });
  342. } else if (mode == 2) {
  343. await requsetmessage.distribution().then(res => {
  344. // console.log("配送", res);
  345. });
  346. } else {
  347. await requsetmessage.jisda().then(res => {
  348. // console.log("及时达", res);
  349. });
  350. }
  351. //支付订单
  352. req.payOrder(item.id, success => {
  353. // console.log(success);
  354. if (success) {
  355. if (item.isOtc == 1) {
  356. app.globalData.redirectTab('product/pay/pay?isSuccess=true&orderId=' + item.id +
  357. '&isRx=1');
  358. } else {
  359. app.globalData.redirectTab('product/pay/pay?isSuccess=true');
  360. }
  361. //支付成功
  362. // let d = {};
  363. // d['pageList[' + index + '].stateName'] = '待发货';
  364. // d['pageList[' + index + '].state'] = 3;
  365. // that.setData(d);
  366. // that.switchTab({
  367. // currentTarget: {
  368. // dataset: {
  369. // index: this.index
  370. // }
  371. // }
  372. // });
  373. }
  374. });
  375. },
  376. refund(event) {
  377. //申请退款
  378. let id = event.currentTarget.dataset.id;
  379. uni.navigateTo({
  380. url: '/mine/refund/refundType/refundType?id=' + id
  381. }); // let id = event.currentTarget.dataset.id;
  382. // req.postRequest('/api/order/refund',{id:id},res=>{
  383. // req.msg('退款审核中')
  384. // })
  385. },
  386. isrefundFun() {
  387. //是否开启售后
  388. let isrefund = JSON.parse(req.getStorage('configRes'));
  389. if (isrefund.isRefund) {
  390. this.setData({
  391. isrefund: isrefund.isRefund
  392. });
  393. } // if(isrefund.isRefund==1){
  394. // req.getRequest('/api/orderRefund/refundReason','',data=>{
  395. // req.setStorage('isrefund',data)
  396. // })
  397. // }
  398. },
  399. isOpenCommentsFun() {
  400. //是否开启评论
  401. let isOpenComments = JSON.parse(req.getStorage('configRes'));
  402. if (isOpenComments.is_open_comments) {
  403. this.setData({
  404. isOpenComments: isOpenComments.is_open_comments
  405. });
  406. }
  407. if (isOpenComments.is_open_invoice) {
  408. this.setData({
  409. isOpenInvoice: isOpenComments.is_open_invoice
  410. });
  411. }
  412. },
  413. scoreOrder(event) {
  414. //评价订单
  415. let index = event.currentTarget.dataset.index;
  416. let page = this.pageList[index];
  417. let that = this;
  418. app.globalData.openPage('mine/comments/comments?id=' + page.id);
  419. },
  420. copy(id){
  421. uni.setClipboardData({
  422. data: id,
  423. complete() {
  424. req.msg('复制成功')
  425. }
  426. })
  427. },
  428. // 申请开票
  429. applyInvoice(item){
  430. uni.navigateTo({
  431. url: '/invoice/apply/apply?orderId=' + item.id + '&money=' + item.money
  432. })
  433. },
  434. toInvoice(){
  435. uni.navigateTo({
  436. url: '/mine/invoice/invoice'
  437. })
  438. }
  439. }
  440. };
  441. </script>
  442. <style>
  443. @import "./order.css";
  444. </style>