vxe-table 4.19.13 → 4.19.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 (157) hide show
  1. package/dist/all.esm.js +278 -99
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/index.css +1 -1
  5. package/es/index.min.css +1 -1
  6. package/es/locale/lang/ar-EG.js +7 -0
  7. package/es/locale/lang/de-DE.js +7 -0
  8. package/es/locale/lang/en-US.js +7 -0
  9. package/es/locale/lang/es-ES.js +7 -0
  10. package/es/locale/lang/fr-FR.js +7 -0
  11. package/es/locale/lang/hu-HU.js +7 -0
  12. package/es/locale/lang/hy-AM.js +7 -0
  13. package/es/locale/lang/id-ID.js +7 -0
  14. package/es/locale/lang/it-IT.js +7 -0
  15. package/es/locale/lang/ja-JP.js +7 -0
  16. package/es/locale/lang/ko-KR.js +7 -0
  17. package/es/locale/lang/ms-MY.js +7 -0
  18. package/es/locale/lang/nb-NO.js +7 -0
  19. package/es/locale/lang/pt-BR.js +7 -0
  20. package/es/locale/lang/ru-RU.js +7 -0
  21. package/es/locale/lang/th-TH.js +7 -0
  22. package/es/locale/lang/ug-CN.js +7 -0
  23. package/es/locale/lang/uk-UA.js +7 -0
  24. package/es/locale/lang/uz-UZ.js +7 -0
  25. package/es/locale/lang/vi-VN.js +7 -0
  26. package/es/locale/lang/zh-CHT.js +7 -0
  27. package/es/locale/lang/zh-CN.js +7 -0
  28. package/es/style.css +1 -1
  29. package/es/style.min.css +1 -1
  30. package/es/table/module/edit/hook.js +5 -5
  31. package/es/table/render/index.js +46 -18
  32. package/es/table/src/table.js +216 -72
  33. package/es/table/style.css +10 -5
  34. package/es/table/style.min.css +1 -1
  35. package/es/ui/index.js +1 -1
  36. package/es/ui/src/log.js +1 -1
  37. package/es/vxe-table/style.css +10 -5
  38. package/es/vxe-table/style.min.css +1 -1
  39. package/lib/index.css +1 -1
  40. package/lib/index.min.css +1 -1
  41. package/lib/index.umd.js +93 -30
  42. package/lib/index.umd.min.js +1 -1
  43. package/lib/locale/lang/ar-EG.js +7 -0
  44. package/lib/locale/lang/ar-EG.min.js +1 -1
  45. package/lib/locale/lang/ar-EG.umd.js +7 -0
  46. package/lib/locale/lang/de-DE.js +7 -0
  47. package/lib/locale/lang/de-DE.min.js +1 -1
  48. package/lib/locale/lang/de-DE.umd.js +7 -0
  49. package/lib/locale/lang/en-US.js +7 -0
  50. package/lib/locale/lang/en-US.min.js +1 -1
  51. package/lib/locale/lang/en-US.umd.js +7 -0
  52. package/lib/locale/lang/es-ES.js +7 -0
  53. package/lib/locale/lang/es-ES.min.js +1 -1
  54. package/lib/locale/lang/es-ES.umd.js +7 -0
  55. package/lib/locale/lang/fr-FR.js +7 -0
  56. package/lib/locale/lang/fr-FR.min.js +1 -1
  57. package/lib/locale/lang/fr-FR.umd.js +7 -0
  58. package/lib/locale/lang/hu-HU.js +7 -0
  59. package/lib/locale/lang/hu-HU.min.js +1 -1
  60. package/lib/locale/lang/hu-HU.umd.js +7 -0
  61. package/lib/locale/lang/hy-AM.js +7 -0
  62. package/lib/locale/lang/hy-AM.min.js +1 -1
  63. package/lib/locale/lang/hy-AM.umd.js +7 -0
  64. package/lib/locale/lang/id-ID.js +7 -0
  65. package/lib/locale/lang/id-ID.min.js +1 -1
  66. package/lib/locale/lang/id-ID.umd.js +7 -0
  67. package/lib/locale/lang/it-IT.js +7 -0
  68. package/lib/locale/lang/it-IT.min.js +1 -1
  69. package/lib/locale/lang/it-IT.umd.js +7 -0
  70. package/lib/locale/lang/ja-JP.js +7 -0
  71. package/lib/locale/lang/ja-JP.min.js +1 -1
  72. package/lib/locale/lang/ja-JP.umd.js +7 -0
  73. package/lib/locale/lang/ko-KR.js +7 -0
  74. package/lib/locale/lang/ko-KR.min.js +1 -1
  75. package/lib/locale/lang/ko-KR.umd.js +7 -0
  76. package/lib/locale/lang/ms-MY.js +7 -0
  77. package/lib/locale/lang/ms-MY.min.js +1 -1
  78. package/lib/locale/lang/ms-MY.umd.js +7 -0
  79. package/lib/locale/lang/nb-NO.js +7 -0
  80. package/lib/locale/lang/nb-NO.min.js +1 -1
  81. package/lib/locale/lang/nb-NO.umd.js +7 -0
  82. package/lib/locale/lang/pt-BR.js +7 -0
  83. package/lib/locale/lang/pt-BR.min.js +1 -1
  84. package/lib/locale/lang/pt-BR.umd.js +7 -0
  85. package/lib/locale/lang/ru-RU.js +7 -0
  86. package/lib/locale/lang/ru-RU.min.js +1 -1
  87. package/lib/locale/lang/ru-RU.umd.js +7 -0
  88. package/lib/locale/lang/th-TH.js +7 -0
  89. package/lib/locale/lang/th-TH.min.js +1 -1
  90. package/lib/locale/lang/th-TH.umd.js +7 -0
  91. package/lib/locale/lang/ug-CN.js +7 -0
  92. package/lib/locale/lang/ug-CN.min.js +1 -1
  93. package/lib/locale/lang/ug-CN.umd.js +7 -0
  94. package/lib/locale/lang/uk-UA.js +7 -0
  95. package/lib/locale/lang/uk-UA.min.js +1 -1
  96. package/lib/locale/lang/uk-UA.umd.js +7 -0
  97. package/lib/locale/lang/uz-UZ.js +7 -0
  98. package/lib/locale/lang/uz-UZ.min.js +1 -1
  99. package/lib/locale/lang/uz-UZ.umd.js +7 -0
  100. package/lib/locale/lang/vi-VN.js +7 -0
  101. package/lib/locale/lang/vi-VN.min.js +1 -1
  102. package/lib/locale/lang/vi-VN.umd.js +7 -0
  103. package/lib/locale/lang/zh-CHT.js +7 -0
  104. package/lib/locale/lang/zh-CHT.min.js +1 -1
  105. package/lib/locale/lang/zh-CHT.umd.js +7 -0
  106. package/lib/locale/lang/zh-CN.js +7 -0
  107. package/lib/locale/lang/zh-CN.min.js +1 -1
  108. package/lib/locale/lang/zh-CN.umd.js +7 -0
  109. package/lib/style.css +1 -1
  110. package/lib/style.min.css +1 -1
  111. package/lib/table/module/edit/hook.js +5 -0
  112. package/lib/table/module/edit/hook.min.js +1 -1
  113. package/lib/table/render/index.js +62 -18
  114. package/lib/table/render/index.min.js +1 -1
  115. package/lib/table/src/table.js +18 -11
  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/hook.ts +5 -5
  149. package/packages/table/render/index.ts +46 -18
  150. package/packages/table/src/table.ts +218 -72
  151. package/styles/components/table.scss +8 -4
  152. /package/es/{iconfont.1781229243647.ttf → iconfont.1781675408206.ttf} +0 -0
  153. /package/es/{iconfont.1781229243647.woff → iconfont.1781675408206.woff} +0 -0
  154. /package/es/{iconfont.1781229243647.woff2 → iconfont.1781675408206.woff2} +0 -0
  155. /package/lib/{iconfont.1781229243647.ttf → iconfont.1781675408206.ttf} +0 -0
  156. /package/lib/{iconfont.1781229243647.woff → iconfont.1781675408206.woff} +0 -0
  157. /package/lib/{iconfont.1781229243647.woff2 → iconfont.1781675408206.woff2} +0 -0
@@ -77,7 +77,7 @@ hooks.add('tableEditModule', {
77
77
  }
78
78
  pChilds[funcName](item);
79
79
  pMapChilds[funcName](item);
80
- const rest = { row: item, rowid, seq: -1, index: -1, _index: -1, $index: -1, treeIndex: -1, _tIndex: -1, items: pChilds, parent: parentRow, level: parentLevel + 1, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
80
+ const rest = { row: item, rowid, _seq: -1, seq: -1, index: -1, _index: -1, $index: -1, treeIndex: -1, _tIndex: -1, items: pChilds, parent: parentRow, level: parentLevel + 1, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
81
81
  fullDataRowIdData[rowid] = rest;
82
82
  fullAllDataRowIdData[rowid] = rest;
83
83
  }
@@ -87,7 +87,7 @@ hooks.add('tableEditModule', {
87
87
  }
88
88
  afterFullData[funcName](item);
89
89
  tableFullTreeData[funcName](item);
90
- const rest = { row: item, rowid, seq: -1, index: -1, _index: -1, $index: -1, treeIndex: -1, _tIndex: -1, items: tableFullTreeData, parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
90
+ const rest = { row: item, rowid, _seq: -1, seq: -1, index: -1, _index: -1, $index: -1, treeIndex: -1, _tIndex: -1, items: tableFullTreeData, parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
91
91
  fullDataRowIdData[rowid] = rest;
92
92
  fullAllDataRowIdData[rowid] = rest;
93
93
  }
@@ -137,7 +137,7 @@ hooks.add('tableEditModule', {
137
137
  else {
138
138
  newRecords.forEach(item => {
139
139
  const rowid = getRowid($xeTable, item);
140
- const rest = { row: item, rowid, seq: -1, index: -1, _index: -1, $index: -1, treeIndex: -1, _tIndex: -1, items: afterFullData, parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
140
+ const rest = { row: item, rowid, _seq: -1, seq: -1, index: -1, _index: -1, $index: -1, treeIndex: -1, _tIndex: -1, items: afterFullData, parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
141
141
  fullDataRowIdData[rowid] = rest;
142
142
  fullAllDataRowIdData[rowid] = rest;
143
143
  afterFullData.unshift(item);
@@ -169,7 +169,7 @@ hooks.add('tableEditModule', {
169
169
  else {
170
170
  newRecords.forEach(item => {
171
171
  const rowid = getRowid($xeTable, item);
172
- const rest = { row: item, rowid, seq: -1, index: -1, _index: -1, treeIndex: -1, _tIndex: -1, $index: -1, items: afterFullData, parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
172
+ const rest = { row: item, rowid, _seq: -1, seq: -1, index: -1, _index: -1, treeIndex: -1, _tIndex: -1, $index: -1, items: afterFullData, parent: null, level: 0, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
173
173
  fullDataRowIdData[rowid] = rest;
174
174
  fullAllDataRowIdData[rowid] = rest;
175
175
  afterFullData.push(item);
@@ -209,7 +209,7 @@ hooks.add('tableEditModule', {
209
209
  });
210
210
  XEUtils.eachTree(treeRecords, (item) => {
211
211
  const rowid = getRowid($xeTable, item);
212
- const rest = { row: item, rowid, seq: -1, index: -1, _index: -1, $index: -1, treeIndex: -1, _tIndex: -1, items: parentMapChilds, parent: parentRow, level: parentLevel + 1, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
212
+ const rest = { row: item, rowid, _seq: -1, seq: -1, index: -1, _index: -1, $index: -1, treeIndex: -1, _tIndex: -1, items: parentMapChilds, parent: parentRow, level: parentLevel + 1, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
213
213
  if (item[childrenField]) {
214
214
  item[mapChildrenField] = item[childrenField];
215
215
  }
@@ -763,7 +763,7 @@ function handleSetTreeSelectValue(renderOpts, params) {
763
763
  */
764
764
  renderer.mixin({
765
765
  input: {
766
- tableAutoFocus: 'input',
766
+ tableAutoFocus: true,
767
767
  renderTableEdit: nativeEditRender,
768
768
  renderTableDefault: nativeEditRender,
769
769
  createTableFilterOptions: defaultFilterOptions,
@@ -771,7 +771,7 @@ renderer.mixin({
771
771
  tableFilterDefaultMethod: handleInputFilterMethod
772
772
  },
773
773
  textarea: {
774
- tableAutoFocus: 'textarea',
774
+ tableAutoFocus: true,
775
775
  renderTableEdit: nativeEditRender
776
776
  },
777
777
  select: {
@@ -811,7 +811,7 @@ renderer.mixin({
811
811
  tableExportMethod: handleExportSelectMethod
812
812
  },
813
813
  VxeInput: {
814
- tableAutoFocus: 'input',
814
+ tableAutoFocus: true,
815
815
  renderTableEdit: defaultEditRender,
816
816
  renderTableCell(renderOpts, params) {
817
817
  const { props = {} } = renderOpts;
@@ -851,7 +851,7 @@ renderer.mixin({
851
851
  }
852
852
  },
853
853
  VxeNumberInput: {
854
- tableAutoFocus: 'input',
854
+ tableAutoFocus: true,
855
855
  renderTableEdit: defaultEditRender,
856
856
  renderTableCell: handleNumberCell,
857
857
  renderTableFooter(renderOpts, params) {
@@ -903,7 +903,7 @@ renderer.mixin({
903
903
  }
904
904
  },
905
905
  VxeDatePicker: {
906
- tableAutoFocus: 'input',
906
+ tableAutoFocus: true,
907
907
  renderTableEdit: defaultEditRender,
908
908
  renderTableCell(renderOpts, params) {
909
909
  const props = renderOpts.props || {};
@@ -929,7 +929,7 @@ renderer.mixin({
929
929
  tableFilterDefaultMethod: handleFilterMethod
930
930
  },
931
931
  VxeDateRangePicker: {
932
- tableAutoFocus: 'input',
932
+ tableAutoFocus: true,
933
933
  renderTableEdit(renderOpts, params) {
934
934
  const { startField, endField } = renderOpts;
935
935
  const { $table, row, column } = params;
@@ -1029,7 +1029,7 @@ renderer.mixin({
1029
1029
  }
1030
1030
  },
1031
1031
  VxeTextarea: {
1032
- tableAutoFocus: 'textarea',
1032
+ tableAutoFocus: true,
1033
1033
  renderTableDefault: defaultEditRender,
1034
1034
  renderTableEdit: defaultEditRender,
1035
1035
  renderTableCell(renderOpts, params) {
@@ -1050,7 +1050,7 @@ renderer.mixin({
1050
1050
  }
1051
1051
  },
1052
1052
  VxeSelect: {
1053
- tableAutoFocus: 'input',
1053
+ tableAutoFocus: true,
1054
1054
  renderTableEdit: defaultSelectEditRender,
1055
1055
  renderTableDefault: defaultSelectEditRender,
1056
1056
  renderTableCell(renderOpts, params) {
@@ -1152,7 +1152,7 @@ renderer.mixin({
1152
1152
  tableExportMethod: handleExportSelectMethod
1153
1153
  },
1154
1154
  VxeTreeSelect: {
1155
- tableAutoFocus: 'input',
1155
+ tableAutoFocus: true,
1156
1156
  renderTableEdit: defaultTableOrTreeSelectEditRender,
1157
1157
  renderTableCell(renderOpts, params) {
1158
1158
  const { options, optionGroups } = renderOpts;
@@ -1214,8 +1214,36 @@ renderer.mixin({
1214
1214
  tableCellPasteMethod: handleSetTreeSelectValue,
1215
1215
  tableExportMethod: handleExportTreeSelectMethod
1216
1216
  },
1217
+ VxeCascader: {
1218
+ tableAutoFocus: true,
1219
+ renderTableEdit: defaultTableOrTreeSelectEditRender,
1220
+ renderTableCell(renderOpts, params) {
1221
+ const { options, optionGroups } = renderOpts;
1222
+ const { $table, row, column } = params;
1223
+ const opSize = options ? options.length : null;
1224
+ const ogSize = optionGroups ? optionGroups.length : null;
1225
+ const { cellResult } = $table.effectCellData(row, column, {
1226
+ key: 'render_table_cell',
1227
+ isChanged({ oldValue, cellValue }) {
1228
+ return oldValue && oldValue[0] === cellValue && oldValue[1] === opSize && oldValue[2] === ogSize;
1229
+ },
1230
+ setValue({ cellValue }) {
1231
+ return [cellValue, opSize, ogSize];
1232
+ },
1233
+ getResult({ cellValue }) {
1234
+ return handleTreeSelectCellValue(cellValue, renderOpts);
1235
+ }
1236
+ });
1237
+ // const cellResult = getTreeSelectCellValue(renderOpts, params)
1238
+ return getCellLabelVNs(renderOpts, params, cellResult);
1239
+ },
1240
+ tableCellFormatter: handleFormatTreeSelect,
1241
+ tableCellCopyMethod: handleFormatTreeSelect,
1242
+ tableCellPasteMethod: handleSetTreeSelectValue,
1243
+ tableExportMethod: handleExportTreeSelectMethod
1244
+ },
1217
1245
  VxeTableSelect: {
1218
- tableAutoFocus: 'input',
1246
+ tableAutoFocus: true,
1219
1247
  renderTableEdit: defaultTableOrTreeSelectEditRender,
1220
1248
  renderTableCell(renderOpts, params) {
1221
1249
  const { options, optionGroups } = renderOpts;
@@ -1243,7 +1271,7 @@ renderer.mixin({
1243
1271
  tableExportMethod: handleExportTreeSelectMethod
1244
1272
  },
1245
1273
  VxeColorPicker: {
1246
- tableAutoFocus: 'input',
1274
+ tableAutoFocus: true,
1247
1275
  renderTableEdit(renderOpts, params) {
1248
1276
  const { row, column } = params;
1249
1277
  const { options } = renderOpts;
@@ -1268,7 +1296,7 @@ renderer.mixin({
1268
1296
  }
1269
1297
  },
1270
1298
  VxeIconPicker: {
1271
- tableAutoFocus: 'input',
1299
+ tableAutoFocus: true,
1272
1300
  renderTableEdit(renderOpts, params) {
1273
1301
  const { row, column } = params;
1274
1302
  const { options } = renderOpts;
@@ -1342,7 +1370,7 @@ renderer.mixin({
1342
1370
  },
1343
1371
  // 以下已废弃
1344
1372
  $input: {
1345
- tableAutoFocus: '.vxe-input--inner',
1373
+ tableAutoFocus: 'input',
1346
1374
  renderTableEdit: oldEditRender,
1347
1375
  renderTableCell(renderOpts, params) {
1348
1376
  var _a;
@@ -1370,7 +1398,7 @@ renderer.mixin({
1370
1398
  tableFilterDefaultMethod: handleInputFilterMethod
1371
1399
  },
1372
1400
  $textarea: {
1373
- tableAutoFocus: '.vxe-textarea--inner'
1401
+ tableAutoFocus: 'textarea'
1374
1402
  },
1375
1403
  $button: {
1376
1404
  renderTableDefault: oldButtonEditRender
@@ -1379,7 +1407,7 @@ renderer.mixin({
1379
1407
  renderTableDefault: oldButtonsEditRender
1380
1408
  },
1381
1409
  $select: {
1382
- tableAutoFocus: '.vxe-input--inner',
1410
+ tableAutoFocus: 'input',
1383
1411
  renderTableEdit: oldSelectEditRender,
1384
1412
  renderTableDefault: oldSelectEditRender,
1385
1413
  renderTableCell(renderOpts, params) {
@@ -1397,13 +1425,13 @@ renderer.mixin({
1397
1425
  tableExportMethod: handleExportSelectMethod
1398
1426
  },
1399
1427
  $radio: {
1400
- tableAutoFocus: '.vxe-radio--input'
1428
+ tableAutoFocus: 'input'
1401
1429
  },
1402
1430
  $checkbox: {
1403
- tableAutoFocus: '.vxe-checkbox--input'
1431
+ tableAutoFocus: 'input'
1404
1432
  },
1405
1433
  $switch: {
1406
- tableAutoFocus: '.vxe-switch--button',
1434
+ tableAutoFocus: 'button',
1407
1435
  renderTableEdit: oldEditRender,
1408
1436
  renderTableDefault: oldEditRender
1409
1437
  }
@@ -1,6 +1,6 @@
1
1
  import { h, reactive, ref, provide, inject, nextTick, Teleport, onActivated, onDeactivated, onBeforeUnmount, onUnmounted, watch, computed, onMounted } from 'vue';
2
2
  import { defineVxeComponent } from '../../ui/src/comp';
3
- import XEUtils from 'xe-utils';
3
+ import XEUtils, { isNaN } from 'xe-utils';
4
4
  import { initTpImg, getTpImg, isPx, isScale, hasClass, addClass, removeClass, wheelScrollTopTo, wheelScrollLeftTo, getEventTargetNode, getPaddingTopBottomSize, setScrollTop, setScrollLeft, toCssUnit, hasControlKey, checkTargetElement, hasEventInputTarget } from '../../ui/src/dom';
5
5
  import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../ui/src/utils';
6
6
  import { VxeUI } from '../../ui';
@@ -584,22 +584,32 @@ export default defineVxeComponent({
584
584
  const { tableFullColumn } = internalData;
585
585
  const { updateColFlag } = reactData;
586
586
  const editDirtyOpts = computeEditDirtyOpts.value;
587
- const { includeFields, excludeFields } = editDirtyOpts;
587
+ const { extraFields, includeFields, excludeFields } = editDirtyOpts;
588
588
  const kpFields = [];
589
589
  if (updateColFlag) {
590
590
  if (includeFields && includeFields.length) {
591
591
  return includeFields;
592
592
  }
593
- const exfMaps = {};
593
+ const excludeFdMaps = {};
594
594
  if (excludeFields && excludeFields.length) {
595
595
  excludeFields.forEach(field => {
596
- exfMaps[field] = 1;
596
+ excludeFdMaps[field] = 1;
597
+ });
598
+ }
599
+ const addFdMaps = {};
600
+ if (extraFields && extraFields.length) {
601
+ extraFields.forEach(field => {
602
+ if (!addFdMaps[field]) {
603
+ addFdMaps[field] = 1;
604
+ kpFields.push(field);
605
+ }
597
606
  });
598
607
  }
599
608
  for (let i = 0; i < tableFullColumn.length; i++) {
600
609
  const column = tableFullColumn[i];
601
610
  const { field, type, editRender, cellRender } = column;
602
- if (field && !type && (editRender || cellRender) && !exfMaps[field]) {
611
+ if (field && !type && (editRender || cellRender) && !addFdMaps[field] && !excludeFdMaps[field]) {
612
+ addFdMaps[field] = 1;
603
613
  kpFields.push(field);
604
614
  }
605
615
  }
@@ -2071,26 +2081,63 @@ export default defineVxeComponent({
2071
2081
  return cellValue;
2072
2082
  };
2073
2083
  };
2084
+ const updateAfterTreeIndex = () => {
2085
+ const { fullDataRowIdData, fullAllDataRowIdData, afterFullData, afterTreeFullData } = internalData;
2086
+ const treeOpts = computeTreeOpts.value;
2087
+ const { transform, mapChildrenField } = treeOpts;
2088
+ const childrenField = treeOpts.children || treeOpts.childrenField;
2089
+ const fullMaps = {};
2090
+ let rowNum = 0;
2091
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
2092
+ XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
2093
+ const rowid = handleGetRowId(row);
2094
+ const rowRest = fullAllDataRowIdData[rowid];
2095
+ const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('');
2096
+ if (rowRest) {
2097
+ rowRest.seq = seq;
2098
+ rowRest._seq = rowNum;
2099
+ rowRest.treeIndex = index;
2100
+ rowRest._tIndex = rowNum;
2101
+ }
2102
+ else {
2103
+ 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 };
2104
+ fullAllDataRowIdData[rowid] = rest;
2105
+ fullDataRowIdData[rowid] = rest;
2106
+ }
2107
+ rowNum++;
2108
+ fullMaps[rowid] = row;
2109
+ }, { children: transform ? mapChildrenField : childrenField });
2110
+ if (transform) {
2111
+ afterFullData.forEach((row, index) => {
2112
+ const rowid = handleGetRowId(row);
2113
+ const rowRest = fullAllDataRowIdData[rowid];
2114
+ if (rowRest) {
2115
+ rowRest._index = index;
2116
+ }
2117
+ });
2118
+ }
2119
+ internalData.afterFullRowMaps = fullMaps;
2120
+ };
2074
2121
  const updateAfterListIndex = () => {
2075
- const { treeConfig } = props;
2076
2122
  const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData;
2077
2123
  const { handleGetRowId } = createHandleGetRowId($xeTable);
2078
2124
  const fullMaps = {};
2125
+ let rowNum = 0;
2079
2126
  afterFullData.forEach((row, index) => {
2080
2127
  const rowid = handleGetRowId(row);
2081
2128
  const rowRest = fullAllDataRowIdData[rowid];
2082
2129
  const seq = index + 1;
2083
2130
  if (rowRest) {
2084
- if (!treeConfig) {
2085
- rowRest.seq = seq;
2086
- }
2131
+ rowRest.seq = seq;
2132
+ rowRest._seq = rowNum;
2087
2133
  rowRest._index = index;
2088
2134
  }
2089
2135
  else {
2090
- 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 };
2136
+ 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 };
2091
2137
  fullAllDataRowIdData[rowid] = rest;
2092
2138
  fullDataRowIdData[rowid] = rest;
2093
2139
  }
2140
+ rowNum++;
2094
2141
  fullMaps[rowid] = row;
2095
2142
  });
2096
2143
  internalData.afterFullRowMaps = fullMaps;
@@ -2101,45 +2148,8 @@ export default defineVxeComponent({
2101
2148
  */
2102
2149
  const updateAfterDataIndex = () => {
2103
2150
  const { treeConfig } = props;
2104
- const { fullDataRowIdData, fullAllDataRowIdData, afterFullData, afterTreeFullData } = internalData;
2105
- const treeOpts = computeTreeOpts.value;
2106
- const { transform } = treeOpts;
2107
- const childrenField = treeOpts.children || treeOpts.childrenField;
2108
- const fullMaps = {};
2109
2151
  if (treeConfig) {
2110
- let _treeIndex = 0;
2111
- const { handleGetRowId } = createHandleGetRowId($xeTable);
2112
- XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
2113
- const rowid = handleGetRowId(row);
2114
- const rowRest = fullAllDataRowIdData[rowid];
2115
- const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('');
2116
- if (rowRest) {
2117
- rowRest.seq = seq;
2118
- rowRest.treeIndex = index;
2119
- rowRest._tIndex = _treeIndex;
2120
- }
2121
- else {
2122
- 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 };
2123
- fullAllDataRowIdData[rowid] = rest;
2124
- fullDataRowIdData[rowid] = rest;
2125
- }
2126
- _treeIndex++;
2127
- fullMaps[rowid] = row;
2128
- }, { children: transform ? treeOpts.mapChildrenField : childrenField });
2129
- if (transform) {
2130
- afterFullData.forEach((row, index) => {
2131
- const rowid = handleGetRowId(row);
2132
- const rowRest = fullAllDataRowIdData[rowid];
2133
- const seq = index + 1;
2134
- if (rowRest) {
2135
- if (!treeConfig) {
2136
- rowRest.seq = seq;
2137
- }
2138
- rowRest._index = index;
2139
- }
2140
- });
2141
- }
2142
- internalData.afterFullRowMaps = fullMaps;
2152
+ updateAfterTreeIndex();
2143
2153
  }
2144
2154
  else {
2145
2155
  updateAfterListIndex();
@@ -3335,8 +3345,9 @@ export default defineVxeComponent({
3335
3345
  }
3336
3346
  });
3337
3347
  };
3338
- const minRunDelay = 50;
3339
- const handleLazyRecalculate = (reFull, reWidth, reHeight) => {
3348
+ const defaultMinRunDelay = 50;
3349
+ const handleLazyRecalculate = (reFull, reWidth, reHeight, options) => {
3350
+ const minRunDelay = (options ? options.minRunDelay : defaultMinRunDelay) || defaultMinRunDelay;
3340
3351
  return new Promise(resolve => {
3341
3352
  const $xeGanttView = internalData.xeGanttView;
3342
3353
  const { customStore } = reactData;
@@ -3363,6 +3374,7 @@ export default defineVxeComponent({
3363
3374
  }
3364
3375
  if (rceTimeout) {
3365
3376
  clearTimeout(rceTimeout);
3377
+ // 多少毫秒内至少执行一次
3366
3378
  if (rceRunTime && rceRunTime + minRunDelay < Date.now()) {
3367
3379
  resolve(handleRecalculateStyle(reFull, reWidth, reHeight));
3368
3380
  }
@@ -3387,16 +3399,17 @@ export default defineVxeComponent({
3387
3399
  }, reDelay);
3388
3400
  });
3389
3401
  };
3390
- let resizePending = false;
3391
3402
  const handleResizeEvent = () => {
3392
- if (resizePending) {
3403
+ if (internalData.rsePending) {
3393
3404
  return;
3394
3405
  }
3395
- resizePending = true;
3396
- handleLazyRecalculate(true, true, true).then(() => {
3397
- resizePending = false;
3406
+ internalData.rsePending = true;
3407
+ handleLazyRecalculate(true, true, true, {
3408
+ minRunDelay: 200
3409
+ }).then(() => {
3410
+ internalData.rsePending = false;
3398
3411
  }).catch(() => {
3399
- resizePending = false;
3412
+ internalData.rsePending = false;
3400
3413
  });
3401
3414
  };
3402
3415
  const handleUpdateAggValues = () => {
@@ -4984,7 +4997,7 @@ export default defineVxeComponent({
4984
4997
  XEUtils.eachTree(rows, (childRow, index, items, path, parentItem, nodes) => {
4985
4998
  const rowid = getRowid($xeTable, childRow);
4986
4999
  const parentRow = parentItem || parentRest.row;
4987
- 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 };
5000
+ 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 };
4988
5001
  fullDataRowIdData[rowid] = rest;
4989
5002
  fullAllDataRowIdData[rowid] = rest;
4990
5003
  }, { children: childrenField });
@@ -9398,18 +9411,20 @@ export default defineVxeComponent({
9398
9411
  const fullDataRowIdMaps = {};
9399
9412
  const idMaps = {};
9400
9413
  const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
9414
+ let rowNum = 0;
9401
9415
  const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
9402
9416
  let rowRest = fullAllDataRowIdMaps[rowid];
9403
9417
  if (idMaps[rowid]) {
9404
9418
  errLog('vxe.error.repeatKey', [currKeyField, rowid]);
9405
9419
  }
9406
9420
  if (!rowRest) {
9407
- 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 };
9421
+ 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 };
9408
9422
  fullDataRowIdMaps[rowid] = rowRest;
9409
9423
  fullAllDataRowIdMaps[rowid] = rowRest;
9410
9424
  }
9411
9425
  rowRest.treeLoaded = false;
9412
9426
  rowRest.expandLoaded = false;
9427
+ rowRest._seq = rowNum++;
9413
9428
  rowRest.row = row;
9414
9429
  rowRest.items = items;
9415
9430
  rowRest.parent = parentRow;
@@ -9423,6 +9438,7 @@ export default defineVxeComponent({
9423
9438
  if (rowExpandedMaps[rowid]) {
9424
9439
  rowExpandedMaps[rowid] = row;
9425
9440
  }
9441
+ rowNum++;
9426
9442
  idMaps[rowid] = true;
9427
9443
  fullDataRowIdMaps[rowid] = rowRest;
9428
9444
  fullAllDataRowIdMaps[rowid] = rowRest;
@@ -10723,31 +10739,162 @@ export default defineVxeComponent({
10723
10739
  const { treeConfig } = props;
10724
10740
  const { row } = params;
10725
10741
  const { isRowGroupStatus } = reactData;
10726
- const { afterFullData } = internalData;
10742
+ const { fullAllDataRowIdData, afterFullData, afterTreeFullData, afterGroupFullData } = internalData;
10727
10743
  const checkboxOpts = computeCheckboxOpts.value;
10728
- const { checkMethod, trigger } = checkboxOpts;
10744
+ const aggregateOpts = computeAggregateOpts.value;
10745
+ const treeOpts = computeTreeOpts.value;
10746
+ const { checkMethod, trigger, checkStrictly } = checkboxOpts;
10729
10747
  if (trigger === 'manual') {
10730
10748
  return;
10731
10749
  }
10732
10750
  evnt.stopPropagation();
10733
- if (checkboxOpts.isShiftKey && evnt.shiftKey && !(treeConfig || isRowGroupStatus)) {
10751
+ if (checkboxOpts.isShiftKey && evnt.shiftKey) {
10752
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
10734
10753
  const checkboxRecords = $xeTable.getCheckboxRecords();
10735
- if (checkboxRecords.length) {
10736
- const firstRow = checkboxRecords[0];
10737
- const _rowIndex = $xeTable.getVTRowIndex(row);
10738
- const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
10739
- if (_rowIndex !== _firstRowIndex) {
10754
+ let currSeq = -1;
10755
+ let currRow = null;
10756
+ const currRowid = handleGetRowId(row);
10757
+ const rowRest = fullAllDataRowIdData[currRowid];
10758
+ if (rowRest) {
10759
+ currRow = rowRest.row;
10760
+ currSeq = rowRest._seq;
10761
+ }
10762
+ if (currRow && checkboxRecords.length) {
10763
+ let rangeRows = [];
10764
+ let firstSeq = -1;
10765
+ let firstRow = null;
10766
+ let firstRowid = '';
10767
+ let lastSeq = -1;
10768
+ let lastRow = null;
10769
+ let lastRowid = '';
10770
+ // 根据序号取出范围最小/最大的行
10771
+ const selectMaps = {};
10772
+ checkboxRecords.forEach(item => {
10773
+ const rowid = handleGetRowId(item);
10774
+ const rowRest = fullAllDataRowIdData[rowid];
10775
+ if (rowRest) {
10776
+ if (!firstRow || firstSeq > rowRest._seq) {
10777
+ firstRowid = rowRest.rowid;
10778
+ firstRow = rowRest.row;
10779
+ firstSeq = rowRest._seq;
10780
+ }
10781
+ if (!lastRow || lastSeq < rowRest._seq) {
10782
+ lastRowid = rowRest.rowid;
10783
+ lastRow = rowRest.row;
10784
+ lastSeq = rowRest._seq;
10785
+ }
10786
+ }
10787
+ selectMaps[rowid] = item;
10788
+ });
10789
+ // 如果已选只有一条并选择当前则跳过
10790
+ if (firstRow && lastRow && (checkboxRecords.length > 1 || currRowid !== firstRowid) && (Math.abs(firstSeq - lastSeq) > 1 || Math.abs(currSeq - firstSeq) > 1 || Math.abs(currSeq - lastSeq) > 1)) {
10791
+ // 树与分组
10792
+ if (treeConfig || isRowGroupStatus) {
10793
+ const { transform } = treeOpts;
10794
+ const childrenField = treeOpts.children || treeOpts.childrenField;
10795
+ const iteratorChildField = treeConfig ? (transform ? treeOpts.mapChildrenField : childrenField) : aggregateOpts.mapChildrenField;
10796
+ let isMatchFirst = false;
10797
+ let matchStartRowid = '';
10798
+ let matchEndRowid = '';
10799
+ const handleGetChildRowid = (rowid, isLast) => {
10800
+ const rowRest = fullAllDataRowIdData[rowid];
10801
+ if (rowRest) {
10802
+ const item = rowRest.row;
10803
+ const childList = item[iteratorChildField];
10804
+ if (childList && childList.length) {
10805
+ const targetRow = isLast ? XEUtils.last(childList) : XEUtils.first(childList);
10806
+ return handleGetChildRowid(handleGetRowId(targetRow), isLast);
10807
+ }
10808
+ }
10809
+ return rowid;
10810
+ };
10811
+ const handleGetSelectParentRowid = (rowid) => {
10812
+ const rowRest = fullAllDataRowIdData[rowid];
10813
+ if (rowRest) {
10814
+ const parentItem = rowRest.parent;
10815
+ if (parentItem) {
10816
+ const parentRowid = handleGetRowId(parentItem);
10817
+ if (selectMaps[parentRowid]) {
10818
+ return handleGetSelectParentRowid(parentRowid);
10819
+ }
10820
+ }
10821
+ }
10822
+ return rowid;
10823
+ };
10824
+ const handleGetRootRow = (row) => {
10825
+ const rowid = handleGetRowId(row);
10826
+ if (rowid) {
10827
+ const rest = fullAllDataRowIdData[rowid];
10828
+ if (rest) {
10829
+ return rest.parent ? handleGetRootRow(rest.parent) : rest;
10830
+ }
10831
+ }
10832
+ return null;
10833
+ };
10834
+ if (currSeq < firstSeq) {
10835
+ matchStartRowid = handleGetChildRowid(currRowid, 0);
10836
+ matchEndRowid = handleGetChildRowid(firstRowid, 1);
10837
+ }
10838
+ else {
10839
+ if (currSeq > lastSeq) {
10840
+ matchStartRowid = handleGetSelectParentRowid(lastRowid);
10841
+ }
10842
+ else {
10843
+ matchStartRowid = handleGetChildRowid(firstRowid, 0);
10844
+ }
10845
+ matchEndRowid = handleGetChildRowid(currRowid, 1);
10846
+ }
10847
+ const handleRangeRow = (item) => {
10848
+ const rowid = handleGetRowId(item);
10849
+ const childList = item[iteratorChildField];
10850
+ if (!isMatchFirst && rowid === matchStartRowid) {
10851
+ isMatchFirst = true;
10852
+ }
10853
+ // 如果是父子关联,则排除父节点
10854
+ if (isMatchFirst && (checkStrictly || !childList || !childList.length)) {
10855
+ rangeRows.push(item);
10856
+ }
10857
+ // break
10858
+ return rowid === matchEndRowid;
10859
+ };
10860
+ if (treeConfig) {
10861
+ const matchStartRowRest = fullAllDataRowIdData[matchStartRowid];
10862
+ const firstRootRowRest = matchStartRowRest ? handleGetRootRow(matchStartRowRest.row) : null;
10863
+ if (firstRootRowRest) {
10864
+ // 优化查找复杂度
10865
+ XEUtils.findTree(afterTreeFullData.slice(firstRootRowRest.treeIndex), handleRangeRow, { children: iteratorChildField });
10866
+ }
10867
+ else {
10868
+ XEUtils.findTree(afterTreeFullData, handleRangeRow, { children: iteratorChildField });
10869
+ }
10870
+ }
10871
+ else {
10872
+ XEUtils.findTree(afterGroupFullData, handleRangeRow, { children: iteratorChildField });
10873
+ }
10874
+ }
10875
+ else {
10876
+ const _currRowIndex = $xeTable.getVTRowIndex(currRow);
10877
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
10878
+ const _lastRowIndex = $xeTable.getVTRowIndex(lastRow);
10879
+ if (_currRowIndex < _firstRowIndex) {
10880
+ rangeRows = afterFullData.slice(_currRowIndex, _firstRowIndex + 1);
10881
+ }
10882
+ else if (_currRowIndex > _lastRowIndex) {
10883
+ rangeRows = afterFullData.slice(_lastRowIndex, _currRowIndex + 1);
10884
+ }
10885
+ else {
10886
+ rangeRows = afterFullData.slice(_firstRowIndex, _currRowIndex + 1);
10887
+ }
10888
+ }
10740
10889
  $xeTable.setAllCheckboxRow(false);
10741
- const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
10742
10890
  nextTick(() => {
10743
10891
  handleCheckedCheckboxRow(rangeRows, true, false);
10744
10892
  });
10745
10893
  dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
10746
- return;
10747
10894
  }
10748
10895
  }
10749
10896
  }
10750
- if (isRowGroupStatus || !checkMethod || checkMethod({ $table: $xeTable, row })) {
10897
+ if (!checkMethod || checkMethod({ $table: $xeTable, row })) {
10751
10898
  $xeTable.handleBatchSelectRows([row], checked);
10752
10899
  $xeTable.checkSelectionStatus();
10753
10900
  dispatchEvent('checkbox-change', Object.assign({
@@ -14240,9 +14387,6 @@ export default defineVxeComponent({
14240
14387
  if (props.editConfig && editOpts.activeMethod) {
14241
14388
  warnLog('vxe.error.delProp', ['edit-config.activeMethod', 'edit-config.beforeEditMethod']);
14242
14389
  }
14243
- if (props.treeConfig && checkboxOpts.isShiftKey) {
14244
- errLog('vxe.error.reqSupportProp', ['tree-config', 'checkbox-config.isShiftKey=false']);
14245
- }
14246
14390
  if (checkboxOpts.halfField) {
14247
14391
  warnLog('vxe.error.delProp', ['checkbox-config.halfField', 'checkbox-config.indeterminateField']);
14248
14392
  }