good.js 7.61 KB
/**
 * 购物车商品
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/10/20
 */

var $ = require('jquery'),
    ellipsis = require('mlellipsis'),
    chosePanel = require('../cart/chose-panel'),
    lazyLoad = require('yoho.lazyload');

var dialog = require('../me/dialog'),
    tip = require('../plugin/tip');

var $names,
    $selectAllBtn = $('.balance .iconfont');

var requesting = false;

ellipsis.init();

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


$names = $('.name');
if ($names.length > 0) {
    $names[0].mlellipsis(2);
}

//获取当前购物车类型
function getCartType() {
    var $navItem = $('.cart-nav ').find('li'),
        type = 'ordinary';

    if ($navItem.eq(0).hasClass('active')) {
        type = 'ordinary';
    } else {
        type = 'advance';
    }

    return type;
}

//TIP:事件委托在.cart-goods,商品列表的容器统一需要有.cart-goods
$('.cart-goods').on('touchstart', '.checkbox', function() {
    var $this = $(this),
        $good = $this.closest('.shopping-cart-good'),
        id = $good.data('id');

    var goodsList = [],
        goodInfo = {},
        isSelected = true;

    if ($this.hasClass('icon-cb-checked')) {
        isSelected = true;
    } else {
        isSelected = false;
    }

    function GoodInfo(properties) {
        this.goods_type = properties.goods_type;
        this.buy_number = properties.buy_number;
        this.product_sku = properties.product_sku;
        this.selected = properties.selected;
    }

    goodInfo.goods_type = getCartType();
    goodInfo.selected = isSelected ? 'N' : 'Y';
    goodInfo.product_sku = id;
    goodInfo.buy_number = $good.find('.count').eq(0).text().trim().replace('×', '');

    goodsList.push(new GoodInfo(goodInfo));


    $.ajax({
        type: 'post',
        url: 'select',
        data: {
            skuList: JSON.stringify(goodsList)
        }
    }).then(function(data) {
        if (data.code === 200) {
            if ($this.hasClass('icon-cb-checked')) {
                $this.removeClass('icon-cb-checked').addClass('icon-checkbox');
            } else {
                $this.removeClass('icon-checkbox').addClass('icon-cb-checked');
            }
            $.ajax({
                type: 'GET',
                url: 'getCartData',
                data: {
                    id: id
                },
                success: function(data) {
                    if (data) {
                        $('#good-totalprice').html('¥' + data.commonCart.price);
                        $('#good-activityPrice').html('¥' + data.commonCart.activityPrice);
                        $('#good-total').html('总计:¥' + data.commonCart.sumPrice + ' (' + data.commonCart.count + '件)');
                        if (data.commonCart.isAllSelected) {
                            $('.balance span').removeClass('icon-checkbox').addClass('icon-cb-checked');
                        } else {
                            $('.balance span').removeClass('icon-cb-checked').addClass('icon-checkbox');
                        }
                    }
                },
                error: function() {
                    tip.show('网络错误');
                }
            });
        } else if (data.code === 400) {
            tip.show('网络错误');
        }
    }).fail(function() {
        tip.show('网络错误');
    });
}).on('touchstart', '.icon-edit', function() {

    //var $this = $(this);
    //
    //var $cartgood = $this.closest('.shopping-cart-good');
    //
    ////var id = $this.closest('.shopping-cart-good').data('id');
    //
    //var $viewGood = $cartgood.find('.deps');
    //    $editGoot = $cartgood.find('.calculate-num');
    //
    //if ($viewGood.hasClass('show')) {
    //    $viewGood.removeClass('show').addClass('hide');
    //    $editGoot.removeClass('hide').addClass('show');
    //} else {
    //    $viewGood.removeClass('hide').addClass('show');
    //    $editGoot.removeClass('show').addClass('hide');
    //}


}).on('touchstart', '.icon-del', function(e) {
    var $this = $(this);

    e.stopPropagation();

    dialog.showDialog({
        dialogText: '您确定要从购物车中删除吗?',
        hasFooter: {
            leftBtnText: '取消',
            rightBtnText: '确定'
        }
    }, function() {
        var id = $this.closest('.shopping-cart-good').data('id');

        $.ajax({
            method: 'post',
            url: '/cart/index/del',
            data: {
                id: id
            }
        }).then(function(data) {
            if (data.code === 200) {
                dialog.showDialog({
                    dialogText: '删除成功',
                    autoHide: true,
                    fast: true
                });
                history.go(0);
            }
        }).fail(function() {
            dialog.showDialog({
                autoHide: true,
                dialogText: '网络错误~'
            });
        });
    });

});

function requestUpdateAllGoodsCheckStatus(theGoods, successHandeler) {
    if (requesting) {
        return;
    }
    requesting = true;
    $.ajax({
        url: 'select',
        type: 'post',
        data: {
            skuList: JSON.stringify(theGoods)
        },
        success: function(res) {
            if (res.code === 200) {
                successHandeler();
            } else {
                tip.show(res.message);
            }
        },
        error: function(err) {
            tip.show('网络异常');
        },
        complete: function() {
            requesting = false;
        }
    });
}

function didUpdateAllGoodsCheckStatus() {
    var $checkedBoxs = $('.shopping-cart-good .icon-cb-checked'),
        $uncheckedBoxs = $('.shopping-cart-good .icon-checkbox');

    var shouldSelectAll;

    if ($selectAllBtn.hasClass('icon-cb-checked')) {
        $selectAllBtn.removeClass('icon-cb-checked').addClass('icon-checkbox');
        shouldSelectAll = true;
    } else {
        $selectAllBtn.removeClass('icon-checkbox').addClass('icon-cb-checked');
        shouldSelectAll = false;
    }

    if (!shouldSelectAll) {
        $uncheckedBoxs.each(function(idx, uncheckedBox) {
            $(uncheckedBox).removeClass('icon-checkbox').addClass('icon-cb-checked');
        });
    } else {
        $checkedBoxs.each(function(idx, checkedBox) {
            $(checkedBox).removeClass('icon-cb-checked').addClass('icon-checkbox');
        });
    }
}

function bottomCheckBoxHandeler(isSelected, type, handlerAfterTouch) {
    var goodInfo = {};
    var $goods = $('.cart-content:not(.hide) .shopping-cart-good');
    var $good = null;
    var goodsList = [];

    function GoodInfo(properties) {
        this.goods_type = properties.goods_type;
        this.buy_number = properties.buy_number;
        this.product_sku = properties.product_sku;
        this.selected = properties.selected;
    }

    goodInfo.goods_type = type;
    goodInfo.selected = isSelected ? 'Y' : 'N';

    $goods.each(function(idx, good) {
        $good = $(good);

        goodInfo.product_sku = $(good).data('id');
        goodInfo.buy_number = $good.find('.count').eq(0).text().trim().replace('×', '');

        goodsList.push(new GoodInfo(goodInfo));
    });

    requestUpdateAllGoodsCheckStatus(goodsList, handlerAfterTouch);
}



//是否要全选
function willBeSelected() {
    var isSelected = true;
    var $this = $(this);

    if ($this.hasClass('icon-cb-checked')) {
        isSelected = true;
    } else {
        isSelected = false;
    }

    return isSelected;
}

//全选按钮点击事件
$selectAllBtn.on('touchend', function() {
    bottomCheckBoxHandeler(willBeSelected(), getCartType(), didUpdateAllGoodsCheckStatus);
});

$('.down').on('touchend', function() {
    chosePanel.show();
});