vxe-table 3.21.13 → 3.21.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/es/index.css +1 -1
  2. package/es/index.min.css +1 -1
  3. package/es/locale/lang/ar-EG.js +7 -0
  4. package/es/locale/lang/de-DE.js +7 -0
  5. package/es/locale/lang/en-US.js +7 -0
  6. package/es/locale/lang/es-ES.js +7 -0
  7. package/es/locale/lang/fr-FR.js +7 -0
  8. package/es/locale/lang/hu-HU.js +7 -0
  9. package/es/locale/lang/hy-AM.js +7 -0
  10. package/es/locale/lang/id-ID.js +7 -0
  11. package/es/locale/lang/it-IT.js +7 -0
  12. package/es/locale/lang/ja-JP.js +7 -0
  13. package/es/locale/lang/ko-KR.js +7 -0
  14. package/es/locale/lang/ms-MY.js +7 -0
  15. package/es/locale/lang/nb-NO.js +7 -0
  16. package/es/locale/lang/pt-BR.js +7 -0
  17. package/es/locale/lang/ru-RU.js +7 -0
  18. package/es/locale/lang/th-TH.js +7 -0
  19. package/es/locale/lang/ug-CN.js +7 -0
  20. package/es/locale/lang/uk-UA.js +7 -0
  21. package/es/locale/lang/uz-UZ.js +7 -0
  22. package/es/locale/lang/vi-VN.js +7 -0
  23. package/es/locale/lang/zh-CHT.js +7 -0
  24. package/es/locale/lang/zh-CN.js +7 -0
  25. package/es/style.css +1 -1
  26. package/es/style.min.css +1 -1
  27. package/es/table/module/edit/mixin.js +5 -5
  28. package/es/table/render/index.js +46 -18
  29. package/es/table/src/methods.js +206 -61
  30. package/es/table/src/table.js +14 -7
  31. package/es/table/style.css +10 -5
  32. package/es/table/style.min.css +1 -1
  33. package/es/ui/index.js +1 -1
  34. package/es/ui/src/log.js +1 -1
  35. package/es/vxe-table/style.css +10 -5
  36. package/es/vxe-table/style.min.css +1 -1
  37. package/lib/index.css +1 -1
  38. package/lib/index.min.css +1 -1
  39. package/lib/index.umd.js +104 -33
  40. package/lib/index.umd.min.js +1 -1
  41. package/lib/locale/lang/ar-EG.js +7 -0
  42. package/lib/locale/lang/ar-EG.min.js +1 -1
  43. package/lib/locale/lang/ar-EG.umd.js +7 -0
  44. package/lib/locale/lang/de-DE.js +7 -0
  45. package/lib/locale/lang/de-DE.min.js +1 -1
  46. package/lib/locale/lang/de-DE.umd.js +7 -0
  47. package/lib/locale/lang/en-US.js +7 -0
  48. package/lib/locale/lang/en-US.min.js +1 -1
  49. package/lib/locale/lang/en-US.umd.js +7 -0
  50. package/lib/locale/lang/es-ES.js +7 -0
  51. package/lib/locale/lang/es-ES.min.js +1 -1
  52. package/lib/locale/lang/es-ES.umd.js +7 -0
  53. package/lib/locale/lang/fr-FR.js +7 -0
  54. package/lib/locale/lang/fr-FR.min.js +1 -1
  55. package/lib/locale/lang/fr-FR.umd.js +7 -0
  56. package/lib/locale/lang/hu-HU.js +7 -0
  57. package/lib/locale/lang/hu-HU.min.js +1 -1
  58. package/lib/locale/lang/hu-HU.umd.js +7 -0
  59. package/lib/locale/lang/hy-AM.js +7 -0
  60. package/lib/locale/lang/hy-AM.min.js +1 -1
  61. package/lib/locale/lang/hy-AM.umd.js +7 -0
  62. package/lib/locale/lang/id-ID.js +7 -0
  63. package/lib/locale/lang/id-ID.min.js +1 -1
  64. package/lib/locale/lang/id-ID.umd.js +7 -0
  65. package/lib/locale/lang/it-IT.js +7 -0
  66. package/lib/locale/lang/it-IT.min.js +1 -1
  67. package/lib/locale/lang/it-IT.umd.js +7 -0
  68. package/lib/locale/lang/ja-JP.js +7 -0
  69. package/lib/locale/lang/ja-JP.min.js +1 -1
  70. package/lib/locale/lang/ja-JP.umd.js +7 -0
  71. package/lib/locale/lang/ko-KR.js +7 -0
  72. package/lib/locale/lang/ko-KR.min.js +1 -1
  73. package/lib/locale/lang/ko-KR.umd.js +7 -0
  74. package/lib/locale/lang/ms-MY.js +7 -0
  75. package/lib/locale/lang/ms-MY.min.js +1 -1
  76. package/lib/locale/lang/ms-MY.umd.js +7 -0
  77. package/lib/locale/lang/nb-NO.js +7 -0
  78. package/lib/locale/lang/nb-NO.min.js +1 -1
  79. package/lib/locale/lang/nb-NO.umd.js +7 -0
  80. package/lib/locale/lang/pt-BR.js +7 -0
  81. package/lib/locale/lang/pt-BR.min.js +1 -1
  82. package/lib/locale/lang/pt-BR.umd.js +7 -0
  83. package/lib/locale/lang/ru-RU.js +7 -0
  84. package/lib/locale/lang/ru-RU.min.js +1 -1
  85. package/lib/locale/lang/ru-RU.umd.js +7 -0
  86. package/lib/locale/lang/th-TH.js +7 -0
  87. package/lib/locale/lang/th-TH.min.js +1 -1
  88. package/lib/locale/lang/th-TH.umd.js +7 -0
  89. package/lib/locale/lang/ug-CN.js +7 -0
  90. package/lib/locale/lang/ug-CN.min.js +1 -1
  91. package/lib/locale/lang/ug-CN.umd.js +7 -0
  92. package/lib/locale/lang/uk-UA.js +7 -0
  93. package/lib/locale/lang/uk-UA.min.js +1 -1
  94. package/lib/locale/lang/uk-UA.umd.js +7 -0
  95. package/lib/locale/lang/uz-UZ.js +7 -0
  96. package/lib/locale/lang/uz-UZ.min.js +1 -1
  97. package/lib/locale/lang/uz-UZ.umd.js +7 -0
  98. package/lib/locale/lang/vi-VN.js +7 -0
  99. package/lib/locale/lang/vi-VN.min.js +1 -1
  100. package/lib/locale/lang/vi-VN.umd.js +7 -0
  101. package/lib/locale/lang/zh-CHT.js +7 -0
  102. package/lib/locale/lang/zh-CHT.min.js +1 -1
  103. package/lib/locale/lang/zh-CHT.umd.js +7 -0
  104. package/lib/locale/lang/zh-CN.js +7 -0
  105. package/lib/locale/lang/zh-CN.min.js +1 -1
  106. package/lib/locale/lang/zh-CN.umd.js +7 -0
  107. package/lib/style.css +1 -1
  108. package/lib/style.min.css +1 -1
  109. package/lib/table/module/edit/mixin.js +5 -0
  110. package/lib/table/module/edit/mixin.min.js +1 -1
  111. package/lib/table/render/index.js +62 -18
  112. package/lib/table/render/index.min.js +1 -1
  113. package/lib/table/src/methods.js +14 -7
  114. package/lib/table/src/methods.min.js +1 -1
  115. package/lib/table/src/table.js +14 -6
  116. package/lib/table/src/table.min.js +1 -1
  117. package/lib/table/style/style.css +10 -5
  118. package/lib/table/style/style.min.css +1 -1
  119. package/lib/ui/index.js +1 -1
  120. package/lib/ui/index.min.js +1 -1
  121. package/lib/ui/src/log.js +1 -1
  122. package/lib/ui/src/log.min.js +1 -1
  123. package/lib/vxe-table/style/style.css +10 -5
  124. package/lib/vxe-table/style/style.min.css +1 -1
  125. package/package.json +2 -2
  126. package/packages/locale/lang/ar-EG.ts +7 -0
  127. package/packages/locale/lang/de-DE.ts +7 -0
  128. package/packages/locale/lang/en-US.ts +7 -0
  129. package/packages/locale/lang/es-ES.ts +7 -0
  130. package/packages/locale/lang/fr-FR.ts +7 -0
  131. package/packages/locale/lang/hu-HU.ts +7 -0
  132. package/packages/locale/lang/hy-AM.ts +7 -0
  133. package/packages/locale/lang/id-ID.ts +7 -0
  134. package/packages/locale/lang/it-IT.ts +7 -0
  135. package/packages/locale/lang/ja-JP.ts +7 -0
  136. package/packages/locale/lang/ko-KR.ts +7 -0
  137. package/packages/locale/lang/ms-MY.ts +7 -0
  138. package/packages/locale/lang/nb-NO.ts +7 -0
  139. package/packages/locale/lang/pt-BR.ts +7 -0
  140. package/packages/locale/lang/ru-RU.ts +7 -0
  141. package/packages/locale/lang/th-TH.ts +7 -0
  142. package/packages/locale/lang/ug-CN.ts +7 -0
  143. package/packages/locale/lang/uk-UA.ts +7 -0
  144. package/packages/locale/lang/uz-UZ.ts +7 -0
  145. package/packages/locale/lang/vi-VN.ts +7 -0
  146. package/packages/locale/lang/zh-CHT.ts +7 -0
  147. package/packages/locale/lang/zh-CN.ts +7 -0
  148. package/packages/table/module/edit/mixin.ts +5 -5
  149. package/packages/table/render/index.ts +46 -18
  150. package/packages/table/src/methods.ts +210 -60
  151. package/packages/table/src/table.ts +14 -7
  152. package/styles/components/table.scss +8 -4
  153. /package/es/{iconfont.1781229212834.ttf → iconfont.1781675364289.ttf} +0 -0
  154. /package/es/{iconfont.1781229212834.woff → iconfont.1781675364289.woff} +0 -0
  155. /package/es/{iconfont.1781229212834.woff2 → iconfont.1781675364289.woff2} +0 -0
  156. /package/lib/{iconfont.1781229212834.ttf → iconfont.1781675364289.ttf} +0 -0
  157. /package/lib/{iconfont.1781229212834.woff → iconfont.1781675364289.woff} +0 -0
  158. /package/lib/{iconfont.1781229212834.woff2 → iconfont.1781675364289.woff2} +0 -0
@@ -654,28 +654,66 @@ function handleDefaultRowGroupExpand ($xeTable: VxeTableConstructor & VxeTablePr
654
654
  }
655
655
  }
656
656
 
657
+ function updateAfterTreeIndex ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
658
+ const internalData = $xeTable as unknown as TableInternalData
659
+
660
+ const { fullDataRowIdData, fullAllDataRowIdData, afterFullData, afterTreeFullData } = internalData
661
+ const treeOpts = $xeTable.computeTreeOpts
662
+ const { transform, mapChildrenField } = treeOpts
663
+ const childrenField = treeOpts.children || treeOpts.childrenField
664
+ const fullMaps: Record<string, any> = {}
665
+ let rowNum = 0
666
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
667
+ XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
668
+ const rowid = handleGetRowId(row)
669
+ const rowRest = fullAllDataRowIdData[rowid]
670
+ const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('')
671
+ if (rowRest) {
672
+ rowRest.seq = seq
673
+ rowRest._seq = rowNum
674
+ rowRest.treeIndex = index
675
+ rowRest._tIndex = rowNum
676
+ } else {
677
+ const rest = { row, rowid, _seq: rowNum, seq, index: -1, $index: -1, _index: -1, treeIndex: -1, _tIndex: rowNum, items: [], parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
678
+ fullAllDataRowIdData[rowid] = rest
679
+ fullDataRowIdData[rowid] = rest
680
+ }
681
+ rowNum++
682
+ fullMaps[rowid] = row
683
+ }, { children: transform ? mapChildrenField : childrenField })
684
+ if (transform) {
685
+ afterFullData.forEach((row, index) => {
686
+ const rowid = handleGetRowId(row)
687
+ const rowRest = fullAllDataRowIdData[rowid]
688
+ if (rowRest) {
689
+ rowRest._index = index
690
+ }
691
+ })
692
+ }
693
+ internalData.afterFullRowMaps = fullMaps
694
+ }
695
+
657
696
  function updateAfterListIndex ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
658
- const props = $xeTable
659
697
  const internalData = $xeTable as unknown as TableInternalData
660
698
 
661
- const { treeConfig } = props
662
699
  const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData
663
700
  const { handleGetRowId } = createHandleGetRowId($xeTable)
664
701
  const fullMaps: Record<string, any> = {}
702
+ let rowNum = 0
665
703
  afterFullData.forEach((row, index) => {
666
704
  const rowid = handleGetRowId(row)
667
705
  const rowRest = fullAllDataRowIdData[rowid]
668
706
  const seq = index + 1
669
707
  if (rowRest) {
670
- if (!treeConfig) {
671
- rowRest.seq = seq
672
- }
708
+ rowRest.seq = seq
709
+ rowRest._seq = rowNum
673
710
  rowRest._index = index
674
711
  } else {
675
- const rest = { row, rowid, seq, index: -1, $index: -1, _index: index, treeIndex: -1, _tIndex: -1, items: [], parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
712
+ const rest = { row, rowid, _seq: rowNum, seq, index: -1, $index: -1, _index: index, treeIndex: -1, _tIndex: -1, items: [], parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
676
713
  fullAllDataRowIdData[rowid] = rest
677
714
  fullDataRowIdData[rowid] = rest
678
715
  }
716
+ rowNum++
679
717
  fullMaps[rowid] = row
680
718
  })
681
719
  internalData.afterFullRowMaps = fullMaps
@@ -687,47 +725,10 @@ function updateAfterListIndex ($xeTable: VxeTableConstructor & VxeTablePrivateMe
687
725
  */
688
726
  function updateAfterDataIndex ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
689
727
  const props = $xeTable
690
- const internalData = $xeTable as unknown as TableInternalData
691
728
 
692
729
  const { treeConfig } = props
693
- const { fullDataRowIdData, fullAllDataRowIdData, afterFullData, afterTreeFullData } = internalData
694
- const treeOpts = $xeTable.computeTreeOpts
695
- const { transform } = treeOpts
696
- const childrenField = treeOpts.children || treeOpts.childrenField
697
- const fullMaps: Record<string, any> = {}
698
730
  if (treeConfig) {
699
- let _treeIndex = 0
700
- const { handleGetRowId } = createHandleGetRowId($xeTable)
701
- XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
702
- const rowid = handleGetRowId(row)
703
- const rowRest = fullAllDataRowIdData[rowid]
704
- const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('')
705
- if (rowRest) {
706
- rowRest.seq = seq
707
- rowRest.treeIndex = index
708
- rowRest._tIndex = _treeIndex
709
- } else {
710
- const rest = { row, rowid, seq, index: -1, $index: -1, _index: -1, treeIndex: -1, _tIndex: _treeIndex, items: [], parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
711
- fullAllDataRowIdData[rowid] = rest
712
- fullDataRowIdData[rowid] = rest
713
- }
714
- _treeIndex++
715
- fullMaps[rowid] = row
716
- }, { children: transform ? treeOpts.mapChildrenField : childrenField })
717
- if (transform) {
718
- afterFullData.forEach((row, index) => {
719
- const rowid = handleGetRowId(row)
720
- const rowRest = fullAllDataRowIdData[rowid]
721
- const seq = index + 1
722
- if (rowRest) {
723
- if (!treeConfig) {
724
- rowRest.seq = seq
725
- }
726
- rowRest._index = index
727
- }
728
- })
729
- }
730
- internalData.afterFullRowMaps = fullMaps
731
+ updateAfterTreeIndex($xeTable)
731
732
  } else {
732
733
  updateAfterListIndex($xeTable)
733
734
  }
@@ -3199,12 +3200,15 @@ function handleRecalculateStyle ($xeTable: VxeTableConstructor & VxeTablePrivate
3199
3200
  })
3200
3201
  }
3201
3202
 
3202
- const minRunDelay = 50
3203
+ const defaultMinRunDelay = 50
3203
3204
 
3204
- function handleLazyRecalculate ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, reFull: boolean, reWidth: boolean, reHeight: boolean) {
3205
+ function handleLazyRecalculate ($xeTable: VxeTableConstructor & VxeTablePrivateMethods, reFull: boolean, reWidth: boolean, reHeight: boolean, options?: {
3206
+ minRunDelay?: number // 多少毫秒内至少执行一次
3207
+ }) {
3205
3208
  const reactData = $xeTable as unknown as TableReactData
3206
3209
  const internalData = $xeTable as unknown as TableInternalData
3207
3210
 
3211
+ const minRunDelay = (options ? options.minRunDelay : defaultMinRunDelay) || defaultMinRunDelay
3208
3212
  return new Promise<void>(resolve => {
3209
3213
  const { customStore } = reactData
3210
3214
  const { rceTimeout, rceRunTime } = internalData
@@ -3230,6 +3234,7 @@ function handleLazyRecalculate ($xeTable: VxeTableConstructor & VxeTablePrivateM
3230
3234
  }
3231
3235
  if (rceTimeout) {
3232
3236
  clearTimeout(rceTimeout)
3237
+ // 多少毫秒内至少执行一次
3233
3238
  if (rceRunTime && rceRunTime + minRunDelay < Date.now()) {
3234
3239
  resolve(
3235
3240
  handleRecalculateStyle($xeTable, reFull, reWidth, reHeight)
@@ -3255,7 +3260,19 @@ function handleLazyRecalculate ($xeTable: VxeTableConstructor & VxeTablePrivateM
3255
3260
  }
3256
3261
 
3257
3262
  function handleResizeEvent ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
3258
- handleLazyRecalculate($xeTable, true, true, true)
3263
+ const internalData = $xeTable as unknown as TableInternalData
3264
+
3265
+ if (internalData.rsePending) {
3266
+ return
3267
+ }
3268
+ internalData.rsePending = true
3269
+ handleLazyRecalculate($xeTable, true, true, true, {
3270
+ minRunDelay: 200
3271
+ }).then(() => {
3272
+ internalData.rsePending = false
3273
+ }).catch(() => {
3274
+ internalData.rsePending = false
3275
+ })
3259
3276
  }
3260
3277
 
3261
3278
  function handleUpdateAggValues ($xeTable: VxeTableConstructor & VxeTablePrivateMethods) {
@@ -5126,17 +5143,19 @@ const tableMethods: any = {
5126
5143
 
5127
5144
  const idMaps: Record<string, boolean> = {}
5128
5145
  const { handleUpdateRowId } = createHandleUpdateRowId($xeTable)
5146
+ let rowNum = 0
5129
5147
  const handleRowCache = (row: any, index: number, items: any, currIndex: number, parentRow: any, rowid: string, level: number, seq: string | number) => {
5130
5148
  let rowRest = fullAllDataRowIdMaps[rowid]
5131
5149
  if (idMaps[rowid]) {
5132
5150
  errLog('vxe.error.repeatKey', [currKeyField, rowid])
5133
5151
  }
5134
5152
  if (!rowRest) {
5135
- rowRest = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, _tIndex: -1, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
5153
+ rowRest = { row, rowid, _seq: -1, seq, index: -1, _index: -1, $index: -1, treeIndex: index, _tIndex: -1, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
5136
5154
  }
5137
5155
  rowRest.treeLoaded = false
5138
5156
  rowRest.expandLoaded = false
5139
5157
 
5158
+ rowRest._seq = rowNum++
5140
5159
  rowRest.row = row
5141
5160
  rowRest.items = items
5142
5161
  rowRest.parent = parentRow
@@ -5250,7 +5269,7 @@ const tableMethods: any = {
5250
5269
  XEUtils.eachTree(rows, (childRow, index, items, path, parentItem, nodes) => {
5251
5270
  const rowid = getRowid($xeTable, childRow)
5252
5271
  const parentRow = parentItem || parentRest.row
5253
- const rest = { row: childRow, rowid, seq: -1, index, _index: -1, $index: -1, treeIndex: -1, _tIndex: -1, items, parent: parentRow, level: parentLevel + nodes.length, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
5272
+ const rest = { row: childRow, rowid, _seq: -1, seq: -1, index, _index: -1, $index: -1, treeIndex: -1, _tIndex: -1, items, parent: parentRow, level: parentLevel + nodes.length, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 }
5254
5273
  fullDataRowIdData[rowid] = rest
5255
5274
  fullAllDataRowIdData[rowid] = rest
5256
5275
  }, { children: childrenField })
@@ -8747,31 +8766,162 @@ const tableMethods: any = {
8747
8766
  const { treeConfig } = props
8748
8767
  const { row } = params
8749
8768
  const { isRowGroupStatus } = reactData
8750
- const { afterFullData } = internalData
8769
+ const { fullAllDataRowIdData, afterFullData, afterTreeFullData, afterGroupFullData } = internalData
8751
8770
  const checkboxOpts = $xeTable.computeCheckboxOpts
8752
- const { checkMethod, trigger } = checkboxOpts
8771
+ const aggregateOpts = $xeTable.computeAggregateOpts
8772
+ const treeOpts = $xeTable.computeTreeOpts
8773
+ const { checkMethod, trigger, checkStrictly } = checkboxOpts
8753
8774
  if (trigger === 'manual') {
8754
8775
  return
8755
8776
  }
8756
8777
  evnt.stopPropagation()
8757
- if (checkboxOpts.isShiftKey && evnt.shiftKey && !(treeConfig || isRowGroupStatus)) {
8778
+
8779
+ if (checkboxOpts.isShiftKey && evnt.shiftKey) {
8780
+ const { handleGetRowId } = createHandleGetRowId($xeTable)
8758
8781
  const checkboxRecords = $xeTable.getCheckboxRecords()
8759
- if (checkboxRecords.length) {
8760
- const firstRow = checkboxRecords[0]
8761
- const _rowIndex = $xeTable.getVTRowIndex(row)
8762
- const _firstRowIndex = $xeTable.getVTRowIndex(firstRow)
8763
- if (_rowIndex !== _firstRowIndex) {
8782
+ let currSeq = -1
8783
+ let currRow: any = null
8784
+ const currRowid = handleGetRowId(row)
8785
+ const rowRest = fullAllDataRowIdData[currRowid]
8786
+ if (rowRest) {
8787
+ currRow = rowRest.row
8788
+ currSeq = rowRest._seq
8789
+ }
8790
+ if (currRow && checkboxRecords.length) {
8791
+ let rangeRows: any[] = []
8792
+ let firstSeq = -1
8793
+ let firstRow: any = null
8794
+ let firstRowid = ''
8795
+ let lastSeq = -1
8796
+ let lastRow: any = null
8797
+ let lastRowid = ''
8798
+ // 根据序号取出范围最小/最大的行
8799
+ const selectMaps: Record<string, any> = {}
8800
+ checkboxRecords.forEach(item => {
8801
+ const rowid = handleGetRowId(item)
8802
+ const rowRest = fullAllDataRowIdData[rowid]
8803
+ if (rowRest) {
8804
+ if (!firstRow || firstSeq > rowRest._seq) {
8805
+ firstRowid = rowRest.rowid
8806
+ firstRow = rowRest.row
8807
+ firstSeq = rowRest._seq
8808
+ }
8809
+ if (!lastRow || lastSeq < rowRest._seq) {
8810
+ lastRowid = rowRest.rowid
8811
+ lastRow = rowRest.row
8812
+ lastSeq = rowRest._seq
8813
+ }
8814
+ }
8815
+ selectMaps[rowid] = item
8816
+ })
8817
+ // 如果已选只有一条并选择当前则跳过
8818
+ if (firstRow && lastRow && (checkboxRecords.length > 1 || currRowid !== firstRowid) && (Math.abs(firstSeq - lastSeq) > 1 || Math.abs(currSeq - firstSeq) > 1 || Math.abs(currSeq - lastSeq) > 1)) {
8819
+ // 树与分组
8820
+ if (treeConfig || isRowGroupStatus) {
8821
+ const { transform } = treeOpts
8822
+ const childrenField = treeOpts.children || treeOpts.childrenField
8823
+ const iteratorChildField = treeConfig ? (transform ? treeOpts.mapChildrenField : childrenField) : aggregateOpts.mapChildrenField as string
8824
+ let isMatchFirst = false
8825
+ let matchStartRowid = ''
8826
+ let matchEndRowid = ''
8827
+
8828
+ const handleGetChildRowid = (rowid: string, isLast: 0 | 1): string => {
8829
+ const rowRest = fullAllDataRowIdData[rowid]
8830
+ if (rowRest) {
8831
+ const item = rowRest.row
8832
+ const childList = item[iteratorChildField]
8833
+ if (childList && childList.length) {
8834
+ const targetRow = isLast ? XEUtils.last(childList) : XEUtils.first(childList)
8835
+ return handleGetChildRowid(handleGetRowId(targetRow), isLast)
8836
+ }
8837
+ }
8838
+ return rowid
8839
+ }
8840
+
8841
+ const handleGetSelectParentRowid = (rowid: string): string => {
8842
+ const rowRest = fullAllDataRowIdData[rowid]
8843
+ if (rowRest) {
8844
+ const parentItem = rowRest.parent
8845
+ if (parentItem) {
8846
+ const parentRowid = handleGetRowId(parentItem)
8847
+ if (selectMaps[parentRowid]) {
8848
+ return handleGetSelectParentRowid(parentRowid)
8849
+ }
8850
+ }
8851
+ }
8852
+ return rowid
8853
+ }
8854
+
8855
+ const handleGetRootRow = (row: string): VxeTableDefines.RowCacheItem | null => {
8856
+ const rowid = handleGetRowId(row)
8857
+ if (rowid) {
8858
+ const rest = fullAllDataRowIdData[rowid]
8859
+ if (rest) {
8860
+ return rest.parent ? handleGetRootRow(rest.parent) : rest
8861
+ }
8862
+ }
8863
+ return null
8864
+ }
8865
+
8866
+ if (currSeq < firstSeq) {
8867
+ matchStartRowid = handleGetChildRowid(currRowid, 0)
8868
+ matchEndRowid = handleGetChildRowid(firstRowid, 1)
8869
+ } else {
8870
+ if (currSeq > lastSeq) {
8871
+ matchStartRowid = handleGetSelectParentRowid(lastRowid)
8872
+ } else {
8873
+ matchStartRowid = handleGetChildRowid(firstRowid, 0)
8874
+ }
8875
+ matchEndRowid = handleGetChildRowid(currRowid, 1)
8876
+ }
8877
+
8878
+ const handleRangeRow = (item: any) => {
8879
+ const rowid = handleGetRowId(item)
8880
+ const childList = item[iteratorChildField]
8881
+ if (!isMatchFirst && rowid === matchStartRowid) {
8882
+ isMatchFirst = true
8883
+ }
8884
+ // 如果是父子关联,则排除父节点
8885
+ if (isMatchFirst && (checkStrictly || !childList || !childList.length)) {
8886
+ rangeRows.push(item)
8887
+ }
8888
+ // break
8889
+ return rowid === matchEndRowid
8890
+ }
8891
+ if (treeConfig) {
8892
+ const matchStartRowRest = fullAllDataRowIdData[matchStartRowid]
8893
+ const firstRootRowRest = matchStartRowRest ? handleGetRootRow(matchStartRowRest.row) : null
8894
+ if (firstRootRowRest) {
8895
+ // 优化查找复杂度
8896
+ XEUtils.findTree(afterTreeFullData.slice(firstRootRowRest.treeIndex), handleRangeRow, { children: iteratorChildField })
8897
+ } else {
8898
+ XEUtils.findTree(afterTreeFullData, handleRangeRow, { children: iteratorChildField })
8899
+ }
8900
+ } else {
8901
+ XEUtils.findTree(afterGroupFullData, handleRangeRow, { children: iteratorChildField })
8902
+ }
8903
+ } else {
8904
+ const _currRowIndex = $xeTable.getVTRowIndex(currRow)
8905
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow)
8906
+ const _lastRowIndex = $xeTable.getVTRowIndex(lastRow)
8907
+ if (_currRowIndex < _firstRowIndex) {
8908
+ rangeRows = afterFullData.slice(_currRowIndex, _firstRowIndex + 1)
8909
+ } else if (_currRowIndex > _lastRowIndex) {
8910
+ rangeRows = afterFullData.slice(_lastRowIndex, _currRowIndex + 1)
8911
+ } else {
8912
+ rangeRows = afterFullData.slice(_firstRowIndex, _currRowIndex + 1)
8913
+ }
8914
+ }
8764
8915
  $xeTable.setAllCheckboxRow(false)
8765
- const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1)
8766
8916
  $xeTable.$nextTick(() => {
8767
8917
  handleCheckedCheckboxRow($xeTable, rangeRows, true, false)
8768
8918
  })
8769
8919
  $xeTable.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt)
8770
- return
8771
8920
  }
8772
8921
  }
8773
8922
  }
8774
- if (isRowGroupStatus || !checkMethod || checkMethod({ $table: $xeTable, row })) {
8923
+
8924
+ if (!checkMethod || checkMethod({ $table: $xeTable, row })) {
8775
8925
  $xeTable.handleBatchSelectRows([row], checked)
8776
8926
  $xeTable.checkSelectionStatus()
8777
8927
  $xeTable.dispatchEvent('checkbox-change', Object.assign({
@@ -1348,22 +1348,32 @@ export default {
1348
1348
  const { tableFullColumn } = internalData
1349
1349
  const { updateColFlag } = reactData
1350
1350
  const editDirtyOpts = $xeTable.computeEditDirtyOpts
1351
- const { includeFields, excludeFields } = editDirtyOpts
1351
+ const { extraFields, includeFields, excludeFields } = editDirtyOpts
1352
1352
  const kpFields: string[] = []
1353
1353
  if (updateColFlag) {
1354
1354
  if (includeFields && includeFields.length) {
1355
1355
  return includeFields
1356
1356
  }
1357
- const exfMaps: Record<string, number> = {}
1357
+ const excludeFdMaps: Record<string, number> = {}
1358
1358
  if (excludeFields && excludeFields.length) {
1359
1359
  excludeFields.forEach(field => {
1360
- exfMaps[field] = 1
1360
+ excludeFdMaps[field] = 1
1361
+ })
1362
+ }
1363
+ const addFdMaps: Record<string, number> = {}
1364
+ if (extraFields && extraFields.length) {
1365
+ extraFields.forEach(field => {
1366
+ if (!addFdMaps[field]) {
1367
+ addFdMaps[field] = 1
1368
+ kpFields.push(field)
1369
+ }
1361
1370
  })
1362
1371
  }
1363
1372
  for (let i = 0; i < tableFullColumn.length; i++) {
1364
1373
  const column = tableFullColumn[i]
1365
1374
  const { field, type, editRender, cellRender } = column
1366
- if (field && !type && (editRender || cellRender) && !exfMaps[field]) {
1375
+ if (field && !type && (editRender || cellRender) && !addFdMaps[field] && !excludeFdMaps[field]) {
1376
+ addFdMaps[field] = 1
1367
1377
  kpFields.push(field)
1368
1378
  }
1369
1379
  }
@@ -1862,9 +1872,6 @@ export default {
1862
1872
  if (props.editConfig && editOpts.activeMethod) {
1863
1873
  warnLog('vxe.error.delProp', ['table.edit-config.activeMethod', 'table.edit-config.beforeEditMethod'])
1864
1874
  }
1865
- if (props.treeConfig && checkboxOpts.isShiftKey) {
1866
- errLog('vxe.error.reqSupportProp', ['tree-config', 'checkbox-config.isShiftKey=false'])
1867
- }
1868
1875
  if (checkboxOpts.halfField) {
1869
1876
  warnLog('vxe.error.delProp', ['checkbox-config.halfField', 'checkbox-config.indeterminateField'])
1870
1877
  }
@@ -213,7 +213,8 @@ $btnThemeList: (
213
213
  .vxe-date-picker,
214
214
  .vxe-date-range-picker,
215
215
  .vxe-number-input,
216
- .vxe-ico-picker {
216
+ .vxe-ico-picker,
217
+ .vxe-cascader {
217
218
  width: 100%;
218
219
  }
219
220
  }
@@ -236,7 +237,8 @@ $btnThemeList: (
236
237
  & > .vxe-date-picker,
237
238
  & > .vxe-date-range-picker,
238
239
  & > .vxe-number-input,
239
- & > .vxe-ico-picker {
240
+ & > .vxe-ico-picker,
241
+ .vxe-cascader {
240
242
  width: 100%;
241
243
  }
242
244
  & > .vxe-row-group--tree-node,
@@ -251,7 +253,8 @@ $btnThemeList: (
251
253
  .vxe-date-picker,
252
254
  .vxe-date-range-picker,
253
255
  .vxe-number-input,
254
- .vxe-ico-picker {
256
+ .vxe-ico-picker,
257
+ .vxe-cascader {
255
258
  width: 100%;
256
259
  }
257
260
  }
@@ -272,7 +275,8 @@ $btnThemeList: (
272
275
  & > .vxe-date-picker,
273
276
  & > .vxe-date-range-picker,
274
277
  & > .vxe-number-input,
275
- & > .vxe-ico-picker {
278
+ & > .vxe-ico-picker,
279
+ & > .vxe-cascader {
276
280
  width: 100%;
277
281
  }
278
282
  }