outlets-handler.js 7.75 KB
'use strict';
const library = '../../../library';
const utils = '../../../utils';
const helpers = require(`${library}/helpers`);
const _ = require('lodash');
const camelCase = require('../../../library/camel-case');
const productProcess = require(`${utils}/product-process`);

/**
 * NL2R图片轮播
 */
const nl2r = (data) => {
    const result = {
        left: [],
        right: []
    };

    // 左侧
    _.forEach(data.left, (value) => {
        result.left.push({
            img: value.src,
            url: value.url
        });
    });

    // 右侧
    _.forEach(data.right, (value) => {
        result.right.push({
            img: value.src,
            url: value.url
        });
    });
    return result;
};

/**
 * 热门分类
 */
const hotCategory = (data) => {
    return {
        hotCategory: {
            name: data.name,
            list: data.menuNav.list,
            blocks: data.menuNav.blocks,
            brands: data.imgs.slice(0, 1),
            types: data.imgs.slice(1, 7)
        }
    };
};

/**
 * 分类导航
 */
const categoryNavigation = (data) => {
    const goodsMenu = {
        title: '最新折扣',
        menuList: [],
        more: 'http://list.yohobuy.com/?msort=3&misort=26'
    };

    _.forEach(data, (value) => {
        goodsMenu.menuList.push({
            cur: false,
            url: value.url,
            name: value.categoryName
        });
    });
    return {
        goodsBoard: {
            oodsMenu: goodsMenu,
            sort: {
                sortType: [{
                    name: '最新',
                    active: true,
                    hasSortOrient: {
                        active: true,
                        desc: true
                    }
                }, {
                    name: '折扣',
                    active: false,
                    hasSortOrient: {
                        active: false,
                        desc: true
                    }
                }, {
                    name: '价格',
                    active: false,
                    hasSortOrient: {
                        active: true,
                        desc: true
                    }
                }]
            }
        }
    };
};

/**
 * 折扣文本切割
 */
const discountSplit = (text) => {
    let endNum = 0,
        i;

    for (i = 0; i < text.length; i++) {
        if (/^([0-9]|\%)*$/.test(text[i])) {
            endNum = i + 1;
        }
    }

    return {
        discount: text.slice(0, endNum),
        discountText: text.slice(endNum, text.length)
    };
};


/**
 * 处理楼层数据
 * @param  {[array]} list
 * @return {[array]}
 */
exports.processFloor = (list) => {
    const formatData = [];
    let floorData;

    list = list || [];
    list = camelCase(list);

    // 格式化数据
    _.forEach(list, (floor) => {
        switch (floor.templateName) {
            case 'NL2R':
                floorData = nl2r(floor.data);
                break;
            case 'hotCategory':
                floorData = hotCategory(floor.data);
                break;
            case 'categoryNavigation':
                floorData = categoryNavigation(floor.data);
                break;
            default:
                floorData = floor.data;
                break;

        }
        Object.assign(formatData, floorData);
    });
    return formatData;
};

/**
 * 组织嗨购数据
 */
exports.formatActivityData = (data) => {
    let high = {
        name: '限时嗨购',
        imgHot: []
    };

    _.forEach(data, (value) => {
        high.imgHot.push({
            url: value.webUrl,
            img: value.coverUrl,
            logo: value.logoUrl,
            name: value.title,
            price: value.promotionName,
            count: value.endTime
        });
    });
    return high;
};


/**
 * 处理奥莱资源位数据
 * @param  {[type]} origin [description]
 * @return {[type]}        [description]
 */
exports.handleOutletsBannersData = (origin) => {
    var dest = {};

    dest.limitedBuy = {};
    dest.limitedBuy.extra = {};

    _.forEach(origin.list, value => {

        // 处理焦点图数据
        if (value.template_name === 'focus') {
            dest.mainBanner = {};
            dest.mainBanner.list = value.data;
        }

        // 处理三张小图数据
        if (value.template_name === 'threePicture') {
            dest.column = value.data;
        }

        // 处理右侧一张图片
        if (value.template_name === 'single_image') {
            dest.limitedBuy.extra.sourceImg = {};
            dest.limitedBuy.extra.sourceImg.href = value.data.url;
            dest.limitedBuy.extra.sourceImg.img = value.data.src;
        }

        // 处理热销推荐数据
        if (value.template_name === 'recommendCategory') {
            dest.limitedBuy.extra.hotType = {};
            dest.limitedBuy.extra.hotType.title = _.isEmpty(value.data.title) ? '热销推荐' : value.data.title;
            dest.limitedBuy.extra.hotType.classify = [];
            _.forEach(value.data.categoryList, subValue => {
                let category = {};

                category.href = subValue.url;
                category.name = subValue.navigateNamePC;

                dest.limitedBuy.extra.hotType.classify.push(category);

            });

        }

        // 处理品类导航数据
        if (value.template_name === 'categoryNavigation') {
            dest.goodsBoard = {};
            dest.goodsBoard.goodsMenu = {};

            dest.goodsBoard.goodsMenu.title = '最新折扣';
            dest.goodsBoard.goodsMenu.menuList = [];

            _.forEach(value.data, subValue => {
                let goodsmenu = {};

                goodsmenu.name = subValue.categoryName;
                goodsmenu.href = subValue.url;

                dest.goodsBoard.goodsMenu.menuList.push(goodsmenu);
            });

        }
    });

    return dest;
};

/**
 * 处理奥莱活动数据
 * @param  {[type]} origin [description]
 * @return {[type]}        [description]
 */
exports.handleOutletsActivityData = (origin) => {
    let dest = {};

    let nowTime = Math.round(new Date().getTime() / 1000);

    dest.name = '限时嗨购'; // 需要根据 origin 传值修改
    dest.topic = [];

    // 处理奥莱活动列表数据
    _.forEach(origin, value => {
        let activity = {};

        activity.href = helpers.urlFormat('/outlets/special/detail', { id: value.id });
        activity.img = value.coverUrl;
        activity.logo = value.logoUrl;
        activity.title = value.title;
        activity.limit = (value.endTime - nowTime) * 1000;

        if (value.promotionName) {
            Object.assign(activity, discountSplit(value.promotionName));
        }

        dest.topic.push(activity);
    });

    return dest;
};

/**
 * 处理奥莱活动专题数据
 * @param  {[type]} origin [description]
 * @return {[type]}        [description]
 */
exports.handleOutletsSpecilData = (origin) => {
    let dest = {};

    let nowTime = Math.round(new Date().getTime() / 1000);

    dest.mainBanner = {
        src: origin.webUrl
    };

    dest.specialHead = {
        logo: origin.logoUrl,
        special: origin.title,
        title: '全部商品',
        limit: (origin.endTime - nowTime) * 1000
    };

    if (origin.promotionName) {
        Object.assign(dest.specialHead, discountSplit(origin.promotionName));
    }

    return dest;
};

/**
 * 处理潮品速递商品数据 折扣信息待处理
 * @param  {[type]} origin [description]
 * @return {[type]}        [description]
 */
exports.handleOutletstrendGoodData = (origin) => {
    let dest = {};

    dest.title = '潮品推荐';
    dest.goods = productProcess.processProductList(origin.product_list);
    _.forEach(dest.goods, (value, key) => {
        dest.goods[key].discount = (value.sales_price / value.market_price).toFixed(2) * 10;
    });

    return dest;
};