product.js 4.52 KB
'use strict';
const path = require('path');
const _ = require('lodash');
const helpers = global.yoho.helpers;
const utilsPath = path.join(global.utils, '/constant');
const genderMap = require(utilsPath).genderMap;

/**
 * 根据性别来决定  默认图片获取字段   如果是 2、3
 */
const _procProductImg = (product, genderVal) => {
    let defaultImages;

    switch (genderVal) {
        case genderMap.men:
            defaultImages = product.cover_1 || product.images_url;
            break;
        case genderMap.women:
            defaultImages = product.cover_2 || product.images_url;
            break;
        default:
            defaultImages = product.images_url || product.cover_1 || product.cover_2;
            break;
    }

    defaultImages || (defaultImages = '');

    return defaultImages;
};

/**
 * 商品搜索商品数据处理
 */
module.exports = (list, options) => {
    options = options || {};

    const pruductList = [];

    if (!options.gender) {
        options.gender = '';
    }

    options = Object.assign({
        showTags: true,
        showNew: true,
        showSale: true,
        width: 290,
        height: 388,
        isApp: false,
        showPoint: true,
        gender: '',
        yhChannel: ''
    }, options);

    let genderVal = options.gender.split(',');

    if (genderVal.indexOf(genderMap.men) && genderVal.indexOf(genderMap.women)) { // 男女 通吃
        genderVal = '';
    } else {
        genderVal = genderVal[0];
    }

    _.forEach(list, (product) => {
        // 商品信息有问题,则不显示
        if (!product || !product.product_id || !product.goods_list || !product.goods_list.length) {
            return;
        }

        // 如果库存为0,显示已抢完
        if (product.storage_num === 0) {
            product.no_storage = true;
        }

        // 市场价和售价一样,则不显示市场价
        if (product.market_price === product.sales_price) {
            product.market_price = false;
        }

        // 判别默认的商品是否将默认的图片URL赋值到skn
        let flag = false;

        // 如果设置了默认图片,就取默认的图片
        _.forEach(product.goods_list, (goods) => {
            if (flag) {
                return false;
            }
            if (goods.is_default === 'Y') {
                product.default_images = _procProductImg(goods, genderVal);
                flag = true;
            }
        });

        // 如果还未赋值,则取第一个skc产品的默认图片
        if (!flag) {
            product.default_images = _procProductImg(product.goods_list[0], genderVal);
        }

        product.is_soon_sold_out = product.is_soon_sold_out === 'Y';
        product.url = helpers.urlFormat(`/product/pro_${product.product_id}_${product.goods_list[0].goods_id}/${product.cn_alphabet}.html`); // eslint-disable-line

        // APP访问需要加附加的参数
        // 备注:如果以后APP的接口太多,可以把这边参数提取出来,变成一个公共的方法来生成,便于以后管理维护
        if (options.isApp) {
            product.url += `?openby:yohobuy={"action":"go.productDetail","params":{"product_skn":'${product.product_id}'}}`; // eslint-disable-line
        }

        if (options.showTags) {
            product.tags = {};

            product.tags.is_new = options.showNew && product.is_new === 'Y'; // 新品
            product.tags.is_discount = options.showSale && product.is_discount === 'Y'; // 在售
            product.tags.is_limited = product.is_limited === 'Y'; // 限量
            product.tags.is_yohood = product.is_yohood === 'Y'; // YOHOOD
            product.tags.mid_year = product.mid_year === 'Y'; // 年中
            product.tags.year_end = product.year_end === 'Y'; // 年末
            product.tags.is_advance = product.is_advance === 'Y'; // 再到着

            // 打折与即将售完组合显示打折
            if (product.isSoonSoldOut && product.tags.is_discount) {
                product.tags.is_new = false;
            } else if (product.tags.is_discount &&
                (product.tags.is_new || product.tags.is_limited || product.tags.is_yohood || product.tags.is_advance)) {
                // 打折与其它组合则隐藏打折
                product.tags.is_discount = false;
            } else if (product.tags.is_yohood && product.tags.is_new) {
                // YOHOOD和新品组合显示YOHOOD
                product.tags.is_new = false;
            }
        }

        pruductList.push(product);
    });

    return pruductList;
};