header.js 4 KB
/**
 * header model
 * @author: 赵彪<bill.zhao@yoho.cn>
 * @date: 2016/05/03
 */

'use strict';

const _ = require('lodash');

const ServiceAPI = require(`${global.library}/api`).ServiceAPI;
const sign = require(`${global.library}/sign`);

const serviceApi = new ServiceAPI();

/**
 * 获取公共配置
 * @param undefined
 * @return {Object} 配置对象
 */
const commonConfig = () => ({
    title: 'home'
});

const getChannelIndex = (type) => {
    const channelMap = {
        boys: 0,
        girls: 1,
        kids: 2,
        lifestyle: 3
    };

    const index = channelMap[type];

    return typeof index === 'undefined' ? 0 : index;
};

/**
 * 获取菜单
 * @param undefined
 * @return {array} 菜单数组
 */
const getMenuData = () => (
    [
        {
            link: 'http://www.yoho.cn',
            cn: '集团官网',
            en: 'YOHO!'
        },
        {
            link: 'http://www.yohoboys.com',
            cn: '男生潮流',
            en: 'YOHO!BOYS'
        },
        {
            link: 'http://www.yohogirls.com',
            cn: '女生潮流',
            en: 'YOHO!GIRLS'
        },
        {
            link: 'http://www.yohoshow.com',
            cn: '物趣分享',
            en: 'YOHO!SHOW'
        },
        {
            link: 'http://www.yohood.cn',
            cn: '潮流嘉年华',
            en: 'YO\'HOOD'
        }
    ]
);

/**
 * 获取导航
 * @param undefined
 * @return {array} 导航数组
 */
const getNavBar = (data) => {
    let navBars = [];

    _.forEach(data, function(item) {
        let obj = {};

        obj.link = item.sort_url;
        obj.cn = item.sort_name;
        obj.en = item.sort_name_en;

        navBars.push(obj);
    });

    return navBars;
};


/**
 * 获取品牌名字
 * @param undefined
 * @return {array} 品牌数组
 */
const getBrandItems = (data) => {
    let brandItems = [];

    _.forEach(data, function(item) {
        let obj = {};

        obj.link = item.sort_url;
        obj.hot = item.is_hot === 'Y' ? true : false;
        obj.brandName = item.sort_name;

        brandItems.push(obj);
    });


    return brandItems;
};

/**
 * 获取三级菜单
 * @param undefined
 * @return {array} 三级菜单数组
 */
const getThirdNav = (data) => {
    let thirdNav = [];

    _.forEach(data, function(item) {
        let obj = {};

        obj.link = item.sort_url;
        obj.title = item.sort_name;
        obj.imgCode = item.content_code;

        if (item.sub) {
            obj.brandItems = getBrandItems(item.sub);
        }

        thirdNav.push(obj);
    });


    return thirdNav;
};

/**
 * 获取子菜单
 * @param undefined
 * @return {array} 子菜单数组
 */
const getSubNav = (data, type) => {
    let subNav = [];

    _.forEach(data[getChannelIndex(type)].sub, function(item) {
        let obj = {};

        obj.link = item.sort_url;
        obj.name = item.sort_name;
        obj.isHot = item.is_hot === 'Y' ? true : false;
        obj.isNew = item.is_new === 'Y' ? true : false;

        if (item.sub) {
            obj.thirdNav = getThirdNav(item.sub);
        }

        subNav.push(obj);
    });


    return subNav;
};




/**
 * 处理接口返回的数据
 * @param {object} 接口返回的对象
 * @param {String} 指定页面类型为boys,girls,kids,lifestyle
 * @return {object} 头部数据
 */
exports.setHeaderData = (resData, type) => {
    let config = commonConfig();
    let data = {
        headerData: {
            header: true,
            headType: type,
            yohoGroup: getMenuData(),
            navbars: getNavBar(resData),
            subNav: getSubNav(resData, type)
        }
    };

    data.headerData.navbars[getChannelIndex(type)].active = true;

    return _.merge(config, data);
};

/**
 * 请求头部数据
 * @param undefined
 * @return {promise}
 */
exports.requestHeaderData = () => {
    let data = sign.apiSign({

            /* eslint-disable */
            client_type: 'web'
            /* eslint-enable */
    });

    return serviceApi.get('/operations/api/v6/category/getCategory', data, true);
};