/** * 订单详情页 * @author: xuqi<qi.xu@yoho.cn> * @date: 2015/11/16 */ require('layout/_modal.css'); require('home/order-detail-index.page.css'); let $ = require('yoho-jquery'), lazyLoad = require('yoho-jquery-lazyload'), Hammer = require('yoho-hammer'), dialog = require('plugin/dialog'), tip = require('plugin/tip'), Swiper = require('yoho-swiper'); let orderId = $('#order-detail').data('id'), $countDownHours = $('.hours'), $countdownContainer = $('.count-down'), $reaMask = $('.reason-mask'), $refundReaMask = $('.refund-reason-mask'), reasonSwiper, refundReasonSwiper, optHammer, $createTime = new Date($('.createTime').text() * 1000); let $sureClose = $('.order-opt').find('.cancel'); // 取消订单按钮 let $sureRefund = $('.order-opt').find('.refund'); // 申请退款按钮 let $refundChangeMask = $('.refund-change-mask'); // 退换货选择组件 let $newHours = $('.new-hours').length > 0 ? true : false; // 新的倒计时格式标示 require('common'); require('plugin/modal.alert'); lazyLoad({ try_again_css: 'order-failure' }); function downCount(options) { let difference = options, // difference of dates interval; /** * Main downCount function that calculates everything */ function countdown() { // basic math variables let _second = 1000, _minute = _second * 60, _hour = _minute * 60, _day = _hour * 24, hours, minutes, seconds; // calculate dates hours = Math.floor((difference % _day) / _hour); minutes = Math.floor((difference % _hour) / _minute); seconds = Math.floor((difference % _minute) / _second); // fix dates so that it will show two digets hours = (String(hours).length >= 2) ? hours : '0' + hours; minutes = (String(minutes).length >= 2) ? minutes : '0' + minutes; seconds = (String(seconds).length >= 2) ? seconds : '0' + seconds; // set to DOM $countdownContainer.removeClass('hide'); $('.new-hours').removeClass('hide'); if (hours === '00') { if ($newHours) { $countDownHours.text(minutes + '分' + seconds + '秒'); } else { $countDownHours.text('剩余' + minutes + ':' + seconds); } } else { if ($newHours) { $countDownHours.text(hours + '时' + minutes + '分' + seconds + '秒'); } else { $countDownHours.text('剩余' + hours + ':' + minutes + ':' + seconds); } } difference -= 1000; if (difference < 0) { clearInterval(interval);// stop timer return; } } if (difference !== '' && difference > 0) { interval = setInterval(countdown, 1000);// start } } downCount($countDownHours.text()); /** * 确认收货 */ function sureOrder() { dialog.showDialog({ dialogText: '请确认是否已经收到货品', hasFooter: { leftBtnText: '取消', rightBtnText: '确定' } }, function() { $.ajax({ type: 'POST', url: '//m.yohobuy.com/home/orders/sure', data: { orderCode: orderId }, success: function(result) { if (result.code === 200) { setTimeout(function() { window.location.href = '/home/orders'; }, 2000); } } }); }); } // 订单删除 optHammer = new Hammer(document.getElementsByClassName('order-opt')[0]); optHammer.on('tap', function(e) { let $cur = $(e.target); if ($cur.hasClass('del')) { // 删除订单 dialog.showDialog({ dialogText: '确定删除订单吗?', hasFooter: { leftBtnText: '取消', rightBtnText: '确定' } }, function() { $.ajax({ type: 'GET', url: '/home/delOrder', data: { id: orderId } }).then(function(res) { $('#dialog-wrapper').hide(); if ($.type(res) !== 'object') { return; } if (res.message) { tip.show(res.message); } setTimeout(function() { window.location.href = '/home/orders'; }, 2000); }).fail(function() { tip.show('网络错误'); }); }); } else if ($cur.hasClass('cancel')) { // $reaMask.css('visibility', 'visible'); } else if ($cur.hasClass('refund')) { // $refundReaMask.css('visibility', 'visible'); if (window._yas && window._yas.sendCustomInfo) { window._yas.sendCustomInfo({ op: 'YB_ORDER_REFUND_C', param: JSON.stringify({ C_ID: window._ChannelVary[window.cookie('_Channel')], ORD_NUM: orderId }) }, true); } } else if ($cur.hasClass('rebuy')) { $.ajax({ type: 'GET', url: '/home/readd', data: { orderCode: orderId }, success: function(res) { tip.show(res.message); location.href = '/cart/index/index'; }, error: function(res) { tip.show(res.message); } }); } else if ($cur.hasClass('modify-address')) { if (window._yas && window._yas.sendCustomInfo) { window._yas.sendCustomInfo({ op: 'YB_ORDER_MODIFY_ADDRESS_C', param: JSON.stringify({ C_ID: window._ChannelVary[window.cookie('_Channel')], ORD_NUM: orderId }) }, true); } return true; } else if ($cur.closest('.after-sales').length) { if ($cur.hasClass('is-mars-app')) { setTimeout(function() { $refundChangeMask.show(); }, 500); } else { dialog.showDialog({ dialogText: 'WAP端暂不支持该功能,请至有货APP进行操作', hasFooter: { centerBtnText: '我知道了' } }); } return false; } else if ($cur.hasClass('sure')) { sureOrder(); return false; } }); $(function() { reasonSwiper = new Swiper('.box-main', { initialSlide: 0, centeredSlides: true, slidesPerView: 5, direction: 'vertical', onSlideChangeStart: function(reasonSwiper) {//eslint-disable-line let activeIndex = reasonSwiper.activeIndex, slides = reasonSwiper.slides, i = 0; if (slides.length !== 1) { if (activeIndex === 0) { for (i = 1; i < slides.length; i++) { $(slides[i]).css('transform', ''); } } else if (activeIndex === slides.length - 1) { for (i = 0; i < activeIndex; i++) { $(slides[i]).css('transform', 'rotateX(' + (30 + (activeIndex - i) * 12) + 'deg)'); } } else { for (i = 0; i < activeIndex; i++) { $(slides[i]).css('transform', 'rotateX(' + (30 + (activeIndex - i) * 12) + 'deg)'); } for (i = activeIndex + 1; i < slides.length; i++) { $(slides[i]).css('transform', ''); } } } $(slides[activeIndex]).css('transform', ''); } }); // 申请退款 Swiper refundReasonSwiper = new Swiper('.refund-box-main', { direction: 'vertical', slidesPerView: 5, centeredSlides: true, initialSlide: 0, onSlideChangeStart: function(refundReasonSwiper) {//eslint-disable-line let activeIndex = refundReasonSwiper.activeIndex, slides = refundReasonSwiper.slides, i = 0; if (slides.length !== 1) { if (activeIndex === 0) { for (i = 1; i < slides.length; i++) { $(slides[i]).css('transform', ''); } } else if (activeIndex === slides.length - 1) { for (i = 0; i < activeIndex; i++) { $(slides[i]).css('transform', 'rotateX(' + (30 + (activeIndex - i) * 12) + 'deg)'); } } else { for (i = 0; i < activeIndex; i++) { $(slides[i]).css('transform', 'rotateX(' + (30 + (activeIndex - i) * 12) + 'deg)'); } for (i = activeIndex + 1; i < slides.length; i++) { $(slides[i]).css('transform', ''); } } } $(slides[activeIndex]).css('transform', ''); } }); }); /** * 取消订单 */ $reaMask.find('.box-cmp').on('touchend', function() { let selSolid = reasonSwiper.slides[reasonSwiper.activeIndex], reason = $(selSolid).text(), reasonId = $(selSolid).data('reasonId'); $.ajax({ type: 'GET', url: '/home/cancelOrder', data: { id: orderId, reason: reason, reasonId: reasonId } }).then(function(res) { $reaMask.css('visibility', 'hidden'); if ($.type(res) !== 'object') { return; } if (res.message) { tip.show(res.message); } if (res.code === 200) { setTimeout(function() { window.location.href = '/home/orders'; }, 500); } }).fail(function() { tip.show('网络错误'); }); }); // 申请退款 $refundReaMask.find('.box-cmp').on('touchend', function() { let selSolid = refundReasonSwiper.slides[refundReasonSwiper.activeIndex], reason = $(selSolid).text(), reasonId = $(selSolid).data('reasonId'); $.ajax({ type: 'GET', url: '/home/refundApply', data: { id: orderId, reason: reason, reasonId: reasonId } }).then(function(res) { $refundReaMask.css('visibility', 'hidden'); if ($.type(res) !== 'object') { return; } if (res.code === 200) { dialog.showDialog({ dialogText: '您的退款申请已提交,请耐心等待退款', hasFooter: { leftBtnText: '返回', rightBtnText: '确定' } }, function() { window.location.href = '/home/orders'; }); return false; } if (res.message) { tip.show(res.message); } }).fail(function() { tip.show('网络错误'); }); }); $reaMask.on('touchend', function(event) { if (event.target.className !== 'reason-mask') { return false; } $reaMask.css('visibility', 'hidden'); event.stopPropagation(); }); // 申请退款 $refundReaMask.on('touchend', function(event) { if (event.target.className !== 'refund-reason-mask') { return false; } $refundReaMask.css('visibility', 'hidden'); event.stopPropagation(); }); // 弹出取消订单提示框 $sureClose.on('click', function() { dialog.showDialog({ dialogText: '取消订单后,本单享有的优惠可能会一并取消,确定申请吗?', hasFooter: { leftBtnText: '返回', rightBtnText: '确定' } }, function() { dialog.hideDialog(); $reaMask.css('visibility', 'visible'); }); }); // 弹出申请退款提示框 $sureRefund.on('click', function() { // 埋点 if (window._yas && window._yas.sendCustomInfo) { window._yas.sendCustomInfo({ op: 'YB_ORDER_REFUND_C', param: JSON.stringify({ C_ID: window._ChannelVary[window.cookie('_Channel')], ORD_NUM: orderId + '' }) }, true); } dialog.showDialog({ dialogText: '申请退款后,本单享有的优惠可能会一并取消,确定申请吗?', hasFooter: { leftBtnText: '返回', rightBtnText: '确定' } }, function() { dialog.hideDialog(); $refundReaMask.css('visibility', 'visible'); }); }); /** * 申请退换货组件事件处理 */ $refundChangeMask.on('click', function(elem) { let $target = $(elem.target); if ($target.hasClass('cancel')) { $refundChangeMask.fadeOut(); } }); function formatDate(objD) { let str, yy = objD.getYear(), MM = objD.getMonth() + 1, dd = objD.getDate(), hh = objD.getHours(), mm = objD.getMinutes(), ss = objD.getSeconds(); if (yy < 1900) { yy = yy + 1900; } if (MM < 10) { MM = '0' + MM; } if (dd < 10) { dd = '0' + dd; } if (hh < 10) { hh = '0' + hh; } if (mm < 10) { mm = '0' + mm; } if (ss < 10) { ss = '0' + ss; } str = yy + '-' + MM + '-' + dd + ' ' + hh + ':' + mm + ':' + ss; $('.createTime').text(str); } formatDate($createTime);