vxe-table 4.1.9 → 4.1.11

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.
package/README.md CHANGED
@@ -24,7 +24,7 @@
24
24
  * [x] v2.0 基于 vue2.6+,支持所有主流的浏览器,同时兼具功能与性能
25
25
  * [x] v3.0 基于 vue2.6+,支持现代浏览器并保留兼容 IE11,提升渲染性能
26
26
  * [x] v4.0 基于 vue3.0+,只支持现代浏览器,不支持 IE
27
- * [ ] 下一阶段:sticky 表格、css 变量、虚拟滚动与动态行高、数据可视化
27
+ * [ ] 下一阶段:sticky 渲染模式、css 变量主题、将虚拟滚动提升到极致、虚拟滚动动态行高、数据图表可视化
28
28
 
29
29
  ## QQ 交流群
30
30
 
package/README.zh-TW.md CHANGED
@@ -24,7 +24,6 @@
24
24
  * [x] v2.0 基於 vue2.6+,支持所有主流的瀏覽器,同時兼具功能與效能
25
25
  * [x] v3.0 基於 vue2.6+,支持現代瀏覽器並保留相容IE11,提升渲染效能
26
26
  * [x] v4.0 基于 vue3.0+,只支持現代瀏覽器,不支持IE
27
- * [ ] 下一阶段:sticky 表格、css 变量、虚拟滚动与动态行高、数据可视化
28
27
 
29
28
  ## QQ 交流群
30
29
 
@@ -25,7 +25,7 @@ var editHook = {
25
25
  setupTable: function ($xetable) {
26
26
  var props = $xetable.props, reactData = $xetable.reactData, internalData = $xetable.internalData;
27
27
  var refElem = $xetable.getRefMaps().refElem;
28
- var _a = $xetable.getComputeMaps(), computeMouseOpts = _a.computeMouseOpts, computeEditOpts = _a.computeEditOpts, computeCheckboxOpts = _a.computeCheckboxOpts, computeSYOpts = _a.computeSYOpts, computeTreeOpts = _a.computeTreeOpts;
28
+ var _a = $xetable.getComputeMaps(), computeMouseOpts = _a.computeMouseOpts, computeEditOpts = _a.computeEditOpts, computeCheckboxOpts = _a.computeCheckboxOpts, computeTreeOpts = _a.computeTreeOpts;
29
29
  var editMethods = {};
30
30
  var editPrivateMethods = {};
31
31
  var getEditColumnModel = function (row, column) {
@@ -67,13 +67,13 @@ var editHook = {
67
67
  }
68
68
  }
69
69
  function insertTreeRow(newRecords, isAppend) {
70
- var treeFullData = internalData.treeFullData, afterFullData = internalData.afterFullData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
70
+ var tableFullTreeData = internalData.tableFullTreeData, afterFullData = internalData.afterFullData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
71
71
  var treeOpts = computeTreeOpts.value;
72
72
  var funcName = isAppend ? 'push' : 'unshift';
73
73
  newRecords.forEach(function (item) {
74
74
  var parentRowId = item[treeOpts.parentField];
75
75
  var rowid = getRowid($xetable, item);
76
- var matchObj = parentRowId ? XEUtils.findTree(treeFullData, function (item) { return parentRowId === item[treeOpts.rowField]; }, treeOpts) : null;
76
+ var matchObj = parentRowId ? XEUtils.findTree(tableFullTreeData, function (item) { return parentRowId === item[treeOpts.rowField]; }, treeOpts) : null;
77
77
  if (matchObj) {
78
78
  var parentRow = matchObj.item;
79
79
  var parentRest = fullAllDataRowIdData[getRowid($xetable, parentRow)];
@@ -94,13 +94,12 @@ var editHook = {
94
94
  }
95
95
  }
96
96
  afterFullData[funcName](item);
97
- treeFullData[funcName](item);
98
- var rest = { row: item, rowid: rowid, seq: -1, index: -1, _index: -1, $index: -1, items: treeFullData, parent: null, level: 0 };
97
+ tableFullTreeData[funcName](item);
98
+ var rest = { row: item, rowid: rowid, seq: -1, index: -1, _index: -1, $index: -1, items: tableFullTreeData, parent: null, level: 0 };
99
99
  fullDataRowIdData[rowid] = rest;
100
100
  fullAllDataRowIdData[rowid] = rest;
101
101
  }
102
102
  });
103
- $xetable.updateVirtualTreeData();
104
103
  }
105
104
  editMethods = {
106
105
  /**
@@ -122,9 +121,8 @@ var editHook = {
122
121
  insertAt: function (records, row) {
123
122
  var _a;
124
123
  var treeConfig = props.treeConfig;
125
- var mergeList = reactData.mergeList, editStore = reactData.editStore, scrollYLoad = reactData.scrollYLoad;
126
- var treeFullData = internalData.treeFullData, afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
127
- var sYOpts = computeSYOpts.value;
124
+ var mergeList = reactData.mergeList, editStore = reactData.editStore;
125
+ var tableFullTreeData = internalData.tableFullTreeData, afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
128
126
  var treeOpts = computeTreeOpts.value;
129
127
  var transform = treeOpts.transform;
130
128
  if (!XEUtils.isArray(records)) {
@@ -169,7 +167,7 @@ var editHook = {
169
167
  else {
170
168
  // 如果为虚拟树
171
169
  if (treeConfig && transform) {
172
- var matchObj_1 = XEUtils.findTree(treeFullData, function (item) { return row[treeOpts.rowField] === item[treeOpts.rowField]; }, treeOpts);
170
+ var matchObj_1 = XEUtils.findTree(tableFullTreeData, function (item) { return row[treeOpts.rowField] === item[treeOpts.rowField]; }, treeOpts);
173
171
  if (matchObj_1) {
174
172
  var parentRow_1 = matchObj_1.parent;
175
173
  var parentChilds_1 = matchObj_1.items;
@@ -192,7 +190,6 @@ var editHook = {
192
190
  fullDataRowIdData[rowid] = rest;
193
191
  fullAllDataRowIdData[rowid] = rest;
194
192
  });
195
- $xetable.updateVirtualTreeData();
196
193
  }
197
194
  else {
198
195
  if (process.env.NODE_ENV === 'development') {
@@ -225,13 +222,11 @@ var editHook = {
225
222
  }
226
223
  }
227
224
  (_a = editStore.insertList).unshift.apply(_a, newRecords);
228
- reactData.scrollYLoad = !treeConfig && sYOpts.gt > -1 && sYOpts.gt < tableFullData.length;
229
225
  $xetable.updateFooter();
230
226
  $xetable.cacheRowMap();
231
- $xetable.handleTableData(transform);
232
- $xetable.updateAfterDataIndex();
227
+ $xetable.handleTableData(treeConfig && treeOpts.transform);
233
228
  $xetable.checkSelectionStatus();
234
- if (scrollYLoad) {
229
+ if (reactData.scrollYLoad) {
235
230
  $xetable.updateScrollYSpace();
236
231
  }
237
232
  return nextTick().then(function () {
@@ -252,10 +247,9 @@ var editHook = {
252
247
  */
253
248
  remove: function (rows) {
254
249
  var treeConfig = props.treeConfig;
255
- var mergeList = reactData.mergeList, editStore = reactData.editStore, selection = reactData.selection, scrollYLoad = reactData.scrollYLoad;
256
- var treeFullData = internalData.treeFullData, afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData;
250
+ var mergeList = reactData.mergeList, editStore = reactData.editStore, selection = reactData.selection;
251
+ var tableFullTreeData = internalData.tableFullTreeData, afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData;
257
252
  var checkboxOpts = computeCheckboxOpts.value;
258
- var sYOpts = computeSYOpts.value;
259
253
  var treeOpts = computeTreeOpts.value;
260
254
  var transform = treeOpts.transform;
261
255
  var actived = editStore.actived, removeList = editStore.removeList, insertList = editStore.insertList;
@@ -294,7 +288,7 @@ var editHook = {
294
288
  if (treeConfig && transform) {
295
289
  rows.forEach(function (row) {
296
290
  var rowid = getRowid($xetable, row);
297
- var matchObj = XEUtils.findTree(treeFullData, function (item) { return rowid === getRowid($xetable, item); }, treeOpts);
291
+ var matchObj = XEUtils.findTree(tableFullTreeData, function (item) { return rowid === getRowid($xetable, item); }, treeOpts);
298
292
  if (matchObj) {
299
293
  var rItems = matchObj.items.splice(matchObj.index, 1);
300
294
  rest.push(rItems[0]);
@@ -303,7 +297,6 @@ var editHook = {
303
297
  if (afIndex > -1) {
304
298
  afterFullData.splice(afIndex, 1);
305
299
  }
306
- $xetable.updateVirtualTreeData();
307
300
  });
308
301
  }
309
302
  else {
@@ -341,13 +334,11 @@ var editHook = {
341
334
  insertList.splice(iIndex, 1);
342
335
  }
343
336
  });
344
- reactData.scrollYLoad = !treeConfig && sYOpts.gt > -1 && sYOpts.gt < tableFullData.length;
345
337
  $xetable.updateFooter();
346
338
  $xetable.cacheRowMap();
347
- $xetable.handleTableData(transform);
348
- $xetable.updateAfterDataIndex();
339
+ $xetable.handleTableData(treeConfig && treeOpts.transform);
349
340
  $xetable.checkSelectionStatus();
350
- if (scrollYLoad) {
341
+ if (reactData.scrollYLoad) {
351
342
  $xetable.updateScrollYSpace();
352
343
  }
353
344
  return nextTick().then(function () {
@@ -402,7 +393,7 @@ var editHook = {
402
393
  getInsertRecords: function () {
403
394
  var treeConfig = props.treeConfig;
404
395
  var editStore = reactData.editStore;
405
- var treeFullData = internalData.treeFullData, tableFullData = internalData.tableFullData;
396
+ var tableFullTreeData = internalData.tableFullTreeData, tableFullData = internalData.tableFullData;
406
397
  var treeOpts = computeTreeOpts.value;
407
398
  var insertList = editStore.insertList;
408
399
  var insertRecords = [];
@@ -411,7 +402,7 @@ var editHook = {
411
402
  if (treeConfig && treeOpts.transform) {
412
403
  insertList.forEach(function (row) {
413
404
  var rowid = getRowid($xetable, row);
414
- var matchObj = XEUtils.findTree(treeFullData, function (item) { return rowid === getRowid($xetable, item); }, treeOpts);
405
+ var matchObj = XEUtils.findTree(tableFullTreeData, function (item) { return rowid === getRowid($xetable, item); }, treeOpts);
415
406
  if (matchObj) {
416
407
  insertRecords.push(row);
417
408
  }
@@ -91,7 +91,7 @@ var tableFilterHook = {
91
91
  // 判断面板不能大于表格高度
92
92
  var maxHeight = null;
93
93
  if (filterHeight >= bodyElem.clientHeight) {
94
- maxHeight = Math.max(40, bodyElem.clientHeight - (filterFootElem ? filterFootElem.offsetHeight : 0) - (filterHeadElem ? filterHeadElem.offsetHeight : 0));
94
+ maxHeight = Math.max(60, bodyElem.clientHeight - (filterFootElem ? filterFootElem.offsetHeight : 0) - (filterHeadElem ? filterHeadElem.offsetHeight : 0));
95
95
  }
96
96
  if (column.fixed === 'left') {
97
97
  left = targetElem_1.offsetLeft + targetElem_1.offsetParent.offsetLeft - centerWidth;
@@ -151,7 +151,7 @@ export default defineComponent({
151
151
  return getSelectLabel(modelValue);
152
152
  });
153
153
  var getOptkey = function () {
154
- return props.optionId || '_XID';
154
+ return props.optionId || '_X_ID';
155
155
  };
156
156
  var getOptid = function (option) {
157
157
  var optid = option[getOptkey()];
@@ -291,6 +291,7 @@ export default defineComponent({
291
291
  var treeOpts = computeTreeOpts.value;
292
292
  var editOpts = computeEditOpts.value;
293
293
  var rowOpts = computeRowOpts.value;
294
+ var transform = treeOpts.transform;
294
295
  var rows = [];
295
296
  tableData.forEach(function (row, $rowIndex) {
296
297
  var trOn = {};
@@ -315,9 +316,14 @@ export default defineComponent({
315
316
  }
316
317
  var rowid = getRowid($xetable, row);
317
318
  var rest = fullDataRowIdData[rowid];
318
- var rowLevel = rest ? rest.level : 0;
319
- var seq = rest ? rest.seq : -1;
319
+ var rowLevel = 0;
320
+ var seq = -1;
321
+ if (rest) {
322
+ rowLevel = rest.level;
323
+ seq = rest.seq;
324
+ }
320
325
  var params = { $table: $xetable, seq: seq, rowid: rowid, fixed: fixedType, type: renderType, level: rowLevel, row: row, rowIndex: rowIndex, $rowIndex: $rowIndex, _rowIndex: _rowIndex };
326
+ // 处理新增状态
321
327
  var isNewRow = false;
322
328
  if (editConfig) {
323
329
  isNewRow = $xetable.findRowIndexOf(editStore.insertList, row) > -1;
@@ -360,7 +366,7 @@ export default defineComponent({
360
366
  ]));
361
367
  }
362
368
  // 如果是树形表格
363
- if (treeConfig && !scrollYLoad && treeExpandeds.length) {
369
+ if (treeConfig && !scrollYLoad && !transform && treeExpandeds.length) {
364
370
  var rowChildren = row[treeOpts.children];
365
371
  if (rowChildren && rowChildren.length && $xetable.findRowIndexOf(treeExpandeds, row) > -1) {
366
372
  rows.push.apply(rows, renderRows(fixedType, rowChildren, tableColumn));
@@ -264,10 +264,12 @@ export default defineComponent({
264
264
  rowExpandedReserveRowMap: {},
265
265
  // 树结构数据,已展开保留的行
266
266
  treeExpandedReserveRowMap: {},
267
- // 完整数据、条件处理后
267
+ // 列表完整数据、条件处理后
268
268
  tableFullData: [],
269
- treeFullData: [],
270
269
  afterFullData: [],
270
+ // 树结构完整数据、条件处理后
271
+ tableFullTreeData: [],
272
+ afterTreeFullData: [],
271
273
  tableSynchData: [],
272
274
  tableSourceData: [],
273
275
  // 收集的列配置(带分组)
@@ -1089,25 +1091,27 @@ export default defineComponent({
1089
1091
  var updateAfterDataIndex = function () {
1090
1092
  var treeConfig = props.treeConfig;
1091
1093
  var afterFullData = internalData.afterFullData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
1092
- var treeFullData = internalData.treeFullData;
1094
+ var afterTreeFullData = internalData.afterTreeFullData;
1093
1095
  var treeOpts = computeTreeOpts.value;
1094
1096
  if (treeConfig) {
1095
- XEUtils.eachTree(treeFullData, function (row, index, items, path) {
1097
+ XEUtils.eachTree(afterTreeFullData, function (row, index, items, path) {
1096
1098
  var rowid = getRowid($xetable, row);
1097
1099
  var allrest = fullAllDataRowIdData[rowid];
1098
1100
  var fullrest = fullDataRowIdData[rowid];
1099
1101
  var seq = path.map(function (num, i) { return i % 2 === 0 ? (Number(num) + 1) : '.'; }).join('');
1100
1102
  if (allrest) {
1101
1103
  allrest.seq = seq;
1104
+ allrest._index = index;
1102
1105
  }
1103
1106
  if (fullrest) {
1104
1107
  fullrest.seq = seq;
1108
+ fullrest._index = index;
1105
1109
  }
1106
1110
  else {
1107
1111
  fullAllDataRowIdData[rowid] = { row: row, rowid: rowid, seq: seq, index: -1, $index: -1, _index: index, items: [], parent: null, level: 0 };
1108
1112
  fullDataRowIdData[rowid] = { row: row, rowid: rowid, seq: seq, index: -1, $index: -1, _index: index, items: [], parent: null, level: 0 };
1109
1113
  }
1110
- }, treeOpts);
1114
+ }, { children: treeOpts.mapChildren });
1111
1115
  }
1112
1116
  else {
1113
1117
  afterFullData.forEach(function (row, index) {
@@ -1117,6 +1121,7 @@ export default defineComponent({
1117
1121
  var seq = index + 1;
1118
1122
  if (allrest) {
1119
1123
  allrest.seq = seq;
1124
+ allrest._index = index;
1120
1125
  }
1121
1126
  if (fullrest) {
1122
1127
  fullrest.seq = seq;
@@ -1134,12 +1139,17 @@ export default defineComponent({
1134
1139
  * 如果存在筛选条件,继续处理
1135
1140
  */
1136
1141
  var updateAfterFullData = function () {
1137
- var tableFullColumn = internalData.tableFullColumn, tableFullData = internalData.tableFullData;
1142
+ var treeConfig = props.treeConfig;
1143
+ var tableFullColumn = internalData.tableFullColumn, tableFullData = internalData.tableFullData, tableFullTreeData = internalData.tableFullTreeData;
1138
1144
  var filterOpts = computeFilterOpts.value;
1139
1145
  var sortOpts = computeSortOpts.value;
1146
+ var treeOpts = computeTreeOpts.value;
1147
+ var transform = treeOpts.transform;
1140
1148
  var allRemoteFilter = filterOpts.remote, allFilterMethod = filterOpts.filterMethod;
1141
1149
  var allRemoteSort = sortOpts.remote, allSortMethod = sortOpts.sortMethod;
1142
- var tableData = tableFullData.slice(0);
1150
+ var tableData = [];
1151
+ var tableTree = [];
1152
+ // 处理列
1143
1153
  if (!allRemoteFilter || !allRemoteSort) {
1144
1154
  var filterColumns_1 = [];
1145
1155
  var orderColumns_1 = [];
@@ -1165,7 +1175,7 @@ export default defineComponent({
1165
1175
  // 处理筛选
1166
1176
  // 支持单列、多列、组合筛选
1167
1177
  if (!allRemoteFilter && filterColumns_1.length) {
1168
- tableData = tableData.filter(function (row) {
1178
+ var handleFilter = function (row) {
1169
1179
  return filterColumns_1.every(function (_a) {
1170
1180
  var column = _a.column, valueList = _a.valueList, itemList = _a.itemList;
1171
1181
  var filterMethod = column.filterMethod, filterRender = column.filterRender;
@@ -1187,26 +1197,63 @@ export default defineComponent({
1187
1197
  }
1188
1198
  return valueList.indexOf(XEUtils.get(row, column.property)) > -1;
1189
1199
  });
1190
- });
1200
+ };
1201
+ if (treeConfig && transform) {
1202
+ // 筛选虚拟树
1203
+ tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, __assign(__assign({}, treeOpts), { original: true }));
1204
+ tableData = tableTree;
1205
+ }
1206
+ else {
1207
+ tableData = treeConfig ? tableFullTreeData.filter(handleFilter) : tableFullData.filter(handleFilter);
1208
+ tableTree = tableData;
1209
+ }
1191
1210
  }
1192
- // 处理排序
1211
+ else {
1212
+ if (treeConfig && transform) {
1213
+ // 还原虚拟树
1214
+ tableTree = XEUtils.searchTree(tableFullTreeData, function () { return true; }, __assign(__assign({}, treeOpts), { original: true }));
1215
+ tableData = tableTree;
1216
+ }
1217
+ else {
1218
+ tableData = treeConfig ? tableFullTreeData.slice(0) : tableFullData.slice(0);
1219
+ tableTree = tableData;
1220
+ }
1221
+ }
1222
+ // 处理排序(不能用于树形结构)
1193
1223
  // 支持单列、多列、组合排序
1194
1224
  if (!allRemoteSort && orderColumns_1.length) {
1195
- if (allSortMethod) {
1196
- var sortRests = allSortMethod({ data: tableData, sortList: orderColumns_1, $table: $xetable });
1197
- tableData = XEUtils.isArray(sortRests) ? sortRests : tableData;
1225
+ if (treeConfig && transform) {
1226
+ // 虚拟树和列表一样,只能排序根级节点
1227
+ if (allSortMethod) {
1228
+ var sortRests = allSortMethod({ data: tableTree, sortList: orderColumns_1, $table: $xetable });
1229
+ tableTree = XEUtils.isArray(sortRests) ? sortRests : tableTree;
1230
+ }
1231
+ else {
1232
+ tableTree = XEUtils.orderBy(tableTree, orderColumns_1.map(function (_a) {
1233
+ var column = _a.column, order = _a.order;
1234
+ return [getOrderField(column), order];
1235
+ }));
1236
+ }
1237
+ tableData = tableTree;
1198
1238
  }
1199
1239
  else {
1200
- tableData = XEUtils.orderBy(tableData, orderColumns_1.map(function (_a) {
1201
- var column = _a.column, order = _a.order;
1202
- return [getOrderField(column), order];
1203
- }));
1240
+ if (allSortMethod) {
1241
+ var sortRests = allSortMethod({ data: tableData, sortList: orderColumns_1, $table: $xetable });
1242
+ tableData = XEUtils.isArray(sortRests) ? sortRests : tableData;
1243
+ }
1244
+ else {
1245
+ tableData = XEUtils.orderBy(tableData, orderColumns_1.map(function (_a) {
1246
+ var column = _a.column, order = _a.order;
1247
+ return [getOrderField(column), order];
1248
+ }));
1249
+ }
1250
+ tableTree = tableData;
1204
1251
  }
1205
1252
  }
1206
1253
  }
1207
1254
  internalData.afterFullData = tableData;
1255
+ internalData.afterTreeFullData = tableTree;
1208
1256
  updateAfterDataIndex();
1209
- return tableData;
1210
1257
  };
1211
1258
  var updateStyle = function () {
1212
1259
  var border = props.border, showFooter = props.showFooter, allColumnOverflow = props.showOverflow, allColumnHeaderOverflow = props.showHeaderOverflow, allColumnFooterOverflow = props.showFooterOverflow, mouseConfig = props.mouseConfig, spanMethod = props.spanMethod, footerSpanMethod = props.footerSpanMethod, keyboardConfig = props.keyboardConfig;
@@ -1292,7 +1339,7 @@ export default defineComponent({
1292
1339
  countChild_1++;
1293
1340
  }
1294
1341
  childWidth_1 += item.renderWidth;
1295
- });
1342
+ }, { children: 'children' });
1296
1343
  }
1297
1344
  thElem.style.width = hasEllipsis ? childWidth_1 - countChild_1 - (border ? 2 : 0) + "px" : '';
1298
1345
  }
@@ -1655,7 +1702,7 @@ export default defineComponent({
1655
1702
  var fullAllDataRowIdData = internalData.fullAllDataRowIdData;
1656
1703
  var treeOpts = computeTreeOpts.value;
1657
1704
  var checkboxOpts = computeCheckboxOpts.value;
1658
- var loadMethod = treeOpts.loadMethod;
1705
+ var transform = treeOpts.transform, loadMethod = treeOpts.loadMethod;
1659
1706
  var checkStrictly = checkboxOpts.checkStrictly;
1660
1707
  var rest = fullAllDataRowIdData[getRowid($xetable, row)];
1661
1708
  return new Promise(function (resolve) {
@@ -1676,9 +1723,18 @@ export default defineComponent({
1676
1723
  if (!checkStrictly && tableMethods.isCheckedByCheckboxRow(row)) {
1677
1724
  tableMethods.setCheckboxRow(childRows, true);
1678
1725
  }
1726
+ nextTick().then(function () {
1727
+ if (transform) {
1728
+ return tablePrivateMethods.handleTableData();
1729
+ }
1730
+ }).then(function () {
1731
+ return tableMethods.recalculate();
1732
+ }).then(function () { return resolve(); });
1679
1733
  });
1680
1734
  }
1681
- resolve(nextTick().then(function () { return tableMethods.recalculate(); }));
1735
+ else {
1736
+ nextTick().then(function () { return tableMethods.recalculate(); }).then(function () { return resolve(); });
1737
+ }
1682
1738
  });
1683
1739
  }
1684
1740
  else {
@@ -1806,13 +1862,24 @@ export default defineComponent({
1806
1862
  if (!treeOpts.children) {
1807
1863
  errLog('vxe.error.reqProp', ['tree-config.children']);
1808
1864
  }
1865
+ if (!treeOpts.mapChildren) {
1866
+ errLog('vxe.error.reqProp', ['tree-config.mapChildren']);
1867
+ }
1868
+ if (treeOpts.children === treeOpts.mapChildren) {
1869
+ errLog('vxe.error.errConflicts', ['tree-config.children', 'tree-config.mapChildren']);
1870
+ }
1809
1871
  fullData.forEach(function (row) {
1810
1872
  if (row[treeOpts.children] && row[treeOpts.children].length) {
1811
1873
  warnLog('vxe.error.errConflicts', ['tree-config.transform', "row." + treeOpts.children]);
1812
1874
  }
1813
1875
  });
1814
1876
  }
1815
- treeData = XEUtils.toArrayTree(fullData, { key: treeOpts.rowField, parentKey: treeOpts.parentField, children: treeOpts.children });
1877
+ treeData = XEUtils.toArrayTree(fullData, {
1878
+ key: treeOpts.rowField,
1879
+ parentKey: treeOpts.parentField,
1880
+ children: treeOpts.children,
1881
+ mapChildren: treeOpts.mapChildren
1882
+ });
1816
1883
  fullData = treeData.slice(0);
1817
1884
  }
1818
1885
  else {
@@ -1829,7 +1896,7 @@ export default defineComponent({
1829
1896
  reactData.scrollYLoad = sYLoad;
1830
1897
  // 全量数据
1831
1898
  internalData.tableFullData = fullData;
1832
- internalData.treeFullData = treeData;
1899
+ internalData.tableFullTreeData = treeData;
1833
1900
  // 缓存数据
1834
1901
  tablePrivateMethods.cacheRowMap(true);
1835
1902
  // 原始数据
@@ -2102,25 +2169,6 @@ export default defineComponent({
2102
2169
  reactData.scrollYLoad = scrollYLoad;
2103
2170
  return scrollYLoad;
2104
2171
  };
2105
- var updateVirtualTreeData = function () {
2106
- var oldScrollYLoad = reactData.scrollYLoad, treeExpandeds = reactData.treeExpandeds;
2107
- var treeFullData = internalData.treeFullData;
2108
- var treeOpts = computeTreeOpts.value;
2109
- var fullData = [];
2110
- var expandMaps = new Map();
2111
- XEUtils.eachTree(treeFullData, function (row, index, items, path, parent) {
2112
- if (!parent || (expandMaps.has(parent) && $xetable.findRowIndexOf(treeExpandeds, parent) > -1)) {
2113
- expandMaps.set(row, 1);
2114
- fullData.push(row);
2115
- }
2116
- }, treeOpts);
2117
- var scrollYLoad = updateScrollYStatus(fullData);
2118
- internalData.tableFullData = scrollYLoad ? fullData : treeFullData;
2119
- if (scrollYLoad || oldScrollYLoad !== scrollYLoad) {
2120
- return tablePrivateMethods.handleTableData(true).then(function () { return tableMethods.recalculate(); });
2121
- }
2122
- return nextTick();
2123
- };
2124
2172
  /**
2125
2173
  * 展开与收起树节点
2126
2174
  * @param rows
@@ -2179,7 +2227,7 @@ export default defineComponent({
2179
2227
  */
2180
2228
  var handleVirtualTreeExpand = function (rows, expanded) {
2181
2229
  return handleBaseTreeExpand(rows, expanded).then(function () {
2182
- return updateVirtualTreeData();
2230
+ return tablePrivateMethods.handleTableData();
2183
2231
  }).then(function () {
2184
2232
  return tableMethods.recalculate();
2185
2233
  });
@@ -2248,7 +2296,7 @@ export default defineComponent({
2248
2296
  return clearTableAllStatus($xetable);
2249
2297
  },
2250
2298
  /**
2251
- * 同步 data 数据
2299
+ * 同步 data 数据(即将废弃)
2252
2300
  * 如果用了该方法,那么组件将不再记录增删改的状态,只能自行实现对应逻辑
2253
2301
  * 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到
2254
2302
  */
@@ -2345,7 +2393,7 @@ export default defineComponent({
2345
2393
  var keepSource = props.keepSource;
2346
2394
  var tableSourceData = internalData.tableSourceData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
2347
2395
  var treeOpts = computeTreeOpts.value;
2348
- var children = treeOpts.children;
2396
+ var transform = treeOpts.transform, children = treeOpts.children, mapChildren = treeOpts.mapChildren;
2349
2397
  var parentRest = fullAllDataRowIdData[getRowid($xetable, row)];
2350
2398
  var parentLevel = parentRest ? parentRest.level : 0;
2351
2399
  return tableMethods.createData(childRecords).then(function (rows) {
@@ -2363,6 +2411,9 @@ export default defineComponent({
2363
2411
  fullAllDataRowIdData[rowid] = rest;
2364
2412
  }, treeOpts);
2365
2413
  row[children] = rows;
2414
+ if (transform) {
2415
+ row[mapChildren] = rows;
2416
+ }
2366
2417
  return rows;
2367
2418
  });
2368
2419
  },
@@ -3527,7 +3578,7 @@ export default defineComponent({
3527
3578
  return handleAsyncTreeExpandChilds(row);
3528
3579
  }).then(function () {
3529
3580
  if (transform) {
3530
- return updateVirtualTreeData();
3581
+ return tablePrivateMethods.handleTableData();
3531
3582
  }
3532
3583
  }).then(function () {
3533
3584
  return tableMethods.recalculate();
@@ -3604,15 +3655,15 @@ export default defineComponent({
3604
3655
  */
3605
3656
  clearTreeExpand: function () {
3606
3657
  var treeExpandeds = reactData.treeExpandeds;
3607
- var treeFullData = internalData.treeFullData;
3658
+ var tableFullTreeData = internalData.tableFullTreeData;
3608
3659
  var treeOpts = computeTreeOpts.value;
3609
3660
  var reserve = treeOpts.reserve;
3610
3661
  var isExists = treeExpandeds.length;
3611
3662
  reactData.treeExpandeds = [];
3612
3663
  if (reserve) {
3613
- XEUtils.eachTree(treeFullData, function (row) { return handleTreeExpandReserve(row, false); }, treeOpts);
3664
+ XEUtils.eachTree(tableFullTreeData, function (row) { return handleTreeExpandReserve(row, false); }, treeOpts);
3614
3665
  }
3615
- return updateVirtualTreeData().then(function () {
3666
+ return tablePrivateMethods.handleTableData().then(function () {
3616
3667
  if (isExists) {
3617
3668
  tableMethods.recalculate();
3618
3669
  }
@@ -4445,10 +4496,30 @@ export default defineComponent({
4445
4496
  return record;
4446
4497
  },
4447
4498
  handleTableData: function (force) {
4499
+ var treeConfig = props.treeConfig;
4448
4500
  var scrollYLoad = reactData.scrollYLoad;
4449
4501
  var scrollYStore = internalData.scrollYStore, fullDataRowIdData = internalData.fullDataRowIdData;
4450
- var fullData = force ? updateAfterFullData() : internalData.afterFullData;
4451
- var tableData = scrollYLoad ? fullData.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullData.slice(0);
4502
+ var treeExpandeds = reactData.treeExpandeds;
4503
+ var treeOpts = computeTreeOpts.value;
4504
+ var fullList = [];
4505
+ // 是否进行数据处理
4506
+ if (force) {
4507
+ updateAfterFullData();
4508
+ }
4509
+ // 如果为虚拟树,将树结构拍平
4510
+ if (treeConfig && treeOpts.transform) {
4511
+ var expandMaps_1 = new Map();
4512
+ XEUtils.eachTree(internalData.afterTreeFullData, function (row, index, items, path, parent) {
4513
+ if (!parent || (expandMaps_1.has(parent) && $xetable.findRowIndexOf(treeExpandeds, parent) > -1)) {
4514
+ expandMaps_1.set(row, 1);
4515
+ fullList.push(row);
4516
+ }
4517
+ }, { children: treeOpts.mapChildren });
4518
+ }
4519
+ else {
4520
+ fullList = internalData.afterFullData;
4521
+ }
4522
+ var tableData = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0);
4452
4523
  tableData.forEach(function (row, $index) {
4453
4524
  var rowid = getRowid($xetable, row);
4454
4525
  var rest = fullDataRowIdData[rowid];
@@ -4466,7 +4537,7 @@ export default defineComponent({
4466
4537
  cacheRowMap: function (isSource) {
4467
4538
  var treeConfig = props.treeConfig;
4468
4539
  var treeOpts = computeTreeOpts.value;
4469
- var fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData, tableFullData = internalData.tableFullData, treeFullData = internalData.treeFullData;
4540
+ var fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData, tableFullData = internalData.tableFullData, tableFullTreeData = internalData.tableFullTreeData;
4470
4541
  var rowkey = getRowkey($xetable);
4471
4542
  var isLazy = treeConfig && treeOpts.lazy;
4472
4543
  var handleCache = function (row, index, items, path, parent, nodes) {
@@ -4491,7 +4562,7 @@ export default defineComponent({
4491
4562
  }
4492
4563
  fullAllDataRowIdData = internalData.fullAllDataRowIdData = {};
4493
4564
  if (treeConfig) {
4494
- XEUtils.eachTree(treeFullData, handleCache, treeOpts);
4565
+ XEUtils.eachTree(tableFullTreeData, handleCache, treeOpts);
4495
4566
  }
4496
4567
  else {
4497
4568
  tableFullData.forEach(handleCache);
@@ -5232,7 +5303,6 @@ export default defineComponent({
5232
5303
  tablePrivateMethods.handleTableData();
5233
5304
  tablePrivateMethods.updateScrollYSpace();
5234
5305
  },
5235
- updateVirtualTreeData: updateVirtualTreeData,
5236
5306
  /**
5237
5307
  * 处理固定列的显示状态
5238
5308
  */
@@ -5376,6 +5446,7 @@ export default defineComponent({
5376
5446
  return false;
5377
5447
  }
5378
5448
  };
5449
+ // 检测对应模块是否安装
5379
5450
  if (process.env.NODE_ENV === 'development') {
5380
5451
  'openExport,openPrint,exportData,openImport,importData,saveFile,readFile,importByFile,print'.split(',').forEach(function (name) {
5381
5452
  $xetable[name] = function () {
@@ -34,7 +34,7 @@ export function getRowUniqueId() {
34
34
  export function getRowkey($xetable) {
35
35
  var props = $xetable.props;
36
36
  var rowId = props.rowId;
37
- return rowId || '_XID';
37
+ return rowId || '_X_ID';
38
38
  }
39
39
  // 行主键 value
40
40
  export function getRowid($xetable, row) {
@@ -48,7 +48,7 @@ var GlobalConfig = {
48
48
  // storage: false,
49
49
  // checkMethod () {}
50
50
  // },
51
- // rowId: '_XID', // 行数据的唯一主键字段名
51
+ // rowId: '_X_ID', // 行数据的唯一主键字段名
52
52
  sortConfig: {
53
53
  // remote: false,
54
54
  // trigger: 'default',
@@ -66,6 +66,7 @@ var GlobalConfig = {
66
66
  parentField: 'parentId',
67
67
  children: 'children',
68
68
  hasChild: 'hasChild',
69
+ mapChildren: '_X_CHILD',
69
70
  indent: 20,
70
71
  showIcon: true
71
72
  },