cart.js 5.88 KB
/**
 * [购物车] 购物袋
 * @author: jinhu.dong<jinhu.dong@yoho.cn>
 * @date: 2016/07/08
 * @module shopping/cart
 */

var Dialog = require('../plugins/dialog');
var _confirm = Dialog.Confirm;
var _alert = Dialog.Alert;
var Util = require('./util');
var hbs = require('yoho-handlebars');

var Cart = {
    /*
     * 添加到购物车
     * @function [addToCart]
     * @params { String } productSku 购买商品Sku码
     * @params { Number } buyNumber 购买商品数量
     * @params { Function } callback 购买结果回调
     */
    addToCart: function(params, callback) {
        Util.ajax({
            url: '/shopping/cart/add',
            type: 'POST',
            data: params,
            success: function(res) {
                callback(res);
            },
            fail: function() {
                // TODO
                console.log('add to cart error');
            }
        });
    },

    /*
     * 显示商品库存不足提示
     * @function [toggleNotEnough]
     * @params { Object } target 提示显示在目标DOM对象
     * @params { String } type 显示全选提示还是单个商品提示
     */
    toggleNotEnough: function(target, type) {
        var msg = '您勾选的商品库存不足',
            allKlass = '',
            tooltip;

        if (type === 'ALL') {
            msg = '您全选的商品中存在库存不足商品,已帮您自动取消勾选';
            allKlass = 'all';
        }

        tooltip = $('<div class="tooltip">' +
            '<div class="content ' + allKlass + '">' + msg + '</div>' +
            '<div class="indicator"></div>' +
          '</div>');

        tooltip.appendTo(target);

        setTimeout(function() {
            tooltip.remove();
        }, 2000);
    },

    /*
     * 全选
     * @function [checkAllPros]
     * @params {Array} invalidIds 失效商品ID
     */
    checkAllPros: function(invalidIds) {
        var proId,
            target;

        $('.toggle-chk-item').each(function() {
            target = $(this);
            proId = target.parent().attr('data-productId');
            if (invalidIds.indexOf(proId) === -1) {
                target.addClass('chk-group').next().val(proId);
            }
        });
    },

    /*
     * 取消全选
     * @function [unCheckAllPros]
     */
    unCheckAllPros: function() {
        var target;

        $('.toggle-chk-item').each(function() {
            target = $(this);
            target.next().val('');
        });
    },

    /*
     *  取消全选样式,选择商品数量没有达到
     *  @function [resetCheckAllStyle]
     */
    resetCheckAllStyle: function() {
        $('.chk-all').removeClass('chk-group');
    },

    /*
     *  单选每一个商品判断是否需要全选
     *  @function [toggleCheckAll]
     */
    toggleCheckAll: function() {

    },

    /*
     *  删除商品
     *  @function [removePro]
     *  @params { String } productId 商品ID
     */
    removePro: function(productId) {
        var dialog = new _confirm({
            content: '您确定要从购物车中删除该商品吗?',
            cb: function() {
                console.log('confirm:', productId);
                Util.ajax({
                    url: '/shopping/cart/product/' + productId,
                    type: 'DELETE',
                    success: function(res) {
                        if (res.code === '0') {
                            dialog.close();
                        }
                    },
                    fail: function() {
                        // TODO
                    }
                });
            }
        }).show();
    },

    // 移入收藏夹
    sendToFavorite: function(productId) {
        var dialog = new _confirm({
            content: '确定要将该商品从购物车中移入收藏吗?<br/>移入收藏后该商品将不在购物车中显示',
            cb: function() {
                console.log('confirm:', productId);
                Util.ajax({
                    url: '/shopping/cart/product/' + productId + '/send_to_favorite',
                    type: 'POST',
                    success: function(res) {
                        if (res.code === '0') {
                            dialog.close();
                        }
                    },
                    fail: function() {
                        // TODO
                    }
                });
            }
        }).show();
    },

    // 编辑商品的颜色和尺寸
    editColorOrSize: function(productId) {
        var template;

        Util.ajax({
            url: '/shopping/cart/product/' + productId + '/edit',
            success: function(res) {
                if (res.code === '0') {

                    hbs.registerHelper('isEqual', function(v1, v2, options) {
                        if (v1 === v2) {
                            return options.fn(this);
                        }
                        return options.inverse(this);
                    });

                    hbs.registerHelper('image', function(url, width, height, mode) {
                        mode = parseInt(mode, 10) ? mode : 2;
                        url = url || '';
                        return url.replace(/{width}/g, width).replace(/{height}/g, height).replace(/{mode}/g, mode);
                    });

                    template = hbs.compile($('#edit-color-size-tpl').html());

                    $('#edit_' + productId).append(
                        template({
                            colors: res.colors,
                            sizes: res.sizes,
                            defaultColor: res.defaultColor,
                            defaultSize: res.defaultSize,
                            defaultImg: res.defaultImg
                        })
                    );
                }
            },
            fail: function() {
                _alert('此商品无法编辑颜色和尺寸').show();
            }
        });

    }
};

module.exports = Cart;