sale.js 5.66 KB
/**
 * sale controller
 * @author: wsl<shuiling.wang@yoho.cn>
 * @date: 2016/5/17
 */

'use strict';
const mRoot = '../models';

// const cookie = require(`${library}/cookie`);
const headerModel = require('../../../doraemon/models/header');
const saleModel = require(`${mRoot}/sale`);

const helpers = global.yoho.helpers;

// const queryParam = {
//     brand: '0',
//     gender: '1,2,3',
//     sort: '0',
//     size: '0',
//     price: '0',
//     pD: '0.1,0.9'
// };

/**
 * 公共数据处理
 * @param  {[object]} req
 * @param  {[string]} title 标题
 * @param  {[string]} page js文件page名称
 * @return {[type]}
 */
const _processPublicData = (req, title, page) => {
    return {
        channel: req.yoho.channel,
        renderData: {
            module: 'product',
            page: page,
            title: title,
            saleNav: true,
            pageHeader: headerModel.setNav({
                navTitle: title,
                navBtn: false
            }),
            pageFooter: true
        }
    };
};

/**
 * 频道转换
 * 产品要求,SALE的导航显示 Boy,Girl 单数形式
 */
const channelHash = {
    boys: 'Boy',
    girls: 'Girl',
    kids: 'Kid',
    lifestyle: 'Lifestyle'
};

/**
 * sale 首页 资源位获取
 * @param  {[object]} req
 * @param  {[object]} res
 * @return {[type]}
 */
let index = (req, res, next) => {
    let params = _processPublicData(req, 'SALE', 'sale');

    if (['boys', 'girls', 'kids', 'lifestyle'].indexOf(req.yoho.channel) === -1) {
        return next();
    }

    saleModel.getSaleData(params.channel).then((result) => {
        Object.assign(params.renderData.pageHeader, {
            saleNav: {
                channel: channelHash[req.yoho.channel],
                list: [
                    {
                        title: 'Boy',
                        url: helpers.urlFormat('/product/sale', {channel: 'boys'})
                    }, {
                        title: 'Girl',
                        url: helpers.urlFormat('/product/sale', {channel: 'girls'})
                    }, {
                        title: 'Kid',
                        url: helpers.urlFormat('/product/sale', {channel: 'kids'})
                    }, {
                        title: 'Lifestyle',
                        url: helpers.urlFormat('/product/sale', {channel: 'lifestyle'})
                    }
                ]
            }
        });
        res.render('sale/index', Object.assign(params.renderData, {
            content: result,
            floorHeader: {
                title: {
                    title: '最新降价'
                }
            }
        }));
    }).catch(next);
};

/**
 * 断码区
 * @param  {[object]} req
 * @param  {[object]} res
 * @return {[type]}
 */
let breakingYards = (req, res, next) => {
    let params = _processPublicData(req, '断码区', 'break-code');

    saleModel.getBreakCodeData({
        yhChannel: params.channel
    }).then((result) => {
        res.render('sale/break-code', Object.assign(params.renderData, result));
    }).catch(next);
};

/**
 * 折扣专场列表
 * @param  {[object]} req
 * @param  {[object]} res
 * @return {[type]}
 */
let discount = (req, res, next) => {
    let params = _processPublicData(req, '折扣专场', 'discount');

    saleModel.getDiscountData(params.channel).then((result) => {
        res.render('sale/discount', Object.assign(params.renderData, result));
    }).catch(next);
};


/**
 * 折扣专场专题详情
 * @param  {[object]} req
 * @param  {[object]} res
 * @return {[type]}
 */
let discountDetail = (req, res, next) => {
    let id = req.query.id;
    let params = _processPublicData(req, '', 'discount-detail');

    saleModel.getDiscountDetailData(id, params.channel).then((result) => {
        params.renderData.pageHeader.navTitle = result.title;
        res.render('sale/discount-detail', Object.assign(params.renderData, result));
    }).catch(next);
};

/**
 * vip 会员专享
 * @param  {[object]} req
 * @param  {[object]} res
 * @return {[type]}
 */
let vip = (req, res, next) => {
    let params = _processPublicData(req, '会员专享', 'vip');

    saleModel.getVipData(params.channel).then((result) => {
        res.render('sale/vip', Object.assign(params.renderData, {
            content: result
        }));
    }).catch(next);
};

/**
 * 筛选
 * @param  {[object]} req
 * @param  {[object]} res
 * @return {[type]}
 */
let filter = (req, res, next) => {
    let params = Object.assign({}, req.query);

    saleModel.getFilterData(params).then((result) => {
        res.render('sale/filter', {
            layout: false,
            params: params,
            filter: result
        });
    }).catch(next);
};


/**
 * 商品搜索
 * @param  {[object]} req
 * @param  {[object]} res
 * @return {[type]}
 */
let search = (req, res, next) => {
    let params = Object.assign({}, req.query);

    // uid = 9239279
    let uid = req.user.uid || 0;

    saleModel.getSearchData(params, uid).then((result) => {
        let vipLevel = result[1].curLevel;
        let vipObj = {};

        if (req.query.saleType === '2') {
            vipObj = {
                saleVip: (req.query.saleType === '2' && (!uid || vipLevel === '0')),
                vipLevel: vipLevel,
                saleViplogin: vipLevel >= 1 ? true : false,
                vipPrice1: vipLevel === '1',
                vipPrice2: vipLevel === '2',
                vipPrice3: vipLevel === '3'
            };
        }

        res.render('sale/product', Object.assign({
            layout: false,
            params: params,
            goods: result[0]
        }, vipObj));
    }).catch(next);
};

module.exports = {
    index,
    breakingYards,
    discount,
    discountDetail,
    vip,
    filter,
    search
};