SpecificationMethod.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. export const SpecificationMethod = (freeVallist, data, callback) => {
  2. // step1
  3. const step1Data = _proCateSelected(freeVallist, data)
  4. // step2
  5. const step2Data = _companyVfree(data, step1Data)
  6. // step3
  7. const step3Data = _disableTrue(data, step2Data)
  8. // callback
  9. callback(step3Data)
  10. }
  11. const _proCateSelected = (freeVallist, data) => {
  12. //freeVallist是自由辅助属性库,data是物料下所有商品
  13. const freeVal = freeVallist,
  14. step1ReturnVal = {}
  15. //找到所选的标签存入checktrue
  16. // checktrue存入所选中id
  17. let checktrue = [],
  18. // checkname存入所选中name
  19. checkname = [],
  20. // grouplists存 所有规格id
  21. grouplists = []
  22. for (let valFirst of freeVal) {
  23. for (let valSecond of valFirst.values) {
  24. //将自由辅助属性库 所有id放在一个数组里
  25. grouplists.push(valSecond.id)
  26. //把选中的属性放到checktrue
  27. if (checkedKey(valSecond, 'isChecked') && valSecond.isChecked == true) {
  28. checktrue.push(valSecond.id)
  29. checkname.push(valSecond.name)
  30. }
  31. if (checkedKey(valSecond, 'isDisabled')) {
  32. delete valSecond.isDisabled
  33. }
  34. }
  35. }
  36. step1ReturnVal.checktrue = checktrue
  37. step1ReturnVal.grouplists = grouplists
  38. step1ReturnVal.checkname = checkname
  39. return step1ReturnVal
  40. }
  41. //比较选中的与同类型商品自由属性 (第二步)
  42. const _companyVfree = (data, step1Data) => {
  43. //物料下所有商品的自由辅助属性
  44. const Vfrees = data.goodsInfos,
  45. step2ReturnVal = {}
  46. let checktrue = step1Data.checktrue,
  47. grouplists = step1Data.grouplists,
  48. checkname = step1Data.checkname,
  49. selectRelation = [],
  50. Vfreelists = [],
  51. newseclectR = []
  52. //将选择的值与物料所有属性做包含判断
  53. for (let vfreeFirst of Object.keys(Vfrees)) {
  54. if (_isContained(Vfrees[vfreeFirst], checktrue)) {
  55. selectRelation = selectRelation.concat(Vfrees[vfreeFirst])
  56. newseclectR.push([...Vfrees[vfreeFirst]])
  57. }
  58. for (let vfreeSecond of Vfrees[vfreeFirst]) {
  59. Vfreelists.push(vfreeSecond)
  60. }
  61. }
  62. selectRelation = Array.from(new Set(selectRelation))
  63. Vfreelists = Array.from(new Set(Vfreelists))
  64. const nonExist = _comvaluesIs(grouplists, Vfreelists)
  65. step2ReturnVal.selectRelation = selectRelation
  66. step2ReturnVal.nonExist = nonExist
  67. step2ReturnVal.checktrue = checktrue
  68. step2ReturnVal.checkname = checkname
  69. return step2ReturnVal
  70. }
  71. //对无商品自由属性变虚线框 (第三步)
  72. const _disableTrue = (data, step2Data) => {
  73. const freeArr = data.polyAttrsDtoList,
  74. step3ReturnVal = {}
  75. let selectRelation = step2Data.selectRelation,
  76. nonExist = step2Data.nonExist,
  77. checktrue = step2Data.checktrue,
  78. checkname = step2Data.checkname
  79. for (let selectRelatVal of selectRelation) {
  80. for (let freeArrFirst of freeArr) {
  81. for (let freeArrSecond of freeArrFirst.values) {
  82. if (nonExist.indexOf(freeArrSecond.id) != -1) {
  83. freeArrSecond.isDisableTrue = true
  84. }
  85. if (freeArrSecond.id == selectRelatVal) {
  86. freeArrSecond.isDisabled = false
  87. } else if (!checkedKey(freeArrSecond, 'isDisabled')) {
  88. freeArrSecond.isDisabled = true
  89. }
  90. }
  91. }
  92. }
  93. step3ReturnVal.checktrue = checktrue
  94. step3ReturnVal.checkname = checkname
  95. step3ReturnVal.freeArr = freeArr
  96. step3ReturnVal.data = data
  97. return step3ReturnVal
  98. }
  99. //对象中找key值是否存在
  100. export const checkedKey = (val, key) => {
  101. const flag = Object.prototype.hasOwnProperty.call(val, key)
  102. return flag
  103. }
  104. //a是否包含b,包含返回true
  105. export const _isContained = (a, b) => {
  106. if (!(a instanceof Array) || !(b instanceof Array)) return false
  107. if (a.length < b.length) return false
  108. var aStr = a.toString()
  109. for (var i = 0, len = b.length; i < len; i++) {
  110. if (aStr.indexOf(b[i]) == -1) return false
  111. }
  112. return true
  113. }
  114. //数组是否相等
  115. export const _isArrEqual = (a, b) => {
  116. if (!(a instanceof Array) || !(b instanceof Array)) return false
  117. if (a.length != b.length) return false
  118. //数组去重排序
  119. const aval = Array.from(new Set([...a].sort())).toString()
  120. const bval = Array.from(new Set([...b].sort())).toString()
  121. if (aval == bval) return true
  122. }
  123. //比较所有聚合列表中是否都存在
  124. export const _comvaluesIs = (val, nextval) => {
  125. let resval = []
  126. if (!(val instanceof Array) || !(nextval instanceof Array)) return false
  127. for (let i = 0; i < val.length; i++) {
  128. if (nextval.indexOf(val[i]) == -1) {
  129. resval.push(val[i])
  130. }
  131. }
  132. return resval
  133. }
  134. //删除指定元素
  135. export const _removeByValue = (arr, val) => {
  136. for (var arrVal of arr) {
  137. if (arrVal == val) {
  138. arr.splice(i, 1)
  139. break
  140. }
  141. }
  142. }