skuHelper.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. "use strict";
  2. var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
  3. exports.__esModule = true;
  4. exports["default"] = exports.isSkuChoosable = exports.getSelectedSkuValues = exports.getSkuComb = exports.isAllSelected = exports.normalizeSkuTree = void 0;
  5. var _extends3 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
  6. var _constants = require("../constants");
  7. /*
  8. normalize sku tree
  9. [
  10. {
  11. count: 2,
  12. k: "品种", // 规格名称 skuKeyName
  13. k_id: "1200", // skuKeyId
  14. k_s: "s1" // skuKeyStr
  15. v: [ // skuValues
  16. { // skuValue
  17. id: "1201", // skuValueId
  18. name: "萌" // 具体的规格值 skuValueName
  19. }, {
  20. id: "973",
  21. name: "帅"
  22. }
  23. ]
  24. },
  25. ...
  26. ]
  27. |
  28. v
  29. {
  30. s1: [{
  31. id: "1201",
  32. name: "萌"
  33. }, {
  34. id: "973",
  35. name: "帅"
  36. }],
  37. ...
  38. }
  39. */
  40. var normalizeSkuTree = function normalizeSkuTree(skuTree) {
  41. var normalizedTree = {};
  42. skuTree.forEach(function (treeItem) {
  43. normalizedTree[treeItem.k_s] = treeItem.v;
  44. });
  45. return normalizedTree;
  46. }; // 判断是否所有的sku都已经选中
  47. exports.normalizeSkuTree = normalizeSkuTree;
  48. var isAllSelected = function isAllSelected(skuTree, selectedSku) {
  49. // 筛选selectedSku对象中key值不为空的值
  50. var selected = Object.keys(selectedSku).filter(function (skuKeyStr) {
  51. return selectedSku[skuKeyStr] !== _constants.UNSELECTED_SKU_VALUE_ID;
  52. });
  53. return skuTree.length === selected.length;
  54. }; // 根据已选择的 sku 获取 skuComb
  55. exports.isAllSelected = isAllSelected;
  56. var getSkuComb = function getSkuComb(skuList, selectedSku) {
  57. var skuComb = skuList.filter(function (item) {
  58. return Object.keys(selectedSku).every(function (skuKeyStr) {
  59. return String(item[skuKeyStr]) === String(selectedSku[skuKeyStr]);
  60. });
  61. });
  62. return skuComb[0];
  63. }; // 获取已选择的sku名称
  64. exports.getSkuComb = getSkuComb;
  65. var getSelectedSkuValues = function getSelectedSkuValues(skuTree, selectedSku) {
  66. var normalizedTree = normalizeSkuTree(skuTree);
  67. return Object.keys(selectedSku).reduce(function (selectedValues, skuKeyStr) {
  68. var skuValues = normalizedTree[skuKeyStr];
  69. var skuValueId = selectedSku[skuKeyStr];
  70. if (skuValueId !== _constants.UNSELECTED_SKU_VALUE_ID) {
  71. var skuValue = skuValues.filter(function (value) {
  72. return value.id === skuValueId;
  73. })[0];
  74. skuValue && selectedValues.push(skuValue);
  75. }
  76. return selectedValues;
  77. }, []);
  78. }; // 判断sku是否可选
  79. exports.getSelectedSkuValues = getSelectedSkuValues;
  80. var isSkuChoosable = function isSkuChoosable(skuList, selectedSku, skuToChoose) {
  81. var _extends2;
  82. var key = skuToChoose.key,
  83. valueId = skuToChoose.valueId; // 先假设sku已选中,拼入已选中sku对象中
  84. var matchedSku = (0, _extends3["default"])({}, selectedSku, (_extends2 = {}, _extends2[key] = valueId, _extends2)); // 再判断剩余sku是否全部不可选,若不可选则当前sku不可选中
  85. var skusToCheck = Object.keys(matchedSku).filter(function (skuKey) {
  86. return matchedSku[skuKey] !== _constants.UNSELECTED_SKU_VALUE_ID;
  87. });
  88. var filteredSku = skuList.filter(function (sku) {
  89. return skusToCheck.every(function (skuKey) {
  90. return String(matchedSku[skuKey]) === String(sku[skuKey]);
  91. });
  92. });
  93. var stock = filteredSku.reduce(function (total, sku) {
  94. total += sku.stock_num;
  95. return total;
  96. }, 0);
  97. return stock > 0;
  98. };
  99. exports.isSkuChoosable = isSkuChoosable;
  100. var _default = {
  101. normalizeSkuTree: normalizeSkuTree,
  102. getSkuComb: getSkuComb,
  103. getSelectedSkuValues: getSelectedSkuValues,
  104. isAllSelected: isAllSelected,
  105. isSkuChoosable: isSkuChoosable
  106. };
  107. exports["default"] = _default;