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

4 years ago
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
};