utils.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. /**
  2. * 判断是否是对象
  3. *
  4. * @export
  5. * @param {*} val
  6. * @returns true/false
  7. */
  8. export function isObject (val) {
  9. return Object.prototype.toString.call(val) === '[object Object]'
  10. }
  11. /**
  12. * 根据value获取columns信息
  13. *
  14. * @export
  15. * @param {*} { value, list, mode, props, level }
  16. * @param {number} [type=2] 查询不到value数据返回数据类型 1空值null 2默认第一个选项
  17. * @returns
  18. */
  19. export function getColumns ({ value, list, mode, props, level }, type = 2) {
  20. let pickerValue = []
  21. let pickerColumns = []
  22. let selectValue = []
  23. let selectItem = []
  24. let columnsInfo = null
  25. switch (mode) {
  26. case 'selector':
  27. let index = list.findIndex(item => {
  28. return isObject(item) ? item[props.value] === value : item === value
  29. })
  30. if (index === -1 && type === 1) {
  31. columnsInfo = null
  32. } else {
  33. index = index > -1 ? index : 0
  34. selectItem = list[index]
  35. selectValue = isObject(selectItem)
  36. ? selectItem[props.value]
  37. : selectItem
  38. pickerColumns = list
  39. pickerValue = [index]
  40. columnsInfo = {
  41. index: pickerValue,
  42. value: selectValue,
  43. item: selectItem,
  44. columns: pickerColumns
  45. }
  46. }
  47. break
  48. case 'multiSelector':
  49. const setPickerItems = (data = [], index = 0) => {
  50. if (!data.length) return
  51. const defaultValue = value || []
  52. if (index < level) {
  53. const value = defaultValue[index] || ''
  54. let i = data.findIndex(item => item[props.value] === value)
  55. if (i === -1 && type === 1) return
  56. i = i > -1 ? i : 0
  57. pickerValue[index] = i
  58. pickerColumns[index] = data
  59. if (data[i]) {
  60. selectValue[index] = data[i][props.value]
  61. selectItem[index] = data[i]
  62. setPickerItems(data[i][props.children] || [], index + 1)
  63. }
  64. }
  65. }
  66. setPickerItems(list)
  67. if (!selectValue.length && type === 1) {
  68. columnsInfo = null
  69. } else {
  70. columnsInfo = {
  71. index: pickerValue,
  72. value: selectValue,
  73. item: selectItem,
  74. columns: pickerColumns
  75. }
  76. }
  77. break
  78. case 'unlinkedSelector':
  79. list.forEach((item, i) => {
  80. let index = item.findIndex(item => {
  81. return isObject(item)
  82. ? item[props.value] === value[i]
  83. : item === value[i]
  84. })
  85. if (index === -1 && type === 1) return
  86. index = index > -1 ? index : 0
  87. const columnItem = list[i][index]
  88. const valueItem = isObject(columnItem)
  89. ? columnItem[props.value]
  90. : columnItem
  91. pickerValue[i] = index
  92. selectValue[i] = valueItem
  93. selectItem[i] = columnItem
  94. })
  95. pickerColumns = list
  96. if (!selectValue.length && type === 1) {
  97. columnsInfo = null
  98. } else {
  99. columnsInfo = {
  100. index: pickerValue,
  101. value: selectValue,
  102. item: selectItem,
  103. columns: pickerColumns
  104. }
  105. }
  106. break
  107. }
  108. return columnsInfo
  109. }