skuHelper.js 3.2 KB

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