/** * header model * @author: yyq<yanqing.yang@yoho.cn> * @date: 2016/06/30 */ 'use strict'; const _ = require('lodash'); const serviceApi = global.yoho.ServiceAPI; /** * 获取菜单 * @param undefined * @return {array} 菜单数组 */ const getMenuData = () => ( { yohoGroup: [{ 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.yohood.cn', cn: '潮流嘉年华', en: 'YO\'HOOD' }, { link: 'http://www.yohobuy.com', cn: '有货', en: 'YOHO!BUY' }] } ); /** * 获取导航 * @param {Object} data 要处理的数据 * @param {String} type 频道类型 * @return {array} 导航数组 */ const getNavBar = (data, type) => { let navBars = []; _.forEach(data, item => { let obj = { link: item.sort_url, cn: item.sort_name, en: item.sort_name_en, isNewPage: item.is_new_page === 'Y' }, lowEn = _.camelCase(item.sort_name_en).toLowerCase(); if (type === lowEn) { obj.cur = true; } navBars.push(obj); }); return navBars; }; /** * 获取品牌名字 * @param {Object} data 要处理数据 * @return {array} 品牌数组 */ const getBrandItems = (data) => { let brandItems = []; _.forEach(data, item => { brandItems.push({ link: item.sort_url, hot: item.is_hot === 'Y', name: item.sort_name }); }); return brandItems; }; /** * 获取三级菜单 * @param {Object} data 要处理数据 * @return {array} 三级菜单数组 */ const getThirdNav = (data) => { let thirdNav = []; _.forEach(data, item => { let obj = { link: item.sort_url, hot: item.is_hot === 'Y', name: item.sort_name, category: true }; thirdNav.push(obj); if (item.sub) { thirdNav = _.concat(thirdNav, getBrandItems(item.sub)); } }); return _.chunk(thirdNav, 10); }; /** * 获取子菜单 * @param {Object} data 要处理数据 * @param {String} type 频道类型 * @return {array} 子菜单数组 */ const getSubNav = (data, type) => { let subNav = []; _.forEach(data, it => { if (type === _.camelCase(it.sort_name_en).toLowerCase()) { _.forEach(it.sub, item => { let obj = { link: item.sort_url, cn: item.sort_name, en: item.sort_name_en, isHot: item.is_hot === 'Y', isNew: item.is_new === 'Y' }; if (item.sub) { Object.assign(obj, { thirdNav: getThirdNav(item.sub), imgCode: item.content_code }); } subNav.push(obj); }); } }); return subNav; }; /** * 处理接口返回的数据 * @param {object} 接口返回的对象 * @param {String} 指定页面类型 * @return {object} 头部数据 */ const setHeaderData = (resData, type) => ( { navMenu: { type: type, navbars: resData ? getNavBar(resData, type) : [], subNav: resData ? getSubNav(resData, type) : [] } } ); /** * 请求头部菜单数据 * @param {String} 频道类型 * @return {promise} */ const requestNavBar = (type) => { return serviceApi.get('operations/api/v6/category/getCategory', { client_type: 'web' }, { cache: true, code: 200 }).then(res => { if (!res) { return {}; } return setHeaderData(res.data, type); }); }; /** * 请求头部数据 * @param {String} 频道类型 * @return {promise} */ const requestHeaderData = (type) => { let arr = [ getMenuData() ]; if (type) { arr.push(requestNavBar(type)); } return Promise.all(arr).then(result => { return Object.assign({ pageHeader: result[0] }, result[1]); }); }; module.exports = { requestHeaderData // 请求头部数据 };