vant-fork
Version:
Lightweight Mobile UI Components built on Vue
130 lines (106 loc) • 3.83 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.default = exports.isSkuChoosable = exports.getSelectedSkuValues = exports.getSkuComb = exports.isAllSelected = 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;
}; // 判断是否所有的sku都已经选中
exports.normalizeSkuTree = normalizeSkuTree;
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 (skuComb) {
return Object.keys(selectedSku).every(function (skuKeyStr) {
return String(skuComb[skuKeyStr]) === String(selectedSku[skuKeyStr]); // eslint-disable-line
});
});
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) {
var skuValue = skuValues.filter(function (skuValue) {
return skuValue.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) {
return total += sku.stock_num;
}, 0);
return stock > 0;
};
exports.isSkuChoosable = isSkuChoosable;
var _default = {
normalizeSkuTree: normalizeSkuTree,
getSkuComb: getSkuComb,
getSelectedSkuValues: getSelectedSkuValues,
isAllSelected: isAllSelected,
isSkuChoosable: isSkuChoosable
};
exports.default = _default;