sale.js 8.87 KB
/*
 * @Author: Targaryen
 * @Date:   2016-05-19 10:20:08
 * @Last Modified by:   Targaryen
 * @Last Modified time: 2016-05-24 15:04:09
 */

'use strict';
const library = '../../../library';
const API = require(`${library}/api`).API;
const TARAPI = require(`${library}/tar-api`).TARAPI;
const sign = require(`${library}/sign`);
const api = new API();
const tarApi = new TARAPI();
const _ = require('lodash');

/**
 * 处理商品列表数据
 * @param  {[type]} origin [description]
 * @return {[type]}        [description]
 */
const handleSaleGoodsListData = (origin) => {
    var dest = [];


    if (!_.isEmpty(origin)) {

        _.forEach(origin, function(value) {
            let oneGoods = {};

            oneGoods.tags = value.tags;
            oneGoods.thumb = value.default_images;
            oneGoods.url = '/product/pro_' + value.product_id + '_' + value.goods_list[0].goods_id + '/' +
                value.cn_alphabet + '.html';
            oneGoods.goodsList = value.goods_list;
            oneGoods.name = value.product_name;
            oneGoods.brand = {};
            oneGoods.brand.url = value.brand_domain + '.SUB_DOMAIN'; // 待处理
            oneGoods.brand.name = value.brand_name;
            oneGoods.marketPrice = value.market_price;

            dest.push(oneGoods);
        });
    }

    return dest;
};

/**
 * 处理筛选数据
 * @param  {[type]} origin [description]
 * @return {[type]}        [description]
 */
const handleSaleFilterData = (origin) => {
    var dest = {};

    dest.brand = {};
    dest.price = [];
    dest.channel = [];

    dest.opts = {};

    // 处理 品牌 筛选数据
    dest.brand.default = [];
    if (!_.isEmpty(origin.brand)) {
        _.forEach(origin.brand, function(value) {
            let brand = {};

            brand.checked = false;
            brand.href = 'CURRENT_URL/brand=' + value.brand_domain; // 待处理
            brand.name = value.brand_name;

            dest.brand.default.push(brand);
        });
    }

    // 处理 价格 筛选数据
    if (!_.isEmpty(origin.priceRange)) {
        _.forEach(origin.priceRange, function(value, key) {
            let price = {
                checked: false,
                href: 'CURRENT_URL/price=' + key, // 待处理
                name: value
            };

            dest.price.push(price);
        });
    }

    // 处理频道数据
    for (let i = 0; i < 2; i++) {
        dest.channel[i] = {};

        dest.channel[i].checked = false;
    }

    dest.channel[0].name = '男生';
    dest.channel[0].href = 'CURRENT_URL/?gender=1,3';
    dest.channel[1].name = '女生';
    dest.channel[1].href = 'CURRENT_URL/?gender=2,3';

    // 处理 opts 折扣等排序数据
    dest.opts.countPerPage = 60;
    dest.opts.start = 1;
    dest.opts.end = 20;
    dest.opts.sortType = {};

    for (let i = 0; i < 2; i++) {
        dest.opts.sortType[i] = {};

        dest.opts.sortType[i].href = 'CURRENT_URL/?order=s_p_asc';
        dest.opts.sortType[i].name = '价格';

        dest.opts.sortType[i].hasSortOrient = {};
        dest.opts.sortType[i].hasSortOrient.active = {};
        dest.opts.sortType[i].hasSortOrient.active.desc = {};
    }


    return dest;
};

/**
 * 处理页面左侧分类筛选数据
 * @return {[type]} [description]
 */
const handleSaleSortData = (origin) => {
    var leftContent = {};

    leftContent.allDiscount = {};
    leftContent.allDiscount.list = [];

    _.forEach(origin, function(value) {
        let category = {};

        category.name = value.sort_name;
        leftContent.allDiscount.list.push(category);
    });


    return leftContent;
};

/**
 * 处理折扣专区活动数据
 * @param  {[type]} origin [description]
 * @return {[type]}        [description]
 */
const handleSaleActivityData = (origin) => {
    var dest = {};

    dest.big = [];
    dest.normal = [];
    _.forEach(origin, function(value, key) {
        let activity = {};

        activity.link = value.web_url;
        activity.img = value.cover_url;
        activity.time = value.left_time;
        activity.brand = value.logo_url;
        activity.discount = value.title;

        if (key < 3) {
            dest.big.push(activity);
        } else {
            dest.normal.push(activity);
        }
    });
    return dest;
};

/**
 * 处理首页 banner 数据
 * @param  {[type]} origin [description]
 * @return {[type]}        [description]
 */
const handleSaleBannerData = (origin) => {
    var dest = {};

    dest.list = [];
    _.forEach(origin, function(value) {
        if (value.template_name === 'focus') {
            _.forEach(value.data, function(subValue) {
                let banner = {};

                banner.bannerHeight = 450;
                banner.href = subValue.url;
                banner.img = subValue.src;

                dest.list.push(banner);
            });
        }

        if (value.template_name === 'small_pic') {
            _.forEach(value.data, function(picList) {
                let smallPic = {};

                smallPic.link = picList.url;
                smallPic.icon = picList.src;
                smallPic.title = picList.title;
                smallPic.desc = picList.alt;

                dest.list.push(smallPic);
            });
        }

    });

    return dest;
};

/**
 * 处理首页 banner 小图
 * @param  {[type]} origin [description]
 * @return {[type]}        [description]
 */
const handleSaleBannerSmallData = (origin) => {
    var dest = [];

    _.forEach(origin, function(value) {

        if (value.template_name === 'small_pic') {
            _.forEach(value.data, function(picList) {
                let smallPic = {};

                smallPic.link = picList.url;
                smallPic.icon = picList.src;
                smallPic.title = picList.title;
                smallPic.desc = picList.alt;

                dest.push(smallPic);
            });
        }

    });

    return dest;
};

/**
 * 获取商品列表 promise 对象
 * @return {[type]} [description]
 */
const getSaleGoodsList = () => {
    return api.get('', sign.apiSign({
        method: 'app.search.sales',
        limit: 5,
        order: 's_t_desc',
        page: 1,
        productSize: '384x511',
        yh_channel: 1
    }));
};

/**
 * 获取左侧分类信息数据 promise 对象
 * @return {[type]} [description]
 */
const getSortList = () => {
    return api.get('', sign.apiSign({
        method: 'app.sale.getBreakingSort',
        yh_channel: 1
    }));
};

/**
 * 获取折扣专区活动列表 promise 对象
 * @return {[type]} [description]
 */
const getSaleActivityList = () => {
    return tarApi.getActivity('', sign.apiSign({
        method: 'app.activity.get',
        sort: 2,
        plateform: 2
    }));
};

/**
 * 获取顶部 banner
 * @return {[type]} [description]
 */
const getSaleBannerList = () => {
    return tarApi.getBanner('', sign.apiSign({
        content_code: '7c2b77093421efa8ae9302c91460db73'
    }));
};

/**
 * 获取 Sale 首页数据
 * @return {[type]} [description]
 */
exports.getSaleIndexData = () => {

    return api.all([getSaleActivityList(), getSaleGoodsList(), getSaleBannerList()]).then(result => {
        var finalResult = {};

        if (result[0].code === 200) {
            finalResult.brandSale = handleSaleActivityData(result[0].data);
        }

        if (result[1].code === 200) {

            if (!_.isEmpty(result[1].data.product_list)) { // 处理商品列表数据
                finalResult.saleCategory = {};
                finalResult.saleCategory.saleImage = [];
                finalResult.saleCategory.saleImage.push(handleSaleGoodsListData(result[1].data.product_list));
            }
        }

        if (result[2].code === 200) {
            finalResult.topBanner = handleSaleBannerData(result[2].data);
            finalResult.activityEnter = handleSaleBannerSmallData(result[2].data);
        }

        return finalResult;
    });
};

/**
 * 获取商品列表数据
 * @return {[type]} [description]
 */
exports.getSaleGoodsData = () => {

    return getSaleGoodsList().then(result => {
        let finalResult = {};

        if (result.code === 200) {
            finalResult.goods = handleSaleGoodsListData(result.data.product_list);
        }
        return finalResult;
    });
};

/**
 * 获取其他三个页面全部数据
 * @return {[type]} [description]
 */
exports.getSaleData = () => {

    return api.all([getSortList(), getSaleGoodsList()]).then(result => {
        let finalResult = {};

        if (result[0].code === 200) {
            finalResult.leftContent = handleSaleSortData(result[0].data);
        }
        if (result[1].code === 200) {

            if (!_.isEmpty(result[1].data.product_list)) { // 处理商品列表数据
                finalResult.goods = handleSaleGoodsListData(result[1].data.product_list);
            }

            if (!_.isEmpty(result[1].data.filter)) {
                finalResult.filters = handleSaleFilterData(result[1].data.filter);
            }
        }
        return finalResult;
    });
};