...
|
...
|
@@ -9,6 +9,7 @@ const _ = require('lodash'); |
|
|
const comment = require('./consult-comment');
|
|
|
|
|
|
const api = global.yoho.API;
|
|
|
const singleAPI = global.yoho.SingleAPI;
|
|
|
const helpers = global.yoho.helpers;
|
|
|
|
|
|
const SINGLE_TICKETS_SKN = 51335912; // 展览票
|
...
|
...
|
@@ -132,7 +133,1005 @@ const _getLimitCodeUrl = (productCode, skn, ua) => { |
|
|
return url;
|
|
|
};
|
|
|
|
|
|
const _detailDataPkg = (origin, uid, vipLevel, ua) => {
|
|
|
/**
|
|
|
* 详情页数据格式化
|
|
|
* @param origin Object 原始数据
|
|
|
* @return dest Object 格式化数据
|
|
|
*/
|
|
|
// 老接口h5的代码
|
|
|
// const _detailDataPkg = (origin, uid, vipLevel, ua) => {
|
|
|
// let dest = {}, // 结果输出
|
|
|
// thumbImageList = [],
|
|
|
// colorGroup = {},
|
|
|
// sizeGroup = [],
|
|
|
// totalStorageNum = 0;
|
|
|
|
|
|
// // 商品名称
|
|
|
// if (origin.productName === null || typeof origin.productName === 'undefined') {
|
|
|
// return dest;
|
|
|
// }
|
|
|
|
|
|
// dest.goodsName = origin.productName;
|
|
|
|
|
|
// // 是否是虚拟商品
|
|
|
// dest.virtualGoods = origin.attribute * 1 === 3 ? true : false;
|
|
|
|
|
|
// // 用户未登录时
|
|
|
// if (!uid) {
|
|
|
// let params = {};
|
|
|
|
|
|
// params.refer = helpers.urlFormat('/product/show_' + origin.erpProductId + '.html');
|
|
|
// dest.loginUrl = helpers.urlFormat('/signin.html', params);
|
|
|
// }
|
|
|
|
|
|
// // 商品促销短语
|
|
|
// if (origin.salesPhrase) {
|
|
|
// dest.goodsSubtitle = origin.salesPhrase;
|
|
|
// }
|
|
|
|
|
|
// // 促销信息 TODO: 换新接口
|
|
|
// if (origin.promotionBoList) {
|
|
|
// let discountList = [];
|
|
|
|
|
|
// _.forEach(origin.promotionBoList, function(value) {
|
|
|
// discountList.push({
|
|
|
// text: `【${value.promotionType}】${value.promotionTitle}`
|
|
|
// });
|
|
|
// });
|
|
|
|
|
|
// if (discountList.length) {
|
|
|
// dest.goodsDiscount = {
|
|
|
// list: discountList
|
|
|
// };
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
// // 商品标签
|
|
|
// if (origin.productTagBoList) {
|
|
|
// let productTags = {};
|
|
|
|
|
|
// _.forEach(origin.productTagBoList, function(value) {
|
|
|
// switch (value.tagLabel) {
|
|
|
// case 'is_soon_sold_out':
|
|
|
// productTags.is_soon_sold_out = true;
|
|
|
// break;
|
|
|
// case 'is_new':
|
|
|
// productTags.is_new = true;
|
|
|
// break;
|
|
|
// case 'is_discount':
|
|
|
// productTags.is_discount = true;
|
|
|
// break;
|
|
|
// case 'is_limited':
|
|
|
// productTags.is_limited = true;
|
|
|
// break;
|
|
|
// case 'is_yohood':
|
|
|
// productTags.is_yohood = true;
|
|
|
// break;
|
|
|
// case 'is_advance':
|
|
|
// productTags.is_advance = true;
|
|
|
// break;
|
|
|
// default:
|
|
|
// break;
|
|
|
// }
|
|
|
// });
|
|
|
|
|
|
// dest.tags = productTags;
|
|
|
// }
|
|
|
|
|
|
// // 商品价格
|
|
|
// if (origin.productPriceBo) {
|
|
|
// let originPrice = origin.productPriceBo;
|
|
|
// let goodsPrice = {
|
|
|
// currentPrice: originPrice.formatSalesPrice
|
|
|
// };
|
|
|
|
|
|
// if (originPrice.formatMarketPrice !== originPrice.formatSalesPrice) {
|
|
|
// goodsPrice.previousPrice = originPrice.formatMarketPrice;
|
|
|
// }
|
|
|
|
|
|
// dest.goodsPrice = goodsPrice;
|
|
|
|
|
|
// // 商品返回 有货币
|
|
|
// if (originPrice.yohoCoinNum) {
|
|
|
// dest.commodityReturn = originPrice.yohoCoinNum;
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
// // VIP 商品价格
|
|
|
// if (origin.productPriceBo.vipPrices) {
|
|
|
// let vipList = [];
|
|
|
|
|
|
// _.forEach(origin.productPriceBo.vipPrices, function(value) {
|
|
|
// vipList.push({
|
|
|
// level: value.vipLevel,
|
|
|
// text: value.vipPrice,
|
|
|
// currentLevel: (value.vipLevel === vipLevel)
|
|
|
// });
|
|
|
// });
|
|
|
|
|
|
// if (vipList.length) {
|
|
|
// dest.vipLevel = {
|
|
|
// list: vipList
|
|
|
// };
|
|
|
// }
|
|
|
|
|
|
// }
|
|
|
|
|
|
// // 上市期
|
|
|
// if (origin.expectArrivalTime) {
|
|
|
// dest.periodOfMarket = `${origin.expectArrivalTime}月`;
|
|
|
// }
|
|
|
|
|
|
// // 商品咨询
|
|
|
// dest.feedbacks = {
|
|
|
// consults: [],
|
|
|
// consultsNum: 0
|
|
|
// };
|
|
|
|
|
|
// let consultParams = {
|
|
|
// product_id: origin.id
|
|
|
// };
|
|
|
|
|
|
// if (_.has(dest, 'feedbacks.consultsNum')) {
|
|
|
// consultParams.total = dest.feedbacks.consultsNum;
|
|
|
// dest.feedbacks.consultsUrl = helpers.urlFormat('/product/detail/consults', consultParams);
|
|
|
// } else {
|
|
|
// dest.feedbacks.consultsUrl = helpers.urlFormat('/product/detail/consultform', consultParams);
|
|
|
// }
|
|
|
|
|
|
|
|
|
// // 商品评价
|
|
|
// dest.feedbacks.commentsNum = 0;
|
|
|
// if (origin.commentBoWrapper) {
|
|
|
// dest.feedbacks.commentsNum = origin.commentBoWrapper.commentTotal;
|
|
|
|
|
|
// let commentList = [];
|
|
|
|
|
|
// _.forEach(origin.commentBoWrapper.commentBoList, function(value) {
|
|
|
// commentList.push({
|
|
|
// userName: value.nickName,
|
|
|
// desc: `${value.colorName}/${value.sizeName}`,
|
|
|
// content: value.content ? value.content : '',
|
|
|
// time: value.createTime
|
|
|
// });
|
|
|
// });
|
|
|
|
|
|
// dest.feedbacks.comments = commentList;
|
|
|
|
|
|
// dest.feedbacks.commentsUrl = helpers.urlFormat('/product/detail/comments', {
|
|
|
// product_id: origin.id,
|
|
|
// total: dest.feedbacks.commentsNum
|
|
|
// });
|
|
|
// }
|
|
|
|
|
|
// // 品牌信息
|
|
|
// if (origin.brand) {
|
|
|
// let extra = `?productSkn=${origin.erpProductId}&brandId=${origin.brand.id}`;
|
|
|
|
|
|
// dest.preferenceUrl = `/product/detail/preference${extra}`;
|
|
|
// }
|
|
|
|
|
|
// dest.productSkn = origin.erpProductId;
|
|
|
|
|
|
// // 商品信息
|
|
|
// if (origin.goodsList) {
|
|
|
// let goodsGroup = [],
|
|
|
// sizeName = '',
|
|
|
// colorList = [],
|
|
|
// sizeList = {},
|
|
|
// allSizeList = {},
|
|
|
// colorStorageGroup = {},
|
|
|
// colorStorageNum = 0;
|
|
|
|
|
|
// _.forEach(origin.goodsList, function(value) {
|
|
|
// if (value.status === 0) {
|
|
|
// return;
|
|
|
// }
|
|
|
|
|
|
// colorStorageNum = 0;
|
|
|
|
|
|
// // 商品分组
|
|
|
// if (value.goodsImagesList) {
|
|
|
// _.forEach(value.goodsImagesList, function(good) {
|
|
|
// goodsGroup.push({
|
|
|
// goodsId: good.goodsId,
|
|
|
// img: good.imageUrl
|
|
|
// });
|
|
|
// });
|
|
|
// }
|
|
|
|
|
|
// // 商品的尺码列表
|
|
|
// colorStorageGroup[value.productSkc] = {};
|
|
|
// if (value.goodsSizeBoList) {
|
|
|
// sizeList[value.productSkc] = [];
|
|
|
// _.forEach(value.goodsSizeBoList, function(size) {
|
|
|
// sizeList[value.productSkc].push({
|
|
|
// id: size.id,
|
|
|
// skuId: size.goodsSizeSkuId,
|
|
|
// goodsId: size.goodsId,
|
|
|
// colorId: size.colorId,
|
|
|
// name: size.sizeName,
|
|
|
// sizeNum: size.goodsSizeStorageNum
|
|
|
// });
|
|
|
|
|
|
// sizeName = size.sizeName;
|
|
|
|
|
|
// // 所有尺码列表,赋值用于前端展示默认尺码的时候
|
|
|
// // 判断出没有库存则显示灰色
|
|
|
// let build = {
|
|
|
// id: size.id,
|
|
|
// storage: size.goodsSizeStorageNum
|
|
|
// };
|
|
|
|
|
|
// allSizeList[sizeName] = (allSizeList[sizeName] === null ||
|
|
|
// typeof allSizeList[sizeName] === 'undefined') ? build :
|
|
|
// allSizeList[sizeName];
|
|
|
|
|
|
// colorStorageNum += parseInt(size.goodsSizeStorageNum, 10);
|
|
|
// colorStorageGroup[value.productSkc][sizeName] = parseInt(size.goodsSizeStorageNum, 10);
|
|
|
// });
|
|
|
|
|
|
// // 颜色分组
|
|
|
// colorList.push({
|
|
|
// id: value.colorId,
|
|
|
// skcId: value.productSkc,
|
|
|
// name: value.colorName,
|
|
|
// goodsName: value.goodsName,
|
|
|
// colorNum: colorStorageNum
|
|
|
// });
|
|
|
// }
|
|
|
|
|
|
// // 缩略图
|
|
|
// thumbImageList.push({
|
|
|
// img: value.colorImage
|
|
|
// });
|
|
|
|
|
|
// // 商品库存总数
|
|
|
// totalStorageNum += _.toNumber(colorStorageNum);
|
|
|
// });
|
|
|
|
|
|
// // 遍历所有尺码,构建颜色显示数据
|
|
|
// let i = 1;
|
|
|
|
|
|
// sizeGroup[0] = {
|
|
|
// size: []
|
|
|
// };
|
|
|
|
|
|
// _.forEach(allSizeList, (value, key) => {
|
|
|
|
|
|
// // 默认尺码
|
|
|
// sizeGroup[0].size.push({
|
|
|
// name: key,
|
|
|
// sizeNum: _.toNumber(value.storage) > 0 ? true : false,
|
|
|
// id: value.id
|
|
|
// });
|
|
|
|
|
|
// colorGroup[i] = {
|
|
|
// color: []
|
|
|
// };
|
|
|
|
|
|
// // 各个颜色的尺码, 每行显示一个尺码对应的颜色
|
|
|
// _.forEach(colorList, (colorArr) => {
|
|
|
// let tempColorArr = _.cloneDeep(colorArr);
|
|
|
|
|
|
// if (colorStorageGroup[tempColorArr.skcId] &&
|
|
|
// colorStorageGroup[tempColorArr.skcId][key]) {
|
|
|
// tempColorArr.colorNum = colorStorageGroup[tempColorArr.skcId][key];
|
|
|
// } else {
|
|
|
// tempColorArr.colorNum = 0;
|
|
|
// }
|
|
|
// colorGroup[i].color.push(Object.assign({}, tempColorArr));
|
|
|
// });
|
|
|
// colorGroup[i].id = value.id;
|
|
|
|
|
|
// ++i;
|
|
|
// });
|
|
|
|
|
|
// colorGroup[0] = {
|
|
|
// color: []
|
|
|
// };
|
|
|
|
|
|
// // 遍历所有颜色, 构建尺码显示数据
|
|
|
// i = 1;
|
|
|
// _.forEach(colorList, function(value) {
|
|
|
// // 各个尺码的颜色, 每行显示一个颜色的对应尺码
|
|
|
// sizeGroup[i] = {
|
|
|
// size: sizeList[value.skcId],
|
|
|
// colorId: value.skcId
|
|
|
// };
|
|
|
|
|
|
// // 默认颜色
|
|
|
// colorGroup[0].color.push(value);
|
|
|
// ++i;
|
|
|
// });
|
|
|
|
|
|
|
|
|
// // 商品图:多个
|
|
|
// if (goodsGroup.length > 1) {
|
|
|
// let bannerList = [];
|
|
|
|
|
|
// _.forEach(goodsGroup, function(value) {
|
|
|
// bannerList.push({
|
|
|
// img: value.img
|
|
|
// });
|
|
|
// });
|
|
|
|
|
|
// dest.bannerTop = {
|
|
|
// list: bannerList
|
|
|
// };
|
|
|
// } else if (goodsGroup[0] !== null && typeof goodsGroup[0] !== 'undefined') {
|
|
|
// dest.bannerTop = {
|
|
|
// img: goodsGroup[0].img
|
|
|
// };
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
// // 悬浮的购物车信息
|
|
|
// dest.cartInfo = {
|
|
|
// cartUrl: helpers.urlFormat('/cart/index/index'),
|
|
|
// numInCart: 0,
|
|
|
// goodsInstore: origin.storage
|
|
|
// };
|
|
|
|
|
|
// let soldOut = (origin.storage === 0) || (origin.status === 0 || totalStorageNum === 0);
|
|
|
// let notForSale = origin.attribute === 2;
|
|
|
|
|
|
// // 显示加入购物车链接
|
|
|
// if (!soldOut && !notForSale) {
|
|
|
// _.orderBy(colorGroup);
|
|
|
|
|
|
// Object.assign(dest.cartInfo, {
|
|
|
// productId: origin.id,
|
|
|
// thumbs: thumbImageList,
|
|
|
// name: dest.goodsName ? dest.goodsName : '',
|
|
|
// price: dest.goodsPrice.previousPrice ? dest.goodsPrice.previousPrice : '',
|
|
|
// salePrice: dest.goodsPrice.currentPrice ? dest.goodsPrice.currentPrice : '',
|
|
|
// totalNum: totalStorageNum,
|
|
|
// colors: _.toArray(colorGroup),
|
|
|
// sizes: sizeGroup
|
|
|
// });
|
|
|
|
|
|
// // 限购商品
|
|
|
// if (origin.isLimitBuy === 'Y') {
|
|
|
// // 是否开售
|
|
|
// let isBeginSale = (origin.saleStatus !== null && typeof origin.saleStatus !== 'undefined' &&
|
|
|
// origin.saleStatus === 1);
|
|
|
|
|
|
// // 限购商品有关的展示状态
|
|
|
// let showStatus = 1;
|
|
|
|
|
|
// if (origin.showStatus !== null && typeof origin.showStatus !== 'undefined') {
|
|
|
// showStatus = parseInt(origin.showStatus, 10);
|
|
|
// }
|
|
|
|
|
|
// // 处理限购商品有关的按钮状态
|
|
|
// dest = _procShowStatus(dest, showStatus, isBeginSale);
|
|
|
|
|
|
// dest.cartInfo.limitProductCode = origin.limitProductCode;
|
|
|
// dest.cartInfo.limitCodeUrl = _getLimitCodeUrl(origin.limitProductCode, origin.erpProductId, ua);
|
|
|
// dest.cartInfo.limitProductPay = helpers.urlFormat('/cart/index/orderEnsure');
|
|
|
// } else {
|
|
|
// dest.cartInfo.addToCartUrl = helpers.urlFormat('/product/buy_' + origin.id + '_' +
|
|
|
// origin.goodsList.id + '.html');
|
|
|
// }
|
|
|
// } else if (notForSale) {
|
|
|
// dest.cartInfo.notForSale = true;
|
|
|
// } else if (soldOut) {
|
|
|
// dest.cartInfo.soldOut = true;
|
|
|
// }
|
|
|
|
|
|
// // 是否收藏
|
|
|
// dest.isCollect = false;
|
|
|
// if (origin.isCollect !== null && typeof origin.isCollect !== 'undefined' && origin.isCollect === 'Y') {
|
|
|
// dest.isCollect = true;
|
|
|
// dest.cartInfo.isCollect = true;
|
|
|
// }
|
|
|
|
|
|
// // 底部简介URL链接
|
|
|
// dest.introUrl = '/product/detail/intro/' + origin.erpProductId;
|
|
|
// dest.id = origin.id;
|
|
|
|
|
|
// // 虚拟商品(门票)
|
|
|
// if (origin.attribute * 1 === 3) {
|
|
|
// dest.tickets = true;
|
|
|
// dest.ticketsConfirm = helpers.urlFormat('/cart/index/ticketsConfirm');
|
|
|
|
|
|
// // 展览票
|
|
|
// if (origin.erpProductId * 1 === SINGLE_TICKETS_SKN) {
|
|
|
// dest.single = true;
|
|
|
// } else {
|
|
|
// // 套票
|
|
|
// dest.package = true;
|
|
|
// }
|
|
|
|
|
|
// // 购票限制
|
|
|
// dest.cartInfo.limit = 4;
|
|
|
|
|
|
// // 清空活动
|
|
|
// dest.goodsDiscount = [];
|
|
|
|
|
|
// // 来自登录页,自动弹出选择框
|
|
|
// // if (isset($_GET['product_type']) && $_GET['product_type'] == 'ticket') {
|
|
|
// // $result['showPannel'] = true;
|
|
|
// // }
|
|
|
// }
|
|
|
|
|
|
// return dest;
|
|
|
// };
|
|
|
// const _detailDataPkg = (origin, uid, vipLevel, ua) => {
|
|
|
// let dest = {}, // 结果输出
|
|
|
// thumbImageList = [],
|
|
|
// colorGroup = {},
|
|
|
// sizeGroup = [],
|
|
|
// totalStorageNum = 0;
|
|
|
|
|
|
// // 商品名称
|
|
|
// if (!origin.productName) {
|
|
|
// dest.feedbacks = {};
|
|
|
// return dest;
|
|
|
// }
|
|
|
|
|
|
// dest.goodsName = origin.productName;
|
|
|
|
|
|
// // 是否是虚拟商品
|
|
|
// dest.virtualGoods = (origin.attribute * 1 === 3);
|
|
|
|
|
|
// // 用户未登录时
|
|
|
// if (!uid) {
|
|
|
// dest.loginUrl = helpers.urlFormat('/signin.html', {
|
|
|
// refer: helpers.urlFormat('/product/show_' + origin.productSkn + '.html')
|
|
|
// });
|
|
|
// }
|
|
|
|
|
|
// // 商品促销短语
|
|
|
// origin.salesPhrase && (dest.goodsSubtitle = origin.salesPhrase);
|
|
|
|
|
|
// // 促销信息 TODO: 换新接口
|
|
|
// if (origin.promotionBoList) {
|
|
|
// let discountList = [];
|
|
|
|
|
|
// _.forEach(origin.promotionBoList, function(value) {
|
|
|
// discountList.push({
|
|
|
// text: `【${value.promotionType}】${value.promotionTitle}`
|
|
|
// });
|
|
|
// });
|
|
|
|
|
|
// discountList.length && (dest.goodsDiscount = {
|
|
|
// list: discountList
|
|
|
// });
|
|
|
// }
|
|
|
|
|
|
// // 商品标签
|
|
|
// if (origin.tags) {
|
|
|
// let productTags = {};
|
|
|
|
|
|
// _.forEach(origin.tags, function(value) {
|
|
|
// productTags[value] = true;
|
|
|
// });
|
|
|
|
|
|
// dest.tags = productTags;
|
|
|
// }
|
|
|
|
|
|
// // 商品价格
|
|
|
// let goodsPrice = {
|
|
|
// currentPrice: origin.formatSalesPrice === '0' ? origin.formatMarketPrice : origin.formatSalesPrice
|
|
|
// };
|
|
|
|
|
|
// if (origin.formatSalesPrice !== '0' && origin.formatMarketPrice !== origin.formatSalesPrice) {
|
|
|
// goodsPrice.previousPrice = origin.formatMarketPrice;
|
|
|
// }
|
|
|
|
|
|
// dest.goodsPrice = goodsPrice;
|
|
|
|
|
|
// // 商品返回 YOHO 币
|
|
|
// origin.yohoCoinNum && (dest.commodityReturn = origin.yohoCoinNum);
|
|
|
|
|
|
// // VIP 商品价格
|
|
|
// if (origin.vip) {
|
|
|
// let vipList = [];
|
|
|
// let levelList = {
|
|
|
// 银卡: 1,
|
|
|
// 金卡: 2,
|
|
|
// 白金: 3
|
|
|
// };
|
|
|
|
|
|
// _.forEach(origin.vip, function(value) {
|
|
|
// vipList.push({
|
|
|
// level: levelList[value.caption],
|
|
|
// text: value.price,
|
|
|
// currentLevel: (value.vipLevel === vipLevel)
|
|
|
// });
|
|
|
// });
|
|
|
|
|
|
// vipList.length && (dest.vipLevel = {
|
|
|
// list: vipList
|
|
|
// });
|
|
|
|
|
|
// }
|
|
|
|
|
|
// // 上市期
|
|
|
// origin.expectArrivalTime && (dest.periodOfMarket = `${origin.expectArrivalTime}月`);
|
|
|
|
|
|
// // 商品咨询
|
|
|
// dest.feedbacks = {
|
|
|
// consults: [],
|
|
|
// consultsNum: 0
|
|
|
// };
|
|
|
|
|
|
// let consultParams = {
|
|
|
// product_id: origin.productId
|
|
|
// };
|
|
|
|
|
|
// if (_.has(dest, 'feedbacks.consultsNum')) {
|
|
|
// consultParams.total = dest.feedbacks.consultsNum;
|
|
|
// dest.feedbacks.consultsUrl = helpers.urlFormat('/product/detail/consults', consultParams);
|
|
|
// } else {
|
|
|
// dest.feedbacks.consultsUrl = helpers.urlFormat('/product/detail/consultform', consultParams);
|
|
|
// }
|
|
|
|
|
|
// // 商品评价
|
|
|
// dest.feedbacks.commentsUrl = helpers.urlFormat('/product/detail/comments', {
|
|
|
// product_id: origin.productId,
|
|
|
// });
|
|
|
|
|
|
// // 品牌信息
|
|
|
// if (origin.brand) {
|
|
|
// let extra = `?productSkn=${origin.productSkn}&brandId=${origin.brandInfo.brandId}`;
|
|
|
|
|
|
// dest.preferenceUrl = `/product/detail/preference${extra}`;
|
|
|
// }
|
|
|
|
|
|
// dest.productSkn = origin.productSkn;
|
|
|
|
|
|
// // 商品信息
|
|
|
// if (origin.goodsList) {
|
|
|
// let goodsGroup = [],
|
|
|
// sizeName = '',
|
|
|
// colorList = [],
|
|
|
// sizeList = {},
|
|
|
// allSizeList = {},
|
|
|
// colorStorageGroup = {},
|
|
|
// colorStorageNum = 0;
|
|
|
|
|
|
// _.forEach(origin.goodsList, function(value) {
|
|
|
// if (value.status === 0) {
|
|
|
// return;
|
|
|
// }
|
|
|
|
|
|
// colorStorageNum = 0;
|
|
|
|
|
|
// // 商品分组
|
|
|
// if (value.imagesList) {
|
|
|
// _.forEach(value.imagesList, function(good) {
|
|
|
// goodsGroup.push({
|
|
|
// goodsId: value.goodsId,
|
|
|
// img: good.imageUrl
|
|
|
// });
|
|
|
// });
|
|
|
// }
|
|
|
|
|
|
// // 商品的尺码列表
|
|
|
// colorStorageGroup[value.productSkc] = {};
|
|
|
// if (value.sizeList) {
|
|
|
// sizeList[value.productSkc] = [];
|
|
|
// _.forEach(value.sizeList, function(size) {
|
|
|
// sizeList[value.productSkc].push({
|
|
|
// id: size.sizeId,
|
|
|
// skuId: size.productSku,
|
|
|
// goodsId: value.goodsId,
|
|
|
// colorId: value.colorId,
|
|
|
// name: size.sizeName,
|
|
|
// sizeNum: size.storageNumber
|
|
|
// });
|
|
|
|
|
|
// sizeName = size.sizeName;
|
|
|
|
|
|
// // 所有尺码列表,赋值用于前端展示默认尺码的时候
|
|
|
// // 判断出没有库存则显示灰色
|
|
|
// let build = {
|
|
|
// id: size.sizeId,
|
|
|
// storage: size.storageNumber
|
|
|
// };
|
|
|
|
|
|
// allSizeList[sizeName] = (allSizeList[sizeName] === null ||
|
|
|
// typeof allSizeList[sizeName] === 'undefined') ? build : allSizeList[sizeName];
|
|
|
// colorStorageNum += parseInt(size.storageNumber, 10);
|
|
|
// colorStorageGroup[value.productSkc][sizeName] = parseInt(size.storageNumber, 10);
|
|
|
// });
|
|
|
|
|
|
// // 颜色分组
|
|
|
// colorList.push({
|
|
|
// id: value.colorId,
|
|
|
// skcId: value.productSkc,
|
|
|
// name: value.colorName,
|
|
|
// colorNum: colorStorageNum
|
|
|
// });
|
|
|
// }
|
|
|
|
|
|
// // 缩略图
|
|
|
// thumbImageList.push({
|
|
|
// img: value.colorImage
|
|
|
// });
|
|
|
|
|
|
// // 商品库存总数
|
|
|
// totalStorageNum += _.toNumber(colorStorageNum);
|
|
|
// });
|
|
|
|
|
|
// // 遍历所有尺码,构建颜色显示数据
|
|
|
// let i = 1;
|
|
|
|
|
|
// sizeGroup[0] = {
|
|
|
// size: []
|
|
|
// };
|
|
|
// _.forEach(allSizeList, (value, key) => {
|
|
|
// // 默认尺码
|
|
|
// sizeGroup[0].size.push({
|
|
|
// name: key,
|
|
|
// sizeNum: _.toNumber(value.storage) > 0 ? true : false,
|
|
|
// id: value.id
|
|
|
// });
|
|
|
|
|
|
// colorGroup[i] = {
|
|
|
// color: []
|
|
|
// };
|
|
|
|
|
|
// // 各个颜色的尺码, 每行显示一个尺码对应的颜色
|
|
|
// _.forEach(colorList, (colorArr) => {
|
|
|
// let tempColorArr = _.cloneDeep(colorArr);
|
|
|
|
|
|
// if (colorStorageGroup[tempColorArr.skcId] &&
|
|
|
// colorStorageGroup[tempColorArr.skcId][key]) {
|
|
|
// tempColorArr.colorNum = colorStorageGroup[tempColorArr.skcId][key];
|
|
|
// } else {
|
|
|
// tempColorArr.colorNum = 0;
|
|
|
// }
|
|
|
// colorGroup[i].color.push(Object.assign({}, tempColorArr));
|
|
|
// });
|
|
|
// colorGroup[i].id = value.id;
|
|
|
|
|
|
// ++i;
|
|
|
// });
|
|
|
|
|
|
// colorGroup[0] = {
|
|
|
// color: []
|
|
|
// };
|
|
|
|
|
|
// // 遍历所有颜色, 构建尺码显示数据
|
|
|
// i = 1;
|
|
|
// _.forEach(colorList, function(value) {
|
|
|
// // 各个尺码的颜色, 每行显示一个颜色的对应尺码
|
|
|
// sizeGroup[i] = {
|
|
|
// size: sizeList[value.skcId],
|
|
|
// colorId: value.skcId
|
|
|
// };
|
|
|
|
|
|
// // 默认颜色
|
|
|
// colorGroup[0].color.push(value);
|
|
|
// ++i;
|
|
|
// });
|
|
|
|
|
|
|
|
|
// // 商品图:多个
|
|
|
// if (goodsGroup.length > 1) {
|
|
|
// let bannerList = [];
|
|
|
|
|
|
// _.forEach(goodsGroup, function(value) {
|
|
|
// bannerList.push({
|
|
|
// img: value.img
|
|
|
// });
|
|
|
// });
|
|
|
|
|
|
// dest.bannerTop = {
|
|
|
// list: bannerList
|
|
|
// };
|
|
|
// } else if (goodsGroup[0]) {
|
|
|
// dest.bannerTop = {
|
|
|
// img: goodsGroup[0].img
|
|
|
// };
|
|
|
// }
|
|
|
// }
|
|
|
|
|
|
// // 悬浮的购物车信息
|
|
|
// dest.cartInfo = {
|
|
|
// cartUrl: helpers.urlFormat('/cart/index/index'),
|
|
|
// numInCart: 0,
|
|
|
// goodsInstore: origin.storageSum
|
|
|
// };
|
|
|
// let soldOut = (origin.storageSum === 0) || (totalStorageNum === 0); // status
|
|
|
// let notForSale = origin.attribute === 2;
|
|
|
|
|
|
// // 显示加入购物车链接
|
|
|
// if (!soldOut && !notForSale) {
|
|
|
// _.orderBy(colorGroup);
|
|
|
|
|
|
// Object.assign(dest.cartInfo, {
|
|
|
// productId: origin.productId,
|
|
|
// thumbs: thumbImageList,
|
|
|
// name: dest.goodsName ? dest.goodsName : '',
|
|
|
// price: dest.goodsPrice.previousPrice ? dest.goodsPrice.previousPrice : '',
|
|
|
// salePrice: dest.goodsPrice.currentPrice ? dest.goodsPrice.currentPrice : '',
|
|
|
// totalNum: totalStorageNum,
|
|
|
// colors: _.toArray(colorGroup),
|
|
|
// sizes: sizeGroup
|
|
|
// });
|
|
|
|
|
|
// // 限购商品
|
|
|
// if (origin.isLimitBuy) {
|
|
|
// // 是否开售
|
|
|
// let isBeginSale = (origin.saleStatus === 1);
|
|
|
|
|
|
// // 限购商品有关的展示状态
|
|
|
// let showStatus = 1;
|
|
|
|
|
|
// origin.showStatus && (showStatus = parseInt(origin.showStatus, 10));
|
|
|
|
|
|
// // 处理限购商品有关的按钮状态
|
|
|
// dest = _procShowStatus(dest, showStatus, isBeginSale);
|
|
|
|
|
|
// dest.cartInfo.limitProductCode = origin.limitProductCode;
|
|
|
// dest.cartInfo.limitCodeUrl = _getLimitCodeUrl(origin.limitProductCode, origin.productSkn, ua);
|
|
|
// dest.cartInfo.limitProductPay = helpers.urlFormat('/cart/index/orderEnsure');
|
|
|
// } else {
|
|
|
// dest.cartInfo.addToCartUrl = helpers.urlFormat('/product/buy_' + origin.productId + '_' +
|
|
|
// origin.goodsList.goodsId + '.html');
|
|
|
// }
|
|
|
// } else if (notForSale) {
|
|
|
// dest.cartInfo.notForSale = true;
|
|
|
// } else if (soldOut) {
|
|
|
// dest.cartInfo.soldOut = true;
|
|
|
// }
|
|
|
|
|
|
// // 是否收藏
|
|
|
// dest.isCollect = false;
|
|
|
// if (origin.isCollect === 'Y') {
|
|
|
// dest.isCollect = true;
|
|
|
// dest.cartInfo.isCollect = true;
|
|
|
// }
|
|
|
|
|
|
// // 底部简介URL链接
|
|
|
// dest.introUrl = '/product/detail/intro/' + origin.productSkn;
|
|
|
// dest.id = origin.productId;
|
|
|
|
|
|
// // 虚拟商品(门票)
|
|
|
// if (origin.attribute * 1 === 3) {
|
|
|
// dest.tickets = true;
|
|
|
// dest.ticketsConfirm = helpers.urlFormat('/cart/index/ticketsConfirm');
|
|
|
|
|
|
// // 展览票
|
|
|
// if (origin.productSkn * 1 === SINGLE_TICKETS_SKN) {
|
|
|
// dest.single = true;
|
|
|
// } else {
|
|
|
// // 套票
|
|
|
// dest.package = true;
|
|
|
// }
|
|
|
|
|
|
// // 购票限制
|
|
|
// dest.cartInfo.limit = 4;
|
|
|
|
|
|
// // 清空活动
|
|
|
// dest.goodsDiscount = [];
|
|
|
|
|
|
// // 来自登录页,自动弹出选择框
|
|
|
// // if (isset($_GET['product_type']) && $_GET['product_type'] == 'ticket') {
|
|
|
// // $result['showPannel'] = true;
|
|
|
// // }
|
|
|
// }
|
|
|
|
|
|
// return dest;
|
|
|
// };
|
|
|
|
|
|
let _getShopsInfo = (brandId) => {
|
|
|
if (!brandId) {
|
|
|
return Promise.resolve([]);
|
|
|
}
|
|
|
return api.get('', {
|
|
|
method: 'app.shop.seckill.queryShopsByBrandId',
|
|
|
brand_id: _.toString(brandId)
|
|
|
}, {
|
|
|
cache: true
|
|
|
}).then(shops => {
|
|
|
if (shops.code === 200) {
|
|
|
return _processShopsInfo(shops.data);
|
|
|
}
|
|
|
|
|
|
return [];
|
|
|
});
|
|
|
};
|
|
|
|
|
|
let _getPromotionInfo = (skn) => {
|
|
|
return api.get('', {
|
|
|
method: 'app.product.seckill.promotion',
|
|
|
product_skn: _.toString(skn)
|
|
|
}, {
|
|
|
cache: true
|
|
|
}).then((result) => {
|
|
|
if (result.code === 200) {
|
|
|
return result.data;
|
|
|
}
|
|
|
|
|
|
return {};
|
|
|
});
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* [单独获取用户收藏商品状态]
|
|
|
*/
|
|
|
let _getFavorite = (productId, uid) => {
|
|
|
if (!uid) {
|
|
|
return Promise.resolve({});
|
|
|
}
|
|
|
return singleAPI.get('favorite', {
|
|
|
method: 'app.favorite.isFavoriteNew',
|
|
|
uid: uid,
|
|
|
id: productId
|
|
|
}).then((result) => {
|
|
|
if (result.code === 200) {
|
|
|
return result.data;
|
|
|
}
|
|
|
|
|
|
return {};
|
|
|
});
|
|
|
};
|
|
|
|
|
|
|
|
|
// let getProductData = (data) => {
|
|
|
// let finalResult;
|
|
|
// let params = {
|
|
|
// method: 'app.product.seckill.data'
|
|
|
// };
|
|
|
|
|
|
// if (data.id) { // 通过 productId 获取商品详情
|
|
|
// Object.assign(params, {
|
|
|
// product_id: _.toString(data.id)
|
|
|
// });
|
|
|
// } else if (data.productSkn) { // 通过 productSkn 获取商品详情
|
|
|
// Object.assign(params, {
|
|
|
// product_skn: _.toString(data.productSkn)
|
|
|
// });
|
|
|
// }
|
|
|
|
|
|
// if (data.uid) {
|
|
|
// params.uid = data.uid;
|
|
|
// }
|
|
|
|
|
|
// return _getUserProfile(params.uid).then((user) => {
|
|
|
// data.vipLevel = (user.data && user.data.vip_info && user.data.vip_info.cur_level) || '0';
|
|
|
// data.isStudent = (user.data && user.data.vip_info && user.data.vip_info.is_student) ? true : false;
|
|
|
// params.is_student = data.isStudent ? 1 : 0;
|
|
|
// params.current_vip_level = data.vipLevel;
|
|
|
|
|
|
// return api.get('', params, {
|
|
|
// code: 200
|
|
|
// }).then(global.yoho.camelCase).then(result => {
|
|
|
// if (result.code === 500 || !result.data) {
|
|
|
// return {};
|
|
|
// }
|
|
|
// result = result.data;
|
|
|
// return Promise.all([
|
|
|
// _getShopsInfo(_.get(result, 'brandInfo.brandId', 0)),
|
|
|
// _getPromotionInfo(result.productSkn),
|
|
|
// comment.getCommentInfo({
|
|
|
// productId: result.productId
|
|
|
// }),
|
|
|
// _getCommonConsult(),
|
|
|
// comment.getConsults(result.productId, 1, 2)
|
|
|
// ]).then((info) => {
|
|
|
// result.promotionBoList = info[1];
|
|
|
// finalResult = _detailDataPkg(result, data.uid, data.vipLevel, data.ua);
|
|
|
// finalResult.enterStore = info[0];
|
|
|
// finalResult.isStudent = data.isStudent;
|
|
|
|
|
|
// Object.assign(finalResult.feedbacks, info[2]);
|
|
|
|
|
|
// /* 如果有咨询,显示咨询,否则显示常见问题 */
|
|
|
// if (info[4].total) {
|
|
|
// finalResult.feedbacks.consultsNum = parseInt(info[4].total, 10);
|
|
|
|
|
|
// Object.assign(finalResult.feedbacks, {
|
|
|
// commonConsults: false,
|
|
|
// consultsNum: parseInt(info[4].total, 10),
|
|
|
// consults: _.take(info[4].list, 2)
|
|
|
// });
|
|
|
// } else if (!_.isEmpty(info[3]) && !_.get(info[2], 'feedbacks.consultsNum', 0)) {
|
|
|
// Object.assign(finalResult.feedbacks, {
|
|
|
// commonConsults: true,
|
|
|
// consultsNum: true,
|
|
|
// consults: _.take(info[3], 2)
|
|
|
// });
|
|
|
// }
|
|
|
// return finalResult;
|
|
|
// });
|
|
|
|
|
|
// });
|
|
|
// });
|
|
|
// };
|
|
|
//
|
|
|
/**
|
|
|
* [商品获取数据] pagecache重构
|
|
|
*/
|
|
|
let getProductData = (data) => {
|
|
|
let finalResult;
|
|
|
let params = {
|
|
|
method: 'app.product.seckill.data'
|
|
|
};
|
|
|
|
|
|
if (data.id) { // 通过 productId 获取商品详情
|
|
|
Object.assign(params, {
|
|
|
product_id: _.toString(data.id)
|
|
|
});
|
|
|
} else if (data.productSkn) { // 通过 productSkn 获取商品详情
|
|
|
Object.assign(params, {
|
|
|
product_skn: _.toString(data.productSkn)
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// pagecache重构
|
|
|
// if (data.uid) {
|
|
|
// params.uid = data.uid;
|
|
|
// }
|
|
|
// pagecache重构
|
|
|
// return _getUserProfile(params.uid).then((user) => {
|
|
|
// data.vipLevel = (user.data && user.data.vip_info && user.data.vip_info.cur_level) || '0';
|
|
|
// data.isStudent = (user.data && user.data.vip_info && user.data.vip_info.is_student) ? true : false;
|
|
|
// params.is_student = data.isStudent ? 1 : 0;
|
|
|
// params.current_vip_level = data.vipLevel;
|
|
|
|
|
|
return api.get('', params, {
|
|
|
code: 200,
|
|
|
cache: true
|
|
|
}).then(result => {
|
|
|
if (result.code === 500 || !result.data) {
|
|
|
return {};
|
|
|
}
|
|
|
result = result.data;
|
|
|
result.goods_id = data.goodsId;
|
|
|
return Promise.all([
|
|
|
_getShopsInfo(_.get(result, 'brand_info.brand_id', 0)),
|
|
|
|
|
|
// _getPromotionInfo(result.product_skn),
|
|
|
comment.getCommentInfo({
|
|
|
productId: result.product_id
|
|
|
}),
|
|
|
_getCommonConsult(),
|
|
|
comment.getConsults(result.product_id, 1, 2)
|
|
|
]).then((info) => {
|
|
|
// result.promotionBoList = info[1];
|
|
|
// finalResult = _detailDataPkg(result, data.uid, data.vipLevel, data.ua);
|
|
|
finalResult = _detailDataPkg(result, data.ua);
|
|
|
finalResult.enterStore = info[0];
|
|
|
finalResult.isStudent = data.isStudent;
|
|
|
|
|
|
Object.assign(finalResult.feedbacks, info[1]);
|
|
|
|
|
|
/* 如果有咨询,显示咨询,否则显示常见问题 */
|
|
|
if (info[3].total) {
|
|
|
finalResult.feedbacks.consultsNum = parseInt(info[3].total, 10);
|
|
|
|
|
|
Object.assign(finalResult.feedbacks, {
|
|
|
commonConsults: false,
|
|
|
consultsNum: parseInt(info[3].total, 10),
|
|
|
consults: _.take(info[3].list, 2)
|
|
|
});
|
|
|
} else if (!_.isEmpty(info[2]) && !_.get(info[1], 'feedbacks.consultsNum', 0)) {
|
|
|
Object.assign(finalResult.feedbacks, {
|
|
|
commonConsults: true,
|
|
|
consultsNum: true,
|
|
|
consults: _.take(info[2], 2)
|
|
|
});
|
|
|
}
|
|
|
return finalResult;
|
|
|
});
|
|
|
|
|
|
});
|
|
|
|
|
|
// });
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* [商品数据格式化] pagecache重构
|
|
|
*/
|
|
|
// const _detailDataPkg = (origin, uid, vipLevel, ua) => {
|
|
|
const _detailDataPkg = (origin, ua) => {
|
|
|
let dest = {}, // 结果输出
|
|
|
thumbImageList = [],
|
|
|
colorGroup = {},
|
...
|
...
|
@@ -140,40 +1139,39 @@ const _detailDataPkg = (origin, uid, vipLevel, ua) => { |
|
|
totalStorageNum = 0;
|
|
|
|
|
|
// 商品名称
|
|
|
if (!origin.productName) {
|
|
|
if (!origin.product_name) {
|
|
|
dest.feedbacks = {};
|
|
|
return dest;
|
|
|
}
|
|
|
|
|
|
dest.goodsName = origin.productName;
|
|
|
dest.goodsName = origin.product_name;
|
|
|
|
|
|
// 是否是虚拟商品
|
|
|
dest.virtualGoods = (origin.attribute * 1 === 3);
|
|
|
|
|
|
// 用户未登录时
|
|
|
if (!uid) {
|
|
|
dest.loginUrl = helpers.urlFormat('/signin.html', {
|
|
|
refer: helpers.urlFormat('/product/show_' + origin.productSkn + '.html')
|
|
|
});
|
|
|
}
|
|
|
// 用户未登录时 pagecache重构
|
|
|
// if (!uid) {
|
|
|
// dest.loginUrl = helpers.urlFormat('/signin.html', {
|
|
|
// refer: helpers.urlFormat('/product/show_' + origin.product_skn + '.html')
|
|
|
// });
|
|
|
// }
|
|
|
|
|
|
// 商品促销短语
|
|
|
origin.salesPhrase && (dest.goodsSubtitle = origin.salesPhrase);
|
|
|
origin.sales_phrase && (dest.goodsSubtitle = origin.sales_phrase);
|
|
|
|
|
|
// 促销信息 TODO: 换新接口
|
|
|
if (origin.promotionBoList) {
|
|
|
let discountList = [];
|
|
|
// 促销信息 TODO: 换新接口 pagecache重构
|
|
|
// if (origin.promotionBoList) {
|
|
|
// let discountList = [];
|
|
|
|
|
|
_.forEach(origin.promotionBoList, function(value) {
|
|
|
discountList.push({
|
|
|
text: `【${value.promotionType}】${value.promotionTitle}`
|
|
|
});
|
|
|
});
|
|
|
// _.forEach(origin.promotionBoList, function(value) {
|
|
|
// discountList.push({
|
|
|
// text: `【${value.promotionType}】${value.promotionTitle}`
|
|
|
// });
|
|
|
// });
|
|
|
|
|
|
discountList.length && (dest.goodsDiscount = {
|
|
|
list: discountList
|
|
|
});
|
|
|
}
|
|
|
// discountList.length && (dest.goodsDiscount = {
|
|
|
// list: discountList
|
|
|
// });
|
|
|
// }
|
|
|
|
|
|
// 商品标签
|
|
|
if (origin.tags) {
|
...
|
...
|
@@ -186,42 +1184,42 @@ const _detailDataPkg = (origin, uid, vipLevel, ua) => { |
|
|
dest.tags = productTags;
|
|
|
}
|
|
|
|
|
|
// 商品价格
|
|
|
let goodsPrice = {
|
|
|
currentPrice: origin.formatSalesPrice === '0' ? origin.formatMarketPrice : origin.formatSalesPrice
|
|
|
};
|
|
|
// 商品价格 pagecache重构
|
|
|
// let goodsPrice = {
|
|
|
// currentPrice: origin.format_sales_price === '0' ? origin.format_market_price : origin.format_sales_price
|
|
|
// };
|
|
|
|
|
|
if (origin.formatSalesPrice !== '0' && origin.formatMarketPrice !== origin.formatSalesPrice) {
|
|
|
goodsPrice.previousPrice = origin.formatMarketPrice;
|
|
|
}
|
|
|
// if (origin.format_sales_price !== '0' && origin.format_market_price !== origin.format_sales_price) {
|
|
|
// goodsPrice.previousPrice = origin.format_market_price;
|
|
|
// }
|
|
|
|
|
|
dest.goodsPrice = goodsPrice;
|
|
|
// dest.goodsPrice = goodsPrice;
|
|
|
|
|
|
// 商品返回 YOHO 币
|
|
|
origin.yohoCoinNum && (dest.commodityReturn = origin.yohoCoinNum);
|
|
|
// 商品返回 YOHO 币 pagecache重构
|
|
|
// origin.yohoCoinNum && (dest.commodityReturn = origin.yohoCoinNum);
|
|
|
|
|
|
// VIP 商品价格
|
|
|
if (origin.vip) {
|
|
|
let vipList = [];
|
|
|
let levelList = {
|
|
|
银卡: 1,
|
|
|
金卡: 2,
|
|
|
白金: 3
|
|
|
};
|
|
|
// VIP 商品价格 pagecache重构
|
|
|
// if (origin.vip) {
|
|
|
// let vipList = [];
|
|
|
// let levelList = {
|
|
|
// 银卡: 1,
|
|
|
// 金卡: 2,
|
|
|
// 白金: 3
|
|
|
// };
|
|
|
|
|
|
_.forEach(origin.vip, function(value) {
|
|
|
vipList.push({
|
|
|
level: levelList[value.caption],
|
|
|
text: value.price,
|
|
|
currentLevel: (levelList[value.caption] === parseInt(vipLevel, 10))
|
|
|
});
|
|
|
});
|
|
|
// _.forEach(origin.vip, function(value) {
|
|
|
// vipList.push({
|
|
|
// level: levelList[value.caption],
|
|
|
// text: value.price,
|
|
|
// currentLevel: (value.vipLevel === vipLevel)
|
|
|
// });
|
|
|
// });
|
|
|
|
|
|
vipList.length && (dest.vipLevel = {
|
|
|
list: vipList
|
|
|
});
|
|
|
// vipList.length && (dest.vipLevel = {
|
|
|
// list: vipList
|
|
|
// });
|
|
|
|
|
|
}
|
|
|
// }
|
|
|
|
|
|
// 上市期
|
|
|
origin.expectArrivalTime && (dest.periodOfMarket = `${origin.expectArrivalTime}月`);
|
...
|
...
|
@@ -233,7 +1231,7 @@ const _detailDataPkg = (origin, uid, vipLevel, ua) => { |
|
|
};
|
|
|
|
|
|
let consultParams = {
|
|
|
product_id: origin.productId
|
|
|
product_id: origin.product_id
|
|
|
};
|
|
|
|
|
|
if (_.has(dest, 'feedbacks.consultsNum')) {
|
...
|
...
|
@@ -245,20 +1243,368 @@ const _detailDataPkg = (origin, uid, vipLevel, ua) => { |
|
|
|
|
|
// 商品评价
|
|
|
dest.feedbacks.commentsUrl = helpers.urlFormat('/product/detail/comments', {
|
|
|
product_id: origin.productId,
|
|
|
product_id: origin.product_id
|
|
|
});
|
|
|
|
|
|
// 品牌信息
|
|
|
if (origin.brand) {
|
|
|
let extra = `?productSkn=${origin.productSkn}&brandId=${origin.brandInfo.brandId}`;
|
|
|
let extra = `?productSkn=${origin.product_skn}&brandId=${origin.brand_info.brand_id}`;
|
|
|
|
|
|
dest.preferenceUrl = `/product/detail/preference${extra}`;
|
|
|
}
|
|
|
|
|
|
dest.productSkn = origin.productSkn;
|
|
|
dest.productSkn = origin.product_skn;
|
|
|
|
|
|
// 商品信息
|
|
|
if (origin.goodsList) {
|
|
|
if (origin.goods_list.length) {
|
|
|
let goodsGroup = [];
|
|
|
|
|
|
// pagecache重构
|
|
|
// sizeName = '',
|
|
|
// colorList = [],
|
|
|
// sizeList = {},
|
|
|
// allSizeList = {},
|
|
|
// colorStorageGroup = {},
|
|
|
// colorStorageNum = 0;
|
|
|
// pagecache重构
|
|
|
_.forEach(origin.goods_list, function(value) {
|
|
|
if (value.status === 0) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
// colorStorageNum = 0;
|
|
|
|
|
|
// 商品分组
|
|
|
if (value.images_list) {
|
|
|
_.forEach(value.images_list, function(good) {
|
|
|
goodsGroup.push({
|
|
|
goodsId: value.goods_id,
|
|
|
img: good.image_url
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// // 商品的尺码列表
|
|
|
// colorStorageGroup[value.product_skc] = {};
|
|
|
// if (value.size_list) {
|
|
|
// sizeList[value.product_skc] = [];
|
|
|
// _.forEach(value.size_list, function(size) {
|
|
|
// sizeList[value.product_skc].push({
|
|
|
// id: size.size_id,
|
|
|
// skuId: size.product_sku,
|
|
|
// goodsId: value.goods_id,
|
|
|
// colorId: value.color_id,
|
|
|
// name: size.size_name,
|
|
|
// sizeNum: size.storage_number
|
|
|
// });
|
|
|
|
|
|
// sizeName = size.size_name;
|
|
|
|
|
|
// // 所有尺码列表,赋值用于前端展示默认尺码的时候
|
|
|
// // 判断出没有库存则显示灰色
|
|
|
// let build = {
|
|
|
// id: size.size_id,
|
|
|
// storage: size.storage_number
|
|
|
// };
|
|
|
|
|
|
// allSizeList[sizeName] = (allSizeList[sizeName] === null ||
|
|
|
// typeof allSizeList[sizeName] === 'undefined') ? build : allSizeList[sizeName];
|
|
|
// colorStorageNum += parseInt(size.storage_number, 10);
|
|
|
// colorStorageGroup[value.product_skc][sizeName] = parseInt(size.storage_number, 10);
|
|
|
// });
|
|
|
|
|
|
// // 颜色分组
|
|
|
// colorList.push({
|
|
|
// id: value.color_id,
|
|
|
// skcId: value.product_skc,
|
|
|
// name: value.color_name,
|
|
|
// colorNum: colorStorageNum
|
|
|
// });
|
|
|
// }
|
|
|
|
|
|
// // 缩略图
|
|
|
// thumbImageList.push({
|
|
|
// img: value.color_image
|
|
|
// });
|
|
|
|
|
|
// // 商品库存总数
|
|
|
// totalStorageNum += _.toNumber(colorStorageNum);
|
|
|
// });
|
|
|
|
|
|
// // 遍历所有尺码,构建颜色显示数据
|
|
|
// let i = 1;
|
|
|
|
|
|
// sizeGroup[0] = {
|
|
|
// size: []
|
|
|
// };
|
|
|
// _.forEach(allSizeList, (value, key) => {
|
|
|
// // 默认尺码
|
|
|
// sizeGroup[0].size.push({
|
|
|
// name: key,
|
|
|
// sizeNum: _.toNumber(value.storage) > 0 ? true : false,
|
|
|
// id: value.id
|
|
|
// });
|
|
|
|
|
|
// colorGroup[i] = {
|
|
|
// color: []
|
|
|
// };
|
|
|
|
|
|
// // 各个颜色的尺码, 每行显示一个尺码对应的颜色
|
|
|
// _.forEach(colorList, (colorArr) => {
|
|
|
// let tempColorArr = _.cloneDeep(colorArr);
|
|
|
|
|
|
// if (colorStorageGroup[tempColorArr.skcId] &&
|
|
|
// colorStorageGroup[tempColorArr.skcId][key]) {
|
|
|
// tempColorArr.colorNum = colorStorageGroup[tempColorArr.skcId][key];
|
|
|
// } else {
|
|
|
// tempColorArr.colorNum = 0;
|
|
|
// }
|
|
|
// colorGroup[i].color.push(Object.assign({}, tempColorArr));
|
|
|
// });
|
|
|
// colorGroup[i].id = value.id;
|
|
|
|
|
|
// ++i;
|
|
|
// });
|
|
|
|
|
|
// colorGroup[0] = {
|
|
|
// color: []
|
|
|
// };
|
|
|
|
|
|
// // 遍历所有颜色, 构建尺码显示数据
|
|
|
// i = 1;
|
|
|
// _.forEach(colorList, function(value) {
|
|
|
// // 各个尺码的颜色, 每行显示一个颜色的对应尺码
|
|
|
// sizeGroup[i] = {
|
|
|
// size: sizeList[value.skcId],
|
|
|
// colorId: value.skcId
|
|
|
// };
|
|
|
|
|
|
// // 默认颜色
|
|
|
// colorGroup[0].color.push(value);
|
|
|
// ++i;
|
|
|
});
|
|
|
|
|
|
|
|
|
// 商品图:多个
|
|
|
if (goodsGroup.length > 1) {
|
|
|
let bannerList = [];
|
|
|
|
|
|
_.forEach(goodsGroup, function(value) {
|
|
|
bannerList.push({
|
|
|
img: value.img
|
|
|
});
|
|
|
});
|
|
|
|
|
|
dest.bannerTop = {
|
|
|
list: bannerList
|
|
|
};
|
|
|
} else if (goodsGroup[0]) {
|
|
|
dest.bannerTop = {
|
|
|
img: goodsGroup[0].img
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 悬浮的购物车信息
|
|
|
dest.cartInfo = {
|
|
|
cartUrl: helpers.urlFormat('/cart/index/index'),
|
|
|
numInCart: 0,
|
|
|
goodsInstore: origin.storage_sum
|
|
|
};
|
|
|
|
|
|
// pagecache重构
|
|
|
// let soldOut = (origin.storage_sum === 0) || (totalStorageNum === 0); // status
|
|
|
// let notForSale = origin.attribute === 2;
|
|
|
|
|
|
// 显示加入购物车链接 pagecache重构
|
|
|
// if (!soldOut && !notForSale) {
|
|
|
// _.orderBy(colorGroup);
|
|
|
|
|
|
// Object.assign(dest.cartInfo, {
|
|
|
// productId: origin.product_id,
|
|
|
// thumbs: thumbImageList,
|
|
|
// name: dest.goodsName ? dest.goodsName : '',
|
|
|
// price: dest.goodsPrice.previousPrice ? dest.goodsPrice.previousPrice : '',
|
|
|
// salePrice: dest.goodsPrice.currentPrice ? dest.goodsPrice.currentPrice : '',
|
|
|
// totalNum: totalStorageNum,
|
|
|
// colors: _.toArray(colorGroup),
|
|
|
// sizes: sizeGroup
|
|
|
// });
|
|
|
|
|
|
// // 限购商品
|
|
|
// if (origin.isLimitBuy) {
|
|
|
// // 是否开售
|
|
|
// let isBeginSale = (origin.saleStatus === 1);
|
|
|
|
|
|
// // 限购商品有关的展示状态
|
|
|
// let showStatus = 1;
|
|
|
|
|
|
// origin.showStatus && (showStatus = parseInt(origin.showStatus, 10));
|
|
|
|
|
|
// // 处理限购商品有关的按钮状态
|
|
|
// dest = _procShowStatus(dest, showStatus, isBeginSale);
|
|
|
|
|
|
// dest.cartInfo.limitProductCode = origin.limitProductCode;
|
|
|
// dest.cartInfo.limitCodeUrl = _getLimitCodeUrl(origin.limitProductCode, origin.product_skn, ua);
|
|
|
// dest.cartInfo.limitProductPay = helpers.urlFormat('/cart/index/orderEnsure');
|
|
|
// } else {
|
|
|
// dest.cartInfo.addToCartUrl = helpers.urlFormat('/product/buy_' + origin.product_id + '_' +
|
|
|
// origin.goods_list.goods_id + '.html');
|
|
|
// }
|
|
|
// } else if (notForSale) {
|
|
|
// dest.cartInfo.notForSale = true;
|
|
|
// } else if (soldOut) {
|
|
|
// dest.cartInfo.soldOut = true;
|
|
|
// }
|
|
|
|
|
|
// // 是否收藏
|
|
|
// dest.isCollect = false;
|
|
|
// if (origin.is_collect === 'Y') {
|
|
|
// dest.isCollect = true;
|
|
|
// dest.cartInfo.isCollect = true;
|
|
|
// }
|
|
|
|
|
|
// 底部简介URL链接
|
|
|
dest.introUrl = '/product/detail/intro/' + origin.product_skn;
|
|
|
dest.id = origin.product_id;
|
|
|
dest.goodsId = origin.goods_id;
|
|
|
|
|
|
|
|
|
|
|
|
return dest;
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* [商品信息的异步数据获取]
|
|
|
*/
|
|
|
let getProductAsyncData = (data) => {
|
|
|
let finalResult;
|
|
|
let params = {
|
|
|
method: 'app.product.seckill.data'
|
|
|
};
|
|
|
|
|
|
if (data.id) { // 通过 productId 获取商品详情
|
|
|
Object.assign(params, {
|
|
|
product_id: _.toString(data.id)
|
|
|
});
|
|
|
} else if (data.productSkn) { // 通过 productSkn 获取商品详情
|
|
|
Object.assign(params, {
|
|
|
product_skn: _.toString(data.productSkn)
|
|
|
});
|
|
|
}
|
|
|
if (data.uid) {
|
|
|
params.uid = data.uid;
|
|
|
}
|
|
|
|
|
|
params.is_student = data.isStudent ? 1 : 0;
|
|
|
params.current_vip_level = data.vipLevel;
|
|
|
|
|
|
return api.get('', params, {
|
|
|
code: 200,
|
|
|
cache: true
|
|
|
}).then(result => {
|
|
|
if (result.code === 500 || !result.data) {
|
|
|
return {};
|
|
|
}
|
|
|
result = result.data;
|
|
|
result.goods_id = data.goodsId;
|
|
|
return Promise.all([_getPromotionInfo(result.product_skn), _getFavorite(result.product_id, data.uid)]).then((res) => {
|
|
|
result.promotionBoList = res[0];
|
|
|
var isFavorite = res[1];
|
|
|
finalResult = _detailDataPkgAsync(result, data.uid, data.vipLevel, data.ua);
|
|
|
finalResult.isCollect = isFavorite;
|
|
|
if (finalResult.cartInfo) {
|
|
|
finalResult.cartInfo.isCollect = isFavorite;
|
|
|
}
|
|
|
finalResult.isStudent = data.isStudent;
|
|
|
|
|
|
return finalResult;
|
|
|
});
|
|
|
|
|
|
});
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* [商品信息格式化异步接口]
|
|
|
*/
|
|
|
let _detailDataPkgAsync = (origin, uid, vipLevel, ua) => {
|
|
|
let dest = {}, // 结果输出
|
|
|
thumbImageList = [],
|
|
|
colorGroup = {},
|
|
|
sizeGroup = [],
|
|
|
totalStorageNum = 0;
|
|
|
|
|
|
// 用户未登录时
|
|
|
if (!uid) {
|
|
|
dest.loginUrl = helpers.urlFormat('/signin.html', {
|
|
|
refer: helpers.urlFormat('/product/show_' + origin.product_skn + '.html')
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 商品名称
|
|
|
if (!origin.product_name) {
|
|
|
dest.feedbacks = {};
|
|
|
return dest;
|
|
|
}
|
|
|
dest.goodsName = origin.product_name;
|
|
|
|
|
|
// 商品促销短语
|
|
|
origin.sales_phrase && (dest.goodsSubtitle = origin.sales_phrase);
|
|
|
|
|
|
// 促销信息 TODO: 换新接口
|
|
|
if (origin.promotionBoList) {
|
|
|
let discountList = [];
|
|
|
|
|
|
_.forEach(origin.promotionBoList, function(value) {
|
|
|
discountList.push({
|
|
|
text: `【${value.promotionType}】${value.promotionTitle}`
|
|
|
});
|
|
|
});
|
|
|
|
|
|
discountList.length && (dest.goodsDiscount = {
|
|
|
list: discountList
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 商品价格
|
|
|
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);
|
|
|
|
|
|
// VIP 商品价格
|
|
|
if (origin.vip) {
|
|
|
let vipList = [];
|
|
|
let levelList = {
|
|
|
银卡: 1,
|
|
|
金卡: 2,
|
|
|
白金: 3
|
|
|
};
|
|
|
|
|
|
_.forEach(origin.vip, function(value) {
|
|
|
vipList.push({
|
|
|
level: levelList[value.caption],
|
|
|
text: value.price,
|
|
|
currentLevel: (levelList[value.caption] === parseInt(vipLevel, 10))
|
|
|
});
|
|
|
});
|
|
|
|
|
|
vipList.length && (dest.vipLevel = {
|
|
|
list: vipList
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
// 商品信息
|
|
|
if (origin.goods_list.length) {
|
|
|
let goodsGroup = [],
|
|
|
sizeName = '',
|
|
|
colorList = [],
|
...
|
...
|
@@ -267,7 +1613,7 @@ const _detailDataPkg = (origin, uid, vipLevel, ua) => { |
|
|
colorStorageGroup = {},
|
|
|
colorStorageNum = 0;
|
|
|
|
|
|
_.forEach(origin.goodsList, function(value) {
|
|
|
_.forEach(origin.goods_list, function(value) {
|
|
|
if (value.status === 0) {
|
|
|
return;
|
|
|
}
|
...
|
...
|
@@ -275,63 +1621,63 @@ const _detailDataPkg = (origin, uid, vipLevel, ua) => { |
|
|
colorStorageNum = 0;
|
|
|
|
|
|
// 商品分组
|
|
|
if (value.imagesList) {
|
|
|
_.forEach(value.imagesList, function(good) {
|
|
|
if (value.images_list) {
|
|
|
_.forEach(value.images_list, function(good) {
|
|
|
goodsGroup.push({
|
|
|
goodsId: value.goodsId,
|
|
|
img: good.imageUrl
|
|
|
goodsId: value.goods_id,
|
|
|
img: good.image_url
|
|
|
});
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 商品的尺码列表
|
|
|
colorStorageGroup[value.productSkc] = {};
|
|
|
if (value.sizeList) {
|
|
|
sizeList[value.productSkc] = [];
|
|
|
_.forEach(value.sizeList, function(size) {
|
|
|
sizeList[value.productSkc].push({
|
|
|
id: size.sizeId,
|
|
|
skuId: size.productSku,
|
|
|
goodsId: value.goodsId,
|
|
|
colorId: value.colorId,
|
|
|
name: size.sizeName,
|
|
|
sizeNum: size.storageNumber
|
|
|
// 商品的尺码列表
|
|
|
colorStorageGroup[value.product_skc] = {};
|
|
|
if (value.size_list) {
|
|
|
sizeList[value.product_skc] = [];
|
|
|
_.forEach(value.size_list, function(size) {
|
|
|
sizeList[value.product_skc].push({
|
|
|
id: size.size_id,
|
|
|
skuId: size.product_sku,
|
|
|
goodsId: value.goods_id,
|
|
|
colorId: value.color_id,
|
|
|
name: size.size_name,
|
|
|
sizeNum: size.storage_number
|
|
|
});
|
|
|
|
|
|
sizeName = size.sizeName;
|
|
|
sizeName = size.size_name;
|
|
|
|
|
|
// 所有尺码列表,赋值用于前端展示默认尺码的时候
|
|
|
// 判断出没有库存则显示灰色
|
|
|
// 所有尺码列表,赋值用于前端展示默认尺码的时候
|
|
|
// 判断出没有库存则显示灰色
|
|
|
let build = {
|
|
|
id: size.sizeId,
|
|
|
storage: size.storageNumber
|
|
|
id: size.size_id,
|
|
|
storage: size.storage_number
|
|
|
};
|
|
|
|
|
|
allSizeList[sizeName] = (allSizeList[sizeName] === null ||
|
|
|
typeof allSizeList[sizeName] === 'undefined') ? build : allSizeList[sizeName];
|
|
|
colorStorageNum += parseInt(size.storageNumber, 10);
|
|
|
colorStorageGroup[value.productSkc][sizeName] = parseInt(size.storageNumber, 10);
|
|
|
colorStorageNum += parseInt(size.storage_number, 10);
|
|
|
colorStorageGroup[value.product_skc][sizeName] = parseInt(size.storage_number, 10);
|
|
|
});
|
|
|
|
|
|
// 颜色分组
|
|
|
// 颜色分组
|
|
|
colorList.push({
|
|
|
id: value.colorId,
|
|
|
skcId: value.productSkc,
|
|
|
name: value.colorName,
|
|
|
id: value.color_id,
|
|
|
skcId: value.product_skc,
|
|
|
name: value.color_name,
|
|
|
colorNum: colorStorageNum
|
|
|
});
|
|
|
}
|
|
|
|
|
|
// 缩略图
|
|
|
// 缩略图
|
|
|
thumbImageList.push({
|
|
|
img: value.colorImage
|
|
|
img: helpers.image(value.color_image, 60, 60)
|
|
|
});
|
|
|
|
|
|
// 商品库存总数
|
|
|
// 商品库存总数
|
|
|
totalStorageNum += _.toNumber(colorStorageNum);
|
|
|
});
|
|
|
|
|
|
// 遍历所有尺码,构建颜色显示数据
|
|
|
// 遍历所有尺码,构建颜色显示数据
|
|
|
let i = 1;
|
|
|
|
|
|
sizeGroup[0] = {
|
...
|
...
|
@@ -349,7 +1695,7 @@ const _detailDataPkg = (origin, uid, vipLevel, ua) => { |
|
|
color: []
|
|
|
};
|
|
|
|
|
|
// 各个颜色的尺码, 每行显示一个尺码对应的颜色
|
|
|
// 各个颜色的尺码, 每行显示一个尺码对应的颜色
|
|
|
_.forEach(colorList, (colorArr) => {
|
|
|
let tempColorArr = _.cloneDeep(colorArr);
|
|
|
|
...
|
...
|
@@ -370,58 +1716,37 @@ const _detailDataPkg = (origin, uid, vipLevel, ua) => { |
|
|
color: []
|
|
|
};
|
|
|
|
|
|
// 遍历所有颜色, 构建尺码显示数据
|
|
|
// 遍历所有颜色, 构建尺码显示数据
|
|
|
i = 1;
|
|
|
_.forEach(colorList, function(value) {
|
|
|
// 各个尺码的颜色, 每行显示一个颜色的对应尺码
|
|
|
// 各个尺码的颜色, 每行显示一个颜色的对应尺码
|
|
|
sizeGroup[i] = {
|
|
|
size: sizeList[value.skcId],
|
|
|
colorId: value.skcId
|
|
|
};
|
|
|
|
|
|
// 默认颜色
|
|
|
// 默认颜色
|
|
|
colorGroup[0].color.push(value);
|
|
|
++i;
|
|
|
});
|
|
|
|
|
|
|
|
|
// 商品图:多个
|
|
|
if (goodsGroup.length > 1) {
|
|
|
let bannerList = [];
|
|
|
|
|
|
_.forEach(goodsGroup, function(value) {
|
|
|
bannerList.push({
|
|
|
img: value.img
|
|
|
});
|
|
|
});
|
|
|
|
|
|
dest.bannerTop = {
|
|
|
list: bannerList
|
|
|
};
|
|
|
} else if (goodsGroup[0]) {
|
|
|
dest.bannerTop = {
|
|
|
img: goodsGroup[0].img
|
|
|
};
|
|
|
}
|
|
|
}
|
|
|
let soldOut = (origin.storage_sum === 0) || (totalStorageNum === 0); // status
|
|
|
let notForSale = origin.attribute === 2;
|
|
|
|
|
|
// 悬浮的购物车信息
|
|
|
// 悬浮的购物车信息
|
|
|
dest.cartInfo = {
|
|
|
cartUrl: helpers.urlFormat('/cart/index/index'),
|
|
|
numInCart: 0,
|
|
|
goodsInstore: origin.storageSum
|
|
|
goodsInstore: origin.storage_sum
|
|
|
};
|
|
|
let soldOut = (origin.storageSum === 0) || (totalStorageNum === 0); // status
|
|
|
let notForSale = origin.attribute === 2;
|
|
|
|
|
|
// 显示加入购物车链接
|
|
|
// 显示加入购物车链接
|
|
|
if (!soldOut && !notForSale) {
|
|
|
_.orderBy(colorGroup);
|
|
|
|
|
|
Object.assign(dest.cartInfo, {
|
|
|
productId: origin.productId,
|
|
|
productId: origin.product_id,
|
|
|
thumbs: thumbImageList,
|
|
|
name: dest.goodsName ? dest.goodsName : '',
|
|
|
name: dest.goodsName || '',
|
|
|
price: dest.goodsPrice.previousPrice ? dest.goodsPrice.previousPrice : '',
|
|
|
salePrice: dest.goodsPrice.currentPrice ? dest.goodsPrice.currentPrice : '',
|
|
|
totalNum: totalStorageNum,
|
...
|
...
|
@@ -431,73 +1756,90 @@ const _detailDataPkg = (origin, uid, vipLevel, ua) => { |
|
|
|
|
|
// 限购商品
|
|
|
if (origin.isLimitBuy) {
|
|
|
// 是否开售
|
|
|
let isBeginSale = (origin.saleStatus === 1);
|
|
|
|
|
|
// 限购商品有关的展示状态
|
|
|
let showStatus = 1;
|
|
|
|
|
|
origin.showStatus && (showStatus = parseInt(origin.showStatus, 10));
|
|
|
|
|
|
// 处理限购商品有关的按钮状态
|
|
|
dest = _procShowStatus(dest, showStatus, isBeginSale);
|
|
|
return api.get('', {
|
|
|
method: 'app.limitProduct.productStatus',
|
|
|
limitProductCode: origin.limitProductCode,
|
|
|
uid: uid,
|
|
|
product_skn: origin.product_skn
|
|
|
}, {
|
|
|
code: 200,
|
|
|
cache: true
|
|
|
}).then((result) => {
|
|
|
if (result.data) {
|
|
|
if (!result.data.isLimitBuy) {
|
|
|
dest.cartInfo.soldOut = true;
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
// 是否开售
|
|
|
let isBeginSale = (result.data.saleStatus === 1);
|
|
|
|
|
|
// 限购商品有关的展示状态
|
|
|
let showStatus = 1;
|
|
|
origin.showStatus && (showStatus = parseInt(result.data.showStatus, 10));
|
|
|
|
|
|
// 处理限购商品有关的按钮状态
|
|
|
dest = _procShowStatus(dest, showStatus, isBeginSale);
|
|
|
|
|
|
dest.cartInfo.limitProductCode = origin.limitProductCode;
|
|
|
dest.cartInfo.limitCodeUrl = _getLimitCodeUrl(origin.limitProductCode, origin.product_skn, ua);
|
|
|
dest.cartInfo.limitProductPay = helpers.urlFormat('/cart/index/orderEnsure');
|
|
|
return callback();
|
|
|
} else {
|
|
|
dest.cartInfo.soldOut = true;
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
dest.cartInfo.limitProductCode = origin.limitProductCode;
|
|
|
dest.cartInfo.limitCodeUrl = _getLimitCodeUrl(origin.limitProductCode, origin.productSkn, ua);
|
|
|
dest.cartInfo.limitProductPay = helpers.urlFormat('/cart/index/orderEnsure');
|
|
|
});
|
|
|
} else {
|
|
|
dest.cartInfo.addToCartUrl = helpers.urlFormat('/product/buy_' + origin.productId + '_' +
|
|
|
origin.goodsList.goodsId + '.html');
|
|
|
dest.cartInfo.addToCartUrl = helpers.urlFormat('/product/buy_' + origin.product_id + '_' +
|
|
|
origin.goods_id + '.html');
|
|
|
return callback();
|
|
|
}
|
|
|
} else if (notForSale) {
|
|
|
dest.cartInfo.notForSale = true;
|
|
|
return callback();
|
|
|
} else if (soldOut) {
|
|
|
dest.cartInfo.soldOut = true;
|
|
|
return callback();
|
|
|
}
|
|
|
|
|
|
// 是否收藏
|
|
|
dest.isCollect = false;
|
|
|
if (origin.isCollect === 'Y') {
|
|
|
dest.isCollect = true;
|
|
|
dest.cartInfo.isCollect = true;
|
|
|
}
|
|
|
// 是否收藏 使用单独收藏接口获取
|
|
|
// dest.isCollect = false;
|
|
|
// if (origin.is_collect === 'Y') {
|
|
|
// dest.isCollect = true;
|
|
|
// dest.cartInfo.isCollect = true;
|
|
|
// }
|
|
|
function callback() {
|
|
|
// 虚拟商品(门票)
|
|
|
if (origin.attribute * 1 === 3) {
|
|
|
dest.tickets = true;
|
|
|
dest.ticketsConfirm = helpers.urlFormat('/cart/index/ticketsConfirm');
|
|
|
|
|
|
// 展览票
|
|
|
if (origin.product_skn * 1 === SINGLE_TICKETS_SKN) {
|
|
|
dest.single = true;
|
|
|
} else {
|
|
|
// 套票
|
|
|
dest.package = true;
|
|
|
}
|
|
|
|
|
|
// 底部简介URL链接
|
|
|
dest.introUrl = '/product/detail/intro/' + origin.productSkn;
|
|
|
dest.id = origin.productId;
|
|
|
// 购票限制
|
|
|
dest.cartInfo.limit = 4;
|
|
|
|
|
|
// 虚拟商品(门票)
|
|
|
if (origin.attribute * 1 === 3) {
|
|
|
dest.tickets = true;
|
|
|
dest.ticketsConfirm = helpers.urlFormat('/cart/index/ticketsConfirm');
|
|
|
// 清空活动
|
|
|
dest.goodsDiscount = [];
|
|
|
|
|
|
// 展览票
|
|
|
if (origin.productSkn * 1 === SINGLE_TICKETS_SKN) {
|
|
|
dest.single = true;
|
|
|
} else {
|
|
|
// 套票
|
|
|
dest.package = true;
|
|
|
// 来自登录页,自动弹出选择框
|
|
|
// if (isset($_GET['product_type']) && $_GET['product_type'] == 'ticket') {
|
|
|
// $result['showPannel'] = true;
|
|
|
// }
|
|
|
}
|
|
|
|
|
|
// 购票限制
|
|
|
dest.cartInfo.limit = 4;
|
|
|
|
|
|
// 清空活动
|
|
|
dest.goodsDiscount = [];
|
|
|
|
|
|
// 来自登录页,自动弹出选择框
|
|
|
// if (isset($_GET['product_type']) && $_GET['product_type'] == 'ticket') {
|
|
|
// $result['showPannel'] = true;
|
|
|
// }
|
|
|
dest.id = origin.product_id;
|
|
|
dest.goodsId = origin.goods_id;
|
|
|
return Promise.resolve(dest);
|
|
|
}
|
|
|
|
|
|
return dest;
|
|
|
};
|
|
|
|
|
|
let _getShopsInfo = (brandId) => {
|
|
|
if (!brandId) {
|
|
|
return Promise.resolve([]);
|
|
|
}
|
|
|
return api.get('', {
|
|
|
method: 'app.shop.seckill.queryShopsByBrandId',
|
|
|
brand_id: _.toString(brandId)
|
...
|
...
|
@@ -512,17 +1854,6 @@ let _getShopsInfo = (brandId) => { |
|
|
});
|
|
|
};
|
|
|
|
|
|
let _getPromotionInfo = (skn) => {
|
|
|
return api.get('', {
|
|
|
method: 'app.product.seckill.promotion',
|
|
|
product_skn: _.toString(skn)
|
|
|
}, {
|
|
|
code: 200,
|
|
|
cache: true
|
|
|
}).then((result) => {
|
|
|
return result && result.data;
|
|
|
});
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 获取默认咨询列表
|
...
|
...
|
@@ -546,6 +1877,25 @@ const _getCommonConsult = () => { |
|
|
};
|
|
|
|
|
|
/**
|
|
|
* [根据商品SKN获取商品的简要信息]
|
|
|
* @param {[array]} skns [skns]
|
|
|
* @return {[type]}
|
|
|
*/
|
|
|
let _productInfoBySkns = (skns) => {
|
|
|
// 调用搜索接口
|
|
|
let param = {
|
|
|
method: 'app.search.li',
|
|
|
query: skns.join(' '),
|
|
|
limit: skns.length,
|
|
|
order: 's_t_desc'
|
|
|
};
|
|
|
|
|
|
return api.get('', param, {
|
|
|
cache: true
|
|
|
});
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 获取秒杀列表
|
|
|
*/
|
|
|
const getSeckillData = (param) => {
|
...
|
...
|
@@ -573,110 +1923,10 @@ const getSeckillData = (param) => { |
|
|
});
|
|
|
};
|
|
|
|
|
|
let getProductData = (data) => {
|
|
|
let finalResult = {};
|
|
|
|
|
|
let params = {
|
|
|
method: 'app.product.seckill.data'
|
|
|
};
|
|
|
|
|
|
if (data.id) { // 通过 productId 获取商品详情
|
|
|
Object.assign(params, {
|
|
|
product_id: _.toString(data.id)
|
|
|
});
|
|
|
} else if (data.productSkn) { // 通过 productSkn 获取商品详情
|
|
|
Object.assign(params, {
|
|
|
product_skn: _.toString(data.productSkn)
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (data.uid) {
|
|
|
params.uid = data.uid;
|
|
|
}
|
|
|
|
|
|
return _getUserProfile(params.uid).then((user) => {
|
|
|
|
|
|
data.vipLevel = (user.data && user.data.vip_info && user.data.vip_info.cur_level) || '0';
|
|
|
data.isStudent = (user.data && user.data.vip_info && user.data.vip_info.is_student) ? true : false;
|
|
|
params.is_student = data.isStudent ? 1 : 0;
|
|
|
params.current_vip_level = data.vipLevel;
|
|
|
|
|
|
return api.get('', params, {
|
|
|
code: 200
|
|
|
}).then(global.yoho.camelCase).then(result => {
|
|
|
if (result.code === 500 || !result.data) {
|
|
|
return {};
|
|
|
}
|
|
|
result = result.data;
|
|
|
|
|
|
return Promise.all([
|
|
|
_getShopsInfo(_.get(result, 'brandInfo.brandId', 0)),
|
|
|
_getPromotionInfo(result.productSkn),
|
|
|
comment.getCommentInfo({
|
|
|
productId: result.productId
|
|
|
}),
|
|
|
_getCommonConsult(),
|
|
|
comment.getConsults(result.productId, 1, 2)
|
|
|
]).then((info) => {
|
|
|
result.promotionBoList = info[1];
|
|
|
finalResult = _detailDataPkg(result, data.uid, data.vipLevel, data.ua);
|
|
|
finalResult.enterStore = info[0];
|
|
|
finalResult.isStudent = data.isStudent;
|
|
|
Object.assign(finalResult.feedbacks, info[2]);
|
|
|
finalResult.goodsPrice.previousPrice = '¥' + result.marketPrice;
|
|
|
|
|
|
/* 预售商品不能购买 */
|
|
|
if (_.get(result, 'isDepositAdvance', '') === 'Y') {
|
|
|
finalResult.cartInfo.isDepositAdvance = true;
|
|
|
}
|
|
|
|
|
|
/* 如果有咨询,显示咨询,否则显示常见问题 */
|
|
|
|
|
|
if (info[4].total) {
|
|
|
finalResult.feedbacks.consultsNum = parseInt(info[4].total, 10);
|
|
|
|
|
|
Object.assign(finalResult.feedbacks, {
|
|
|
commonConsults: false,
|
|
|
consultsNum: parseInt(info[4].total, 10),
|
|
|
consults: _.take(info[4].list, 2)
|
|
|
});
|
|
|
} else if (!_.isEmpty(info[3]) && !_.get(info[2], 'feedbacks.consultsNum', 0)) {
|
|
|
Object.assign(finalResult.feedbacks, {
|
|
|
commonConsults: true,
|
|
|
consultsNum: true,
|
|
|
consults: _.take(info[3], 2)
|
|
|
});
|
|
|
}
|
|
|
finalResult.limit = info[2];
|
|
|
return finalResult;
|
|
|
});
|
|
|
|
|
|
});
|
|
|
});
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* [根据商品SKN获取商品的简要信息]
|
|
|
* @param {[array]} skns [skns]
|
|
|
* @return {[type]}
|
|
|
*/
|
|
|
let _productInfoBySkns = (skns) => {
|
|
|
// 调用搜索接口
|
|
|
let param = {
|
|
|
method: 'app.search.li',
|
|
|
query: skns.join(' '),
|
|
|
limit: skns.length,
|
|
|
order: 's_t_desc'
|
|
|
};
|
|
|
|
|
|
return api.get('', param, {
|
|
|
cache: true
|
|
|
});
|
|
|
};
|
|
|
|
|
|
module.exports = {
|
|
|
getSeckillData,
|
|
|
getProductData,
|
|
|
getProductAsyncData,
|
|
|
getUserProfile: _getUserProfile,
|
|
|
getSeckillData,
|
|
|
productInfoBySkns: _productInfoBySkns
|
|
|
}; |
...
|
...
|
|