cart.js 5.76 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.cookies.uid || null;

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

// 检查库存
exports.checkInventory = (req, res) => {
    let chkResult,
        invalidProIds = [],
        productId = req.query.productId,
        result = {};

    if (productId === 'ALL') {
        chkResult = false;
        invalidProIds.push('286143');
    } else {
        if (req.query.productId === '286143') {
            chkResult = false;
        } else {
            chkResult = true;
        }
    }

    if (invalidProIds.length) {
        _.merge(result, {
            invalidProIds: invalidProIds
        });
    }

    _.merge(result, {
        valid: chkResult
    });

    res.json(result);
};


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

    if (changeType === 'INCREASE') {
        // TODO
        if (changeTo === '4') {
            res.json({
                code: '1000',
                num: parseInt(changeTo, 10) - 1,
                changed: false
            });
        } else {
            res.json({
                code: '0',
                num: changeTo,
                changed: true
            });
        }
    } else if (changeType === 'DECREASE') {
        // TODO
        res.json({
            code: '0',
            num: changeTo,
            changed: true
        });
    }
};

// 删除商品
exports.removeProduct = (req, res) => {
    const params = {};
    const uid = req.cookies.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});
    }

    cartModel.removeGoods(params).then(result => {
        res.send(result);
    });
};

// 收藏商品
exports.sendToFavorite = (req, res) => {
    // TODO
    res.json({
        code: '0'
    });
};

// 编辑商品颜色和尺寸
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.cookies.uid
    }).then((result) => {
        res.json(result);
    });
};

// 购物车商品选择与取消选择
exports.toggleSelectGoods = (req, res) => {
    const params = {};
    const uid = req.cookies.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});
    }

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

// 购物车商品选择与取消选择
exports.modifyProductNum = (req, res) => {
    const uid = req.cookies.uid;
    const shoppingKey = req.cookies._SPK;
    const changeType = req.body.changeType;
    const changeNum = req.body.changeNum;
    const sku = req.body.sku;

    let params = {
        uid,
        shoppingKey,
        sku
    };

    if(changeType === 'INCREASE') {
        _.merge(params, {
            increaseNum: changeNum
        });
    } else if(changeType === 'DECREASE') {
        _.merge(params, {
            decreaseNum: changeNum
        });
    } else {
        // TODO
        // CHANGE
    }

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

}