"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;