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
@@ -70,7 +70,7 @@ function insertTreeRow($xeTable, newRecords, isAppend) {
70
70
  }
71
71
  pChilds[funcName](item);
72
72
  pMapChilds[funcName](item);
73
- 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 };
73
+ 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 };
74
74
  fullDataRowIdData[rowid] = rest;
75
75
  fullAllDataRowIdData[rowid] = rest;
76
76
  }
@@ -80,7 +80,7 @@ function insertTreeRow($xeTable, newRecords, isAppend) {
80
80
  }
81
81
  afterFullData[funcName](item);
82
82
  tableFullTreeData[funcName](item);
83
- 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 };
83
+ 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 };
84
84
  fullDataRowIdData[rowid] = rest;
85
85
  fullAllDataRowIdData[rowid] = rest;
86
86
  }
@@ -133,7 +133,7 @@ function handleInsertRowAt($xeTable, records, targetRowOrRowid, isInsertNextRow)
133
133
  else {
134
134
  newRecords.forEach(item => {
135
135
  const rowid = getRowid($xeTable, item);
136
- 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 };
136
+ 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 };
137
137
  fullDataRowIdData[rowid] = rest;
138
138
  fullAllDataRowIdData[rowid] = rest;
139
139
  afterFullData.unshift(item);
@@ -165,7 +165,7 @@ function handleInsertRowAt($xeTable, records, targetRowOrRowid, isInsertNextRow)
165
165
  else {
166
166
  newRecords.forEach(item => {
167
167
  const rowid = getRowid($xeTable, item);
168
- 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 };
168
+ 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 };
169
169
  fullDataRowIdData[rowid] = rest;
170
170
  fullAllDataRowIdData[rowid] = rest;
171
171
  afterFullData.push(item);
@@ -205,7 +205,7 @@ function handleInsertRowAt($xeTable, records, targetRowOrRowid, isInsertNextRow)
205
205
  });
206
206
  XEUtils.eachTree(treeRecords, (item) => {
207
207
  const rowid = getRowid($xeTable, item);
208
- 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 };
208
+ 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 };
209
209
  if (item[childrenField]) {
210
210
  item[mapChildrenField] = item[childrenField];
211
211
  }
@@ -825,14 +825,14 @@ function handleSetTreeSelectValue(renderOpts, params) {
825
825
  */
826
826
  renderer.mixin({
827
827
  input: {
828
- tableAutoFocus: 'input',
828
+ tableAutoFocus: true,
829
829
  renderTableEdit: nativeEditRender,
830
830
  renderTableDefault: nativeEditRender,
831
831
  renderTableFilter: nativeFilterRender,
832
832
  tableFilterDefaultMethod: handleInputFilterMethod
833
833
  },
834
834
  textarea: {
835
- tableAutoFocus: 'textarea',
835
+ tableAutoFocus: true,
836
836
  renderTableEdit: nativeEditRender
837
837
  },
838
838
  select: {
@@ -876,7 +876,7 @@ renderer.mixin({
876
876
  tableExportMethod: handleExportSelectMethod
877
877
  },
878
878
  VxeInput: {
879
- tableAutoFocus: 'input',
879
+ tableAutoFocus: true,
880
880
  renderTableEdit: defaultEditRender,
881
881
  renderTableCell(h, renderOpts, params) {
882
882
  const { props = {} } = renderOpts;
@@ -916,7 +916,7 @@ renderer.mixin({
916
916
  }
917
917
  },
918
918
  VxeNumberInput: {
919
- tableAutoFocus: 'input',
919
+ tableAutoFocus: true,
920
920
  renderTableEdit: defaultEditRender,
921
921
  renderTableCell: handleNumberCell,
922
922
  renderTableFooter(h, renderOpts, params) {
@@ -968,7 +968,7 @@ renderer.mixin({
968
968
  }
969
969
  },
970
970
  VxeDatePicker: {
971
- tableAutoFocus: 'input',
971
+ tableAutoFocus: true,
972
972
  renderTableEdit: defaultEditRender,
973
973
  renderTableCell(h, renderOpts, params) {
974
974
  const props = renderOpts.props || {};
@@ -994,7 +994,7 @@ renderer.mixin({
994
994
  tableFilterDefaultMethod: handleFilterMethod
995
995
  },
996
996
  VxeDateRangePicker: {
997
- tableAutoFocus: 'input',
997
+ tableAutoFocus: true,
998
998
  renderTableEdit(h, renderOpts, params) {
999
999
  const { startField, endField } = renderOpts;
1000
1000
  const { $table, row, column } = params;
@@ -1100,7 +1100,7 @@ renderer.mixin({
1100
1100
  }
1101
1101
  },
1102
1102
  VxeTextarea: {
1103
- tableAutoFocus: 'textarea',
1103
+ tableAutoFocus: true,
1104
1104
  renderTableDefault: defaultEditRender,
1105
1105
  renderTableEdit: defaultEditRender
1106
1106
  },
@@ -1119,7 +1119,7 @@ renderer.mixin({
1119
1119
  }
1120
1120
  },
1121
1121
  VxeSelect: {
1122
- tableAutoFocus: 'input',
1122
+ tableAutoFocus: true,
1123
1123
  renderTableEdit: defaultSelectEditRender,
1124
1124
  renderTableDefault: defaultSelectEditRender,
1125
1125
  renderTableCell(h, renderOpts, params) {
@@ -1234,7 +1234,7 @@ renderer.mixin({
1234
1234
  tableExportMethod: handleExportSelectMethod
1235
1235
  },
1236
1236
  VxeTreeSelect: {
1237
- tableAutoFocus: 'input',
1237
+ tableAutoFocus: true,
1238
1238
  renderTableEdit: defaultTableOrTreeSelectEditRender,
1239
1239
  renderTableCell(h, renderOpts, params) {
1240
1240
  const { options, optionGroups } = renderOpts;
@@ -1296,8 +1296,36 @@ renderer.mixin({
1296
1296
  tableCellPasteMethod: handleSetTreeSelectValue,
1297
1297
  tableExportMethod: handleExportTreeSelectMethod
1298
1298
  },
1299
+ VxeCascader: {
1300
+ tableAutoFocus: true,
1301
+ renderTableEdit: defaultTableOrTreeSelectEditRender,
1302
+ renderTableCell(h, renderOpts, params) {
1303
+ const { options, optionGroups } = renderOpts;
1304
+ const { $table, row, column } = params;
1305
+ const opSize = options ? options.length : null;
1306
+ const ogSize = optionGroups ? optionGroups.length : null;
1307
+ const { cellResult } = $table.effectCellData(row, column, {
1308
+ key: 'render_table_cell',
1309
+ isChanged({ oldValue, cellValue }) {
1310
+ return oldValue && oldValue[0] === cellValue && oldValue[1] === opSize && oldValue[2] === ogSize;
1311
+ },
1312
+ setValue({ cellValue }) {
1313
+ return [cellValue, opSize, ogSize];
1314
+ },
1315
+ getResult({ cellValue }) {
1316
+ return handleTreeSelectCellValue(cellValue, renderOpts);
1317
+ }
1318
+ });
1319
+ // const cellResult = getTreeSelectCellValue(renderOpts, params)
1320
+ return getCellLabelVNs(h, renderOpts, params, cellResult);
1321
+ },
1322
+ tableCellFormatter: handleFormatTreeSelect,
1323
+ tableCellCopyMethod: handleFormatTreeSelect,
1324
+ tableCellPasteMethod: handleSetTreeSelectValue,
1325
+ tableExportMethod: handleExportTreeSelectMethod
1326
+ },
1299
1327
  VxeTableSelect: {
1300
- tableAutoFocus: 'input',
1328
+ tableAutoFocus: true,
1301
1329
  renderTableEdit: defaultTableOrTreeSelectEditRender,
1302
1330
  renderTableCell(h, renderOpts, params) {
1303
1331
  const { options, optionGroups } = renderOpts;
@@ -1325,7 +1353,7 @@ renderer.mixin({
1325
1353
  tableExportMethod: handleExportTreeSelectMethod
1326
1354
  },
1327
1355
  VxeColorPicker: {
1328
- tableAutoFocus: 'input',
1356
+ tableAutoFocus: true,
1329
1357
  renderTableEdit(h, renderOpts, params) {
1330
1358
  const { row, column } = params;
1331
1359
  const { options } = renderOpts;
@@ -1353,7 +1381,7 @@ renderer.mixin({
1353
1381
  }
1354
1382
  },
1355
1383
  VxeIconPicker: {
1356
- tableAutoFocus: 'input',
1384
+ tableAutoFocus: true,
1357
1385
  renderTableEdit(h, renderOpts, params) {
1358
1386
  const { row, column } = params;
1359
1387
  const { options } = renderOpts;
@@ -1439,7 +1467,7 @@ renderer.mixin({
1439
1467
  },
1440
1468
  // 以下已废弃
1441
1469
  $input: {
1442
- tableAutoFocus: '.vxe-input--inner',
1470
+ tableAutoFocus: 'input',
1443
1471
  renderTableEdit: oldEditRender,
1444
1472
  renderTableCell(h, renderOpts, params) {
1445
1473
  var _a;
@@ -1467,7 +1495,7 @@ renderer.mixin({
1467
1495
  tableFilterDefaultMethod: handleInputFilterMethod
1468
1496
  },
1469
1497
  $textarea: {
1470
- tableAutoFocus: '.vxe-textarea--inner'
1498
+ tableAutoFocus: 'textarea'
1471
1499
  },
1472
1500
  $button: {
1473
1501
  renderTableDefault: oldButtonEditRender
@@ -1476,7 +1504,7 @@ renderer.mixin({
1476
1504
  renderTableDefault: oldButtonsEditRender
1477
1505
  },
1478
1506
  $select: {
1479
- tableAutoFocus: '.vxe-input--inner',
1507
+ tableAutoFocus: 'input',
1480
1508
  renderTableEdit: oldSelectEditRender,
1481
1509
  renderTableDefault: oldSelectEditRender,
1482
1510
  renderTableCell(h, renderOpts, params) {
@@ -1498,13 +1526,13 @@ renderer.mixin({
1498
1526
  tableExportMethod: handleExportSelectMethod
1499
1527
  },
1500
1528
  $radio: {
1501
- tableAutoFocus: '.vxe-radio--input'
1529
+ tableAutoFocus: 'input'
1502
1530
  },
1503
1531
  $checkbox: {
1504
- tableAutoFocus: '.vxe-checkbox--input'
1532
+ tableAutoFocus: 'input'
1505
1533
  },
1506
1534
  $switch: {
1507
- tableAutoFocus: '.vxe-switch--button',
1535
+ tableAutoFocus: 'button',
1508
1536
  renderTableEdit: oldEditRender,
1509
1537
  renderTableDefault: oldEditRender
1510
1538
  }
@@ -609,28 +609,65 @@ function handleDefaultRowGroupExpand($xeTable) {
609
609
  }
610
610
  }
611
611
  }
612
+ function updateAfterTreeIndex($xeTable) {
613
+ const internalData = $xeTable;
614
+ const { fullDataRowIdData, fullAllDataRowIdData, afterFullData, afterTreeFullData } = internalData;
615
+ const treeOpts = $xeTable.computeTreeOpts;
616
+ const { transform, mapChildrenField } = treeOpts;
617
+ const childrenField = treeOpts.children || treeOpts.childrenField;
618
+ const fullMaps = {};
619
+ let rowNum = 0;
620
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
621
+ XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
622
+ const rowid = handleGetRowId(row);
623
+ const rowRest = fullAllDataRowIdData[rowid];
624
+ const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('');
625
+ if (rowRest) {
626
+ rowRest.seq = seq;
627
+ rowRest._seq = rowNum;
628
+ rowRest.treeIndex = index;
629
+ rowRest._tIndex = rowNum;
630
+ }
631
+ else {
632
+ 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 };
633
+ fullAllDataRowIdData[rowid] = rest;
634
+ fullDataRowIdData[rowid] = rest;
635
+ }
636
+ rowNum++;
637
+ fullMaps[rowid] = row;
638
+ }, { children: transform ? mapChildrenField : childrenField });
639
+ if (transform) {
640
+ afterFullData.forEach((row, index) => {
641
+ const rowid = handleGetRowId(row);
642
+ const rowRest = fullAllDataRowIdData[rowid];
643
+ if (rowRest) {
644
+ rowRest._index = index;
645
+ }
646
+ });
647
+ }
648
+ internalData.afterFullRowMaps = fullMaps;
649
+ }
612
650
  function updateAfterListIndex($xeTable) {
613
- const props = $xeTable;
614
651
  const internalData = $xeTable;
615
- const { treeConfig } = props;
616
652
  const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData;
617
653
  const { handleGetRowId } = createHandleGetRowId($xeTable);
618
654
  const fullMaps = {};
655
+ let rowNum = 0;
619
656
  afterFullData.forEach((row, index) => {
620
657
  const rowid = handleGetRowId(row);
621
658
  const rowRest = fullAllDataRowIdData[rowid];
622
659
  const seq = index + 1;
623
660
  if (rowRest) {
624
- if (!treeConfig) {
625
- rowRest.seq = seq;
626
- }
661
+ rowRest.seq = seq;
662
+ rowRest._seq = rowNum;
627
663
  rowRest._index = index;
628
664
  }
629
665
  else {
630
- 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 };
666
+ 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 };
631
667
  fullAllDataRowIdData[rowid] = rest;
632
668
  fullDataRowIdData[rowid] = rest;
633
669
  }
670
+ rowNum++;
634
671
  fullMaps[rowid] = row;
635
672
  });
636
673
  internalData.afterFullRowMaps = fullMaps;
@@ -641,47 +678,9 @@ function updateAfterListIndex($xeTable) {
641
678
  */
642
679
  function updateAfterDataIndex($xeTable) {
643
680
  const props = $xeTable;
644
- const internalData = $xeTable;
645
681
  const { treeConfig } = props;
646
- const { fullDataRowIdData, fullAllDataRowIdData, afterFullData, afterTreeFullData } = internalData;
647
- const treeOpts = $xeTable.computeTreeOpts;
648
- const { transform } = treeOpts;
649
- const childrenField = treeOpts.children || treeOpts.childrenField;
650
- const fullMaps = {};
651
682
  if (treeConfig) {
652
- let _treeIndex = 0;
653
- const { handleGetRowId } = createHandleGetRowId($xeTable);
654
- XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
655
- const rowid = handleGetRowId(row);
656
- const rowRest = fullAllDataRowIdData[rowid];
657
- const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('');
658
- if (rowRest) {
659
- rowRest.seq = seq;
660
- rowRest.treeIndex = index;
661
- rowRest._tIndex = _treeIndex;
662
- }
663
- else {
664
- 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 };
665
- fullAllDataRowIdData[rowid] = rest;
666
- fullDataRowIdData[rowid] = rest;
667
- }
668
- _treeIndex++;
669
- fullMaps[rowid] = row;
670
- }, { children: transform ? treeOpts.mapChildrenField : childrenField });
671
- if (transform) {
672
- afterFullData.forEach((row, index) => {
673
- const rowid = handleGetRowId(row);
674
- const rowRest = fullAllDataRowIdData[rowid];
675
- const seq = index + 1;
676
- if (rowRest) {
677
- if (!treeConfig) {
678
- rowRest.seq = seq;
679
- }
680
- rowRest._index = index;
681
- }
682
- });
683
- }
684
- internalData.afterFullRowMaps = fullMaps;
683
+ updateAfterTreeIndex($xeTable);
685
684
  }
686
685
  else {
687
686
  updateAfterListIndex($xeTable);
@@ -3072,10 +3071,11 @@ function handleRecalculateStyle($xeTable, reFull, reWidth, reHeight) {
3072
3071
  }
3073
3072
  });
3074
3073
  }
3075
- const minRunDelay = 50;
3076
- function handleLazyRecalculate($xeTable, reFull, reWidth, reHeight) {
3074
+ const defaultMinRunDelay = 50;
3075
+ function handleLazyRecalculate($xeTable, reFull, reWidth, reHeight, options) {
3077
3076
  const reactData = $xeTable;
3078
3077
  const internalData = $xeTable;
3078
+ const minRunDelay = (options ? options.minRunDelay : defaultMinRunDelay) || defaultMinRunDelay;
3079
3079
  return new Promise(resolve => {
3080
3080
  const { customStore } = reactData;
3081
3081
  const { rceTimeout, rceRunTime } = internalData;
@@ -3102,6 +3102,7 @@ function handleLazyRecalculate($xeTable, reFull, reWidth, reHeight) {
3102
3102
  }
3103
3103
  if (rceTimeout) {
3104
3104
  clearTimeout(rceTimeout);
3105
+ // 多少毫秒内至少执行一次
3105
3106
  if (rceRunTime && rceRunTime + minRunDelay < Date.now()) {
3106
3107
  resolve(handleRecalculateStyle($xeTable, reFull, reWidth, reHeight));
3107
3108
  }
@@ -3124,7 +3125,18 @@ function handleLazyRecalculate($xeTable, reFull, reWidth, reHeight) {
3124
3125
  });
3125
3126
  }
3126
3127
  function handleResizeEvent($xeTable) {
3127
- handleLazyRecalculate($xeTable, true, true, true);
3128
+ const internalData = $xeTable;
3129
+ if (internalData.rsePending) {
3130
+ return;
3131
+ }
3132
+ internalData.rsePending = true;
3133
+ handleLazyRecalculate($xeTable, true, true, true, {
3134
+ minRunDelay: 200
3135
+ }).then(() => {
3136
+ internalData.rsePending = false;
3137
+ }).catch(() => {
3138
+ internalData.rsePending = false;
3139
+ });
3128
3140
  }
3129
3141
  function handleUpdateAggValues($xeTable) {
3130
3142
  const reactData = $xeTable;
@@ -4907,16 +4919,18 @@ const tableMethods = {
4907
4919
  const fullDataRowIdMaps = {};
4908
4920
  const idMaps = {};
4909
4921
  const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
4922
+ let rowNum = 0;
4910
4923
  const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
4911
4924
  let rowRest = fullAllDataRowIdMaps[rowid];
4912
4925
  if (idMaps[rowid]) {
4913
4926
  errLog('vxe.error.repeatKey', [currKeyField, rowid]);
4914
4927
  }
4915
4928
  if (!rowRest) {
4916
- 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 };
4929
+ 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 };
4917
4930
  }
4918
4931
  rowRest.treeLoaded = false;
4919
4932
  rowRest.expandLoaded = false;
4933
+ rowRest._seq = rowNum++;
4920
4934
  rowRest.row = row;
4921
4935
  rowRest.items = items;
4922
4936
  rowRest.parent = parentRow;
@@ -5026,7 +5040,7 @@ const tableMethods = {
5026
5040
  XEUtils.eachTree(rows, (childRow, index, items, path, parentItem, nodes) => {
5027
5041
  const rowid = getRowid($xeTable, childRow);
5028
5042
  const parentRow = parentItem || parentRest.row;
5029
- 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 };
5043
+ 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 };
5030
5044
  fullDataRowIdData[rowid] = rest;
5031
5045
  fullAllDataRowIdData[rowid] = rest;
5032
5046
  }, { children: childrenField });
@@ -8464,31 +8478,162 @@ const tableMethods = {
8464
8478
  const { treeConfig } = props;
8465
8479
  const { row } = params;
8466
8480
  const { isRowGroupStatus } = reactData;
8467
- const { afterFullData } = internalData;
8481
+ const { fullAllDataRowIdData, afterFullData, afterTreeFullData, afterGroupFullData } = internalData;
8468
8482
  const checkboxOpts = $xeTable.computeCheckboxOpts;
8469
- const { checkMethod, trigger } = checkboxOpts;
8483
+ const aggregateOpts = $xeTable.computeAggregateOpts;
8484
+ const treeOpts = $xeTable.computeTreeOpts;
8485
+ const { checkMethod, trigger, checkStrictly } = checkboxOpts;
8470
8486
  if (trigger === 'manual') {
8471
8487
  return;
8472
8488
  }
8473
8489
  evnt.stopPropagation();
8474
- if (checkboxOpts.isShiftKey && evnt.shiftKey && !(treeConfig || isRowGroupStatus)) {
8490
+ if (checkboxOpts.isShiftKey && evnt.shiftKey) {
8491
+ const { handleGetRowId } = createHandleGetRowId($xeTable);
8475
8492
  const checkboxRecords = $xeTable.getCheckboxRecords();
8476
- if (checkboxRecords.length) {
8477
- const firstRow = checkboxRecords[0];
8478
- const _rowIndex = $xeTable.getVTRowIndex(row);
8479
- const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
8480
- if (_rowIndex !== _firstRowIndex) {
8493
+ let currSeq = -1;
8494
+ let currRow = null;
8495
+ const currRowid = handleGetRowId(row);
8496
+ const rowRest = fullAllDataRowIdData[currRowid];
8497
+ if (rowRest) {
8498
+ currRow = rowRest.row;
8499
+ currSeq = rowRest._seq;
8500
+ }
8501
+ if (currRow && checkboxRecords.length) {
8502
+ let rangeRows = [];
8503
+ let firstSeq = -1;
8504
+ let firstRow = null;
8505
+ let firstRowid = '';
8506
+ let lastSeq = -1;
8507
+ let lastRow = null;
8508
+ let lastRowid = '';
8509
+ // 根据序号取出范围最小/最大的行
8510
+ const selectMaps = {};
8511
+ checkboxRecords.forEach(item => {
8512
+ const rowid = handleGetRowId(item);
8513
+ const rowRest = fullAllDataRowIdData[rowid];
8514
+ if (rowRest) {
8515
+ if (!firstRow || firstSeq > rowRest._seq) {
8516
+ firstRowid = rowRest.rowid;
8517
+ firstRow = rowRest.row;
8518
+ firstSeq = rowRest._seq;
8519
+ }
8520
+ if (!lastRow || lastSeq < rowRest._seq) {
8521
+ lastRowid = rowRest.rowid;
8522
+ lastRow = rowRest.row;
8523
+ lastSeq = rowRest._seq;
8524
+ }
8525
+ }
8526
+ selectMaps[rowid] = item;
8527
+ });
8528
+ // 如果已选只有一条并选择当前则跳过
8529
+ if (firstRow && lastRow && (checkboxRecords.length > 1 || currRowid !== firstRowid) && (Math.abs(firstSeq - lastSeq) > 1 || Math.abs(currSeq - firstSeq) > 1 || Math.abs(currSeq - lastSeq) > 1)) {
8530
+ // 树与分组
8531
+ if (treeConfig || isRowGroupStatus) {
8532
+ const { transform } = treeOpts;
8533
+ const childrenField = treeOpts.children || treeOpts.childrenField;
8534
+ const iteratorChildField = treeConfig ? (transform ? treeOpts.mapChildrenField : childrenField) : aggregateOpts.mapChildrenField;
8535
+ let isMatchFirst = false;
8536
+ let matchStartRowid = '';
8537
+ let matchEndRowid = '';
8538
+ const handleGetChildRowid = (rowid, isLast) => {
8539
+ const rowRest = fullAllDataRowIdData[rowid];
8540
+ if (rowRest) {
8541
+ const item = rowRest.row;
8542
+ const childList = item[iteratorChildField];
8543
+ if (childList && childList.length) {
8544
+ const targetRow = isLast ? XEUtils.last(childList) : XEUtils.first(childList);
8545
+ return handleGetChildRowid(handleGetRowId(targetRow), isLast);
8546
+ }
8547
+ }
8548
+ return rowid;
8549
+ };
8550
+ const handleGetSelectParentRowid = (rowid) => {
8551
+ const rowRest = fullAllDataRowIdData[rowid];
8552
+ if (rowRest) {
8553
+ const parentItem = rowRest.parent;
8554
+ if (parentItem) {
8555
+ const parentRowid = handleGetRowId(parentItem);
8556
+ if (selectMaps[parentRowid]) {
8557
+ return handleGetSelectParentRowid(parentRowid);
8558
+ }
8559
+ }
8560
+ }
8561
+ return rowid;
8562
+ };
8563
+ const handleGetRootRow = (row) => {
8564
+ const rowid = handleGetRowId(row);
8565
+ if (rowid) {
8566
+ const rest = fullAllDataRowIdData[rowid];
8567
+ if (rest) {
8568
+ return rest.parent ? handleGetRootRow(rest.parent) : rest;
8569
+ }
8570
+ }
8571
+ return null;
8572
+ };
8573
+ if (currSeq < firstSeq) {
8574
+ matchStartRowid = handleGetChildRowid(currRowid, 0);
8575
+ matchEndRowid = handleGetChildRowid(firstRowid, 1);
8576
+ }
8577
+ else {
8578
+ if (currSeq > lastSeq) {
8579
+ matchStartRowid = handleGetSelectParentRowid(lastRowid);
8580
+ }
8581
+ else {
8582
+ matchStartRowid = handleGetChildRowid(firstRowid, 0);
8583
+ }
8584
+ matchEndRowid = handleGetChildRowid(currRowid, 1);
8585
+ }
8586
+ const handleRangeRow = (item) => {
8587
+ const rowid = handleGetRowId(item);
8588
+ const childList = item[iteratorChildField];
8589
+ if (!isMatchFirst && rowid === matchStartRowid) {
8590
+ isMatchFirst = true;
8591
+ }
8592
+ // 如果是父子关联,则排除父节点
8593
+ if (isMatchFirst && (checkStrictly || !childList || !childList.length)) {
8594
+ rangeRows.push(item);
8595
+ }
8596
+ // break
8597
+ return rowid === matchEndRowid;
8598
+ };
8599
+ if (treeConfig) {
8600
+ const matchStartRowRest = fullAllDataRowIdData[matchStartRowid];
8601
+ const firstRootRowRest = matchStartRowRest ? handleGetRootRow(matchStartRowRest.row) : null;
8602
+ if (firstRootRowRest) {
8603
+ // 优化查找复杂度
8604
+ XEUtils.findTree(afterTreeFullData.slice(firstRootRowRest.treeIndex), handleRangeRow, { children: iteratorChildField });
8605
+ }
8606
+ else {
8607
+ XEUtils.findTree(afterTreeFullData, handleRangeRow, { children: iteratorChildField });
8608
+ }
8609
+ }
8610
+ else {
8611
+ XEUtils.findTree(afterGroupFullData, handleRangeRow, { children: iteratorChildField });
8612
+ }
8613
+ }
8614
+ else {
8615
+ const _currRowIndex = $xeTable.getVTRowIndex(currRow);
8616
+ const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
8617
+ const _lastRowIndex = $xeTable.getVTRowIndex(lastRow);
8618
+ if (_currRowIndex < _firstRowIndex) {
8619
+ rangeRows = afterFullData.slice(_currRowIndex, _firstRowIndex + 1);
8620
+ }
8621
+ else if (_currRowIndex > _lastRowIndex) {
8622
+ rangeRows = afterFullData.slice(_lastRowIndex, _currRowIndex + 1);
8623
+ }
8624
+ else {
8625
+ rangeRows = afterFullData.slice(_firstRowIndex, _currRowIndex + 1);
8626
+ }
8627
+ }
8481
8628
  $xeTable.setAllCheckboxRow(false);
8482
- const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
8483
8629
  $xeTable.$nextTick(() => {
8484
8630
  handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
8485
8631
  });
8486
8632
  $xeTable.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
8487
- return;
8488
8633
  }
8489
8634
  }
8490
8635
  }
8491
- if (isRowGroupStatus || !checkMethod || checkMethod({ $table: $xeTable, row })) {
8636
+ if (!checkMethod || checkMethod({ $table: $xeTable, row })) {
8492
8637
  $xeTable.handleBatchSelectRows([row], checked);
8493
8638
  $xeTable.checkSelectionStatus();
8494
8639
  $xeTable.dispatchEvent('checkbox-change', Object.assign({
@@ -1245,22 +1245,32 @@ export default {
1245
1245
  const { tableFullColumn } = internalData;
1246
1246
  const { updateColFlag } = reactData;
1247
1247
  const editDirtyOpts = $xeTable.computeEditDirtyOpts;
1248
- const { includeFields, excludeFields } = editDirtyOpts;
1248
+ const { extraFields, includeFields, excludeFields } = editDirtyOpts;
1249
1249
  const kpFields = [];
1250
1250
  if (updateColFlag) {
1251
1251
  if (includeFields && includeFields.length) {
1252
1252
  return includeFields;
1253
1253
  }
1254
- const exfMaps = {};
1254
+ const excludeFdMaps = {};
1255
1255
  if (excludeFields && excludeFields.length) {
1256
1256
  excludeFields.forEach(field => {
1257
- exfMaps[field] = 1;
1257
+ excludeFdMaps[field] = 1;
1258
+ });
1259
+ }
1260
+ const addFdMaps = {};
1261
+ if (extraFields && extraFields.length) {
1262
+ extraFields.forEach(field => {
1263
+ if (!addFdMaps[field]) {
1264
+ addFdMaps[field] = 1;
1265
+ kpFields.push(field);
1266
+ }
1258
1267
  });
1259
1268
  }
1260
1269
  for (let i = 0; i < tableFullColumn.length; i++) {
1261
1270
  const column = tableFullColumn[i];
1262
1271
  const { field, type, editRender, cellRender } = column;
1263
- if (field && !type && (editRender || cellRender) && !exfMaps[field]) {
1272
+ if (field && !type && (editRender || cellRender) && !addFdMaps[field] && !excludeFdMaps[field]) {
1273
+ addFdMaps[field] = 1;
1264
1274
  kpFields.push(field);
1265
1275
  }
1266
1276
  }
@@ -1727,9 +1737,6 @@ export default {
1727
1737
  if (props.editConfig && editOpts.activeMethod) {
1728
1738
  warnLog('vxe.error.delProp', ['table.edit-config.activeMethod', 'table.edit-config.beforeEditMethod']);
1729
1739
  }
1730
- if (props.treeConfig && checkboxOpts.isShiftKey) {
1731
- errLog('vxe.error.reqSupportProp', ['tree-config', 'checkbox-config.isShiftKey=false']);
1732
- }
1733
1740
  if (checkboxOpts.halfField) {
1734
1741
  warnLog('vxe.error.delProp', ['checkbox-config.halfField', 'checkbox-config.indeterminateField']);
1735
1742
  }