order-detail.js 5.02 KB
/**
 * 订单详情页
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/11/16
 */

var $ = require('jquery'),
    lazyLoad = require('yoho.lazyload'),
    Hammer = require('yoho.hammer'),
    dialog = require('./dialog'),
    tip = require('../plugin/tip'),
    orderId = $('#order-detail').data('id'),
    $countDownHours = $('.hours'),
    $countdownContainer = $('.count-down'),
    optHammer;

lazyLoad({
    try_again_css: 'order-failure'
});

function downCount(options) {
    var settings = new Date(options),
        targetDateFunction = function() {
            var orderDate = new Date(settings),

                //结束时间在下单时间加两小时
                utc = orderDate.getTime() + 7200000,
                newDate = new Date(utc);

            return newDate;
        },

        /**
         * Change client's local date to match offset timezone
         * @return {Object} Fixed Date object.
         */
        currentDateFunction = function() {

            // get client's current date
            var date = new Date();

            // turn date to utc
            var utc = date.getTime();

            // set new Date object
            return utc;
        };

    // Throw error if date is not set
    if (!settings) {
        $.error('Date is not defined.');
    }

    // Throw error if date is set incorectly
    if (!Date.parse(settings)) {
        $.error('Incorrect date format, it should look like this, 12/24/2012 12:00:00.');
    }

    /**
     * Main downCount function that calculates everything
     */
    function countdown() {
        var targetDate = targetDateFunction(),// set target date
            currentDate = currentDateFunction(), // get fixed current date
            difference = targetDate - currentDate,// difference of dates
            // basic math variables
            _second = 1000,
            _minute = _second * 60,
            _hour = _minute * 60,
            _day = _hour * 24,
            interval,
            days,
            hours,
            minutes,
            seconds;

        // if difference is negative than it's pass the target date
        if (difference < 0) {

            // stop timer
            clearInterval(interval);
            return;
        }

        // calculate dates
        days = Math.floor(difference / _day),
        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
        days = (String(days).length >= 2) ? days : '0' + days;
        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');
        $countDownHours.text('剩余' + hours + ':' + minutes + ':' + seconds);
    }

    // start
    setInterval(countdown, 1000);
}

downCount($countDownHours.text());

//订单删除
optHammer = new Hammer(document.getElementsByClassName('opt')[0]);
optHammer.on('tap', function(e) {
    var $cur = $(e.target);

    if ($cur.hasClass('btn-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('btn-cancel')) {

        //取消订单
        dialog.showDialog({
            dialogText: '确定取消订单吗?',
            hasFooter: {
                leftBtnText: '取消',
                rightBtnText: '确定'
            }
        }, function() {
            $.ajax({
                type: 'GET',
                url: '/home/cancelOrder',
                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('网络错误');
            });
        });
    }
});