plusstar.js 5.18 KB
'use strict';
const api = global.yoho.API;
const serviceAPI = global.yoho.ServiceAPI;
const _ = require('lodash');
const productProcess = require('../../../utils/product-process');

/**
 * 获取潮流优选tab
 * @return {[array]}
 */
const getAllChannels = (params) => {
    let gender = params.gender - 1 || 0;

    return api.get('', {
        method: 'app.blk.getAllChannels',
        app_type: params.app_type
    }).then(result => {
        let data = {channel: []};

        if (result.code !== 200) {
            return data;
        }

        if (gender === 3 && result.data.length === 3) {
            // 1:男,2:女,3:童装,4:创意生活
            // 如果为3,说明童装没有配置,只配置了创意生活。所以要减一
            gender = 2;
        }

        _.forEach(result.data, (res, index) => {
            data.channel.push({
                id: res.channel_id,
                mame: res.channel_name,
                code: res.content_code,
                focus: index === gender ? true : false
            });
        });

        return data;
    });
};

/**
 * 通过skn查询商品详情
 * @param {[string || array]} productSkn 商品skn
 * @return {[array]}
 */
const getProductBatch = (productSkn, options) => {
    productSkn = _.isArray(productSkn) ? productSkn : [productSkn];
    return api.get('', {
        method: 'h5.product.batch',
        productSkn: productSkn.join(',')
    }).then(result => {
        return result && result.data ? productProcess.processProductList(result.data.product_list, options) : [];
    });
};

/**
 * 商品推荐获取
 * @param {[int]} yh_channel 当前频道
 * @param {[int]} uid 用户id
 * @return {[array]}
 */
const getFashionPrefer = (params) => {
    return api.get('', Object.assign({
        method: 'h5.product.fashionPrefer'
    }, params));
};

/**
 * 获取资源位数据
 * @param {[string]} content_code
 * @return {[array]}
 */
const getResources = (params, options) => {
    params = params || {};

    if (options.isApp) {
        params.platform = 'iphone';
    }

    return serviceAPI.get('operations/api/v5/resource/get', params).then(result => {
        let data = {
            goods: {},
            recommend: {}
        };
        let list = {};
        let productSkns = [];

        if (result.code !== 200) {
            return data;
        }

        _.forEach(result.data, (res) => {
            list = {};
            switch (res.template_name) {
                case 'focus':
                    list = {
                        data: res.data
                    };

                    if (res.focus_type * 1 === 1) {
                        data.focus1 = list;
                        data.focus1.id = res.template_id;
                    } else {
                        data.focus2 = list;
                        data.focus2.id = res.template_id;
                    }

                    break;
                case 'title_image' :
                    if (typeof data[res.template_name] === 'undefined') {
                        data[res.template_name] = [];
                    }

                    list = {
                        id: res.template_id,
                        title: res.data.title,
                        moreUrl: res.data.more_url,
                        moreName: res.data.more_name,
                        image: res.data.image
                    };

                    data.title_image.push(list);
                    break;
                case 'titleFloor':
                    list = {
                        name: res.data.title.name,
                        moreUrl: res.data.title.more_url,
                        moreName: res.data.title.more_name
                    };

                    if (res.data.title.name === '热门商品') {
                        data.goods.title = list;
                        data.goods.id = res.template_id;
                    } else if (res.data.title.name === '热门品类') {
                        data.recommend.title = list;
                        data.recommend.id = res.template_id;
                    }

                    break;
                case 'recommend_content_five':
                    data.recommend.data = res.data.list;
                    break;
                case 'goods':
                    _.forEach(res.data, (skn) => {
                        productSkns.push(skn.id);
                    });

                    data[res.template_name].productSkns = productSkns;
                    break;
                default:
                    break;
            }
        });

        return data;
    });
};

const getResourcesData = (params, options) => {
    return api.all([
        getResources(params, options),
        getFashionPrefer(params)
    ]).then(result => {
        let skns = result[0] && result[0].goods && result[0].goods.productSkns || [];
        let preferSkns = result[1] && result[1].data || [];

        if (result[0] && result[0].goods && result[0].goods.productSkns) {
            result[0].goods.productSkns  = _.uniq(Object.assign(preferSkns, skns));
        }

        return result[0];
    });
};

module.exports = {
    getAllChannels,
    getResources,
    getFashionPrefer,
    getProductBatch,
    getResourcesData
};