UNPKG

vant-fork

Version:

Lightweight Mobile UI Components built on Vue

130 lines (106 loc) 3.83 kB
"use strict"; 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;