global.js 4.58 KB
'use strict';

const utils = '../../../utils';
const headerModel = require('../../../doraemon/models/header');
const model = require('../models/global');
const _ = require('lodash');
const listParamsProcess = require(`${utils}/list-params-process`);

/**
 * 旧路由 301 跳转
 */
const redirect = (req, res) => {
    let pathParamsUrl = listParamsProcess.generatePathUrl(req.query, 'list/global');

    return res.redirect(301, pathParamsUrl);
};

const _formatParams = (query) => {
    let finalParams = {};

    if (query.price) {
        finalParams.price = query.price;
    }

    if (query.color) {
        finalParams.color = query.color;
    }

    if (query.gender) {
        finalParams.gender = query.gender;
    }

    return finalParams;
};

const list = (req, res, next) => {
    let brand = req.query.brand;
    let sort = req.query.sort;
    let title = req.query.title;

    if (!brand && !sort) {
        return res.redirect('//m.yohobuy.com');
    }

    let param = {
        limit: 24,
        order: 's_t_desc',
        page: 1,
        uid: req.user.uid || 0
    };

    if (brand) {
        param.brand = brand;
    } else if (sort) {
        param.sort = sort;
    }

    let arrs = [model.list(_.assign(param, _formatParams(req.query)))];

    if (brand) {
        arrs.push(model.getBrand({
            brandId: brand,
            uid: req.user.uid || 0
        }));
    }

    Promise.all(arrs).then((result) => {
        let t = (result[1] || {}).brand_name || title;

        param.title = t;
        res.render('global/list', {
            title: `${t}| ${t}全球购 |正品保证, YOHO!BUY 有货`,
            keywords: `${t}${t}全球购,${t}正品`,
            description: `有货网${t}全球购销售${t}正品商品,全场质量保证,支持货到付款,想了解${t}价格、图片、评价等信息,就上YOHO!BUY 有货中国大型潮流商品购物网站!`, // eslint-disable-line
            module: 'product',
            page: 'global-list',
            pageHeader: headerModel.setNav({
                navTitle: t
            }),
            list: result[0].list,
            filter: result[0].filter,
            pageFooter: true,
            localCss: true,
            appPath: `yohobuy://yohobuy.com/goapp?openby:yohobuy={"action":"go.globalpurchase","params":${JSON.stringify(param)}}`
        });
    }).catch(next);
};

const search = (req, res, next) => {
    let query = req.query;

    if (query.type === 'new') {
        query.order = 's_t_desc';
    } else if (query.type === 'price') {
        query.order = query.order === '1' ? 's_p_asc' : 's_p_desc';
    }

    model.list(query).then((result) => {
        res.render('global/search', {
            list: result.list,
            layout: false
        });
    }).catch(next);
};

const detail = (req, res, next) => {
    let skn = req.params[0];
    let params = {
        product_skn: skn,
        uid: req.user.uid || 0
    };

    model.detail(params).then((result) => {
        let appParams = {
            skn: skn
        };
        let appPath = `yohobuy://yohobuy.com/goapp?openby:yohobuy={"action":"go.globalpurchase","params":${JSON.stringify(appParams)}}`;

        res.render('global/detail', {
            title: (_.get(result, 'brand_info.brand_name', '') ? '【' + result.brand_info.brand_name + '】' : '') +
                _.get(result, 'product_name', '') + '|YOHO!BUY 有货',
            keywords: _.get(result, 'brand_info.brand_name', '') + ',' + _.get(result, 'brand_info.brand_name', '') +
                '价格,' + _.get(result, 'brand_info.brand_name', '') + '图片,',
            description: _.get(result, 'product_name', '') + ' 有货网仅售' + _.get(result, 'sales_price', '') + '元,购买' +
                    _.get(result, 'brand_info.brand_name', '') + ',了解' + _.get(result, 'brand_info.brand_name', '') +
                    '商品信息就上有货网!',
            module: 'product',
            page: 'global-detail',
            pageHeader: headerModel.setNav({
                navTitle: '商品详情'
            }),
            result: result,
            cartUrl: '//m.yohobuy.com/cart/index/index',
            pageFooter: true,
            localCss: true,
            appPath: appPath
        });
    }).catch(next);
};

const gethtml = (req, res, next) => {
    let skn = req.query.skn;

    if (!skn) {
        return next();
    }

    let params = {
        product_skn: skn,
        uid: req.user.uid || 0
    };

    model.gethtml(params).then((html) => {
        res.send(html);
    }).catch(next);
};

module.exports = {
    list,
    search,
    detail,
    gethtml,
    redirect
};