orderDetail.js 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518
  1. // pages/cart/orderDetail/orderDetail.js
  2. const app = getApp()
  3. const api = require('../../../../request/api');
  4. const http = require('../../../../request/http');
  5. const utils = require('../../../../utils/util.js');
  6. const storeKeys = require('../../../../utils/storageKeys.js');
  7. Page({
  8. /**
  9. * 页面的初始数据
  10. */
  11. data: {
  12. isIphoneX: app.globalData.isIphoneX,
  13. isLoading: true, //是否处于加载
  14. countdownTime:'0:00:00',
  15. timer1:null,
  16. dataObj:{},
  17. swiperData: [{}, {}, {}],
  18. currentSwiper: 0, //轮播索引
  19. heights:'',
  20. orderId: '408',
  21. model: false,
  22. modelType:'', //1取消 2删除 3确认收货
  23. model_text:'', //对应的文案
  24. idx:'', //列表传进来的索引
  25. // bottomBtn: true,
  26. delivery_type: 10, // 配送方式 10-快递配送 20-门店自提
  27. timerTwo:null,
  28. isUnload:true,
  29. discountModel: false, //是否显示优惠明细弹窗
  30. activityDiscountList:[], //参与N件X折活动的商品
  31. },
  32. /**
  33. * 生命周期函数--监听页面加载
  34. */
  35. onLoad: function (options) {
  36. if(options.orderId){
  37. this.setData({
  38. orderId: options.orderId,
  39. idx: options.idx
  40. });
  41. }
  42. // this.getDetail()
  43. },
  44. toRefund(e){//申请售后
  45. // "order_refund_status": 1, //当前申请售后的状态 0不在售后期间内 1可以售后/再次售后 2退款中 3已关闭
  46. let refundType = e.currentTarget.dataset.type; //1点击商品那里的售后 2点击批量售后
  47. let isCarry = "";
  48. //自提
  49. if(this.data.delivery_type == 20){
  50. isCarry = 1
  51. }
  52. if(refundType==1){
  53. let item = e.currentTarget.dataset.item;
  54. if(item.order_refund_status==0){
  55. return;
  56. }
  57. if(item.order_refund_status==1){
  58. let type = 30, isAll = '' //仅退款
  59. if(item.delivery_status==20 || (this.data.delivery_type == 20 && this.data.dataObj.hx_status == 20)){
  60. type = 10
  61. }
  62. if(type==30 && this.data.dataObj.is_full_refund && this.data.dataObj.goods.length==1 && this.data.dataObj.goods[0].order_refund_status_text=='申请退款'){
  63. isAll = true
  64. }
  65. console.log('isAll-------------' + isAll)
  66. wx.navigateTo({
  67. url: '/pages/cart/pages/refund/refundApply/refundApply?pageType=' + type + '&orderGoodsId=' + item.order_goods_id + '&orderId=' + this.data.orderId + '&isAll=' + isAll +'&isCarry='+isCarry
  68. })
  69. }
  70. if(item.order_refund_status==2 || item.order_refund_status==3){//2退款中 3已关闭
  71. wx.navigateTo({
  72. url: '/pages/cart/pages/refund/refundDetail/refundDetail?orderRefundId=' + item.refund.order_refund_id
  73. })
  74. }
  75. }
  76. if(refundType==2 && this.data.dataObj.is_full_refund){
  77. wx.navigateTo({
  78. url: '/pages/cart/pages/refund/refundApply/refundApply?pageType=30&orderGoodsId=0&orderId=' + this.data.orderId + '&isAll=true'+'&isCarry='+isCarry
  79. })
  80. }
  81. },
  82. //获取订单详情
  83. getDetail(){
  84. let that = this;
  85. clearInterval(this.data.timerTwo);
  86. this.data.timerTwo = null;
  87. if(this.data.isLoading){
  88. wx.showLoading({
  89. title: "加载中"
  90. });
  91. }
  92. http.request({
  93. method: 'GET',
  94. url: api.URL + '/api/order/detail?orderId=' + this.data.orderId,
  95. token: utils.getStorageSync(storeKeys.TOKEN),
  96. success: (res) => {
  97. wx.hideLoading();
  98. let data_obj = res.data.data.order
  99. let delivery_type = data_obj.delivery_type || 10;
  100. //未核销 && 属于自提
  101. if(data_obj.hx_status == 10 && delivery_type == 20 && (data_obj.state_value ==12 || data_obj.state_value == 13)){
  102. this.getHxStatus();
  103. }
  104. // 筛选已参与了N件X折活动
  105. let activityDiscountList = data_obj.goods.filter((item)=>{
  106. // 是否参与了N件X折活动 0否 1是
  107. return item.is_activity_discount == 1;
  108. })
  109. console.log(activityDiscountList);
  110. that.setData({
  111. dataObj: data_obj,
  112. activityDiscountList,
  113. delivery_type,
  114. isLoading: false
  115. });
  116. if(that.data.dataObj.state_value==11 && that.data.dataObj.djs_time>0){
  117. that.countdown(that.data.dataObj.djs_time)
  118. }
  119. if(that.data.dataObj.express_list.length > 0 ){
  120. let hs = []
  121. let px = wx.getSystemInfoSync().windowWidth/750;
  122. wx.createSelectorQuery().selectAll('.part_swiper').boundingClientRect(function(rects){
  123. rects.forEach((v, i) => {
  124. if(that.data.dataObj.express_list.length > 1 ){
  125. hs[i] = v.height + 36*px
  126. }else{
  127. hs[i] = v.height
  128. }
  129. })
  130. that.setData({
  131. heights: hs
  132. })
  133. }).exec()
  134. }
  135. if(data_obj.state_value==40 && that.data.idx){
  136. let pages = getCurrentPages()
  137. let prevPage = pages[pages.length-2]
  138. if(prevPage.data.tab=='all'){
  139. let state_text = 'list[' + that.data.idx + '].state_text';
  140. let state_value = 'list[' + that.data.idx + '].state_value';
  141. prevPage.setData({
  142. [state_text]: '已关闭',
  143. [state_value]: 40,
  144. })
  145. }else{
  146. prevPage.data.list.splice(that.data.idx, 1);
  147. prevPage.setData({
  148. list: prevPage.data.list,
  149. ['dataObj.total']: prevPage.data.dataObj.total - 1
  150. })
  151. }
  152. }
  153. },
  154. error: (res) => {
  155. },
  156. })
  157. },
  158. //获取核销状态
  159. getHxStatus(){
  160. http.request({
  161. method: 'GET',
  162. url: api.URL + '/api/order/checkHxStatus?orderId=' + this.data.orderId,
  163. token: utils.getStorageSync(storeKeys.TOKEN),
  164. success: (res) => {
  165. clearInterval(this.data.timerTwo);
  166. this.data.timerTwo = null;
  167. //已核销
  168. if(res.data.data.hx_status == 20){
  169. this.getDetail();
  170. let pages = getCurrentPages()
  171. let prevPage = pages[pages.length-2] // 上一页// 调用上一个页面的setData 方法,将数据存储
  172. console.log(prevPage.data.tab)
  173. if( (prevPage.data.tab =='all')){
  174. let state_text = 'list[' + this.data.idx + '].state_text';
  175. let state_value = 'list[' + this.data.idx + '].state_value';
  176. prevPage.setData({
  177. [state_text]: '已完成',
  178. [state_value]: 30,
  179. })
  180. }else{
  181. if(this.data.idx){
  182. prevPage.data.list.splice(this.data.idx, 1);
  183. prevPage.setData({
  184. list: prevPage.data.list,
  185. ['dataObj.total']: prevPage.data.dataObj.total - 1
  186. })
  187. }
  188. this.setData({
  189. idx: ''
  190. })
  191. }
  192. return
  193. }
  194. if(!this.data.isUnload){
  195. this.data.timerTwo = setTimeout(()=>{
  196. this.getHxStatus();
  197. },1000)
  198. }
  199. }
  200. })
  201. },
  202. to_copy(e){//复制
  203. let type = e.currentTarget.dataset.type;
  204. let data = this.data.dataObj.order_no
  205. if(type && type==2){
  206. data = this.data.dataObj.hx_code
  207. }
  208. wx.setClipboardData({
  209. data: data,
  210. success: function (res) {
  211. wx.showToast({
  212. title:'已复制成功'
  213. })
  214. }
  215. })
  216. },
  217. countdown(times){
  218. let that = this;
  219. that.timer1 = setInterval(function() {
  220. let hour = 0, minute = 0, second = 0;
  221. if (times > 0) {
  222. hour = Math.floor(times / 3600);
  223. minute = Math.floor(times / 60 - 60*hour);
  224. second = Math.floor(times - minute*60 - hour*3600);
  225. } else {
  226. clearInterval(that.timer1);
  227. }
  228. if(hour<10){
  229. hour = hour
  230. }
  231. if(minute<10){
  232. minute = '0' + minute
  233. }
  234. if(second<10){
  235. second = '0' + second
  236. }
  237. times--;
  238. that.setData({
  239. countdownTime: hour + ':' + minute + ':' + second
  240. })
  241. }, 1000);
  242. },
  243. //监听轮播图滚动
  244. swiperChange(e) {
  245. this.setData({
  246. currentSwiper: e.detail.current
  247. })
  248. },
  249. btnStatus(e){//点击1取消2删除3确认收货
  250. let type = e.currentTarget.dataset.type;
  251. this.setData({
  252. model: true,
  253. modelType: type
  254. })
  255. if(type==1){
  256. this.setData({
  257. model_text: '您将取消此订单,取消后将不可恢复,确定继续吗?'
  258. })
  259. }else if(type==2){
  260. this.setData({
  261. model_text: '您将删除此订单,删除后将不可恢复,确定继续吗?'
  262. })
  263. }else if(type==3){
  264. this.setData({
  265. model_text: '确认已经收到货了吗?'
  266. })
  267. }
  268. },
  269. cancelModel(){
  270. this.setData({
  271. model: false,
  272. modelType:'',//1取消2删除3确认收货
  273. model_text:'',//对应的文案
  274. })
  275. },
  276. confirmModel: utils.throttle(function (){//1取消2删除3确认收货
  277. let that = this;
  278. let url = '', toast = ''
  279. if(this.data.modelType == 1){
  280. url = '/api/order/cancel?orderId=' + this.data.orderId
  281. toast = '订单取消成功'
  282. }
  283. if(this.data.modelType == 2){
  284. url = '/api/order/delete?orderId=' + this.data.orderId
  285. toast = '订单删除成功'
  286. }
  287. if(this.data.modelType == 3){
  288. url = '/api/order/receipt?orderId=' + this.data.orderId
  289. toast = '确认收货成功'
  290. }
  291. http.request({
  292. method: 'GET',
  293. url: api.URL + url,
  294. token: utils.getStorageSync(storeKeys.TOKEN),
  295. success: (res) => {
  296. wx.hideLoading();
  297. utils.toast(toast);
  298. that.setData({
  299. model: false
  300. })
  301. //1取消2删除3确认收货
  302. let pages = getCurrentPages()
  303. let prevPage = pages[pages.length-2] // 上一页// 调用上一个页面的setData 方法,将数据存储
  304. if(that.data.modelType == 2 || (that.data.modelType == 1 && prevPage.data.tab!='all') || (that.data.modelType == 3 && prevPage.data.tab!='all')){//删除
  305. if(that.data.idx){
  306. prevPage.data.list.splice(that.data.idx, 1);
  307. prevPage.setData({
  308. list: prevPage.data.list,
  309. ['dataObj.total']: prevPage.data.dataObj.total - 1
  310. })
  311. }
  312. that.setData({
  313. idx: ''
  314. })
  315. }
  316. if(prevPage.data.tab=='all'){
  317. let state_text = 'list[' + that.data.idx + '].state_text';
  318. let state_value = 'list[' + that.data.idx + '].state_value';
  319. if(that.data.modelType == 1){//订单取消
  320. prevPage.setData({
  321. [state_text]: '已取消',
  322. [state_value]: 20,
  323. })
  324. }
  325. if(that.data.modelType == 3){//确认收货
  326. prevPage.setData({
  327. [state_text]: '已完成',
  328. [state_value]: 30,
  329. })
  330. }
  331. }
  332. if(that.data.modelType == 1 || that.data.modelType == 3){//取消/确认收货
  333. setTimeout(() => {
  334. that.getDetail()
  335. }, 400)
  336. }
  337. if(that.data.modelType == 2){//删除
  338. setTimeout(() => {
  339. wx.navigateBack({
  340. delta: 1
  341. })
  342. }, 400)
  343. }
  344. },
  345. error: (res) => {
  346. },
  347. })
  348. }),
  349. toDetail(e){//订单详情
  350. let id = e.currentTarget.dataset.id;
  351. wx.navigateTo({
  352. url: '/pages/cart/pages/goodsDetail/goodsDetail?goods_id=' + id,
  353. })
  354. },
  355. toLogistics(e){//物流详情
  356. let type = e.currentTarget.dataset.type;
  357. if(type==1){//轮播图
  358. let item = e.currentTarget.dataset.item;
  359. wx.navigateTo({
  360. url: '/pages/cart/pages/logisticsDetail/logisticsDetail?orderId=' + this.data.orderId + '&express_no=' + item.express_no
  361. })
  362. }
  363. if(type==2){//底部
  364. if(this.data.dataObj.express_list.length==1){
  365. wx.navigateTo({
  366. url: '/pages/cart/pages/logisticsDetail/logisticsDetail?orderId=' + this.data.orderId + '&express_no=' + this.data.dataObj.express_no
  367. })
  368. }
  369. if(this.data.dataObj.express_list.length>1){
  370. wx.navigateTo({
  371. url: '/pages/cart/pages/logisticsList/logisticsList?orderId=' + this.data.orderId
  372. })
  373. }
  374. }
  375. },
  376. toInvoicing(){
  377. // has_receipt,订单详情新增字段判断是否有提交,0:未提交,10:待开票,20:已开票
  378. if(this.data.dataObj.has_receipt==10){
  379. utils.toast('您已提交发票申请,平台正在处理请稍后');
  380. return;
  381. }
  382. if(this.data.dataObj.has_receipt==20){
  383. utils.toast('发票已发送到您的电子邮箱');
  384. return;
  385. }
  386. wx.navigateTo({
  387. url: '/pages/cart/pages/invoice/invoice?orderId=' + this.data.orderId
  388. })
  389. },
  390. commit: utils.throttle(function (e) {//支付
  391. let that = this;
  392. wx.showLoading({
  393. title: "加载中"
  394. });
  395. let dataParams = {
  396. "orderId": this.data.orderId, //订单ID
  397. "payType": 20 //支付类型 10余额支付 20微信支付 30礼品卡兑换
  398. }
  399. http.request({
  400. url: api.URL + '/api/order/pay',
  401. method: 'POST',
  402. token: utils.getStorageSync(storeKeys.TOKEN),
  403. data: dataParams,
  404. success: (res) => {
  405. wx.hideLoading();
  406. if(res.data.data.pay_type==20){
  407. that.wxPayment(res.data.data.payment);
  408. }
  409. },
  410. error: (res) => {
  411. },
  412. })
  413. }, 1000),
  414. //调起微信支付
  415. wxPayment(data) {
  416. let that = this
  417. wx.requestPayment({
  418. nonceStr: data.nonceStr,
  419. package: 'prepay_id=' + data.prepay_id,
  420. paySign: data.paySign,
  421. signType: "MD5",
  422. timeStamp: data.timeStamp,
  423. success(res) {
  424. if (res.errMsg == "requestPayment:ok") {
  425. utils.toast('支付成功');
  426. let pages = getCurrentPages()
  427. let prevPage = pages[pages.length-2] // 上一页// 调用上一个页面的setData 方法,将数据存储
  428. prevPage.setData({
  429. tab: 'received',
  430. is_bottom: false,
  431. list: [],
  432. page:1,
  433. dataObj:{}
  434. })
  435. prevPage.getList()
  436. setTimeout(() => {
  437. that.getDetail()
  438. }, 400)
  439. }
  440. },
  441. fail(res) {
  442. if (res.errMsg == "requestPayment:fail cancel") {
  443. }
  444. }
  445. })
  446. },
  447. /**
  448. * 生命周期函数--监听页面初次渲染完成
  449. */
  450. onReady: function () {
  451. },
  452. /**
  453. * 生命周期函数--监听页面显示
  454. */
  455. onShow: function () {
  456. this.getDetail()
  457. this.data.isUnload = false;
  458. },
  459. /**
  460. * 生命周期函数--监听页面隐藏
  461. */
  462. onHide: function () {
  463. clearInterval(this.timer1);
  464. clearInterval(this.data.timerTwo);
  465. this.data.timer1 = null;
  466. this.data.timerTwo = null;
  467. },
  468. /**
  469. * 生命周期函数--监听页面卸载
  470. */
  471. onUnload: function () {
  472. clearInterval(this.timer1);
  473. clearInterval(this.data.timerTwo);
  474. this.data.timer1 = null;
  475. this.data.timerTwo = null;
  476. this.data.isUnload = true;
  477. },
  478. /**
  479. * 页面相关事件处理函数--监听用户下拉动作
  480. */
  481. onPullDownRefresh: function () {
  482. },
  483. /**
  484. * 页面上拉触底事件的处理函数
  485. */
  486. onReachBottom: function () {
  487. },
  488. //显示优惠详情
  489. showDiscountModel(){
  490. this.setData({
  491. discountModel:true
  492. })
  493. },
  494. //隐藏优惠详情
  495. hideDiscountModel(){
  496. this.setData({
  497. discountModel:false
  498. })
  499. }
  500. })