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

var Util = require('./util');

var Stepper = {
    // 减少商品数量
    decrease: function(productId, currNum, callback) {
        if (parseInt(currNum, 10) <= 1) {
            return callback(1);
        } else {
            Util.ajax({
                url: '/shopping/cart/product/' + productId + '/change_num',
                type: 'POST',
                data: {
                    changeType: 'DECREASE',
                    changeTo: parseInt(currNum, 10) - 1
                },
                success: function(res) {
                    if (res.code === '0') {
                        return callback(res.num, res.changed);
                    }
                }
            });
        }

    },

    // 增加商品数量
    increase: function(productId, currNum, callback) {
        Util.ajax({
            url: '/shopping/cart/product/' + productId + '/change_num',
            type: 'POST',
            data: {
                changeType: 'INCREASE',
                changeTo: parseInt(currNum, 10) + 1
            },
            success: function(res) {
                if (res.code === '0') {
                    return callback(res.num, res.changed);
                } else {
                    return callback(res.num, res.changed, res.code === '1000');
                }

            }
        });
    },

    init: function() {
        var _this = this,
            $target,
            productId;

        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')) {
                productId = $target.parent().attr('data-productId');
                _this.decrease(productId, 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')) {
                productId = $target.parent().attr('data-productId');
                _this.increase(productId, 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;