save.js 8.58 KB
/**
 * @description: 订单保存
 * @time: 2015/12/21
 */

var $ = require('yoho.jquery');

var address = require('./address');

var Order = {
    /*业务数据(人民币)*/
    Data: {
        product: 0,//商品价格
        activity: 0,//活动
        carriage: 0,//邮费
        juan: 0,//优惠卷
        yohocoin: 0//YOHO币
    },
    /*view 交互*/
    UI: {
        e: {
            $pan: $('.pan'),
            $jc: $('#juancode'),
            $bp: $('#biprice'),
            $statistics: $('li', '.play-total'),
            $tobi: $('p em', '.play-bi-pan .play-pan'),
            $cancel: $('.cancel', '.btn-group'),
            $total: $('em', '.to-play'),
            $tbody: $('table tbody', '.pay-wapper'),

            //请填写并核对一下信息
            $orderSelectionSave: $('.address-list h2 span'),
            $addAddress: $('.add-address'),
            $addressManage: $('.address-manage'),
            $spanPayTypeLegend: $('span.pay-type-legend'),
            $supportType: $('.support-type'),
            $existAddressList: $('.exist-address-list').find('li'),
            $payTimeModify: $('.pay-time-modify'),
            $switchPayModify: $('.switch-pay-modify')
        },
        init: function() {
            var e = this.e,
            d = Order.Data,
            c = Order.Common;

            /*初始化产品价格*/
            e.$tbody.find('tr').each(function(index) {
                var td = $(this).find('td');
                var len = e.$tbody.find('tr').length;
                var subtotal = parseFloat(td.eq(1).html()) * parseInt(td.eq(3).html());

                td.eq(4).html(c.strFixed(subtotal));
                d.product += subtotal;
                if (!index) {
                    td.last().attr('rowspan', len);
                } else {
                    td.last().remove();
                }
                if (index === len - 1) {
                    e.$tbody.find('tr').eq(0).find('td').last().html('<strong>' + c.strFixed(d.product) + '</strong>');
                }
            });

            /*初始化价格*/
            this.render();

            /*点击pan dt 打开dd*/
            e.$pan.find('dt').click(function() {
                var pan = $(this).parent('dl.pan');

                if (pan.find('dd').is(':hidden')) {
                    c.winShow(pan);
                } else {
                    c.winHide(pan);
                }

            });

            /*使用优惠卷支付 下面的文本框*/
            e.$jc.on('focus change', function(event) {
                var radio = $(this).prev('label').prev(':radio');

                if (event.type === 'focus') {
                    radio.attr('checked', true);
                } else {
                    radio.val($(this).val());
                }

            });

            /*使用YOHO币支付*/
            e.$bp.data('tobi', e.$tobi.html());
            e.$bp.on('keyup change', function() {
                var bi = c.enterNUM($(this).val(), $(this).data('tobi'));

                $(this).val(bi);
            });

            /*取消关闭小窗口*/
            e.$cancel.click(function() {
                var pan = $(this).parents('.pan');

                c.winHide(pan);
            });

            e.$statistics.slice(3, 5).find('a').click(function() {
                var pan = $('.' + $(this).attr('to'));

                c.winShow(pan);
            });


            //请填写并核对一下信息
            e.$orderSelectionSave.click(function() {

                if (!$(this).data('expand')) {
                    $('.address-list-inner').addClass('hide');

                    $(this).data('expand', 'expand').text('[修改]');

                } else {
                    $('.address-list-inner').removeClass('hide');

                    $(this).removeData('expand').text('[不保存并关闭]');
                }

            });

            //展开新地址填写表单
            e.$addAddress.click(function() {

                if (e.$addressManage.hasClass('hide')) {

                    e.$addressManage.removeClass('hide');
                } else {
                    return;
                }

            });

            e.$spanPayTypeLegend.click(function() {
                $(this).toggleClass('active');

                e.$supportType.toggleClass('hide');
            });

            e.$existAddressList.click(function(event) {
                e.$existAddressList.removeClass('active');
                $(this).addClass('active');

                if ($(this).hasClass('use-new-address')) {
                    e.$addAddress.attr('checked', true);// 必须在trigger前
                    e.$addAddress.trigger('click');
                }

                event.stopPropagation();
            });

            e.$switchPayModify.click(function() {
                e.$payTimeModify.toggleClass('hide');
            });
        },

        //渲染价格明细
        render: function() {
            var e = this.e,
            d = Order.Data,
            c = Order.Common;
            var i = 0;

            e.$total.html('0.00');
            e.$statistics.find('em').html('0.00');
            e.$statistics.slice(3, 5).hide();

            $.each(d, function(key) {
                if (d.hasOwnProperty(key)) {
                    if (d[key]) {
                        e.$statistics.eq(i).show().find('em').html(c.strFixed(d[key]));
                    }
                }
                i++;
            });
            e.$total.html(c.strFixed(c.calucate()));

        }
    },
    /*公共方法*/
    Common: {
        enterNUM: function(str1, str2) {
            str1 = str1.replace(/[^\d]/g, '');
            if (str1 && str2) {
                str1 = parseInt(str1);
                str2 = parseInt(str2);
                if (str1 > str2) {
                    str1 = str2;
                }
            }
            return str1;
        },
        calucate: function() {
            var p = Order.Data;

            $.each(Order.Data, function(key, index) {
                p[key] = parseFloat(Order.Data[key]);
            });
            return p.product - p.activity + p.carriage - p.juan - p.yohocoin;
        },
        winShow: function(pan) {
            pan.find('dt').show();
            pan.find('dd').show();
            if (pan.attr('class').match(/(-bi-)|(-juan-)/g)) {
                pan.find('dt').hide();
            }
        },
        winHide: function(pan) {
            pan.find('dt').show();
            pan.find('dd').hide();
        },
        strFixed: function(str) {
            return parseFloat(str).toFixed(2);
        }
    },
    /*业务逻辑*/
    Bll: {
        e: {
            $juanok: $('#juansubmit'),
            $juantip: $('.errtip', '.play-juan-pan'),
            $biok: $('#bisubmit')
        },
        init: function() {
            var e = this.e,
                d = Order.Data,
                c = Order.Common,
                u = Order.UI;
            var options;

            /*点击 优惠卷支付 确认按钮*/
            e.$juanok.click(function() {
                var code = $('input[name="juangroup"]:checked').val();
                var pan = $(this).parents('.pan');

                if (code) {
                    options = {
                        url: '/Order/save/priceByCode',
                        type: 'post',
                        data: {
                            code: code
                        },
                        success: function(data) {
                            if (data.code === 200) {
                                if (data.price) {
                                    d.juan = data.price;
                                    Order.UI.render();
                                    c.winHide(pan);
                                    return;
                                }
                                u.render();
                            }
                            e.$juantip.html(data.msg);
                        },
                        error: function() {
                            e.$juantip.html('网络出现错误~');
                        }
                    };

                    $.ajax(options);
                }
            });
            /*点击 YOHO币支付 确认按钮*/
            e.$biok.click(function() {
                var pan = $(this).parents('.pan');

                d.yohocoin = parseFloat(u.e.$bp.val()) / 100;
                u.render();
                c.winHide(pan);
                return;
            });
        }
    }
};

Order.Data.activity = 0;
Order.Data.carriage = 0;

Order.UI.init();
Order.Bll.init();


address.newAddress();
address.modifyAddress();
address.saveAddress();