mall-uniapp/utils/product.js

109 lines
2.5 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// ========== 商品相关的 Util ==========
/**
* 从商品 SKU 数组中,转换出商品属性的数组
*
* 类似结构:[{
* id: // 属性的编号
* name: // 属性的名字
* values: [{
* id: // 属性值的编号
* name: // 属性值的名字
* }]
* }]
*
* @param skus 商品 SKU 数组
*/
export function convertProductPropertyList(skus) {
let result = [];
for (const sku of skus) {
if (!sku.properties) {
continue
}
for (const property of sku.properties) {
// ① 先处理属性
let resultProperty = result.find(item => item.id === property.propertyId)
if (!resultProperty) {
resultProperty = {
id: property.propertyId,
name: property.propertyName,
values: []
}
result.push(resultProperty)
}
// ② 再处理属性值
let resultValue = resultProperty.values.find(item => item.id === property.valueId)
if (!resultValue) {
resultProperty.values.push({
id: property.valueId,
name: property.valueName
})
}
}
}
return result;
}
/**
* 从商品 SKU 数组中,转换出商品 SKU Map
*
* key: 属性值的拼接,使用 , 间隔,例如说 黑色,CH510
*
* @param skus 商品 SKU Map
*/
export function convertProductSkuMap(skus) {
let result = {};
for (const sku of skus) {
let key = '';
if (!sku.properties) {
continue
}
for (const property of sku.properties) {
if (key !== '') {
key += ','
}
key += property.valueName
}
result[key] = sku
}
return result
}
/**
* 根据 SPU 的活动展示顺序,排序活动列表
*
* @param activityList 原始的活动列表
* @param spu
* @return 新的活动列表
*/
export function sortActivityList(activityList, spu) {
if (!spu || !spu.activityOrders) {
return activityList;
}
const result = [];
for (const activityOrder of spu.activityOrders) {
for (const activity of activityList) {
if (activity.type === activityOrder) {
result.push(activity)
}
}
}
return result;
}
/**
* 将营销活动,设置到 SPU 中
*
* @param spuList SPU 数组
* @param activityListMap 营销活动 Mapkey 为 SPU IDvalue 为营销活动数组
*/
export function setActivityList(spuList, activityListMap) {
if (!spuList || spuList.length === 0) {
return;
}
for (const spu of spuList) {
spu.activityList = activityListMap[spu.id + ''] || [];
spu.activityList = sortActivityList(spu.activityList, spu);
}
}