sale.js 6.51 KB
/**
 * 频道页面 model
 * @author: wsl<shuiling.wang@yoho.cn>
 * @date: 2016/05/17
 */
'use strict';
const library = '../../../library';
const utils = '../../../utils';
const API = require(`${library}/api`).API;
const ServiceAPI = require(`${library}/api`).ServiceAPI;
const sign = require(`${library}/sign`);
const logger = require(`${library}/logger`);
const helpers = require(`${library}/helpers`);
const camelCase = require(`${library}/camel-case`);
const resourcesProcess = require(`${utils}/resources-process`);
const _ = require('lodash');
const api = new API();
const serviceAPI = new ServiceAPI();
const anHour = 3600000;
const aDay = anHour * 24;

/**
 * 折扣专场列表数据处理
 */
const processSpecial = (list) => {
    const formatData = [];

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

    _.forEach(list, (data) => {
        data.specialUrl = `/product/specialDetail?id=${data.id}`;

        if (data.leftTime < anHour) {
            data.warnColor = true;
            data.leftTime = '低于1小时';
        } else {
            if (data.leftTime > aDay) {
                data.leftTime = helpers.dateDiffFormat('剩{d}天{h}小时', data.leftTime, 'ms');
            } else {
                data.leftTime = helpers.dateDiffFormat('剩{h}小时', data.leftTime, 'ms');
            }
        }
        formatData.push(data);
    });

    return formatData;
};

/**
 * 断码区分类数据处理
 */
const processBreakingSort = (list) => {
    const formatData = {};
    const sortName = [];
    const sub = [];

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

    _.forEach(list, (data) => {
        sortName.push(data.sortName);
        sub.push(data.sub);
    });

    formatData.sortName = sortName;
    formatData.sub = sub;

    return formatData;
};

/**
 * 商品搜索数据处理
 */
const processSearch = (data) => {
    return camelCase(data);

    // const goods = [];

    // list = list || [];

    // _.forEach(list.data.product_list, (data) => {
    //     let flag = false;

    //     // 商品信息有问题,则不显示
    //     if (typeof(data['product_skn']) === 'undefined' || typeof(data['goods_list'][0]) === 'undefined') {
    //         return false;
    //     }

    //     // 市场价和售价一样,则不显示市场价
    //     if (parseInt(data['market_price']) === parseInt(data['sales_price'])) {
    //         data['market_price'] = false;
    //     }

    //     // 如果设置了默认图片,就取默认的图片
    //     _.forEach(data['goods_list'], (goods) => {
    //         //  此skc是默认的,则将图片赋值给skn
    //         if (goods['is_default'] === 'Y') {

    //             // data['img'] = self::procProductImg($oneGoods);

    //             flag = true;
    //         }
    //     });

    //     // 如果还未赋值,则取第一个skc产品的默认图片
    //     // if (!$flag) {
    //     //     $productData['default_images'] = self::procProductImg($productData['goods_list'][0]);
    //     // }

    //     // data.url = '/product/pro_' . data['product_id'] . '_'
    //     //             . data['goods_list'][0]['goods_id']
    //     //             . '/' . data['cn_alphabet'] . '.html';
    // });
};

const getResources = (page) => {
    const contentCode = {
        sale: '7c2b77093421efa8ae9302c91460db73',
        breakCode: '7c2b77093421efa8ae9302c91460db73'
    };

    return serviceAPI.get('operations/api/v5/resource/get', sign.apiSign({
        content_code: contentCode[page]
    })).then((result) => {
        if (result && result.code === 200) {
            return resourcesProcess(result.data);
        } else {
            logger.error('SALE 页面资源位返回 code 不是 200');
            return [];
        }
    });
};

const getBreakingSort = (yhChannel) => {
    return api.get('', sign.apiSign({
        method: 'app.sale.getBreakingSort',
        yh_channel: yhChannel || '1'
    })).then((result) => {
        if (result && result.code === 200) {
            return processBreakingSort(result.data);
        } else {
            logger.error('断码区分类接口返回 code 不是 200');
            return {};
        }
    });
};

/**
 * 获取商品数据
 */
exports.getSearchData = (params) => {
    params = params || {};
    return api.get('', sign.apiSign(Object.assign({
        method: 'app.search.sales'
    }, params))).then((result) => {
        if (result && result.code === 200) {
            return processSearch(result.data);
        } else {
            logger.error('SALE 商品搜索返回 code 不是 200');
            return {};
        }
    });
};

/**
 * 获取sale首页数据
 * @param  {[object]} params
 * @return {[object]}
 */
exports.getSaleData = () => {
    return getResources('sale');
};

/**
 * 获取断码区数据
 * @param  {[object]} params
 * @return {[object]}
 */
exports.getBreakCodeData = (params) => {
    params = params || {};
    return Promise.all([getResources('breakCode'), getBreakingSort(params.yhChannel)]).then((result) => {
        return {
            content: result[0],
            nav: result[1]
        };
    });
};

/**
 * 获取折扣专场专题列表数据
 * @param  {[object]} params
 * @return {[object]}
 */
exports.getSpecialData = (params) => {
    const specialData = {};

    return api.get('', sign.apiSign(Object.assign({
        method: 'app.activity.get',
        sort: 2,
        plateform: 2
    }, params))).then((result) => {
        if (result && result.code === 200) {
            specialData.data = processSpecial(result.data);
        } else {
            logger.error('SALE 专题活动列表接口返回 code 不是 200');
        }
        return specialData;
    });
};


/**
 * 获取折扣专场专题详情数据
 * @param  {[object]} params
 * @return {[object]}
 */
exports.getSpecialDetailData = (params) => {
    return api.get('', sign.apiSign(Object.assign({
        method: 'app.activity.get',
        sort: 2,
        plateform: 2
    }, params))).then((result) => {
        if (result && result.code === 200) {
            return camelCase(result.data);
        } else {
            return Promise.reject('error');
        }
    });
};


/**
 * 获取会员享数据
 * @param  {[object]} params
 * @return {[object]}
 */
exports.getVipData = (params) => {
    return api.get('', sign.apiSign(Object.assign({
        method: 'app.activity.get',
        sort: 2,
        plateform: 2
    }, params))).then((result) => {
        if (result && result.code === 200) {
            return camelCase(result.data);
        } else {
            return Promise.reject('error');
        }
    });
};