order-ensure.js 5.27 KB
/**
 * 订单确认
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/11/12
 */

var $ = require('jquery'),
    lazyLoad = require('yoho.lazyload'),
    Hammer = require('yoho.hammer'),
    Handlebars = require('yoho.handlebars'),
    tip = require('../plugin/tip'),
    orderInfo = require('./order-info').orderInfo;

var dispatchModeHammer,
    dispatchTimeHammer,
    $invoice = $('.invoice'),
    $price = $('.price-cal'),
    payType,
    priceTmpl = Handlebars.compile($('#tmpl-price').html());

lazyLoad();

function dispacthTapEvt(e) {
    var $cur = $(e.target).closest('li');

    if ($cur.length === 0 || $cur.hasClass('chosed')) {
        return;
    }

    $cur.siblings('li.chosed').removeClass('chosed');
    $cur.addClass('chosed');
}

dispatchModeHammer = new Hammer(document.getElementsByClassName('dispatch-mode')[0]);
dispatchModeHammer.on('tap', dispacthTapEvt);

dispatchTimeHammer = new Hammer(document.getElementsByClassName('dispatch-time')[0]);
dispatchTimeHammer.on('tap', dispacthTapEvt);

$('.checkbox').on('touchstart', function() {
    var $this = $(this);

    if ($this.hasClass('icon-cb-checked')) {
        $this.removeClass('icon-cb-checked').addClass('icon-checkbox');
        return;
    }
    if ($this.hasClass('icon-checkbox')) {
        $this.removeClass('icon-checkbox').addClass('icon-cb-checked');
    }
});

$('.invoice').on('touchend', '.checkbox', function() {
    var $this = $(this);

    if ($this.hasClass('icon-cb-checked')) {
        $('.invoice').addClass('focus');
    }
    if ($this.hasClass('icon-checkbox')) {
        $('.invoice').removeClass('focus');
    }
});

function orderCompute() {
    $.ajax({
        method: 'POST',
        url: '/shoppingCart/orderCompute',
        data: {
            cartType: orderInfo('cartType'),
            deliveryId: orderInfo('deliveryId'),
            paymentTypeId: orderInfo('paymentTypeId'),
            couponCode: orderInfo('couponCode'),
            yohoCoin: orderInfo('yohoCoin')
        }
    }).then(function(res) {
        var priceHtml;

        if (!res) {
            tip.show('网络出错');
        } else {
            priceHtml = priceTmpl({
                sumPrice: res.order_amount,
                salePrice: res.discount_amount,
                freight: res.promotion_formula_list[1].promotion_amount,
                yohoCoin: res.use_yoho_coin,
                price: res.last_order_amount
            });

            $price.html(priceHtml);
        }
    }).fail(function() {
        tip.show('网络出错');
    });
}

function submitOrder() {
    $.ajax({
        method: 'POST',
        url: '/shoppingCart/orderSub',
        data: {
            addressId: orderInfo('addressId'),
            cartType: orderInfo('cartType'),
            deliveryId: orderInfo('deliveryId') || 1,
            deliveryTimeId: orderInfo('deliveryTimeId') || 2,
            invoiceText: $invoice.find('[name="invoice-title"]').val() || orderInfo('invoiceText'),
            invoiceType: $invoice.find('.invoice-type').val() || orderInfo('invoiceType'),
            msg: $('#msg').find('input').val() || orderInfo('msg'),
            paymentTypeId: orderInfo('paymentTypeId'),
            paymentType: orderInfo('paymentType'), //支付方式
            couponCode: orderInfo('couponCode'),
            yohoCoin: orderInfo('yohoCoin')
        }
    }).then(function(res) {
        var url;

        if (!res) {
            tip.show('网络出错');
            return;
        }
        if (res.code === 200) {
            if (payType === 2) {

                // 货到付款的进入订单页面
                url = '/home/orderDetail?order_code=' + res.data.order_code;
            } else {
                url = '/home/pay?order_code=' + res.data.order_code;
            }
            window.location.href = url;
        } else {
            tip.show(res.messege || '网络出错');
        }
    }).fail(function() {
        tip.show('网络出错');
    });
}

// 界面点击,状态存 cookie
if (!orderInfo('addressId')) {
    orderInfo('addressId', $('.address-wrap').data('id'));
}

$('.dispatch-mode').on('touchend', 'li', function() {
    orderInfo('deliveryId', $(this).data('id'));
    orderCompute();
});

$('.dispatch-time').on('touchend', 'li', function() {
    orderInfo('deliveryTimeId', $(this).data('id'));
});

$('.coin').on('touchend', function() {
    var $this = $(this);

    if ($this.find('.checkbox').hasClass('icon-cb-checked')) {
        orderInfo('yohoCoin', $this.data('yoho-coin'));
        $this.find('.coin-check em').show();
    } else {
        orderInfo('yohoCoin', 0);
        $this.find('.coin-check em').hide();
    }
    orderCompute();
});

$invoice.on('touchend', function() {
    var $this = $(this);

    orderInfo('invoice', $this.find('.checkbox').hasClass('icon-cb-checked'));
});

$invoice.find('[name="invoice-title"]').on('blur', function() {
    orderInfo('invoiceText', $(this).val());
}).end().find('.invoice-type').on('change', function() {
    orderInfo('invoiceType', $(this).val());
});

$('#msg').find('input').on('blur', function() {
    orderInfo('msg', $(this).val());
});

$('.pay-mode').on('click', 'li', function() {
    var $this = $(this);

    orderInfo('paymentTypeId', $this.data('pay-id'));
    orderInfo('paymentType', $this.data('pay-type'));
    payType = $this.data('pay-type');
    submitOrder();
});