cart.js 7.59 KB
/**
 * 购物车 controller
 * @author: jinhu.dong<jinhu.dong@yoho.cn>
 * @date: 2016/07/04
 */

'use strict';

const cartModel = require('../models/cart');
const _ = require('lodash');

exports.index = (req, res) => {
    const shoppingKey = req.cookies._SPK || null;
    const uid = req.user.uid || null;

    cartModel.getCartData(shoppingKey, uid).then((result) => {
        // console.log('Cart current Data:', JSON.stringify(result, '', 4))
        if (result.code === 200) {
            res.display('cart', _.merge({
                module: 'shopping',
                page: 'cart',
                bcNavFocus: 1,
                defaultHeader: false
            }, {
                helpers: require('../helpers')
            }, cartModel.filterCartData(result, uid)));
        } else {
            // code 500
            res.send(result);
        }
    }).catch((err) => {
        res.send(err);
    });
};


// 修改数量
exports.changeProductNum = (req, res) => {
    const changeType = req.body.changeType;

    // const changeTo = req.body.changeTo;
    const uid = req.user.uid;
    const shoppingKey = req.cookies._SPK;
    const sku = req.body.sku;
    const goodTpye = req.body.goodType;

    if (changeType === 'INCREASE') {
        cartModel.modifyProductNum({
            increaseNum: 1, // 默认是1
            uid,
            shoppingKey,
            sku,
            goodTpye
        }).then(result => {
            console.log('changeProductNum-INCREASE-result:', result);
            if (result.code === 200) {
                cartModel.getCartData(shoppingKey, uid).then(cartData => {
                    res.json(_.merge(
                        cartModel.filterCartData(cartData, uid),
                        {code: cartData.code, message: result.message})
                    );
                });
            } else {
                res.json(result);
            }
        });

    } else if (changeType === 'DECREASE') {
        cartModel.modifyProductNum({
            decreaseNum: 1, // 默认是1
            uid,
            shoppingKey,
            sku,
            goodTpye
        }).then(result => {
            console.log('changeProductNum-DECREASE-result:', JSON.stringify(result));
            if (result.code === 200) {
                cartModel.getCartData(shoppingKey, uid).then(cartData => {
                    res.json(_.merge(
                        cartModel.filterCartData(cartData, uid),
                        {code: cartData.code, message: result.message})
                    );
                });
            } else {
                res.json(result);
            }
        });
    }
};

// 删除商品
exports.removeProduct = (req, res) => {
    const params = {};
    const uid = req.user.uid;
    const shoppingKey = req.cookies._SPK;
    const productSkuList = req.body.skuList;

    if (uid) {
        _.merge(params, {uid});
    }

    if (shoppingKey) {
        _.merge(params, {shopping_key: shoppingKey});
    }

    if (productSkuList) {
        _.merge(params, {product_sku_list: productSkuList});
    }

    console.log('remove---params:', params);

    cartModel.removeGoods(params).then(result => {
        console.log('remove-result:', result);
        res.json(_.merge(cartModel.filterCartData(result, uid), {code: result.code, message: result.message}));
    });
};

// 收藏商品
exports.sendToFavorite = (req, res) => {
    const params = {};
    const uid = req.user.uid;
    const productSkuList = req.body.skuList;

    if (uid) {
        _.merge(params, {uid});
    }

    if (productSkuList) {
        _.merge(params, {product_sku_list: productSkuList});
    }

    console.log('transferToFavorite---params:', params);

    cartModel.transferToFavorite(params).then(result => {
        console.log('transferToFavorite-result:', result);
        res.json(_.merge(cartModel.filterCartData(result, uid), {code: result.code, message: result.message}));
    });
};

// 编辑商品颜色和尺寸
exports.editProduct = (req, res) => {
    res.json({
        code: '0',
        defaultColor: '蓝',
        defaultSize: 'M',
        defaultImg: 'http://img10.static.yhbimg.com/goodsimg/2015/10/21/02/0128dc014524ccf208b4f6f7760c9b9cf2.jpg?imageMogr2/thumbnail/{width}x{height}/extent/{width}x{height}/background/d2hpdGU=/position/center/quality/80',
        colors: [{
            color: '蓝',
            rgb: '#1b3c78',
            pic: 'http://img10.static.yhbimg.com/goodsimg/2015/10/21/02/0128dc014524ccf208b4f6f7760c9b9cf2.jpg?imageMogr2/thumbnail/{width}x{height}/extent/{width}x{height}/background/d2hpdGU=/position/center/quality/80'
        }, {
            color: '黑',
            rgb: '#000',
            pic: 'http://img12.static.yhbimg.com/goodsimg/2015/10/21/05/024f60a070ab61981c139684f147d41f17.jpg?imageMogr2/thumbnail/{width}x{height}/extent/{width}x{height}/background/d2hpdGU=/position/center/quality/80'
        }],
        sizes: ['S', 'M', 'L', 'XL', 'XXL', 'XXXL']
    });
};

// 添加商品到购物车
exports.addToCart = (req, res) => {
    const productSku = req.body.productSku;
    const buyNumber = req.body.buyNumber;

    cartModel.addToCart({
        productSku: productSku,
        buyNumber: buyNumber,
        shoppingKey: req.cookies._SPK || null,
        uid: req.user.uid
    }).then((result) => {
        res.cookie('_SPK', result.data.shopping_key, { maxAge: 1000 * 60 * 60 * 24 * 365, httpOnly: true, path: '/'});
        res.json(result);
    });
};

// 购物车商品选择与取消选择
exports.toggleSelectGoods = (req, res) => {
    const params = {};
    const uid = req.user.uid;
    const shoppingKey = req.cookies._SPK;

    // 商品sku列表
    // skuList:
    // [{"goods_type":"advance","buy_number":1,"selected":"Y","product_sku":"1006277","promotion_id":0}, {...}]
    // [{"goods_type":"ordinary","buy_number":1,"selected":"Y","product_sku":"1006277","promotion_id":0}, {...}]
    const productSkuList = req.body.skuList;

    if (uid) {
        _.merge(params, {uid});
    }

    if (shoppingKey) {
        _.merge(params, {shopping_key: shoppingKey});
    }

    if (productSkuList) {
        _.merge(params, {product_sku_list: productSkuList});
    }

    console.log('toggleSelectGoods---params:', params);

    cartModel.toggleSelectGoods(params).then(result => {
        res.json(_.merge(cartModel.filterCartData(result, uid), {code: result.code, message: result.message}));
    });
};


// 去结算检查库存
exports.checkStorage = (req, res) => {
    const shoppingKey = req.cookies._SPK || null;
    const uid = req.user.uid || null;

    cartModel.getCartData(shoppingKey, uid).then((result) => {
        // console.log('Cart current Data:', JSON.stringify(result, '', 4))
        res.json(_.merge(cartModel.filterCartData(result, uid), {code: result.code, message: result.message}));
    });
};

// 修改购物车商品颜色和尺寸
exports.modifyProduct = (req, res) => {
    const uid = req.user && req.user.uid;
    const shoppingKey = req.cookies._SPK;

    // swapData => [{"buy_number":"1","selected":"Y","new_product_sku":"735172","old_product_sku":"735171"}]
    const swapData = req.body.swapData;

    // console.log("swap data....", {swapData, shoppingKey, uid})

    cartModel.modifyProduct({swapData, shoppingKey, uid}).then((result) => {
        // console.log('swap result...:', JSON.stringify(result, '', 4))
        if (result.code === 200) {
            cartModel.getCartData(shoppingKey, uid).then(cartData => {
                res.json(_.merge(
                    cartModel.filterCartData(cartData, uid),
                    {code: cartData.code, message: result.message})
                );
            });
        } else {
            res.json(result);
        }
    });
};