/* * @Author: Targaryen * @Date: 2017-06-20 15:48:39 * @Last Modified by: Targaryen * @Last Modified time: 2017-06-20 16:04:05 */ const _ = require('lodash'); const helpers = global.yoho.helpers; const productProcess = require('./product-process'); class DetailProcess { static prodessDetailData(origin) { let dest = {}; // 结果输出 // 商品名称 if (!origin.product_name) { return dest; } dest.goodsName = origin.product_name; // 是否是虚拟商品 // dest.virtualGoods = (origin.attribute * 1 === 3); // 活动促销短语 origin.market_phrase && origin.market_phrase !== ' ' && (dest.marketPhrase = origin.market_phrase); // 商品促销短语 origin.sales_phrase && origin.sales_phrase !== ' ' && (dest.goodsSubtitle = origin.sales_phrase); // 商品标签 if (origin.tags) { let productTags = {}; _.forEach(origin.tags, function(value) { productTags[value] = true; }); dest.tags = productTags; } // 商品价格 let goodsPrice = { currentPrice: origin.format_sales_price === '0' ? origin.format_market_price : origin.format_sales_price }; if (origin.format_sales_price !== '0' && origin.format_market_price !== origin.format_sales_price) { goodsPrice.previousPrice = origin.format_market_price; } dest.goodsPrice = goodsPrice; // 商品返回 YOHO 币 // origin.yohoCoinNum && (dest.commodityReturn = origin.yohoCoinNum); // 上市期 origin.expect_arrival_time && (dest.periodOfMarket = origin.expect_arrival_time); // 品牌信息 if (origin.shop_id) { let extra = `?productSkn=${origin.product_skn}&shopId=${origin.shop_id}`; dest.preferenceUrl = `/product/detail/preference${extra}`; } // dest.brandId = origin.brand_info && origin.brand_info.brand_id || 0; dest.brandId = _.get(origin, 'brand_info.brand_id', 0); dest.shopId = _.get(origin, 'shopId', 0); dest.productSkn = origin.product_skn; dest.id = origin.product_id; dest.goodsId = origin.goods_id; dest.isDepositAdvance = origin.is_deposit_advance === 'Y'; // 是否定金预售 dest.isSeckill = origin.is_secKill === 'Y'; // 是否秒杀 dest.isLimitBuy = origin.isLimitBuy; // 是否 限购 dest.isPresale = Boolean(origin.expect_arrival_time); // 是否普通预售 dest.bundleType = origin.bundle_type; // 商品活动标记 // 自定义 属性 dest.showCoupon = !( dest.isDepositAdvance || dest.isSeckill || dest.isLimitBuy || dest.isPresale ); // 商品有限购、秒杀、定金预售、普通预售 不显示领 // 20170113 要求关闭商品详情页面领券功能 // dest.showCoupon = false; // 商品信息 if (origin.goods_list.length) { let goodsGroup = []; // pagecache重构 _.forEach(origin.goods_list, function(value) { // 商品分组 if (value.images_list) { _.forEach(value.images_list, function(good) { goodsGroup.push({ goodsId: value.goods_id, img: good.image_url }); }); } }); // 商品图:多个 if (goodsGroup.length > 1) { let bannerList = []; _.forEach(goodsGroup, function(value) { value.img = _.replace(value.img, '/quality/80', '/quality/70'); bannerList.push({ img: value.img }); }); dest.bannerTop = { list: bannerList }; } else if (goodsGroup[0]) { dest.bannerTop = { img: goodsGroup[0].img }; } } // 底部简介URL链接 dest.introUrl = '/product/detail/intro/' + origin.product_skn; dest.brandName = _.get(origin, 'brand_info.brand_name', ''); dest.sortName = _.get(origin, 'middle_sort_name', ''); return dest; } /** * 处理品牌关联店铺信息 * @param {array} * @return {array} */ static processShopsInfo(data) { let enterStore = []; _.forEach(data, function(value) { let shopInfo = { img: value.brand_ico, storeName: value.brand_name }; if (value.shop_id) { shopInfo.url = helpers.urlFormat('/product/shop', { shop_id: value.shop_id }); } else { shopInfo.url = helpers.urlFormat('', null, value.brand_domain); } enterStore.push(shopInfo); }); return enterStore; } /** * 处理商品 feedback * @param data feedback要处理数据 * { * comment, defaultConsult, userConsult * } * @param productId 商品id * @return feedback */ static processFeedback(data, productId) { // let {comment, defaultConsult, userConsult} = data; let comment = data.comment; let defaultConsult = data.defaultConsult; let userConsult = data.userConsult; let feedbacks = {consults: [], consultsNum: 0}; Object.assign(feedbacks, comment); // 商品评价 feedbacks.commentsUrl = helpers.urlFormat('/product/detail/comments', { product_id: productId }); /* 如果有用户咨询,显示用户咨询,否则显示常见问题 */ let obj = {}; if (userConsult.total) { obj = { commonConsults: false, consultsNum: parseInt(userConsult.total, 10), consults: _.take(userConsult.list, 2) }; } else if (!_.isEmpty(defaultConsult) && !_.get(comment, 'consultsNum', 0)) { obj = { commonConsults: true, consultsNum: true, consults: _.take(defaultConsult.faq, 2) }; } Object.assign(feedbacks, obj); if (_.get(feedbacks, 'consultsNum')) { feedbacks.consultsUrl = helpers.urlFormat('/product/detail/consults', { product_id: productId, total: feedbacks.consultsNum }); } else { feedbacks.consultsUrl = helpers.urlFormat('/product/detail/consultform', { product_id: productId }); } return feedbacks; } /** * 套餐数据处理 * @param bundleData * @param skn * @returns {{}} */ static processBundle(bundleData, skn, productId, index) { let subPrice = _.get(bundleData, 'bundleInfo.subPrice', 0); return { tabName: _.get(bundleData, 'bundleInfo.tabName') || '', title: _.get(bundleData, 'bundleInfo.bundleName') || '优惠套装', href: helpers.urlFormat('/product/bundle/detail', {bundle_skn: skn, productId: productId, index: index}), description: subPrice ? '立省¥' + subPrice : 0, productList: productProcess.processProductList(bundleData && bundleData.productList) }; } /** * 处理量贩数据 * @param finalResult * @param bundleData */ static processDiscount(finalResult, bundleData) { finalResult.discountBuy = { num: _.get(bundleData, 'bundleInfo.bundleCount', 1), promotionPhrase: _.get(bundleData, 'bundleInfo.promotionPhrase', ''), discount: _.get(bundleData, 'bundleInfo.discount', 1) }; let oldPromotion = finalResult.promotion; finalResult.promotion = [{ promotionTitle: _.get(bundleData, 'bundleInfo.promotionPhrase', ''), promotionType: '量贩' }]; _.forEach(oldPromotion, value => { finalResult.promotion.push(value); }); } } module.exports = DetailProcess;