[bugfix] 修复sku默认选中逻辑与sku是否选中的判断逻辑 (#752)

This commit is contained in:
wny
2018-03-22 15:59:52 +08:00
committed by GitHub
parent ddbe338919
commit 347989bcc5
4 changed files with 49 additions and 24 deletions
+26 -4
View File
@@ -1,3 +1,5 @@
import { UNSELECTED_SKU_VALUE_ID } from '../constants';
/*
normalize sku tree
@@ -43,7 +45,7 @@ export const normalizeSkuTree = (skuTree) => {
// 判断是否所有的sku都已经选中
export const isAllSelected = (skuTree, selectedSku) => {
// 筛选selectedSku对象中key值不为空的值
const selected = Object.keys(selectedSku).filter(skuKeyStr => selectedSku[skuKeyStr]);
const selected = Object.keys(selectedSku).filter(skuKeyStr => selectedSku[skuKeyStr] !== UNSELECTED_SKU_VALUE_ID);
return skuTree.length === selected.length;
};
@@ -64,7 +66,7 @@ export const getSelectedSkuValues = (skuTree, selectedSku) => {
const skuValues = normalizedTree[skuKeyStr];
const skuValueId = selectedSku[skuKeyStr];
if (skuValueId) {
if (skuValueId !== UNSELECTED_SKU_VALUE_ID) {
const skuValue = skuValues.filter(skuValue => skuValue.id === skuValueId)[0];
skuValue && selectedValues.push(skuValue);
}
@@ -72,9 +74,29 @@ export const getSelectedSkuValues = (skuTree, selectedSku) => {
}, []);
};
// 判断sku是否可选
export const isSkuChoosable = (skuList, selectedSku, skuToChoose) => {
const { key, valueId } = skuToChoose;
// 先假设sku已选中,拼入已选中sku对象中
const matchedSku = Object.assign({}, selectedSku, {
[key]: valueId
});
// 再判断剩余sku是否全部不可选,若不可选则当前sku不可选中
const skusToCheck = Object.keys(matchedSku).filter(skuKey => matchedSku[skuKey] !== UNSELECTED_SKU_VALUE_ID);
const filteredSku = skuList.filter(sku => {
return skusToCheck.every(skuKey => {
return String(matchedSku[skuKey]) === String(sku[skuKey]);
});
});
const stock = filteredSku.reduce((total, sku) => (total += sku.stock_num), 0);
return stock > 0;
};
export default {
normalizeSkuTree,
isAllSelected,
getSkuComb,
getSelectedSkuValues
getSelectedSkuValues,
isAllSelected,
isSkuChoosable
};