cart.js 4.33 KB
/**
 * 购物车Logic
 * @author: xuqi<qi.xu@yoho.cn>
 * @date: 2015/10/20
 */

var $ = require('jquery'),
    lazyLoad = require('yoho.lazyload'),
    Hammer = require('yoho.hammer');

var chosePanel = require('./chose-panel'),
    dialog = require('../me/dialog'),
    tip = require('../plugin/tip');

var $cartContent = $('.cart-content'),
    cartType = $('#cartType').val(),
    hasShowCartPresellTip = false;

var navHammer,
    advanceBuyHammer,
    freebieHammer;

var hasChecked = $('.cart-content:not(.hide) .icon-cb-checked').length > 0 ? true : false; //是否有选中商品

function shouldSelectGift() {
    var $freebie = $('.freebie');

    if ($freebie.length <= 0) {
        return false;
    }

    return true;
}

function shouldLowStocks() {
    var $lowStocks = $('.low-stocks'),
        result = false;

    if ($lowStocks.length <= 0) {
        return result;
    }

    $lowStocks.each(function(idx, item) {
        if ($(item).parent().parent().parent().siblings('.checkbox').hasClass('icon-cb-checked')) {
            result = true;
            return false;
        }
    });

    return result;
}

function showChooseGifDialog() {
    dialog.showDialog({
        dialogText: '您还未选择赠品,是否去选择赠品',
        hasFooter: {
            leftBtnText: '我不要赠品',
            rightBtnText: '去选择'
        }
    }, function() {
        window.location.href = $('.freebie').find('a').attr('href');
    }, function() {
        window.location.href = '/cart/index/orderEnsure?cartType=' + cartType;
    });
}

require('./good');

lazyLoad($('img.lazy'));

if (typeof window.cookie === 'function' && 'y' === window.cookie('_hasShowCartPresellTip')) {
    $('#presell-tip').removeClass('show').addClass('hide');
    hasShowCartPresellTip = true;
} else {
    $('#presell-tip').removeClass('hide').addClass('show');
}

if ('advance' === cartType) {
    $cartContent.toggleClass('hide');
    $('#common-cart-nav').removeClass('active');
    $('#presell-cart-nav').addClass('active');
}

if ($('.cart-nav').length > 0) {
    navHammer = new Hammer(document.getElementsByClassName('cart-nav')[0]);
    navHammer.on('tap', function(e) {
        var $this = $(e.target).closest('li');

        if ($this.hasClass('active')) {
            return;
        }

        if (cartType === 'ordinary') {
            cartType = 'advance';
            $('#cartType').val('advance');
        } else {
            cartType = 'ordinary';
            $('#cartType').val('ordinary');
        }

        $this.siblings('.active').removeClass('active');
        $this.addClass('active');

        //切换普通商品和预售商品购物车显示
        $cartContent.toggleClass('hide');

        hasChecked = $('.cart-content:not(.hide) .icon-cb-checked').length > 0 ? true : false;

        //trigger lazyload
        $(window).trigger('scroll');
    });

    if (!hasShowCartPresellTip) {
        setTimeout(function() {
            $('#presell-tip').removeClass('show').addClass('hide');
            window.setCookie('_hasShowCartPresellTip', 'y');
        }, 3000);
    }
}

if ($('.advance-buy').length > 0) {
    advanceBuyHammer = new Hammer(document.getElementsByClassName('advance-buy')[0]);
    advanceBuyHammer.on('tap', function(e) {
        window.location.href = '/cart/index/advanceBuy?cartType=' + cartType;
    });
}

if ($('.freebie').length > 0) {
    freebieHammer = new Hammer(document.getElementsByClassName('freebie')[0]);
    freebieHammer.on('tap', function(e) {
        window.location.href = '/cart/index/gift?cartType=' + cartType;
    });
}

$('.btn-balance').on('touchend', function() {
    if (shouldSelectGift()) {
        showChooseGifDialog();
        return false;
    }
    if (shouldLowStocks()) {
        tip.show('库存不足无法结算');
        return false;
    }

    if (hasChecked) {
        window.location.href = '/cart/index/orderEnsure?cartType=' + cartType;
    } else {
        tip.show('请先勾选商品');
    }
});

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

if ($('.shopping-cart-good').length <= 0) {
    require('../product/recommend-for-you');
}

function notAllowScroll() {
    var docH = $(document).height(),
        winH = $(window).height();

    if (docH - winH <= 10) {
        $('body').css('overflow', 'hidden');
    }
}

notAllowScroll();

//提前触发lazyload
$(window).scrollTop(1).scrollTop(0);