stepper.js 4.19 KB
/**
 * [购物车] 修改商品数量
 * @author: jinhu.dong<jinhu.dong@yoho.cn>
 * @date: 2016/07/11
 * @module shopping/stepper
 */

var Util = require('./util');
var $ = require('yoho-jquery');

var Stepper = {
    /*
     * 减少商品数量
     * @function [decrease]
     * @params { String } goodType 商品类型
     * @params { String } sku 商品sku
     * @params { String } currNum 商品当前购买数量
     */
    decrease: function(goodType, sku, currNum) {
        if (parseInt(currNum, 10) <= 1) {
            // return callback(1);
        } else {
            Util.ajax({
                url: '/shopping/cart/product/change_num',
                type: 'POST',
                data: {
                    changeType: 'DECREASE',
                    sku: sku,
                    goodType: goodType
                },
                success: function(res) {
                    Util.refreshCart(res, function() {
                        Stepper.init();
                    });
                }
            });
        }

    },

    /*
     * 增加商品数量
     * @function [increase]
     * @params { String } goodType 商品类型
     * @params { String } sku 商品sku
     */
    increase: function(goodType, sku) {
        Util.ajax({
            url: '/shopping/cart/product/change_num',
            type: 'POST',
            data: {
                changeType: 'INCREASE',
                sku: sku,
                goodType: goodType
            },
            success: function(res) {
                Util.refreshCart(res, function() {
                    Stepper.init();
                });
            }
        });
    },

    /*
     * 初始化
     * @function [init]
     */
    init: function() {
        var _this = this,
            $target,
            sku,
            goodType;

        var steppers = $('.stepper'),
            $input,
            currNum,
            minus,
            plus;

        // 数量为1的不能再减少
        steppers.find('input').each(function() {
            $input = $(this);
            if ($(this).val() === '1') {
                $input.parent().prev().addClass('disable');
            }
        });

        // 减少
        steppers.on('click', '.minus', function() {
            $target = $(this);
            $input = $target.next().find('input');
            currNum = $input.val();
            plus = $input.parent().next();

            if (!$target.hasClass('disable') && !$target.parents('.cart-pro-list').hasClass('invalid-pros')) {
                sku = $.parseJSON($target.parents('ul').children().first().attr('data-product_info')).product_sku;
                goodType = $target.parent().attr('data-producttype');
                _this.decrease(goodType, sku, currNum, function(num, changed) {
                    if (num === 1) {
                        $input.val(1);
                        $target.addClass('disable');
                    } else {
                        $input.val(num);
                    }

                    // 如果plus被灰化了
                    if (changed && plus.hasClass('disable')) {
                        plus.removeClass('disable');
                    }
                });
            }
        });

        // 增加
        steppers.on('click', '.plus', function() {
            $target = $(this);
            $input = $target.prev().find('input');
            currNum = $input.val();
            minus = $input.parent().prev();

            if (!$target.hasClass('disable') && !$target.parents('.cart-pro-list').hasClass('invalid-pros')) {
                sku = $.parseJSON($target.parents('ul').children().first().attr('data-product_info')).product_sku;
                goodType = $target.parent().attr('data-producttype');
                _this.increase(goodType, sku, currNum, function(num, changed, overflow) {
                    if (overflow) {
                        $target.addClass('disable');
                    }
                    $input.val(num);

                    // 如果minus被灰化了
                    if (changed && minus.hasClass('disable')) {
                        minus.removeClass('disable');
                    }
                });
            }
        });
    }
};

module.exports = Stepper;