...
|
...
|
@@ -18,62 +18,10 @@ const _procProductImg = (product, gender, yhChannel) => { |
|
|
return product.cover1 || product.imagesUrl || product.cover2 || '';
|
|
|
};
|
|
|
|
|
|
const toArray = (obj) => {
|
|
|
if (_.isArray(obj)) {
|
|
|
return obj;
|
|
|
}
|
|
|
let arr = [];
|
|
|
|
|
|
_.forEach(obj, (v, k) => {
|
|
|
if (_.isObject(v)) {
|
|
|
v._key = k;
|
|
|
} else {
|
|
|
v = {
|
|
|
_key: k,
|
|
|
_value: v
|
|
|
};
|
|
|
}
|
|
|
arr.push(v);
|
|
|
});
|
|
|
|
|
|
return arr;
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 按照数组中指定字段排序二维数组
|
|
|
*
|
|
|
* @param array list 需要排序的数组
|
|
|
* @param string key 字段名称
|
|
|
* @param boolean 有 desc 时候降序排列,默认为false
|
|
|
*/
|
|
|
const _sortListByField = (list, key, desc) => {
|
|
|
let array = toArray(list);
|
|
|
|
|
|
array = array.sort((a, b) => {
|
|
|
let matchNumber = /([\d]+)/g;
|
|
|
|
|
|
// 有键,使用键的值排序
|
|
|
if (a[key] && b[key]) {
|
|
|
let numA = +(_.toArray(a[key].match(matchNumber))[0] || 0); // 取第一个出现的数字排序,如果不存在,取0
|
|
|
let numB = +(_.toArray(b[key].match(matchNumber))[0] || 0);
|
|
|
|
|
|
return (desc ? numA > numB : numA < numB) ? -1 : 1;
|
|
|
}
|
|
|
|
|
|
// 无键, 使用本身
|
|
|
let numA = +(_.toArray(a._value.match(matchNumber))[0] || 0);
|
|
|
let numB = +(_.toArray(b._value.match(matchNumber))[0] || 0);
|
|
|
|
|
|
return numA < numB ? -1 : 1;
|
|
|
});
|
|
|
|
|
|
return array;
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
* 商品搜索商品数据处理
|
|
|
*/
|
|
|
exports.processProductList = (list, options) => {
|
|
|
module.exports = (list, options) => {
|
|
|
const pruductList = [];
|
|
|
|
|
|
options = Object.assign({
|
...
|
...
|
@@ -163,149 +111,3 @@ exports.processProductList = (list, options) => { |
|
|
|
|
|
return pruductList;
|
|
|
}; |
|
|
|
|
|
|
|
|
/**
|
|
|
* 处理筛选数据
|
|
|
* @param list
|
|
|
* @param string | options
|
|
|
* @return array 处理之后的筛选数据
|
|
|
*/
|
|
|
exports.processFilter = (list, options) => {
|
|
|
const filters = {
|
|
|
classify: []
|
|
|
};
|
|
|
|
|
|
const filtersType = {
|
|
|
brand: {
|
|
|
name: '所有品牌',
|
|
|
title: '品牌',
|
|
|
dataId: 'id',
|
|
|
subsName: 'brandName',
|
|
|
firstSub: 0,
|
|
|
dataType: 'brand',
|
|
|
sortNum: '1'
|
|
|
},
|
|
|
color: {
|
|
|
name: '所有颜色',
|
|
|
title: '颜色',
|
|
|
dataId: 'colorId',
|
|
|
subsName: 'colorName',
|
|
|
firstSub: 0,
|
|
|
dataType: 'color',
|
|
|
sortNum: '3'
|
|
|
},
|
|
|
discount: {
|
|
|
name: '所有商品',
|
|
|
title: '折扣',
|
|
|
dataId: 'key',
|
|
|
subsName: 'name',
|
|
|
firstSub: '0.1,0.9',
|
|
|
dataType: 'p_d',
|
|
|
sortNum: '6'
|
|
|
},
|
|
|
gender: {
|
|
|
name: '所有性别',
|
|
|
title: '性别',
|
|
|
dataId: 'key',
|
|
|
subsName: 'flag',
|
|
|
firstSub: '1,2,3',
|
|
|
dataType: 'gender',
|
|
|
sortNum: '0'
|
|
|
},
|
|
|
groupSort: {
|
|
|
name: '所有品类',
|
|
|
title: '品类',
|
|
|
dataId: 'relationParameter',
|
|
|
subsName: 'categoryName',
|
|
|
firstSub: 0,
|
|
|
dataType: 'sort',
|
|
|
sortNum: '2'
|
|
|
},
|
|
|
priceRange: {
|
|
|
name: '所有价格',
|
|
|
title: '价格',
|
|
|
dataId: 'key',
|
|
|
subsName: 'flag',
|
|
|
firstSub: 0,
|
|
|
dataType: 'price',
|
|
|
sortNum: '5'
|
|
|
},
|
|
|
size: {
|
|
|
name: '所有尺码',
|
|
|
title: '尺码',
|
|
|
dataId: 'sizeId',
|
|
|
subsName: 'sizeName',
|
|
|
firstSub: 0,
|
|
|
dataType: 'size',
|
|
|
sortNum: '4'
|
|
|
}
|
|
|
};
|
|
|
|
|
|
options = Object.assign({
|
|
|
gender: '1,2,3', // 默认选择的性别,默认1,2,3表示所有
|
|
|
exclude: null // 需要排除的字段
|
|
|
}, options);
|
|
|
list = camelCase(list);
|
|
|
|
|
|
_.forEach(list, (item, key) => {
|
|
|
let classify = {
|
|
|
subs: []
|
|
|
};
|
|
|
|
|
|
if (key === 'groupSort' || !filtersType[key]) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
if ((options.hideSize && key === 'size') || (options.hideSort && key === 'groupSort')) {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
classify.dataType = filtersType[key].dataType;
|
|
|
classify.name = filtersType[key].name;
|
|
|
classify.title = filtersType[key].title;
|
|
|
|
|
|
classify.subs.push({
|
|
|
chosed: true,
|
|
|
dataId: filtersType[key].firstSub,
|
|
|
name: filtersType[key].name
|
|
|
});
|
|
|
|
|
|
// 折扣,价格区间,需要排序
|
|
|
if (key === 'discount' || key === 'priceRange') {
|
|
|
item = _sortListByField(item, 'name');
|
|
|
}
|
|
|
|
|
|
_.forEach(item, (sub, index) => {
|
|
|
let subs = {};
|
|
|
|
|
|
if (key === 'discount') {
|
|
|
subs.dataId = sub._key;
|
|
|
} else if (key === 'priceRange') {
|
|
|
subs.dataId = sub._key;
|
|
|
} else if (filtersType[key].dataId === 'key') {
|
|
|
subs.dataId = index;
|
|
|
} else if (filtersType[key].dataId === 'relationParameter') {
|
|
|
subs.dataId = sub.relationParameter['sort']; // eslint-disable-line
|
|
|
} else {
|
|
|
subs.dataId = sub[filtersType[key].dataId];
|
|
|
}
|
|
|
|
|
|
if (key === 'priceRange') {
|
|
|
subs.name = sub._value;
|
|
|
} else if (filtersType[key].subsName === 'flag') {
|
|
|
subs.name = sub;
|
|
|
} else {
|
|
|
subs.name = sub[filtersType[key].subsName];
|
|
|
|
|
|
if (key === 'discount') {
|
|
|
subs.name = subs.name + '折商品';
|
|
|
}
|
|
|
}
|
|
|
classify.subs.push(subs);
|
|
|
});
|
|
|
|
|
|
filters.classify[filtersType[key].sortNum] = classify;
|
|
|
});
|
|
|
return filters;
|
|
|
}; |
...
|
...
|
|