You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

148 lines
4.4 KiB

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.

import _extends from "@babel/runtime/helpers/esm/extends";
import { UNSELECTED_SKU_VALUE_ID } from '../constants';
/*
normalize sku tree
[
{
count: 2,
k: "品种", // 规格名称 skuKeyName
k_id: "1200", // skuKeyId
k_s: "s1" // skuKeyStr
v: [ // skuValues
{ // skuValue
id: "1201", // skuValueId
name: "萌" // 具体的规格值 skuValueName
}, {
id: "973",
name: "帅"
}
]
},
...
]
|
v
{
s1: [{
id: "1201",
name: "萌"
}, {
id: "973",
name: "帅"
}],
...
}
*/
export var normalizeSkuTree = function normalizeSkuTree(skuTree) {
var normalizedTree = {};
skuTree.forEach(function (treeItem) {
normalizedTree[treeItem.k_s] = treeItem.v;
});
return normalizedTree;
};
export var normalizePropList = function normalizePropList(propList) {
var normalizedProp = {};
propList.forEach(function (item) {
var itemObj = {};
item.v.forEach(function (it) {
itemObj[it.id] = it;
});
normalizedProp[item.k_id] = itemObj;
});
return normalizedProp;
}; // 判断是否所有的sku都已经选中
export var isAllSelected = function isAllSelected(skuTree, selectedSku) {
// 筛选selectedSku对象中key值不为空的值
var selected = Object.keys(selectedSku).filter(function (skuKeyStr) {
return selectedSku[skuKeyStr] !== UNSELECTED_SKU_VALUE_ID;
});
return skuTree.length === selected.length;
}; // 根据已选择的 sku 获取 skuComb
export var getSkuComb = function getSkuComb(skuList, selectedSku) {
var skuComb = skuList.filter(function (item) {
return Object.keys(selectedSku).every(function (skuKeyStr) {
return String(item[skuKeyStr]) === String(selectedSku[skuKeyStr]);
});
});
return skuComb[0];
}; // 获取已选择的sku名称
export var getSelectedSkuValues = function getSelectedSkuValues(skuTree, selectedSku) {
var normalizedTree = normalizeSkuTree(skuTree);
return Object.keys(selectedSku).reduce(function (selectedValues, skuKeyStr) {
var skuValues = normalizedTree[skuKeyStr];
var skuValueId = selectedSku[skuKeyStr];
if (skuValueId !== UNSELECTED_SKU_VALUE_ID) {
var skuValue = skuValues.filter(function (value) {
return value.id === skuValueId;
})[0];
skuValue && selectedValues.push(skuValue);
}
return selectedValues;
}, []);
}; // 判断sku是否可选
export var isSkuChoosable = function isSkuChoosable(skuList, selectedSku, skuToChoose) {
var _extends2;
var key = skuToChoose.key,
valueId = skuToChoose.valueId; // 先假设sku已选中拼入已选中sku对象中
var matchedSku = _extends({}, selectedSku, (_extends2 = {}, _extends2[key] = valueId, _extends2)); // 再判断剩余sku是否全部不可选若不可选则当前sku不可选中
var skusToCheck = Object.keys(matchedSku).filter(function (skuKey) {
return matchedSku[skuKey] !== UNSELECTED_SKU_VALUE_ID;
});
var filteredSku = skuList.filter(function (sku) {
return skusToCheck.every(function (skuKey) {
return String(matchedSku[skuKey]) === String(sku[skuKey]);
});
});
var stock = filteredSku.reduce(function (total, sku) {
total += sku.stock_num;
return total;
}, 0);
return stock > 0;
};
export var getSelectedPropValues = function getSelectedPropValues(propList, selectedProp) {
var normalizeProp = normalizePropList(propList);
return Object.keys(selectedProp).reduce(function (acc, cur) {
selectedProp[cur].forEach(function (it) {
acc.push(_extends({}, normalizeProp[cur][it]));
});
return acc;
}, []);
};
export var getSelectedProperties = function getSelectedProperties(propList, selectedProp) {
var list = [];
(propList || []).forEach(function (prop) {
if (selectedProp[prop.k_id] && selectedProp[prop.k_id].length > 0) {
var v = [];
prop.v.forEach(function (it) {
if (selectedProp[prop.k_id].indexOf(it.id) > -1) {
v.push(_extends({}, it));
}
});
list.push(_extends({}, prop, {
v: v
}));
}
});
return list;
};
export default {
normalizeSkuTree: normalizeSkuTree,
getSkuComb: getSkuComb,
getSelectedSkuValues: getSelectedSkuValues,
isAllSelected: isAllSelected,
isSkuChoosable: isSkuChoosable,
getSelectedPropValues: getSelectedPropValues,
getSelectedProperties: getSelectedProperties
};