179 lines
5.2 KiB
JavaScript
179 lines
5.2 KiB
JavaScript
"use strict";
|
||
|
||
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
||
|
||
exports.__esModule = true;
|
||
exports.default = exports.getSelectedProperties = exports.getSelectedPropValues = exports.isSkuChoosable = exports.getSelectedSkuValues = exports.getSkuComb = exports.isAllSelected = exports.normalizePropList = exports.normalizeSkuTree = void 0;
|
||
|
||
var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
||
|
||
var _constants = require("../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: "帅"
|
||
}],
|
||
...
|
||
}
|
||
*/
|
||
var normalizeSkuTree = function normalizeSkuTree(skuTree) {
|
||
var normalizedTree = {};
|
||
skuTree.forEach(function (treeItem) {
|
||
normalizedTree[treeItem.k_s] = treeItem.v;
|
||
});
|
||
return normalizedTree;
|
||
};
|
||
|
||
exports.normalizeSkuTree = normalizeSkuTree;
|
||
|
||
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都已经选中
|
||
|
||
|
||
exports.normalizePropList = normalizePropList;
|
||
|
||
var isAllSelected = function isAllSelected(skuTree, selectedSku) {
|
||
// 筛选selectedSku对象中key值不为空的值
|
||
var selected = Object.keys(selectedSku).filter(function (skuKeyStr) {
|
||
return selectedSku[skuKeyStr] !== _constants.UNSELECTED_SKU_VALUE_ID;
|
||
});
|
||
return skuTree.length === selected.length;
|
||
}; // 根据已选择的 sku 获取 skuComb
|
||
|
||
|
||
exports.isAllSelected = isAllSelected;
|
||
|
||
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名称
|
||
|
||
|
||
exports.getSkuComb = getSkuComb;
|
||
|
||
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 !== _constants.UNSELECTED_SKU_VALUE_ID && skuValues.length > 0) {
|
||
var skuValue = skuValues.filter(function (value) {
|
||
return value.id === skuValueId;
|
||
})[0];
|
||
skuValue && selectedValues.push(skuValue);
|
||
}
|
||
|
||
return selectedValues;
|
||
}, []);
|
||
}; // 判断sku是否可选
|
||
|
||
|
||
exports.getSelectedSkuValues = getSelectedSkuValues;
|
||
|
||
var isSkuChoosable = function isSkuChoosable(skuList, selectedSku, skuToChoose) {
|
||
var _extends2;
|
||
|
||
var key = skuToChoose.key,
|
||
valueId = skuToChoose.valueId; // 先假设sku已选中,拼入已选中sku对象中
|
||
|
||
var matchedSku = (0, _extends3.default)({}, selectedSku, (_extends2 = {}, _extends2[key] = valueId, _extends2)); // 再判断剩余sku是否全部不可选,若不可选则当前sku不可选中
|
||
|
||
var skusToCheck = Object.keys(matchedSku).filter(function (skuKey) {
|
||
return matchedSku[skuKey] !== _constants.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;
|
||
};
|
||
|
||
exports.isSkuChoosable = isSkuChoosable;
|
||
|
||
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((0, _extends3.default)({}, normalizeProp[cur][it]));
|
||
});
|
||
return acc;
|
||
}, []);
|
||
};
|
||
|
||
exports.getSelectedPropValues = getSelectedPropValues;
|
||
|
||
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((0, _extends3.default)({}, it));
|
||
}
|
||
});
|
||
list.push((0, _extends3.default)({}, prop, {
|
||
v: v
|
||
}));
|
||
}
|
||
});
|
||
return list;
|
||
};
|
||
|
||
exports.getSelectedProperties = getSelectedProperties;
|
||
var _default = {
|
||
normalizeSkuTree: normalizeSkuTree,
|
||
getSkuComb: getSkuComb,
|
||
getSelectedSkuValues: getSelectedSkuValues,
|
||
isAllSelected: isAllSelected,
|
||
isSkuChoosable: isSkuChoosable,
|
||
getSelectedPropValues: getSelectedPropValues,
|
||
getSelectedProperties: getSelectedProperties
|
||
};
|
||
exports.default = _default; |