...
|
...
|
@@ -9,1097 +9,1072 @@ |
|
|
const Promise = require('bluebird');
|
|
|
const co = Promise.coroutine;
|
|
|
const _ = require('lodash');
|
|
|
const api = global.yoho.API;
|
|
|
const helpers = global.yoho.helpers;
|
|
|
|
|
|
const ERROR_400_MESSAGE = '系统繁忙,请稍候再试!';
|
|
|
const productAPI = require('./product-api');
|
|
|
const cartApi = require('./cart-api');
|
|
|
const ProductAPI = require('./product-api');
|
|
|
const CartApi = require('./cart-api');
|
|
|
const chelper = require('./cart-helper');
|
|
|
|
|
|
module.exports = class extends global.yoho.BaseModel {
|
|
|
constructor(ctx) {
|
|
|
super(ctx);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 转换价格
|
|
|
*
|
|
|
* @param float|string $price 价格
|
|
|
* @return float|string 转换之后的价格
|
|
|
*/
|
|
|
const transPrice = (price) => {
|
|
|
return price ? (price * 1).toFixed(2) : '0.00';
|
|
|
};
|
|
|
|
|
|
const _getProductIntroAsync = (productSkn) => {
|
|
|
return co(function * () {
|
|
|
let result = yield Promise.props({
|
|
|
sizeInfo: productAPI.sizeInfoAsync(productSkn)
|
|
|
});
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
};
|
|
|
_getProductIntroAsync(productSkn) {
|
|
|
let that = this;
|
|
|
|
|
|
/**
|
|
|
* 获得sku商品数据
|
|
|
*/
|
|
|
const _getSkuDataByProductBaseInfo = (data) => {
|
|
|
let totalStorageNum = 0;
|
|
|
let skuGoods = null;// sku商品
|
|
|
let defaultImage = '';// 默认图
|
|
|
let chooseSkuFlag = false; // 选中状态
|
|
|
return co(function * () {
|
|
|
let result = yield Promise.props({
|
|
|
sizeInfo: new ProductAPI(that.ctx).sizeInfoAsync(productSkn)
|
|
|
});
|
|
|
|
|
|
if (_.isEmpty(_.get(data, 'goods_list', []))) {
|
|
|
return {
|
|
|
totalStorageNum,
|
|
|
skuGoods,
|
|
|
defaultImage
|
|
|
};
|
|
|
return result;
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
skuGoods = _.get(data, 'goods_list', []).reduce((acc, cur, pos)=> {
|
|
|
|
|
|
// 如果status为0,即skc下架时就跳过该商品$value['status'] === 0
|
|
|
let goodsGroup = {};
|
|
|
/**
|
|
|
* 获得sku商品数据
|
|
|
*/
|
|
|
_getSkuDataByProductBaseInfo(data) {
|
|
|
let totalStorageNum = 0;
|
|
|
let skuGoods = null;// sku商品
|
|
|
let defaultImage = '';// 默认图
|
|
|
let chooseSkuFlag = false; // 选中状态
|
|
|
|
|
|
if (_.isEmpty(cur.color_image)) {
|
|
|
return acc;
|
|
|
}
|
|
|
|
|
|
if (cur.images_list) {
|
|
|
// 商品列表
|
|
|
goodsGroup.productSkc = cur.product_skc;
|
|
|
goodsGroup.src = helpers.image(cur.color_image, 25, 35);
|
|
|
goodsGroup.title = `${_.trim(data.product_name)} ${cur.color_name}`;
|
|
|
goodsGroup.name = cur.factory_goods_name;
|
|
|
goodsGroup.focus = false;
|
|
|
goodsGroup.total = 0;
|
|
|
goodsGroup.thumbs = [];
|
|
|
goodsGroup.size = [];
|
|
|
if (_.isEmpty(_.get(data, 'goods_list', []))) {
|
|
|
return {
|
|
|
totalStorageNum,
|
|
|
skuGoods,
|
|
|
defaultImage
|
|
|
};
|
|
|
}
|
|
|
|
|
|
_.get(cur, 'images_list', []).forEach((good) => {
|
|
|
if (good.image_url) {
|
|
|
goodsGroup.thumbs.push({
|
|
|
url: '',
|
|
|
shower: helpers.image(good.image_url, 420, 560),
|
|
|
img: helpers.image(good.image_url, 75, 100)
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// 缩略图空,不显示
|
|
|
if (_.isEmpty(goodsGroup.thumbs)) {
|
|
|
return acc;
|
|
|
}
|
|
|
skuGoods = _.get(data, 'goods_list', []).reduce((acc, cur, pos)=> {
|
|
|
|
|
|
// 默认第一张图片
|
|
|
if (pos === 0) {
|
|
|
defaultImage = helpers.image(cur.color_image, 420, 560);
|
|
|
}
|
|
|
// 如果status为0,即skc下架时就跳过该商品$value['status'] === 0
|
|
|
let goodsGroup = {};
|
|
|
|
|
|
// 商品的尺码列表
|
|
|
_.get(cur, 'size_list', []).forEach((size) => {
|
|
|
if (data.attribute === 3) {
|
|
|
// 虚拟商品,门票默认最大为4,
|
|
|
size.storage_number = size.storage_number > 4 ? 4 : size.storage_number;
|
|
|
if (_.isEmpty(cur.color_image)) {
|
|
|
return acc;
|
|
|
}
|
|
|
|
|
|
// 如果status为0,即skc下架时就跳过该商品
|
|
|
if (cur.status === 0) {
|
|
|
size.storage_number = 0;
|
|
|
if (cur.images_list) {
|
|
|
// 商品列表
|
|
|
goodsGroup.productSkc = cur.product_skc;
|
|
|
goodsGroup.src = helpers.image(cur.color_image, 25, 35);
|
|
|
goodsGroup.title = `${_.trim(data.product_name)} ${cur.color_name}`;
|
|
|
goodsGroup.name = cur.factory_goods_name;
|
|
|
goodsGroup.focus = false;
|
|
|
goodsGroup.total = 0;
|
|
|
goodsGroup.thumbs = [];
|
|
|
goodsGroup.size = [];
|
|
|
}
|
|
|
|
|
|
goodsGroup.size.push({
|
|
|
name: size.size_name,
|
|
|
sku: size.product_sku,
|
|
|
num: _.parseInt(size.storage_number),
|
|
|
goodsId: size.size_id
|
|
|
_.get(cur, 'images_list', []).forEach((good) => {
|
|
|
if (good.image_url) {
|
|
|
goodsGroup.thumbs.push({
|
|
|
url: '',
|
|
|
shower: helpers.image(good.image_url, 420, 560),
|
|
|
img: helpers.image(good.image_url, 75, 100)
|
|
|
});
|
|
|
}
|
|
|
});
|
|
|
|
|
|
// 单个sku商品的总数
|
|
|
goodsGroup.total += _.parseInt(size.storage_number);
|
|
|
// 缩略图空,不显示
|
|
|
if (_.isEmpty(goodsGroup.thumbs)) {
|
|
|
return acc;
|
|
|
}
|
|
|
|
|
|
if (goodsGroup.total > 0 && !chooseSkuFlag) { // 默认选中该sku商品
|
|
|
goodsGroup.focus = true;
|
|
|
chooseSkuFlag = true;// 选中sku商品
|
|
|
// 默认第一张图片
|
|
|
if (pos === 0) {
|
|
|
defaultImage = helpers.image(cur.color_image, 420, 560);
|
|
|
}
|
|
|
|
|
|
totalStorageNum += _.parseInt(size.storage_number);
|
|
|
// 商品的尺码列表
|
|
|
_.get(cur, 'size_list', []).forEach((size) => {
|
|
|
if (data.attribute === 3) {
|
|
|
// 虚拟商品,门票默认最大为4,
|
|
|
size.storage_number = size.storage_number > 4 ? 4 : size.storage_number;
|
|
|
}
|
|
|
|
|
|
});
|
|
|
// 如果status为0,即skc下架时就跳过该商品
|
|
|
if (cur.status === 0) {
|
|
|
size.storage_number = 0;
|
|
|
}
|
|
|
|
|
|
acc.push(goodsGroup);
|
|
|
return acc;
|
|
|
}, []);
|
|
|
goodsGroup.size.push({
|
|
|
name: size.size_name,
|
|
|
sku: size.product_sku,
|
|
|
num: _.parseInt(size.storage_number),
|
|
|
goodsId: size.size_id
|
|
|
});
|
|
|
|
|
|
if (!_.isEmpty(skuGoods) && !chooseSkuFlag) { // 没有选中一个sku商品,默认选中第一个sku商品
|
|
|
_.head(skuGoods).focus = true;
|
|
|
}
|
|
|
// 单个sku商品的总数
|
|
|
goodsGroup.total += _.parseInt(size.storage_number);
|
|
|
|
|
|
return {
|
|
|
defaultImage: defaultImage,
|
|
|
skuGoods: skuGoods,
|
|
|
totalStorageNum: totalStorageNum
|
|
|
};
|
|
|
};
|
|
|
if (goodsGroup.total > 0 && !chooseSkuFlag) { // 默认选中该sku商品
|
|
|
goodsGroup.focus = true;
|
|
|
chooseSkuFlag = true;// 选中sku商品
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 使sizeBoList id以 sizeAttributeBos id顺序一样
|
|
|
* @param sizeInfoBo
|
|
|
*/
|
|
|
const _sizeInfoBoSort = (sizeInfoBo) => {
|
|
|
if (!sizeInfoBo.sizeBoList || !sizeInfoBo.sizeAttributeBos) {
|
|
|
return {};
|
|
|
}
|
|
|
totalStorageNum += _.parseInt(size.storage_number);
|
|
|
|
|
|
_.get(sizeInfoBo, 'sizeBoList', []).forEach((sizeBoList, sizek)=> {
|
|
|
let sortAttr = {};
|
|
|
});
|
|
|
|
|
|
sizeBoList.sortAttributes.forEach(sortAttributes => {
|
|
|
sortAttr[sortAttributes.id] = sortAttributes;
|
|
|
});
|
|
|
acc.push(goodsGroup);
|
|
|
return acc;
|
|
|
}, []);
|
|
|
|
|
|
sizeInfoBo.sizeBoList[sizek].sortAttributes = sortAttr;
|
|
|
});
|
|
|
if (!_.isEmpty(skuGoods) && !chooseSkuFlag) { // 没有选中一个sku商品,默认选中第一个sku商品
|
|
|
_.head(skuGoods).focus = true;
|
|
|
}
|
|
|
|
|
|
_.get(sizeInfoBo, 'sizeBoList', []).forEach((sizeBoList, sizek)=> {
|
|
|
let sortAttr = [];
|
|
|
return {
|
|
|
defaultImage: defaultImage,
|
|
|
skuGoods: skuGoods,
|
|
|
totalStorageNum: totalStorageNum
|
|
|
};
|
|
|
}
|
|
|
|
|
|
sizeInfoBo.sizeAttributeBos.forEach(val => {
|
|
|
if (sizeBoList.sortAttributes[val.id]) {
|
|
|
sortAttr.push(sizeBoList.sortAttributes[val.id]);
|
|
|
}
|
|
|
});
|
|
|
/**
|
|
|
* 使sizeBoList id以 sizeAttributeBos id顺序一样
|
|
|
* @param sizeInfoBo
|
|
|
*/
|
|
|
_sizeInfoBoSort(sizeInfoBo) {
|
|
|
if (!sizeInfoBo.sizeBoList || !sizeInfoBo.sizeAttributeBos) {
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
sizeInfoBo.sizeBoList[sizek].sortAttributes = sortAttr;
|
|
|
_.get(sizeInfoBo, 'sizeBoList', []).forEach((sizeBoList, sizek)=> {
|
|
|
let sortAttr = {};
|
|
|
|
|
|
});
|
|
|
sizeBoList.sortAttributes.forEach(sortAttributes => {
|
|
|
sortAttr[sortAttributes.id] = sortAttributes;
|
|
|
});
|
|
|
|
|
|
return sizeInfoBo;
|
|
|
};
|
|
|
sizeInfoBo.sizeBoList[sizek].sortAttributes = sortAttr;
|
|
|
});
|
|
|
|
|
|
/**
|
|
|
* 获取尺寸信息
|
|
|
* @param sizeInfo
|
|
|
* @returns {{}}
|
|
|
*/
|
|
|
const _getSizeData = (sizeInfo) => {
|
|
|
_.get(sizeInfoBo, 'sizeBoList', []).forEach((sizeBoList, sizek)=> {
|
|
|
let sortAttr = [];
|
|
|
|
|
|
// 尺码信息
|
|
|
if (!_.has(sizeInfo, 'sizeInfoBo')) {
|
|
|
return {};
|
|
|
}
|
|
|
sizeInfoBo.sizeAttributeBos.forEach(val => {
|
|
|
if (sizeBoList.sortAttributes[val.id]) {
|
|
|
sortAttr.push(sizeBoList.sortAttributes[val.id]);
|
|
|
}
|
|
|
});
|
|
|
|
|
|
sizeInfo.sizeInfoBo = _sizeInfoBoSort(sizeInfo.sizeInfoBo);
|
|
|
|
|
|
let boyReference = _.get(sizeInfo, 'productExtra.boyReference', false);
|
|
|
let girlReference = _.get(sizeInfo, 'productExtra.girlReference', false);
|
|
|
let gender = _.get(sizeInfo, 'productDescBo.gender', 3);
|
|
|
let referenceName = (function() {
|
|
|
if (gender === 3 && boyReference) {
|
|
|
return '参考尺码(男)';
|
|
|
} else if (gender === 3 && girlReference) {
|
|
|
return '参考尺码(女)';
|
|
|
} else {
|
|
|
return '参考尺码';
|
|
|
}
|
|
|
}());
|
|
|
sizeInfoBo.sizeBoList[sizek].sortAttributes = sortAttr;
|
|
|
|
|
|
// 判断是否显示参考尺码
|
|
|
let showReference = (boyReference && _.get(sizeInfo, 'sizeInfoBo.sizeBoList[0].boyReferSize', false)) ||
|
|
|
(girlReference && _.get(sizeInfo, 'sizeInfoBo.sizeBoList[0].girlReferSize', false));
|
|
|
});
|
|
|
|
|
|
if (!_.has(sizeInfo, 'sizeInfoBo.sizeAttributeBos')) {
|
|
|
return {};
|
|
|
return sizeInfoBo;
|
|
|
}
|
|
|
|
|
|
// 尺码信息头部
|
|
|
let size = {
|
|
|
thead: [{name: '吊牌尺码', id: ''}],
|
|
|
tbody: []
|
|
|
};
|
|
|
/**
|
|
|
* 获取尺寸信息
|
|
|
* @param sizeInfo
|
|
|
* @returns {{}}
|
|
|
*/
|
|
|
_getSizeData(sizeInfo) {
|
|
|
|
|
|
// 显示参考尺码
|
|
|
if (showReference) {
|
|
|
size.thead[1] = {name: referenceName, id: ''};
|
|
|
}
|
|
|
// 尺码信息
|
|
|
if (!_.has(sizeInfo, 'sizeInfoBo')) {
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
_.get(sizeInfo, 'sizeInfoBo.sizeAttributeBos', []).forEach((value) => {
|
|
|
size.thead.push({
|
|
|
name: value.attributeName || ' ',
|
|
|
id: value.id
|
|
|
});
|
|
|
});
|
|
|
sizeInfo.sizeInfoBo = this._sizeInfoBoSort(sizeInfo.sizeInfoBo);
|
|
|
|
|
|
let boyReference = _.get(sizeInfo, 'productExtra.boyReference', false);
|
|
|
let girlReference = _.get(sizeInfo, 'productExtra.girlReference', false);
|
|
|
let gender = _.get(sizeInfo, 'productDescBo.gender', 3);
|
|
|
let referenceName = (function() {
|
|
|
if (gender === 3 && boyReference) {
|
|
|
return '参考尺码(男)';
|
|
|
} else if (gender === 3 && girlReference) {
|
|
|
return '参考尺码(女)';
|
|
|
} else {
|
|
|
return '参考尺码';
|
|
|
}
|
|
|
}());
|
|
|
|
|
|
_.get(sizeInfo, 'sizeInfoBo.sizeBoList', []).forEach((value) => {
|
|
|
let sizes = [];
|
|
|
// 判断是否显示参考尺码
|
|
|
let showReference = (boyReference && _.get(sizeInfo, 'sizeInfoBo.sizeBoList[0].boyReferSize', false)) ||
|
|
|
(girlReference && _.get(sizeInfo, 'sizeInfoBo.sizeBoList[0].girlReferSize', false));
|
|
|
|
|
|
// 吊牌尺码
|
|
|
sizes.push(value.sizeName);
|
|
|
if (!_.has(sizeInfo, 'sizeInfoBo.sizeAttributeBos')) {
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
// 判断是否显示参考尺码
|
|
|
if (boyReference && (gender === 1 || gender === 3) && showReference) {
|
|
|
sizes.push(_.get(value, 'boyReferSize.referenceName', ' '));
|
|
|
} else if (girlReference && (gender === 2 || gender === 3) && showReference) {
|
|
|
sizes.push(_.get(value, 'girlReferSize.referenceName', ' '));
|
|
|
} else {
|
|
|
if (size.thead[1] && showReference) {
|
|
|
size.thead[1] = {};
|
|
|
}
|
|
|
// 尺码信息头部
|
|
|
let size = {
|
|
|
thead: [{name: '吊牌尺码', id: ''}],
|
|
|
tbody: []
|
|
|
};
|
|
|
|
|
|
// 显示参考尺码
|
|
|
if (showReference) {
|
|
|
size.thead[1] = {name: referenceName, id: ''};
|
|
|
}
|
|
|
|
|
|
// 其他尺码信息
|
|
|
_.get(value, 'sortAttributes', []).forEach(attr => {
|
|
|
sizes.push(_.get(attr, 'sizeValue', ' '));
|
|
|
_.get(sizeInfo, 'sizeInfoBo.sizeAttributeBos', []).forEach((value) => {
|
|
|
size.thead.push({
|
|
|
name: value.attributeName || ' ',
|
|
|
id: value.id
|
|
|
});
|
|
|
});
|
|
|
|
|
|
// 尺码信息
|
|
|
size.tbody.push(sizes);
|
|
|
});
|
|
|
_.get(sizeInfo, 'sizeInfoBo.sizeBoList', []).forEach((value) => {
|
|
|
let sizes = [];
|
|
|
|
|
|
// 参考尺码为空
|
|
|
if (_.isEmpty(size.thead[1]) && showReference) {
|
|
|
// 移除这个值
|
|
|
size.thead.splice(1, 1);
|
|
|
}
|
|
|
// 吊牌尺码
|
|
|
sizes.push(value.sizeName);
|
|
|
|
|
|
// 测量方式
|
|
|
if (sizeInfo.sizeImage) {
|
|
|
size.sizeImg = sizeInfo.sizeImage;
|
|
|
}
|
|
|
// 判断是否显示参考尺码
|
|
|
if (boyReference && (gender === 1 || gender === 3) && showReference) {
|
|
|
sizes.push(_.get(value, 'boyReferSize.referenceName', ' '));
|
|
|
} else if (girlReference && (gender === 2 || gender === 3) && showReference) {
|
|
|
sizes.push(_.get(value, 'girlReferSize.referenceName', ' '));
|
|
|
} else {
|
|
|
if (size.thead[1] && showReference) {
|
|
|
size.thead[1] = {};
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return size;
|
|
|
};
|
|
|
// 其他尺码信息
|
|
|
_.get(value, 'sortAttributes', []).forEach(attr => {
|
|
|
sizes.push(_.get(attr, 'sizeValue', ' '));
|
|
|
});
|
|
|
|
|
|
/**
|
|
|
* 商品尺码信息
|
|
|
*
|
|
|
* @param productSkn
|
|
|
* @param maxSortId
|
|
|
* @return object
|
|
|
*/
|
|
|
const _getIntroInfo = (productSkn, additionalData)=> {
|
|
|
if (!productSkn) {
|
|
|
return {};
|
|
|
}
|
|
|
// 尺码信息
|
|
|
size.tbody.push(sizes);
|
|
|
});
|
|
|
|
|
|
let sizeInfo = additionalData.sizeInfo;
|
|
|
// 参考尺码为空
|
|
|
if (_.isEmpty(size.thead[1]) && showReference) {
|
|
|
// 移除这个值
|
|
|
size.thead.splice(1, 1);
|
|
|
}
|
|
|
|
|
|
// 测量方式
|
|
|
if (sizeInfo.sizeImage) {
|
|
|
size.sizeImg = sizeInfo.sizeImage;
|
|
|
}
|
|
|
|
|
|
if (_.isEmpty(sizeInfo)) {
|
|
|
return {};
|
|
|
return size;
|
|
|
}
|
|
|
|
|
|
let result = {};
|
|
|
/**
|
|
|
* 商品尺码信息
|
|
|
*
|
|
|
* @param productSkn
|
|
|
* @param maxSortId
|
|
|
* @return object
|
|
|
*/
|
|
|
_getIntroInfo(productSkn, additionalData) {
|
|
|
if (!productSkn) {
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
// 尺寸数据
|
|
|
result.size = _getSizeData(sizeInfo);
|
|
|
let sizeInfo = additionalData.sizeInfo;
|
|
|
|
|
|
return result;
|
|
|
};
|
|
|
if (_.isEmpty(sizeInfo)) {
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 详情页数据格式化
|
|
|
* @param origin Object 原始数据
|
|
|
* @return result Object 格式化数据
|
|
|
*/
|
|
|
const _detailDataPkg = (origin) => {
|
|
|
if (_.isEmpty(origin) || _.isEmpty(origin)) {
|
|
|
return {};
|
|
|
}
|
|
|
let result = {};
|
|
|
|
|
|
let result = {};
|
|
|
let propOrigin = _.partial(_.get, origin);
|
|
|
// 尺寸数据
|
|
|
result.size = this._getSizeData(sizeInfo);
|
|
|
|
|
|
// 商品名称
|
|
|
if (!propOrigin('product_name')) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
result.name = propOrigin('product_name');
|
|
|
result.skn = propOrigin('product_skn');
|
|
|
result.productId = propOrigin('product_id');
|
|
|
/**
|
|
|
* 详情页数据格式化
|
|
|
* @param origin Object 原始数据
|
|
|
* @return result Object 格式化数据
|
|
|
*/
|
|
|
_detailDataPkg(origin) {
|
|
|
if (_.isEmpty(origin) || _.isEmpty(origin)) {
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
// 商品价格
|
|
|
result.marketPrice = propOrigin('format_market_price');
|
|
|
result.salePrice = propOrigin('format_sales_price');
|
|
|
result.hasOtherPrice = true;
|
|
|
let result = {};
|
|
|
let propOrigin = _.partial(_.get, origin);
|
|
|
|
|
|
if (result.salePrice === '0') {
|
|
|
delete result.salePrice;
|
|
|
result.hasOtherPrice = false;
|
|
|
}
|
|
|
// 商品名称
|
|
|
if (!propOrigin('product_name')) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
// 上市期
|
|
|
if (propOrigin('expect_arrival_time')) {
|
|
|
result.arrivalDate = `${propOrigin('expect_arrival_time')}月`;
|
|
|
result.presalePrice = propOrigin('format_sales_price');
|
|
|
delete result.salePrice;
|
|
|
result.hasOtherPrice = false;
|
|
|
}
|
|
|
result.name = propOrigin('product_name');
|
|
|
result.skn = propOrigin('product_skn');
|
|
|
result.productId = propOrigin('product_id');
|
|
|
|
|
|
// sku商品信息
|
|
|
let skuData = _getSkuDataByProductBaseInfo(origin);
|
|
|
// 商品价格
|
|
|
result.marketPrice = propOrigin('format_market_price');
|
|
|
result.salePrice = propOrigin('format_sales_price');
|
|
|
result.hasOtherPrice = true;
|
|
|
|
|
|
// 商品购买状态
|
|
|
let soldOut = !!(propOrigin('status') === 0 || skuData.totalStorageNum === 0);
|
|
|
let virtualGoods = propOrigin('attribute') === 3; // 虚拟商品
|
|
|
if (result.salePrice === '0') {
|
|
|
delete result.salePrice;
|
|
|
result.hasOtherPrice = false;
|
|
|
}
|
|
|
|
|
|
if (!soldOut && !virtualGoods) {
|
|
|
result.addToCart = 1;
|
|
|
}
|
|
|
// 上市期
|
|
|
if (propOrigin('expect_arrival_time')) {
|
|
|
result.arrivalDate = `${propOrigin('expect_arrival_time')}月`;
|
|
|
result.presalePrice = propOrigin('format_sales_price');
|
|
|
delete result.salePrice;
|
|
|
result.hasOtherPrice = false;
|
|
|
}
|
|
|
|
|
|
result.isCollect = propOrigin('is_collect');
|
|
|
result.colors = skuData.skuGoods;
|
|
|
// sku商品信息
|
|
|
let skuData = this._getSkuDataByProductBaseInfo(origin);
|
|
|
|
|
|
return result;
|
|
|
};
|
|
|
// 商品购买状态
|
|
|
let soldOut = !!(propOrigin('status') === 0 || skuData.totalStorageNum === 0);
|
|
|
let virtualGoods = propOrigin('attribute') === 3; // 虚拟商品
|
|
|
|
|
|
/**
|
|
|
* 获取某一个商品详情主页面
|
|
|
*/
|
|
|
const getProductInfoAsync = (pid) => {
|
|
|
return co(function * () {
|
|
|
if (!pid) {
|
|
|
return {};
|
|
|
if (!soldOut && !virtualGoods) {
|
|
|
result.addToCart = 1;
|
|
|
}
|
|
|
|
|
|
// 获取商品基本信息
|
|
|
let productData = yield productAPI.getProductAsync(pid);
|
|
|
result.isCollect = propOrigin('is_collect');
|
|
|
result.colors = skuData.skuGoods;
|
|
|
|
|
|
if (_.isEmpty(productData.data)) {
|
|
|
return Promise.reject({
|
|
|
code: 404,
|
|
|
message: 'app.product.data api wrong'
|
|
|
});
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
let productSkn = _.get(productData, 'data.product_skn');
|
|
|
/**
|
|
|
* 获取某一个商品详情主页面
|
|
|
*/
|
|
|
getProductInfoAsync(pid) {
|
|
|
let that = this;
|
|
|
|
|
|
let productDescription = yield _getProductIntroAsync(productSkn);
|
|
|
let productInfo = _detailDataPkg(productData.data);
|
|
|
let intro = _getIntroInfo(productSkn, productDescription);
|
|
|
return co(function * () {
|
|
|
if (!pid) {
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
return Object.assign(productInfo, intro);
|
|
|
})();
|
|
|
};
|
|
|
// 获取商品基本信息
|
|
|
let productData = yield new ProductAPI(that.ctx).getProductAsync(pid);
|
|
|
|
|
|
// 获取优惠券列表
|
|
|
const getCoupons = (uid) => api.get('', {
|
|
|
method: 'app.Shopping.listCoupon',
|
|
|
uid: uid
|
|
|
}).then(result => {
|
|
|
|
|
|
if (result.code === 200) {
|
|
|
let unuse = [];
|
|
|
let use = [];
|
|
|
|
|
|
_.get(result, 'data.unusable_coupons', []).forEach(i => {
|
|
|
unuse.push({
|
|
|
code: i.coupon_code,
|
|
|
name: i.coupon_name,
|
|
|
value: i.coupon_value,
|
|
|
canuse: false
|
|
|
});
|
|
|
});
|
|
|
if (_.isEmpty(productData.data)) {
|
|
|
return Promise.reject({
|
|
|
code: 404,
|
|
|
message: 'app.product.data api wrong'
|
|
|
});
|
|
|
}
|
|
|
|
|
|
_.get(result, 'data.usable_coupons', []).forEach(i => {
|
|
|
use.push({
|
|
|
code: i.coupon_code,
|
|
|
name: i.coupon_name,
|
|
|
value: i.coupon_value
|
|
|
});
|
|
|
});
|
|
|
let productSkn = _.get(productData, 'data.product_skn');
|
|
|
|
|
|
result.data = _.concat(use, unuse);
|
|
|
let productDescription = yield that._getProductIntroAsync(productSkn);
|
|
|
let productInfo = that._detailDataPkg(productData.data);
|
|
|
let intro = that._getIntroInfo(productSkn, productDescription);
|
|
|
|
|
|
return Object.assign(productInfo, intro);
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
});
|
|
|
// 获取优惠券列表
|
|
|
getCoupons(uid) {
|
|
|
let params = {
|
|
|
method: 'app.Shopping.listCoupon',
|
|
|
uid: uid
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 购物车数据
|
|
|
* @param uid
|
|
|
* @param shoppingKey
|
|
|
* @param cartDelList
|
|
|
* @returns {*}
|
|
|
*/
|
|
|
const getCartData = (uid, shoppingKey, cartDelList) => {
|
|
|
return cartApi.cartData(uid, shoppingKey).then(cartDataRet => {
|
|
|
return chelper.formatCart(cartDataRet, uid, shoppingKey, cartDelList);
|
|
|
});
|
|
|
};
|
|
|
return this.get({data: params}).then(result => {
|
|
|
|
|
|
/**
|
|
|
* 获取购物车总数
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param string $shoppingKey 客户端购物标识
|
|
|
* @return array
|
|
|
*/
|
|
|
const getCartCount = (uid, shoppingKey) => {
|
|
|
return cartApi.cartCount(uid, shoppingKey);
|
|
|
};
|
|
|
if (result.code === 200) {
|
|
|
let unuse = [];
|
|
|
let use = [];
|
|
|
|
|
|
/**
|
|
|
* 加入购物车 获取数量
|
|
|
*
|
|
|
* @param int $productSku 商品SKU
|
|
|
* @param int $buyNumber 购买数量
|
|
|
* @param int $goodsType 商品类型,0表示普通商品,1表示加价购商品
|
|
|
* @param int $isEdit 是否是编辑商品SKU,0表示不是编辑
|
|
|
* @param null|int $promotionId 促销id,默认null(加价购有关)
|
|
|
* @param null|int $uid 用户UID,可以不传
|
|
|
* @param string $shoppingKey 购物车在浏览器的唯一识别码,可以不传
|
|
|
* @return array 加入购物车接口返回的数据
|
|
|
*/
|
|
|
const addCart = (productSku, buyNumber, goodsType, isEdit, promotionId, uid, shoppingKey) => {
|
|
|
_.get(result, 'data.unusable_coupons', []).forEach(i => {
|
|
|
unuse.push({
|
|
|
code: i.coupon_code,
|
|
|
name: i.coupon_name,
|
|
|
value: i.coupon_value,
|
|
|
canuse: false
|
|
|
});
|
|
|
});
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
_.get(result, 'data.usable_coupons', []).forEach(i => {
|
|
|
use.push({
|
|
|
code: i.coupon_code,
|
|
|
name: i.coupon_name,
|
|
|
value: i.coupon_value
|
|
|
});
|
|
|
});
|
|
|
|
|
|
result.data = _.concat(use, unuse);
|
|
|
}
|
|
|
|
|
|
if (!productSku) {
|
|
|
return result;
|
|
|
}
|
|
|
});
|
|
|
}
|
|
|
|
|
|
let ret = yield cartApi.addToCart(productSku, buyNumber, goodsType, isEdit, promotionId, uid, shoppingKey);
|
|
|
/**
|
|
|
* 购物车数据
|
|
|
* @param uid
|
|
|
* @param shoppingKey
|
|
|
* @param cartDelList
|
|
|
* @returns {*}
|
|
|
*/
|
|
|
getCartData(uid, shoppingKey, cartDelList) {
|
|
|
return new CartApi(this.ctx).cartData(uid, shoppingKey).then(cartDataRet => {
|
|
|
return chelper.formatCart(cartDataRet, uid, shoppingKey, cartDelList);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
if (ret && ret.code) {
|
|
|
result = ret;
|
|
|
}
|
|
|
/**
|
|
|
* 获取购物车总数
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param string $shoppingKey 客户端购物标识
|
|
|
* @return array
|
|
|
*/
|
|
|
getCartCount(uid, shoppingKey) {
|
|
|
return new CartApi(this.ctx).cartCount(uid, shoppingKey);
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
};
|
|
|
/**
|
|
|
* 加入购物车 获取数量
|
|
|
*
|
|
|
* @param int $productSku 商品SKU
|
|
|
* @param int $buyNumber 购买数量
|
|
|
* @param int $goodsType 商品类型,0表示普通商品,1表示加价购商品
|
|
|
* @param int $isEdit 是否是编辑商品SKU,0表示不是编辑
|
|
|
* @param null|int $promotionId 促销id,默认null(加价购有关)
|
|
|
* @param null|int $uid 用户UID,可以不传
|
|
|
* @param string $shoppingKey 购物车在浏览器的唯一识别码,可以不传
|
|
|
* @return array 加入购物车接口返回的数据
|
|
|
*/
|
|
|
addCart(productSku, buyNumber, goodsType, isEdit, promotionId, uid, shoppingKey) {
|
|
|
let that = this;
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 加入购物车
|
|
|
*
|
|
|
* @param int $productSku 商品SKU
|
|
|
* @param int $buyNumber 购买数量
|
|
|
* @param int $goodsType 商品类型,0表示普通商品,1表示加价购商品
|
|
|
* @param int $isEdit 是否是编辑商品SKU,0表示不是编辑
|
|
|
* @param null|int $promotionId 促销id,默认null(加价购有关)
|
|
|
* @param null|int $uid 用户UID,可以不传
|
|
|
* @param string $shoppingKey 购物车在浏览器的唯一识别码,可以不传
|
|
|
* @return array 加入购物车接口返回的数据
|
|
|
*/
|
|
|
const addToCart = (productSku, buyNumber, goodsType, isEdit, promotionId, uid, shoppingKey, cartDelList) => {
|
|
|
if (!productSku) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
let ret = yield new CartApi(that.ctx).addToCart(
|
|
|
productSku, buyNumber, goodsType, isEdit, promotionId, uid, shoppingKey
|
|
|
);
|
|
|
|
|
|
if (!productSku) {
|
|
|
return result;
|
|
|
}
|
|
|
if (ret && ret.code) {
|
|
|
result = ret;
|
|
|
}
|
|
|
|
|
|
let ret = yield cartApi.addToCart(productSku, buyNumber, goodsType, isEdit, promotionId, uid, shoppingKey);
|
|
|
return result;
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: yield getCartData(uid, shoppingKey || _.get(ret, 'data.shopping_key'), cartDelList)
|
|
|
/**
|
|
|
* 加入购物车
|
|
|
*
|
|
|
* @param int $productSku 商品SKU
|
|
|
* @param int $buyNumber 购买数量
|
|
|
* @param int $goodsType 商品类型,0表示普通商品,1表示加价购商品
|
|
|
* @param int $isEdit 是否是编辑商品SKU,0表示不是编辑
|
|
|
* @param null|int $promotionId 促销id,默认null(加价购有关)
|
|
|
* @param null|int $uid 用户UID,可以不传
|
|
|
* @param string $shoppingKey 购物车在浏览器的唯一识别码,可以不传
|
|
|
* @return array 加入购物车接口返回的数据
|
|
|
*/
|
|
|
addToCart(productSku, buyNumber, goodsType, isEdit, promotionId, uid, shoppingKey, cartDelList) {
|
|
|
let that = this;
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
}
|
|
|
|
|
|
if (!shoppingKey && result.data) {
|
|
|
result.data.shopping_key = _.get(ret, 'data.shopping_key');
|
|
|
}
|
|
|
|
|
|
/* if (empty($addCart) || (isset($addCart['code']) && $addCart['code'] !== 200) ) {
|
|
|
UdpLog::info('【购物车】校验参数传递auth','productSku:'.$productSku.'buyNumber:'.$buyNumber.
|
|
|
'goodsType:'.$goodsType,'isEdit:'.$isEdit.'promotionId:'.$promotionId.'uid:'.$uid.'shoppingKey:'.$shoppingKey);
|
|
|
}*/
|
|
|
if (!productSku) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
};
|
|
|
let ret = yield new CartApi(that.ctx).addToCart(
|
|
|
productSku, buyNumber, goodsType, isEdit, promotionId, uid, shoppingKey
|
|
|
);
|
|
|
|
|
|
/**
|
|
|
* 购物车商品选择与取消接口返回的数据处理
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param string $skuList 商品sku列表json格式, 如{"744403":1}
|
|
|
* @param string $shoppingKey 未登录用户唯一识别码
|
|
|
* @param bool hasPromotion 标识是不是有promotion_id参数, 后端会去调用不同的接口
|
|
|
* @return array 处理之后的数据的数据
|
|
|
*/
|
|
|
const selectGoods = (uid, skuList, shoppingKey, hasPromotion, cartDelList) => {
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: yield that.getCartData(uid, shoppingKey || _.get(ret, 'data.shopping_key'), cartDelList)
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
if (!shoppingKey && result.data) {
|
|
|
result.data.shopping_key = _.get(ret, 'data.shopping_key');
|
|
|
}
|
|
|
|
|
|
if (!skuList) {
|
|
|
// UdpLog::info('【购物车】校验参数传递auth', 'skuList:' . $skuList);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
let select = yield cartApi.selectGoods(uid, skuList, shoppingKey, hasPromotion);
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
if (select && select.code) {
|
|
|
result = {
|
|
|
code: select.code,
|
|
|
data: chelper.formatCart(select, uid, shoppingKey, cartDelList)
|
|
|
/**
|
|
|
* 购物车商品选择与取消接口返回的数据处理
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param string $skuList 商品sku列表json格式, 如{"744403":1}
|
|
|
* @param string $shoppingKey 未登录用户唯一识别码
|
|
|
* @param bool hasPromotion 标识是不是有promotion_id参数, 后端会去调用不同的接口
|
|
|
* @return array 处理之后的数据的数据
|
|
|
*/
|
|
|
selectGoods(uid, skuList, shoppingKey, hasPromotion, cartDelList) {
|
|
|
let that = this;
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
|
|
|
// result = select;
|
|
|
}/* else {
|
|
|
UdpLog::info('【购物车】校验参数传递auth', 'uid:' . $uid . 'skuList:'
|
|
|
. $skuList . 'shoppingKey:' . $shoppingKey . 'hasPromotion:' . $hasPromotion);
|
|
|
}*/
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
};
|
|
|
if (!skuList) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 修改购物车商品数量
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param string $sku 商品SKU
|
|
|
* @param int $increaseNum 增加的数目
|
|
|
* @param int $decreaseNum 减少的数目
|
|
|
* @param string $shoppingKey 未登录用户唯一识别码
|
|
|
* @return array 接口返回的数据
|
|
|
*/
|
|
|
const modifyProductNum = (uid, sku, increaseNum, decreaseNum, shoppingKey, cartDelList) => {
|
|
|
let select = yield new CartApi(that.ctx).selectGoods(uid, skuList, shoppingKey, hasPromotion);
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
if (select && select.code) {
|
|
|
result = {
|
|
|
code: select.code,
|
|
|
data: chelper.formatCart(select, uid, shoppingKey, cartDelList)
|
|
|
};
|
|
|
}
|
|
|
|
|
|
if (!sku) {
|
|
|
// UdpLog::info('【购物车】校验参数传递auth', 'sku:' . $sku);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
let ret = yield cartApi.modifyProductNum(uid, sku, increaseNum, decreaseNum, shoppingKey);
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: yield getCartData(uid, shoppingKey, cartDelList)
|
|
|
/**
|
|
|
* 修改购物车商品数量
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param string $sku 商品SKU
|
|
|
* @param int $increaseNum 增加的数目
|
|
|
* @param int $decreaseNum 减少的数目
|
|
|
* @param string $shoppingKey 未登录用户唯一识别码
|
|
|
* @return array 接口返回的数据
|
|
|
*/
|
|
|
modifyProductNum(uid, sku, increaseNum, decreaseNum, shoppingKey, cartDelList) {
|
|
|
let that = this;
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
}/* else {
|
|
|
UdpLog::info('【购物车】校验参数传递auth', 'uid:' . $uid . 'sku:' . $sku, 'increaseNum:'
|
|
|
. $increaseNum . 'decreaseNum:' . $decreaseNum . 'shoppingKey:' . $shoppingKey);
|
|
|
}*/
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
|
|
|
};
|
|
|
if (!sku) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 移出购物车
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param string $skuList 商品sku列表json格式, 如{"744403":1}
|
|
|
* @param string $count 要删除的数目
|
|
|
* @param string $shoppingKey 未登录用户唯一识别码
|
|
|
* @param bool hasPromotion 标识是不是有promotion_id参数, 后端会去调用不同的接口
|
|
|
* @return array 接口返回的数据
|
|
|
*/
|
|
|
const removeFromCart = (uid, shoppingKey, skuList, hasPromotion, cartDelList) => {
|
|
|
let ret = yield new CartApi(that.ctx).modifyProductNum(uid, sku, increaseNum, decreaseNum, shoppingKey);
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: yield that.getCartData(uid, shoppingKey, cartDelList)
|
|
|
};
|
|
|
}
|
|
|
|
|
|
if (!skuList) {
|
|
|
// UdpLog::info('【购物车】校验参数传递auth', 'skuList:' . $skuList);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
let ret = yield cartApi.removeFromCart(uid, shoppingKey, skuList, hasPromotion);
|
|
|
})();
|
|
|
|
|
|
if (!hasPromotion) {
|
|
|
return ret;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: chelper.formatCart(ret, uid, shoppingKey, cartDelList)
|
|
|
/**
|
|
|
* 移出购物车
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param string $skuList 商品sku列表json格式, 如{"744403":1}
|
|
|
* @param string $count 要删除的数目
|
|
|
* @param string $shoppingKey 未登录用户唯一识别码
|
|
|
* @param bool hasPromotion 标识是不是有promotion_id参数, 后端会去调用不同的接口
|
|
|
* @return array 接口返回的数据
|
|
|
*/
|
|
|
removeFromCart(uid, shoppingKey, skuList, hasPromotion, cartDelList) {
|
|
|
let that = this;
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
}/* else {
|
|
|
UdpLog::info('【购物车】校验参数传递auth', 'uid:' . $uid . 'skuList:' .
|
|
|
$skuList . 'shoppingKey:' . $shoppingKey . 'hasPromotion:' . $hasPromotion);
|
|
|
}*/
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
};
|
|
|
if (!skuList) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 移入收藏夹
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param string $skuList 商品sku列表
|
|
|
* @param bool hasPromotion 标识是不是有promotion_id参数, 后端会去调用不同的接口
|
|
|
* @return array 接口返回的数据
|
|
|
*/
|
|
|
const addToFav = (uid, skuList, hasPromotion, cartDelList) => {
|
|
|
let ret = yield new CartApi(that.ctx).removeFromCart(uid, shoppingKey, skuList, hasPromotion);
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
if (!hasPromotion) {
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
if (!uid) {
|
|
|
return {
|
|
|
code: 403,
|
|
|
message: '请先登录!',
|
|
|
data: {
|
|
|
url: helpers.urlFormat('/signin.html', {
|
|
|
refer: helpers.urlFormat('/cart/cart')
|
|
|
})
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: chelper.formatCart(ret, uid, shoppingKey, cartDelList)
|
|
|
};
|
|
|
}
|
|
|
|
|
|
if (!skuList) {
|
|
|
// UdpLog::info('【购物车】校验参数传递auth', 'skuList:' . $skuList);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
let ret = yield cartApi.addToFav(uid, skuList, hasPromotion);
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: chelper.formatCart(ret, uid, null, cartDelList)
|
|
|
/**
|
|
|
* 移入收藏夹
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param string $skuList 商品sku列表
|
|
|
* @param bool hasPromotion 标识是不是有promotion_id参数, 后端会去调用不同的接口
|
|
|
* @return array 接口返回的数据
|
|
|
*/
|
|
|
addToFav(uid, skuList, hasPromotion, cartDelList) {
|
|
|
let that = this;
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
}/* else {
|
|
|
UdpLog::info('【购物车】校验参数传递auth', 'uid:' . $uid . 'skuList:' . $skuList . 'hasPromotion:' . $hasPromotion);
|
|
|
}*/
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 检查用户是否收藏这一批商品
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param array $skuList 商品SKU列表
|
|
|
* @return array
|
|
|
*/
|
|
|
const checkUserIsFav = (uid, skuList) => {
|
|
|
return co(function * () {
|
|
|
let result = {};
|
|
|
if (!uid) {
|
|
|
return {
|
|
|
code: 403,
|
|
|
message: '请先登录!',
|
|
|
data: {
|
|
|
url: helpers.urlFormat('/signin.html', {
|
|
|
refer: helpers.urlFormat('/cart/cart')
|
|
|
})
|
|
|
}
|
|
|
};
|
|
|
}
|
|
|
|
|
|
if (!skuList) {
|
|
|
return result;
|
|
|
}
|
|
|
if (!skuList) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
if (!uid || !_.isNumber(uid)) {
|
|
|
let ret = yield new CartApi(that.ctx).addToFav(uid, skuList, hasPromotion);
|
|
|
|
|
|
_.forEach(skuList, it => {
|
|
|
result[it] = false;
|
|
|
});
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: chelper.formatCart(ret, uid, null, cartDelList)
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
}
|
|
|
})();
|
|
|
|
|
|
return yield cartApi.checkUserIsFavProductList(uid, skuList);
|
|
|
})();
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取为你优选商品 待处理
|
|
|
*
|
|
|
* @param $channel 频道
|
|
|
* @param $uid 用户id
|
|
|
* @param $udid 设备id
|
|
|
* @param int $page 分页页码
|
|
|
* @return array
|
|
|
* @internal param $rec_pos
|
|
|
* @internal param $limit
|
|
|
*/
|
|
|
const getRecommendProduct = (channelNum, uid, udid, page) => {
|
|
|
|
|
|
return co(function * () {
|
|
|
|
|
|
let result = {
|
|
|
code: 200,
|
|
|
message: '',
|
|
|
data: {
|
|
|
header: '为您优选',
|
|
|
hasPrev: false,
|
|
|
hasNext: false,
|
|
|
item: null
|
|
|
/**
|
|
|
* 检查用户是否收藏这一批商品
|
|
|
*
|
|
|
* @param int $uid 用户ID
|
|
|
* @param array $skuList 商品SKU列表
|
|
|
* @return array
|
|
|
*/
|
|
|
checkUserIsFav(uid, skuList) {
|
|
|
let that = this;
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {};
|
|
|
|
|
|
if (!skuList) {
|
|
|
return result;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
if (!_.isNumber(page)) {
|
|
|
return result;
|
|
|
}
|
|
|
if (!uid || !_.isNumber(uid)) {
|
|
|
|
|
|
let together = yield cartApi.newPreference(channelNum, uid, udid, '100003', 30);
|
|
|
let plist = _.get(together, 'data.product_list');
|
|
|
_.forEach(skuList, it => {
|
|
|
result[it] = false;
|
|
|
});
|
|
|
|
|
|
if (!plist || !plist.length) {
|
|
|
return result;
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
if (page > 5) {
|
|
|
page = 1;
|
|
|
}
|
|
|
return yield new CartApi(that.ctx).checkUserIsFavProductList(uid, skuList);
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
let begin = (page - 1) * 6;
|
|
|
let end = begin + 7;
|
|
|
let items = _.map(_.slice(plist, begin, end), it => {
|
|
|
|
|
|
let item = {
|
|
|
id: it.product_id,
|
|
|
skn: it.product_skn,
|
|
|
title: it.product_name,
|
|
|
img: it.default_images ? helpers.image(it.default_images, 190, 250) : '',
|
|
|
alt: it.product_name,
|
|
|
price: '¥' + chelper.transPrice(it.sales_price),
|
|
|
marketPrice: (it.market_price && +it.market_price > +it.sales_price) ?
|
|
|
'¥' + chelper.transPrice(it.market_price) : ''
|
|
|
/**
|
|
|
* 获取为你优选商品 待处理
|
|
|
*
|
|
|
* @param $channel 频道
|
|
|
* @param $uid 用户id
|
|
|
* @param $udid 设备id
|
|
|
* @param int $page 分页页码
|
|
|
* @return array
|
|
|
* @internal param $rec_pos
|
|
|
* @internal param $limit
|
|
|
*/
|
|
|
getRecommendProduct(channelNum, uid, udid, page) {
|
|
|
let that = this;
|
|
|
|
|
|
return co(function * () {
|
|
|
|
|
|
let result = {
|
|
|
code: 200,
|
|
|
message: '',
|
|
|
data: {
|
|
|
header: '为您优选',
|
|
|
hasPrev: false,
|
|
|
hasNext: false,
|
|
|
item: null
|
|
|
}
|
|
|
};
|
|
|
|
|
|
item.href = helpers.getUrlBySkc(it.product_skn);
|
|
|
|
|
|
if (+it.sales_price !== +it.market_price) {
|
|
|
it.marketPrice = chelper.transPrice(it.market_price);
|
|
|
if (!_.isNumber(page)) {
|
|
|
return result;
|
|
|
}
|
|
|
return item;
|
|
|
});
|
|
|
|
|
|
Object.assign(result.data, {
|
|
|
item: items
|
|
|
});
|
|
|
let together = yield new CartApi(that.ctx).newPreference(channelNum, uid, udid, '100003', 30);
|
|
|
let plist = _.get(together, 'data.product_list');
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
};
|
|
|
if (!plist || !plist.length) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 获取凑单商品
|
|
|
*
|
|
|
* @param int $page 分页页码
|
|
|
* @return array
|
|
|
*/
|
|
|
const getTogetherProduct = (page) => {
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 200,
|
|
|
message: '',
|
|
|
data: {
|
|
|
header: '凑单商品',
|
|
|
hasPrev: false,
|
|
|
hasNext: false,
|
|
|
item: null
|
|
|
if (page > 5) {
|
|
|
page = 1;
|
|
|
}
|
|
|
};
|
|
|
|
|
|
if (!_.isNumber(page)) {
|
|
|
return result;
|
|
|
}
|
|
|
let begin = (page - 1) * 6;
|
|
|
let end = begin + 7;
|
|
|
let items = _.map(_.slice(plist, begin, end), it => {
|
|
|
|
|
|
let item = {
|
|
|
id: it.product_id,
|
|
|
skn: it.product_skn,
|
|
|
title: it.product_name,
|
|
|
img: it.default_images ? helpers.image(it.default_images, 190, 250) : '',
|
|
|
alt: it.product_name,
|
|
|
price: '¥' + chelper.transPrice(it.sales_price),
|
|
|
marketPrice: (it.market_price && +it.market_price > +it.sales_price) ?
|
|
|
'¥' + chelper.transPrice(it.market_price) : ''
|
|
|
};
|
|
|
|
|
|
item.href = helpers.getUrlBySkc(it.product_skn);
|
|
|
|
|
|
if (+it.sales_price !== +it.market_price) {
|
|
|
it.marketPrice = chelper.transPrice(it.market_price);
|
|
|
}
|
|
|
return item;
|
|
|
});
|
|
|
|
|
|
let together = yield cartApi.togetherProduct(page);
|
|
|
Object.assign(result.data, {
|
|
|
item: items
|
|
|
});
|
|
|
|
|
|
if (!_.get(together, 'data.goods')) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
result.data.hasPrev = true;
|
|
|
result.data.hasNext = true;
|
|
|
|
|
|
result.data.item = _.map(together.data.goods, it => {
|
|
|
|
|
|
let item = {
|
|
|
id: it.id,
|
|
|
skn: it.product_skn,
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
// it.url,
|
|
|
href: it.url,
|
|
|
title: it.product_name,
|
|
|
img: it.default_pic ? helpers.image(it.default_pic, 100, 100) : '',
|
|
|
alt: it.product_name,
|
|
|
price: Number(it.price.sales_price)
|
|
|
/**
|
|
|
* 获取凑单商品
|
|
|
*
|
|
|
* @param int $page 分页页码
|
|
|
* @return array
|
|
|
*/
|
|
|
getTogetherProduct(page) {
|
|
|
let that = this;
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 200,
|
|
|
message: '',
|
|
|
data: {
|
|
|
header: '凑单商品',
|
|
|
hasPrev: false,
|
|
|
hasNext: false,
|
|
|
item: null
|
|
|
}
|
|
|
};
|
|
|
|
|
|
if (item.price !== Number(it.price.market_price)) {
|
|
|
it.marketPrice = Number(it.price.market_price);
|
|
|
if (!_.isNumber(page)) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
return item;
|
|
|
});
|
|
|
|
|
|
// 当数据量不足6个时,判定为没有下一页
|
|
|
if (page === 1) {
|
|
|
result.data.hasPrev = false;
|
|
|
}
|
|
|
let together = yield new CartApi(that.ctx).togetherProduct(page);
|
|
|
|
|
|
if (!result.data.item || result.data.item.length < 6) {
|
|
|
result.data.hasNext = false;
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
};
|
|
|
if (!_.get(together, 'data.goods')) {
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 修改购物车商品
|
|
|
* @param param
|
|
|
* @param uid
|
|
|
* @param shoppingKey
|
|
|
* @param cartDelList
|
|
|
*/
|
|
|
const modifyProduct = (param, uid, shoppingKey, cartDelList) => {
|
|
|
result.data.hasPrev = true;
|
|
|
result.data.hasNext = true;
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
result.data.item = _.map(together.data.goods, it => {
|
|
|
|
|
|
let ret = yield cartApi.modifyProduct(param);
|
|
|
let item = {
|
|
|
id: it.id,
|
|
|
skn: it.product_skn,
|
|
|
href: it.url,
|
|
|
title: it.product_name,
|
|
|
img: it.default_pic ? helpers.image(it.default_pic, 100, 100) : '',
|
|
|
alt: it.product_name,
|
|
|
price: Number(it.price.sales_price)
|
|
|
};
|
|
|
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: yield getCartData(uid, shoppingKey, cartDelList)
|
|
|
};
|
|
|
}
|
|
|
if (item.price !== Number(it.price.market_price)) {
|
|
|
it.marketPrice = Number(it.price.market_price);
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
};
|
|
|
return item;
|
|
|
});
|
|
|
|
|
|
/**
|
|
|
* 重选赠品或加价购商品
|
|
|
* @param uid
|
|
|
* @param shoppingKey
|
|
|
* @param promotionId
|
|
|
* @param newSkn
|
|
|
* @param newSku
|
|
|
* @param cartDelList
|
|
|
*/
|
|
|
const swapGift = (uid, shoppingKey, promotionId, newSkn, newSku, cartDelList) => {
|
|
|
return co(function * () {
|
|
|
// 当数据量不足6个时,判定为没有下一页
|
|
|
if (page === 1) {
|
|
|
result.data.hasPrev = false;
|
|
|
}
|
|
|
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
if (!result.data.item || result.data.item.length < 6) {
|
|
|
result.data.hasNext = false;
|
|
|
}
|
|
|
|
|
|
let ret = yield cartApi.swapGift(uid, shoppingKey, promotionId, newSkn, newSku);
|
|
|
return result;
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: yield getCartData(uid, shoppingKey, cartDelList)
|
|
|
/**
|
|
|
* 修改购物车商品
|
|
|
* @param param
|
|
|
* @param uid
|
|
|
* @param shoppingKey
|
|
|
* @param cartDelList
|
|
|
*/
|
|
|
modifyProduct(param, uid, shoppingKey, cartDelList) {
|
|
|
let that = this;
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
}
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
let ret = yield new CartApi(that.ctx).modifyProduct(param);
|
|
|
|
|
|
};
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: yield that.getCartData(uid, shoppingKey, cartDelList)
|
|
|
};
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 查询指定优惠下的可选赠品或加价购
|
|
|
* @param promotionId 优惠ID
|
|
|
* @param uid
|
|
|
* @param shoppingKey
|
|
|
*/
|
|
|
const queryUserPromotionGift = (promotionId, uid, shoppingKey) => {
|
|
|
return result;
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
return co(function * () {
|
|
|
let promotionGifts = yield cartApi.queryPromotionGift(promotionId);
|
|
|
let cartDataRet = yield cartApi.cartData(uid, shoppingKey);
|
|
|
let selectedGift = chelper.formatCartGoods(_.get(cartDataRet, 'data.ordinary_cart_data.goods_list'));
|
|
|
let currentProduct = null; // 默认展示第一个商品
|
|
|
/**
|
|
|
* 重选赠品或加价购商品
|
|
|
* @param uid
|
|
|
* @param shoppingKey
|
|
|
* @param promotionId
|
|
|
* @param newSkn
|
|
|
* @param newSku
|
|
|
* @param cartDelList
|
|
|
*/
|
|
|
swapGift(uid, shoppingKey, promotionId, newSkn, newSku, cartDelList) {
|
|
|
let that = this;
|
|
|
|
|
|
return co(function * () {
|
|
|
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
|
|
|
if (promotionGifts && promotionGifts.code === 200) {
|
|
|
let promotionList = chelper.formatPriceGifts(_.get(promotionGifts, 'data.arrays', []));
|
|
|
let ret = yield new CartApi(that.ctx).swapGift(uid, shoppingKey, promotionId, newSkn, newSku);
|
|
|
|
|
|
promotionGifts.data = _.get(promotionList, '[0]', {});
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: yield that.getCartData(uid, shoppingKey, cartDelList)
|
|
|
};
|
|
|
}
|
|
|
|
|
|
let goodsList = [];
|
|
|
let checked;
|
|
|
return result;
|
|
|
})();
|
|
|
|
|
|
_.forEach(promotionList, value => {
|
|
|
if (!value.goodsList || !value.goodsList.length) {
|
|
|
return;
|
|
|
}
|
|
|
}
|
|
|
|
|
|
_.forEach(value.goodsList, it => {
|
|
|
if (!checked) {
|
|
|
checked = true;
|
|
|
it.active = true;
|
|
|
currentProduct = it;
|
|
|
promotionGifts.data.promotionDesc = value.promotionTitle;
|
|
|
/**
|
|
|
* 查询指定优惠下的可选赠品或加价购
|
|
|
* @param promotionId 优惠ID
|
|
|
* @param uid
|
|
|
* @param shoppingKey
|
|
|
*/
|
|
|
queryUserPromotionGift(promotionId, uid, shoppingKey) {
|
|
|
let that = this;
|
|
|
let cartApiModel = new CartApi(that.ctx);
|
|
|
|
|
|
return co(function * () {
|
|
|
let promotionGifts = yield cartApiModel.queryPromotionGift(promotionId);
|
|
|
let cartDataRet = yield cartApiModel.cartData(uid, shoppingKey);
|
|
|
let selectedGift = chelper.formatCartGoods(_.get(cartDataRet, 'data.ordinary_cart_data.goods_list'));
|
|
|
let currentProduct = null; // 默认展示第一个商品
|
|
|
|
|
|
if (promotionGifts && promotionGifts.code === 200) {
|
|
|
let promotionList = chelper.formatPriceGifts(_.get(promotionGifts, 'data.arrays', []));
|
|
|
|
|
|
promotionGifts.data = _.get(promotionList, '[0]', {});
|
|
|
|
|
|
let goodsList = [];
|
|
|
let checked;
|
|
|
|
|
|
_.forEach(promotionList, value => {
|
|
|
if (!value.goodsList || !value.goodsList.length) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
Object.assign(it, {
|
|
|
isSelected: !!_.find(selectedGift, ['skn', it.skn]),
|
|
|
promotionId: value.promotionId,
|
|
|
promotionTitle: value.promotionTitle,
|
|
|
maxSelectNumber: value.maxSelectNumber
|
|
|
_.forEach(value.goodsList, it => {
|
|
|
if (!checked) {
|
|
|
checked = true;
|
|
|
it.active = true;
|
|
|
currentProduct = it;
|
|
|
promotionGifts.data.promotionDesc = value.promotionTitle;
|
|
|
}
|
|
|
|
|
|
Object.assign(it, {
|
|
|
isSelected: !!_.find(selectedGift, ['skn', it.skn]),
|
|
|
promotionId: value.promotionId,
|
|
|
promotionTitle: value.promotionTitle,
|
|
|
maxSelectNumber: value.maxSelectNumber
|
|
|
});
|
|
|
|
|
|
goodsList.push(it);
|
|
|
});
|
|
|
|
|
|
goodsList.push(it);
|
|
|
});
|
|
|
});
|
|
|
|
|
|
promotionGifts.data.goodsList = goodsList;
|
|
|
promotionGifts.data.goodsList = goodsList;
|
|
|
|
|
|
// 获取选中商品的数据详情
|
|
|
if (currentProduct && currentProduct.id) {
|
|
|
let prodInfo = yield getProductInfoAsync(currentProduct.id);
|
|
|
// 获取选中商品的数据详情
|
|
|
if (currentProduct && currentProduct.id) {
|
|
|
let prodInfo = yield that.getProductInfoAsync(currentProduct.id);
|
|
|
|
|
|
// 价格为活动价
|
|
|
if (prodInfo) {
|
|
|
prodInfo.salePrice = '¥' + currentProduct.subjoinPrice;
|
|
|
}
|
|
|
// 价格为活动价
|
|
|
if (prodInfo) {
|
|
|
prodInfo.salePrice = '¥' + currentProduct.subjoinPrice;
|
|
|
}
|
|
|
|
|
|
promotionGifts.data.productInfo = prodInfo;
|
|
|
promotionGifts.data.productInfo = prodInfo;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
return promotionGifts;
|
|
|
})();
|
|
|
|
|
|
};
|
|
|
return promotionGifts;
|
|
|
})();
|
|
|
|
|
|
/**
|
|
|
* 首页mini购物车数据
|
|
|
* @param uid
|
|
|
* @param shoppingKey
|
|
|
*/
|
|
|
const getMiniCartData = (uid, shoppingKey) => {
|
|
|
}
|
|
|
|
|
|
return co(function * () {
|
|
|
let cartDataRet = yield cartApi.cartData(uid, shoppingKey);
|
|
|
/**
|
|
|
* 首页mini购物车数据
|
|
|
* @param uid
|
|
|
* @param shoppingKey
|
|
|
*/
|
|
|
getMiniCartData(uid, shoppingKey) {
|
|
|
let that = this;
|
|
|
|
|
|
if (!cartDataRet || cartDataRet.code !== 200) {
|
|
|
return null;
|
|
|
}
|
|
|
return co(function * () {
|
|
|
let cartDataRet = yield new CartApi(that.ctx).cartData(uid, shoppingKey);
|
|
|
|
|
|
let ret = cartDataRet && cartDataRet.data;
|
|
|
let advCart = _.get(ret, 'advance_cart_data');
|
|
|
let comCart = _.get(ret, 'ordinary_cart_data');
|
|
|
let advGoodsList = _.flatten(_.map(_.get(advCart, 'goods_pool_list'), 'goods_list'));
|
|
|
let comGoodsList = _.flatten(_.map(_.get(comCart, 'goods_pool_list'), 'goods_list'));
|
|
|
let comSubs = _.flatten(_.map(_.get(comCart, 'goods_pool_list'), 'sub_pool'));
|
|
|
let subsGoodsList = _.flatten(_.map(comSubs, 'goods_list'));
|
|
|
|
|
|
let advOffShe = _.get(advCart, 'off_shelves_goods_list');
|
|
|
let comOffShe = _.get(comCart, 'off_shelves_goods_list');
|
|
|
|
|
|
let advSoldOuts = _.get(advCart, 'sold_out_goods_list');
|
|
|
let comSoldOuts = _.get(comCart, 'sold_out_goods_list');
|
|
|
|
|
|
let goodsList = _(advGoodsList).concat(comGoodsList, subsGoodsList,
|
|
|
advOffShe, comOffShe,
|
|
|
advSoldOuts, comSoldOuts);
|
|
|
|
|
|
goodsList = _.filter(goodsList.value(), it => !!it);
|
|
|
|
|
|
let glist = _.map(goodsList, g => {
|
|
|
let goods = {
|
|
|
is_advance: g.is_advance,
|
|
|
default_img: g.goods_images ? helpers.image(g.goods_images, 46, 62) : '',
|
|
|
product_name: g.product_name,
|
|
|
factory_goods_name: g.factory_goods_name,
|
|
|
size_name: g.size_name,
|
|
|
show_price: transPrice(g.real_price),
|
|
|
buy_number: g.buy_number,
|
|
|
goods_incart_id: g.shopping_cart_id,
|
|
|
product_sku: g.product_sku,
|
|
|
promotion_id: g.promotion_id
|
|
|
};
|
|
|
|
|
|
goods.product_url = helpers.getUrlBySkc(g.product_skn);
|
|
|
return goods;
|
|
|
});
|
|
|
if (!cartDataRet || cartDataRet.code !== 200) {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
let advCount = _.get(ret, 'advance_cart_data.shopping_cart_data.goods_count') || 0;
|
|
|
let comCount = _.get(ret, 'ordinary_cart_data.shopping_cart_data.goods_count') || 0;
|
|
|
let ret = cartDataRet && cartDataRet.data;
|
|
|
let advCart = _.get(ret, 'advance_cart_data');
|
|
|
let comCart = _.get(ret, 'ordinary_cart_data');
|
|
|
let advGoodsList = _.flatten(_.map(_.get(advCart, 'goods_pool_list'), 'goods_list'));
|
|
|
let comGoodsList = _.flatten(_.map(_.get(comCart, 'goods_pool_list'), 'goods_list'));
|
|
|
let comSubs = _.flatten(_.map(_.get(comCart, 'goods_pool_list'), 'sub_pool'));
|
|
|
let subsGoodsList = _.flatten(_.map(comSubs, 'goods_list'));
|
|
|
|
|
|
let advOffShe = _.get(advCart, 'off_shelves_goods_list');
|
|
|
let comOffShe = _.get(comCart, 'off_shelves_goods_list');
|
|
|
|
|
|
let advSoldOuts = _.get(advCart, 'sold_out_goods_list');
|
|
|
let comSoldOuts = _.get(comCart, 'sold_out_goods_list');
|
|
|
|
|
|
let goodsList = _(advGoodsList).concat(comGoodsList, subsGoodsList,
|
|
|
advOffShe, comOffShe,
|
|
|
advSoldOuts, comSoldOuts);
|
|
|
|
|
|
goodsList = _.filter(goodsList.value(), it => !!it);
|
|
|
|
|
|
let glist = _.map(goodsList, g => {
|
|
|
let goods = {
|
|
|
is_advance: g.is_advance,
|
|
|
default_img: g.goods_images ? helpers.image(g.goods_images, 46, 62) : '',
|
|
|
product_name: g.product_name,
|
|
|
factory_goods_name: g.factory_goods_name,
|
|
|
size_name: g.size_name,
|
|
|
show_price: chelper.transPrice(g.real_price),
|
|
|
buy_number: g.buy_number,
|
|
|
goods_incart_id: g.shopping_cart_id,
|
|
|
product_sku: g.product_sku,
|
|
|
promotion_id: g.promotion_id
|
|
|
};
|
|
|
|
|
|
goods.product_url = helpers.getUrlBySkc(g.product_skn);
|
|
|
return goods;
|
|
|
});
|
|
|
|
|
|
return {
|
|
|
main_goods: glist,
|
|
|
total: Number(advCount) + Number(comCount)
|
|
|
};
|
|
|
})();
|
|
|
};
|
|
|
let advCount = _.get(ret, 'advance_cart_data.shopping_cart_data.goods_count') || 0;
|
|
|
let comCount = _.get(ret, 'ordinary_cart_data.shopping_cart_data.goods_count') || 0;
|
|
|
|
|
|
// 套餐添加购物车
|
|
|
const addBundleData = (params) => {
|
|
|
return cartApi.addBundle(params).then(d => { // eslint-disable-line
|
|
|
return d;
|
|
|
});
|
|
|
};
|
|
|
return {
|
|
|
main_goods: glist,
|
|
|
total: Number(advCount) + Number(comCount)
|
|
|
};
|
|
|
})();
|
|
|
}
|
|
|
|
|
|
// 套餐增减购物车
|
|
|
const bundleNumData = (params, cartDelList) => {
|
|
|
// 套餐添加购物车
|
|
|
addBundleData(params) {
|
|
|
return new CartApi(this.ctx).addBundle(params);
|
|
|
}
|
|
|
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
// 套餐增减购物车
|
|
|
bundleNumData(params, cartDelList) {
|
|
|
let that = this;
|
|
|
|
|
|
if (!params.activity_id) {
|
|
|
return {
|
|
|
return co(function * () {
|
|
|
let result = {
|
|
|
code: 400,
|
|
|
message: '无效的活动'
|
|
|
message: ERROR_400_MESSAGE
|
|
|
};
|
|
|
}
|
|
|
|
|
|
let ret = yield cartApi.bundleNum(params);
|
|
|
if (!params.activity_id) {
|
|
|
return {
|
|
|
code: 400,
|
|
|
message: '无效的活动'
|
|
|
};
|
|
|
}
|
|
|
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: yield getCartData(params.uid, params.shopping_key, cartDelList)
|
|
|
};
|
|
|
}
|
|
|
let ret = yield new CartApi(that.ctx).bundleNum(params);
|
|
|
|
|
|
return result;
|
|
|
})();
|
|
|
};
|
|
|
if (ret && ret.code) {
|
|
|
result = {
|
|
|
code: ret.code,
|
|
|
data: yield that.getCartData(params.uid, params.shopping_key, cartDelList)
|
|
|
};
|
|
|
}
|
|
|
|
|
|
module.exports = {
|
|
|
getProductInfoAsync, /** 获取商品信息 **/
|
|
|
getCartData, /** 购物车数据 **/
|
|
|
getCartCount, /** 得到购物车数量 **/
|
|
|
addCart, /** 加入到购物车 获取数量 **/
|
|
|
addToCart, /** 加入到购物车 **/
|
|
|
selectGoods, /** 选中/取消选中商品 **/
|
|
|
modifyProductNum, /** 修改商品数量 **/
|
|
|
removeFromCart, /** 从购物车中删除 **/
|
|
|
addToFav, /** 移入收藏 **/
|
|
|
checkUserIsFav, /** 判断商品是否已收藏 **/
|
|
|
getRecommendProduct, /** 为您优选商品 **/
|
|
|
getTogetherProduct, /** 凑单商品 **/
|
|
|
modifyProduct, /** 修改购物车商品 **/
|
|
|
swapGift, /** 重选赠品或加价购商品 **/
|
|
|
queryUserPromotionGift, /** 查询指定优惠下的可选赠品或加价购 **/
|
|
|
getCoupons, /** 获取优惠券列表 **/
|
|
|
getMiniCartData, /** 首页mini购物车数据 **/
|
|
|
addBundleData, /** 套餐添加购物车 **/
|
|
|
bundleNumData /** 套餐增减购物车 **/
|
|
|
return result;
|
|
|
})();
|
|
|
}
|
|
|
}; |
...
|
...
|
|