list.js 8.77 KB
/**
 * 品类|品牌|店铺 controller
 * @author: wsl<shuiling.wang@yoho.cn>
 * @date: 2016/7/21
 */

'use strict';
const mRoot = '../models';
const headerModel = require('../../../doraemon/models/header');
const listModel = require(`${mRoot}/list`);
const _ = require('lodash');
const helpers = global.yoho.helpers;

/**
 * 店铺 - 基础模板
 */
const _baseShop = (req, res, shopInfo) => {

    listModel.getBaseShopData(req.query, shopInfo).then(result => {

        res.render('search/goods-list', {
            module: 'product',
            page: 'search-list',
            pageHeader: headerModel.setNav({
                navTitle: result.shopName
            }),
            goodList: result,
            showDownloadApp: true,
            pageFooter: true,
            title: shopInfo.shopName + '|' + shopInfo.shopName + '潮流服装服饰-Yoho!Buy有货',
            keywords: shopInfo.shopName + ',' + shopInfo.shopName + '服装服饰,' + shopInfo.shopName + '潮流服装服饰',
            description: shopInfo.shopName + '|Yoho!Buy有货' + shopInfo.shopName + '潮流服饰官方授权店!100%品牌正品保证,支持货到付款。'
        });
    });

};

/**
 * 店铺首页
 * @return int
 */
const _shop = (req, res, shopId) => {
    let isApp = req.query.app_version || req.query.appVersion || false;
    let pageHeader = {};
    let uid = 0;

    if (!isApp) {
        pageHeader = {
            pageHeader: _.assign({
                shopPage: {
                    text: '分类',
                    url: helpers.urlFormat('/product/index/category', {
                        shop_id: shopId
                    })
                }
            }, headerModel.setNav({
                navTitle: false
            }))
        };
        uid = req.user.uid;
    } else {
        uid = req.query.uid;
        req.session.appUid = uid;
        res.cookie('appUid', uid, {
            domain: 'yohobuy.com',
            expires: new Date(Date.now() + 2592000000) // 有效期一年
        });
    }

    listModel.getShopData(req, shopId, uid, isApp).then(result => {
        if (result.goBrand) {

            /* 若店铺使用基础模板跳转基础模板 */
            _baseShop(req, res, result.goBrand);
        } else {
            result = _.assign(result, pageHeader);

            res.render('shop/index', {
                module: 'product',
                page: 'shop',
                shopIndex: result,
                shopHeadHide: true,
                gender: req.query.gender,
                channel: req.query.channel,
                pageHeader: headerModel.setNav({
                    navTitle: result.storeName
                }),
                title: result.storeName + '|' + result.storeName + '潮流服装服饰-Yoho!Buy有货',
                keywords: result.storeName + ',' + result.storeName + '服装服饰,' + result.storeName + '潮流服装服饰',
                description: result.storeName + '|Yoho!Buy有货' + result.storeName + '潮流服饰官方授权店!100%品牌正品保证,支持货到付款。'
            });
        }
    });
};

// 品类落地页
const category = (req, res) => {
    let params = Object.assign({}, req.query);

    res.render('search/goods-list', {
        module: 'product',
        page: 'search-list',
        pageHeader: headerModel.setNav({
            navTitle: req.query.title
        }),
        goodList: params,
        showDownloadApp: true,
        pageFooter: true
    });
};

/**
 * 品牌店铺的入口
 * @param req
 * @param res
 * @param next
 */
const brand = (req, res, next) => {
    let params = Object.assign({}, req.query);
    let domain = req.query.domain;
    let uid = req.user.uid;
    let brandId = 0;
    let brandLogo = {};
    let title = '';

    /* tar add 160909 如果有 shop_id 直接跳转 */
    if (req.query.shop_id) {
        _shop(req, res, req.query.shop_id);
        return;
    }

    if (!domain) {
        res.redirect('/?go=1');
    }

    listModel.getBrandLogoByDomain(domain).then((result) => {
        brandLogo = result;

        title = brandLogo.name;

        if (brandLogo && brandLogo.id) {
            brandId = brandLogo.id;
        }

        params = _.assign({
            brand: brandId
        }, params);

        // 无店铺:0--->品牌页 无单品店有多品店:1--->搜索页 有单品店:2--->店铺页面
        if (brandLogo.type === '2' && brandLogo.shopId) {
            _shop(req, res, brandLogo.shopId);
        } else { // 获取品牌店铺信息
            listModel.getBrandShops(brandId).then((brandShop) => {
                if (brandId === 0) {
                    params.query = domain;
                }

                // 从搜索页过来的,显示搜索框, 和进入品牌引导信息 或者品牌关联多店铺
                if (req.query.from === 'search' || brandShop.length > 0) {
                    params = {
                        brandWay: brandShop ? brandShop : brandLogo,
                        search: {
                            default: req.query.query,
                            url: helpers.urlFormat('', null, 'search')
                        }
                    };
                } else if (brandId !== 0) { // 品牌一览过来的展示品牌介绍和LOGO
                    return Promise.all([listModel.getBrandIntro(brandId, uid), listModel.getBrandBanner(brandId)]).then((resData) => { //eslint-disable-line
                        title = resData[0].title;
                        delete resData[0].title;

                        return _.assign({
                            banner: resData[1]
                        }, resData[0]);
                    });
                }
            }).then(brandHome => {
                params.brandHome = brandHome;

                res.render('search/goods-list', {
                    module: 'product',
                    page: 'search-list',
                    pageHeader: headerModel.setNav({
                        navTitle: title !== '' ? title : domain
                    }),
                    goodList: params,
                    showDownloadApp: true,
                    pageFooter: true,
                    title: title + '|' + title + '潮流服装服饰-Yoho!Buy有货',
                    keywords: title + ',' + title + '服装服饰,' + title + '潮流服装服饰',
                    description: title + '|Yoho!Buy有货' + title + '潮流服饰官方授权店!100%品牌正品保证,支持货到付款。'
                });
            });
        }
    }).catch(next);
};

/**
 * 店铺简介
 * @param req
 * @param res
 * @param next
 */
const shopIntro = (req, res, next) => {
    let shopId = req.query.shop_id;
    let appVersion = req.body.appVersion || false;
    let params = {};

    if (shopId) {
        listModel.getShopIntro(shopId).then((result) => {
            if (appVersion) {
                params = {
                    title: '店铺简介'
                };
            } else {
                params = {
                    pageHeader: headerModel.setNav({
                        navTitle: '店铺简介'
                    })
                };
            }

            res.render('shop/intro', _.assign(params, result));
        }).catch(next);
    } else {
        res.redirect('/?go=1');
    }
};

/**
 * 品牌[店铺]收藏/取消收藏
 * id 品牌ID
 * opt 操作标识("ok":表示收藏,"cancel":表示取消收藏)
 */
const favoriteBrand = (req, res, next) => {
    res.setHeader('Access-Control-Allow-Origin', req.protocol + '://' + req.headers.origin);
    res.setHeader('Access-Control-Allow-Credentials', 'true');

    let id = req.query.id;
    let uid = req.user.uid;
    let opt = req.query.opt || 'ok';
    let type = req.query.type || 'product';
    let appVersion = req.query.appVersion || false;
    let url = helpers.urlFormat('/signin.html') + '?refer=' + decodeURI(req.cookies.refer);

    if (appVersion === 'true') {
        uid = req.cookies.appUid;
        url = `${url}&openby:yohobuy={"action":"go.weblogin","params":{"jumpurl":{"url":${decodeURI(req.cookies.refer)},"param":{}},"requesturl":{"param":{},"url":""},"priority":"Y"}}`; // eslint-disable-line
    }

    if (_.isNumber(id)) {
        res.json({
            code: 401,
            message: '参数不正确',
            data: false
        });
        return false;
    }

    if (!uid) {
        res.json({
            code: 400,
            message: '未登录',
            data: url
        });
        return false;
    }

    if (opt !== 'ok') { // 取消收藏
        listModel.setFavoriteCancel(id, uid, type).then(result => {
            res.json(result);
        }).catch(next);
    } else {
        listModel.setFavorite(id, uid, type).then(result => {
            res.json(result);
        }).catch(next);
    }
};

module.exports = {
    category,
    brand,
    favoriteBrand,
    shopIntro
};