vxe-table 4.1.4 → 4.1.5-beta.0

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.
@@ -18,7 +18,7 @@ import { nextTick } from 'vue';
18
18
  import XEUtils from 'xe-utils';
19
19
  import { renderer } from '../../v-x-e-table';
20
20
  import { errLog, getLog, isEnableConf } from '../../tools/utils';
21
- import { getCellValue, setCellValue } from '../../table/src/util';
21
+ import { getCellValue, setCellValue, getRowid } from '../../table/src/util';
22
22
  import { browse, removeClass, addClass } from '../../tools/dom';
23
23
  var tableEditMethodKeys = ['insert', 'insertAt', 'remove', 'removeCheckboxRow', 'removeRadioRow', 'removeCurrentRow', 'getRecordset', 'getInsertRecords', 'getRemoveRecords', 'getUpdateRecords', 'getActiveRecord', 'getSelectedCell', 'clearActived', 'clearSelected', 'isActiveByRow', 'setActiveRow', 'setActiveCell', 'setSelectCell'];
24
24
  var editHook = {
@@ -87,22 +87,56 @@ var editHook = {
87
87
  var _a;
88
88
  var treeConfig = props.treeConfig;
89
89
  var mergeList = reactData.mergeList, editStore = reactData.editStore, scrollYLoad = reactData.scrollYLoad;
90
- var afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData;
90
+ var treeFullData = internalData.treeFullData, afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
91
91
  var sYOpts = computeSYOpts.value;
92
+ var treeOpts = computeTreeOpts.value;
92
93
  if (!XEUtils.isArray(records)) {
93
94
  records = [records];
94
95
  }
95
96
  var newRecords = records.map(function (record) { return $xetable.defineField(Object.assign({}, record)); });
96
97
  if (!row) {
97
- afterFullData.unshift.apply(afterFullData, newRecords);
98
- tableFullData.unshift.apply(tableFullData, newRecords);
99
- // 刷新单元格合并
100
- mergeList.forEach(function (mergeItem) {
101
- var mergeRowIndex = mergeItem.row;
102
- if (mergeRowIndex > 0) {
103
- mergeItem.row = mergeRowIndex + newRecords.length;
104
- }
105
- });
98
+ // 如果为虚拟树
99
+ if (treeConfig && treeOpts.transform) {
100
+ newRecords.forEach(function (item) {
101
+ var parentRowId = item[treeOpts.parentField];
102
+ var rowid = getRowid($xetable, item);
103
+ if (parentRowId) {
104
+ var matchObj = XEUtils.findTree(treeFullData, function (item) { return parentRowId === item[treeOpts.rowField]; }, treeOpts);
105
+ if (matchObj) {
106
+ var parentRow = matchObj.item;
107
+ var parentRest = fullAllDataRowIdData[getRowid($xetable, parentRow)];
108
+ var parentLevel = parentRest ? parentRest.level : 0;
109
+ var parentChilds = parentRow[treeOpts.children];
110
+ if (!XEUtils.isArray(parentChilds)) {
111
+ parentChilds = parentRow[treeOpts.children] = [];
112
+ }
113
+ parentChilds.push(item);
114
+ var rest = { row: item, rowid: rowid, index: -1, _index: -1, $index: -1, items: parentChilds, parent: parent, level: parentLevel + 1 };
115
+ fullDataRowIdData[rowid] = rest;
116
+ fullAllDataRowIdData[rowid] = rest;
117
+ }
118
+ else {
119
+ // 父节点不存在
120
+ }
121
+ }
122
+ else {
123
+ afterFullData.unshift(item);
124
+ treeFullData.unshift(item);
125
+ }
126
+ });
127
+ $xetable.updateVirtualTreeData();
128
+ }
129
+ else {
130
+ afterFullData.unshift.apply(afterFullData, newRecords);
131
+ tableFullData.unshift.apply(tableFullData, newRecords);
132
+ // 刷新单元格合并
133
+ mergeList.forEach(function (mergeItem) {
134
+ var mergeRowIndex = mergeItem.row;
135
+ if (mergeRowIndex > 0) {
136
+ mergeItem.row = mergeRowIndex + newRecords.length;
137
+ }
138
+ });
139
+ }
106
140
  }
107
141
  else {
108
142
  if (row === -1) {
@@ -167,9 +201,10 @@ var editHook = {
167
201
  remove: function (rows) {
168
202
  var treeConfig = props.treeConfig;
169
203
  var mergeList = reactData.mergeList, editStore = reactData.editStore, selection = reactData.selection, scrollYLoad = reactData.scrollYLoad;
170
- var afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData;
204
+ var treeFullData = internalData.treeFullData, afterFullData = internalData.afterFullData, tableFullData = internalData.tableFullData;
171
205
  var checkboxOpts = computeCheckboxOpts.value;
172
206
  var sYOpts = computeSYOpts.value;
207
+ var treeOpts = computeTreeOpts.value;
173
208
  var actived = editStore.actived, removeList = editStore.removeList, insertList = editStore.insertList;
174
209
  var property = checkboxOpts.checkField;
175
210
  var rest = [];
@@ -202,27 +237,45 @@ var editHook = {
202
237
  $xetable.clearMergeCells();
203
238
  }
204
239
  else {
205
- rows.forEach(function (row) {
206
- var tfIndex = $xetable.findRowIndexOf(tableFullData, row);
207
- if (tfIndex > -1) {
208
- var rItems = tableFullData.splice(tfIndex, 1);
209
- rest.push(rItems[0]);
210
- }
211
- var afIndex = $xetable.findRowIndexOf(afterFullData, row);
212
- if (afIndex > -1) {
213
- // 刷新单元格合并
214
- mergeList.forEach(function (mergeItem) {
215
- var mergeRowIndex = mergeItem.row, mergeRowspan = mergeItem.rowspan;
216
- if (mergeRowIndex > afIndex) {
217
- mergeItem.row = mergeRowIndex - 1;
218
- }
219
- else if (mergeRowIndex + mergeRowspan > afIndex) {
220
- mergeItem.rowspan = mergeRowspan - 1;
221
- }
222
- });
223
- afterFullData.splice(afIndex, 1);
224
- }
225
- });
240
+ // 如果为虚拟树
241
+ if (treeConfig && treeOpts.transform) {
242
+ rows.forEach(function (row) {
243
+ var rowid = getRowid($xetable, row);
244
+ var matchObj = XEUtils.findTree(treeFullData, function (item) { return rowid === getRowid($xetable, item); }, treeOpts);
245
+ if (matchObj) {
246
+ var rItems = matchObj.items.splice(matchObj.index, 1);
247
+ rest.push(rItems[0]);
248
+ }
249
+ var afIndex = $xetable.findRowIndexOf(afterFullData, row);
250
+ if (afIndex > -1) {
251
+ afterFullData.splice(afIndex, 1);
252
+ }
253
+ $xetable.updateVirtualTreeData();
254
+ });
255
+ }
256
+ else {
257
+ rows.forEach(function (row) {
258
+ var tfIndex = $xetable.findRowIndexOf(tableFullData, row);
259
+ if (tfIndex > -1) {
260
+ var rItems = tableFullData.splice(tfIndex, 1);
261
+ rest.push(rItems[0]);
262
+ }
263
+ var afIndex = $xetable.findRowIndexOf(afterFullData, row);
264
+ if (afIndex > -1) {
265
+ // 刷新单元格合并
266
+ mergeList.forEach(function (mergeItem) {
267
+ var mergeRowIndex = mergeItem.row, mergeRowspan = mergeItem.rowspan;
268
+ if (mergeRowIndex > afIndex) {
269
+ mergeItem.row = mergeRowIndex - 1;
270
+ }
271
+ else if (mergeRowIndex + mergeRowspan > afIndex) {
272
+ mergeItem.rowspan = mergeRowspan - 1;
273
+ }
274
+ });
275
+ afterFullData.splice(afIndex, 1);
276
+ }
277
+ });
278
+ }
226
279
  }
227
280
  // 如果当前行被激活编辑,则清除激活状态
228
281
  if (actived.row && $xetable.findRowIndexOf(rows, actived.row) > -1) {
@@ -294,16 +347,30 @@ var editHook = {
294
347
  * 获取新增的临时数据
295
348
  */
296
349
  getInsertRecords: function () {
350
+ var treeConfig = props.treeConfig;
297
351
  var editStore = reactData.editStore;
298
- var tableFullData = internalData.tableFullData;
352
+ var treeFullData = internalData.treeFullData, tableFullData = internalData.tableFullData;
353
+ var treeOpts = computeTreeOpts.value;
299
354
  var insertList = editStore.insertList;
300
355
  var insertRecords = [];
301
356
  if (insertList.length) {
302
- tableFullData.forEach(function (row) {
303
- if ($xetable.findRowIndexOf(insertList, row) > -1) {
304
- insertRecords.push(row);
305
- }
306
- });
357
+ // 如果为虚拟树
358
+ if (treeConfig && treeOpts.transform) {
359
+ insertList.forEach(function (row) {
360
+ var rowid = getRowid($xetable, row);
361
+ var matchObj = XEUtils.findTree(treeFullData, function (item) { return rowid === getRowid($xetable, item); }, treeOpts);
362
+ if (matchObj) {
363
+ insertRecords.push(row);
364
+ }
365
+ });
366
+ }
367
+ else {
368
+ insertList.forEach(function (row) {
369
+ if ($xetable.findRowIndexOf(tableFullData, row) > -1) {
370
+ insertRecords.push(row);
371
+ }
372
+ });
373
+ }
307
374
  }
308
375
  return insertRecords;
309
376
  },
@@ -290,6 +290,7 @@ export default defineComponent({
290
290
  var radioOpts = computeRadioOpts.value;
291
291
  var treeOpts = computeTreeOpts.value;
292
292
  var editOpts = computeEditOpts.value;
293
+ var rowOpts = computeRowOpts.value;
293
294
  var rows = [];
294
295
  tableData.forEach(function (row, $rowIndex) {
295
296
  var trOn = {};
@@ -302,7 +303,7 @@ export default defineComponent({
302
303
  // 确保任何情况下 rowIndex 都精准指向真实 data 索引
303
304
  rowIndex = $xetable.getRowIndex(row);
304
305
  // 事件绑定
305
- if (highlightHoverRow) {
306
+ if (rowOpts.isHover || highlightHoverRow) {
306
307
  trOn.onMouseenter = function (evnt) {
307
308
  if (isOperateMouse()) {
308
309
  return;
@@ -402,6 +403,7 @@ export default defineComponent({
402
403
  var highlightHoverRow = tableProps.highlightHoverRow;
403
404
  var scrollXLoad = tableReactData.scrollXLoad, scrollYLoad = tableReactData.scrollYLoad;
404
405
  var elemStore = tableInternalData.elemStore, lastScrollTop = tableInternalData.lastScrollTop, lastScrollLeft = tableInternalData.lastScrollLeft;
406
+ var rowOpts = computeRowOpts.value;
405
407
  var tableHeader = refTableHeader.value;
406
408
  var tableBody = refTableBody.value;
407
409
  var tableFooter = refTableFooter.value;
@@ -425,7 +427,7 @@ export default defineComponent({
425
427
  tableInternalData.lastScrollTop = scrollTop;
426
428
  tableInternalData.lastScrollLeft = scrollLeft;
427
429
  tableInternalData.lastScrollTime = Date.now();
428
- if (highlightHoverRow) {
430
+ if (rowOpts.isHover || highlightHoverRow) {
429
431
  $xetable.clearHoverRow();
430
432
  }
431
433
  if (leftElem && fixedType === 'left') {
@@ -519,6 +521,7 @@ export default defineComponent({
519
521
  var highlightHoverRow = tableProps.highlightHoverRow;
520
522
  var scrollYLoad = tableReactData.scrollYLoad;
521
523
  var lastScrollTop = tableInternalData.lastScrollTop, lastScrollLeft = tableInternalData.lastScrollLeft;
524
+ var rowOpts = computeRowOpts.value;
522
525
  var tableBody = refTableBody.value;
523
526
  var scrollBodyElem = refElem.value;
524
527
  var bodyElem = tableBody.$el;
@@ -539,7 +542,7 @@ export default defineComponent({
539
542
  tableInternalData.lastScrollTop = scrollTop;
540
543
  tableInternalData.lastScrollLeft = scrollLeft;
541
544
  tableInternalData.lastScrollTime = Date.now();
542
- if (highlightHoverRow) {
545
+ if (rowOpts.isHover || highlightHoverRow) {
543
546
  $xetable.clearHoverRow();
544
547
  }
545
548
  handleWheel(evnt, isTopWheel, deltaTop, isRollX, isRollY);
@@ -2291,8 +2291,8 @@ export default defineComponent({
2291
2291
  var tableSourceData = internalData.tableSourceData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
2292
2292
  var treeOpts = computeTreeOpts.value;
2293
2293
  var children = treeOpts.children;
2294
- var rest = fullAllDataRowIdData[getRowid($xetable, row)];
2295
- var parentLevel = rest ? rest.level : 0;
2294
+ var parentRest = fullAllDataRowIdData[getRowid($xetable, row)];
2295
+ var parentLevel = parentRest ? parentRest.level : 0;
2296
2296
  return tableMethods.createData(childRecords).then(function (rows) {
2297
2297
  if (keepSource) {
2298
2298
  var rowid_1 = getRowid($xetable, row);
@@ -3126,11 +3126,12 @@ export default defineComponent({
3126
3126
  * @param {Row} row 行对象
3127
3127
  */
3128
3128
  setCurrentRow: function (row) {
3129
+ var rowOpts = computeRowOpts.value;
3129
3130
  var el = refElem.value;
3130
3131
  tableMethods.clearCurrentRow();
3131
3132
  tableMethods.clearCurrentColumn();
3132
3133
  reactData.currentRow = row;
3133
- if (props.highlightCurrentRow) {
3134
+ if (rowOpts.isCurrent || props.highlightCurrentRow) {
3134
3135
  if (el) {
3135
3136
  XEUtils.arrayEach(el.querySelectorAll("[rowid=\"" + getRowid($xetable, row) + "\"]"), function (elem) { return addClass(elem, 'row--current'); });
3136
3137
  }
@@ -3176,7 +3177,8 @@ export default defineComponent({
3176
3177
  * 用于当前行,获取当前行的数据
3177
3178
  */
3178
3179
  getCurrentRecord: function () {
3179
- return props.highlightCurrentRow ? reactData.currentRow : null;
3180
+ var rowOpts = computeRowOpts.value;
3181
+ return rowOpts.isCurrent || props.highlightCurrentRow ? reactData.currentRow : null;
3180
3182
  },
3181
3183
  /**
3182
3184
  * 用于单选行,获取当已选中的数据
@@ -3211,7 +3213,8 @@ export default defineComponent({
3211
3213
  return null;
3212
3214
  },
3213
3215
  getCurrentColumn: function () {
3214
- return props.highlightCurrentColumn ? reactData.currentColumn : null;
3216
+ var columnOpts = computeColumnOpts.value;
3217
+ return columnOpts.isCurrent || props.highlightCurrentColumn ? reactData.currentColumn : null;
3215
3218
  },
3216
3219
  /**
3217
3220
  * 用于当前列,设置某列行为高亮状态
@@ -4014,6 +4017,7 @@ export default defineComponent({
4014
4017
  var editOpts = computeEditOpts.value;
4015
4018
  var treeOpts = computeTreeOpts.value;
4016
4019
  var menuList = computeMenuList.value;
4020
+ var rowOpts = computeRowOpts.value;
4017
4021
  var selected = editStore.selected, actived = editStore.actived;
4018
4022
  var keyCode = evnt.keyCode;
4019
4023
  var isEsc = hasEventKey(evnt, EVENT_KEYS.ESCAPE);
@@ -4094,7 +4098,7 @@ export default defineComponent({
4094
4098
  internalData._keyCtx = false;
4095
4099
  }, 1000);
4096
4100
  }
4097
- else if (isEnter && !isAltKey && keyboardConfig && keyboardOpts.isEnter && (selected.row || actived.row || (treeConfig && highlightCurrentRow && currentRow))) {
4101
+ else if (isEnter && !isAltKey && keyboardConfig && keyboardOpts.isEnter && (selected.row || actived.row || (treeConfig && (rowOpts.isCurrent || highlightCurrentRow) && currentRow))) {
4098
4102
  // 退出选中
4099
4103
  if (hasCtrlKey) {
4100
4104
  // 如果是激活编辑状态,则取消编辑
@@ -4128,7 +4132,7 @@ export default defineComponent({
4128
4132
  }
4129
4133
  }
4130
4134
  }
4131
- else if (treeConfig && highlightCurrentRow && currentRow) {
4135
+ else if (treeConfig && (rowOpts.isCurrent || highlightCurrentRow) && currentRow) {
4132
4136
  // 如果是树形表格当前行回车移动到子节点
4133
4137
  var childrens = currentRow[treeOpts.children];
4134
4138
  if (childrens && childrens.length) {
@@ -4153,7 +4157,7 @@ export default defineComponent({
4153
4157
  if (selected.row && selected.column) {
4154
4158
  $xetable.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
4155
4159
  }
4156
- else if ((isUpArrow || isDwArrow) && highlightCurrentRow) {
4160
+ else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
4157
4161
  // 当前行按键上下移动
4158
4162
  $xetable.moveCurrentRow(isUpArrow, isDwArrow, evnt);
4159
4163
  }
@@ -4168,7 +4172,7 @@ export default defineComponent({
4168
4172
  $xetable.moveTabSelected(actived.args, hasShiftKey, evnt);
4169
4173
  }
4170
4174
  }
4171
- else if (keyboardConfig && isEnableConf(editConfig) && (isDel || (treeConfig && highlightCurrentRow && currentRow ? isBack && keyboardOpts.isArrow : isBack))) {
4175
+ else if (keyboardConfig && isEnableConf(editConfig) && (isDel || (treeConfig && (rowOpts.isCurrent || highlightCurrentRow) && currentRow ? isBack && keyboardOpts.isArrow : isBack))) {
4172
4176
  if (!isEditStatus) {
4173
4177
  var delMethod = keyboardOpts.delMethod, backMethod = keyboardOpts.backMethod;
4174
4178
  // 如果是删除键
@@ -4204,7 +4208,7 @@ export default defineComponent({
4204
4208
  tableMethods.updateFooter();
4205
4209
  }
4206
4210
  }
4207
- else if (isBack && keyboardOpts.isArrow && treeConfig && highlightCurrentRow && currentRow) {
4211
+ else if (isBack && keyboardOpts.isArrow && treeConfig && (rowOpts.isCurrent || highlightCurrentRow) && currentRow) {
4208
4212
  // 如果树形表格回退键关闭当前行返回父节点
4209
4213
  var parentRow_1 = XEUtils.findTree(internalData.afterFullData, function (item) { return item === currentRow; }, treeOpts).parent;
4210
4214
  if (parentRow_1) {
@@ -4845,6 +4849,7 @@ export default defineComponent({
4845
4849
  triggerHeaderCellClickEvent: function (evnt, params) {
4846
4850
  var _lastResizeTime = internalData._lastResizeTime;
4847
4851
  var sortOpts = computeSortOpts.value;
4852
+ var columnOpts = computeColumnOpts.value;
4848
4853
  var column = params.column;
4849
4854
  var cell = evnt.currentTarget;
4850
4855
  var triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
@@ -4854,7 +4859,7 @@ export default defineComponent({
4854
4859
  tablePrivateMethods.triggerSortEvent(evnt, column, getNextSortOrder(column));
4855
4860
  }
4856
4861
  tableMethods.dispatchEvent('header-cell-click', Object.assign({ triggerResizable: triggerResizable, triggerSort: triggerSort, triggerFilter: triggerFilter, cell: cell }, params), evnt);
4857
- if (props.highlightCurrentColumn) {
4862
+ if (columnOpts.isCurrent || props.highlightCurrentColumn) {
4858
4863
  tableMethods.setCurrentColumn(column);
4859
4864
  }
4860
4865
  },
@@ -4874,6 +4879,7 @@ export default defineComponent({
4874
4879
  var treeOpts = computeTreeOpts.value;
4875
4880
  var radioOpts = computeRadioOpts.value;
4876
4881
  var checkboxOpts = computeCheckboxOpts.value;
4882
+ var rowOpts = computeRowOpts.value;
4877
4883
  var actived = editStore.actived;
4878
4884
  var row = params.row, column = params.column;
4879
4885
  var type = column.type, treeNode = column.treeNode;
@@ -4900,7 +4906,7 @@ export default defineComponent({
4900
4906
  if (!triggerTreeNode) {
4901
4907
  if (!triggerExpandNode) {
4902
4908
  // 如果是高亮行
4903
- if (highlightCurrentRow) {
4909
+ if (rowOpts.isCurrent || highlightCurrentRow) {
4904
4910
  if (!triggerCheckbox && !triggerRadio) {
4905
4911
  tablePrivateMethods.triggerCurrentRowEvent(evnt, params);
4906
4912
  }
@@ -5214,6 +5220,7 @@ export default defineComponent({
5214
5220
  tablePrivateMethods.handleTableData();
5215
5221
  tablePrivateMethods.updateScrollYSpace();
5216
5222
  },
5223
+ updateVirtualTreeData: updateVirtualTreeData,
5217
5224
  /**
5218
5225
  * 处理固定列的显示状态
5219
5226
  */
@@ -5681,6 +5688,8 @@ export default defineComponent({
5681
5688
  var leftList = columnStore.leftList, rightList = columnStore.rightList;
5682
5689
  var tooltipOpts = computeTooltipOpts.value;
5683
5690
  var treeOpts = computeTreeOpts.value;
5691
+ var rowOpts = computeRowOpts.value;
5692
+ var columnOpts = computeColumnOpts.value;
5684
5693
  var vSize = computeSize.value;
5685
5694
  var tableBorder = computeTableBorder.value;
5686
5695
  var mouseOpts = computeMouseOpts.value;
@@ -5695,8 +5704,8 @@ export default defineComponent({
5695
5704
  _a['cell--highlight'] = highlightCell,
5696
5705
  _a['cell--selected'] = mouseConfig && mouseOpts.selected,
5697
5706
  _a['cell--area'] = mouseConfig && mouseOpts.area,
5698
- _a['row--highlight'] = highlightHoverRow,
5699
- _a['column--highlight'] = highlightHoverColumn,
5707
+ _a['row--highlight'] = rowOpts.isHover || highlightHoverRow,
5708
+ _a['column--highlight'] = columnOpts.isHover || highlightHoverColumn,
5700
5709
  _a['is--header'] = showHeader,
5701
5710
  _a['is--footer'] = showFooter,
5702
5711
  _a['is--group'] = isGroup,
@@ -138,9 +138,13 @@ var editHook = {
138
138
  var mergeList = reactData.mergeList,
139
139
  editStore = reactData.editStore,
140
140
  scrollYLoad = reactData.scrollYLoad;
141
- var afterFullData = internalData.afterFullData,
142
- tableFullData = internalData.tableFullData;
141
+ var treeFullData = internalData.treeFullData,
142
+ afterFullData = internalData.afterFullData,
143
+ tableFullData = internalData.tableFullData,
144
+ fullDataRowIdData = internalData.fullDataRowIdData,
145
+ fullAllDataRowIdData = internalData.fullAllDataRowIdData;
143
146
  var sYOpts = computeSYOpts.value;
147
+ var treeOpts = computeTreeOpts.value;
144
148
 
145
149
  if (!_xeUtils.default.isArray(records)) {
146
150
  records = [records];
@@ -151,16 +155,60 @@ var editHook = {
151
155
  });
152
156
 
153
157
  if (!row) {
154
- afterFullData.unshift.apply(afterFullData, newRecords);
155
- tableFullData.unshift.apply(tableFullData, newRecords); // 刷新单元格合并
158
+ // 如果为虚拟树
159
+ if (treeConfig && treeOpts.transform) {
160
+ newRecords.forEach(function (item) {
161
+ var parentRowId = item[treeOpts.parentField];
162
+ var rowid = (0, _util.getRowid)($xetable, item);
163
+
164
+ if (parentRowId) {
165
+ var matchObj = _xeUtils.default.findTree(treeFullData, function (item) {
166
+ return parentRowId === item[treeOpts.rowField];
167
+ }, treeOpts);
168
+
169
+ if (matchObj) {
170
+ var parentRow = matchObj.item;
171
+ var parentRest = fullAllDataRowIdData[(0, _util.getRowid)($xetable, parentRow)];
172
+ var parentLevel = parentRest ? parentRest.level : 0;
173
+ var parentChilds = parentRow[treeOpts.children];
174
+
175
+ if (!_xeUtils.default.isArray(parentChilds)) {
176
+ parentChilds = parentRow[treeOpts.children] = [];
177
+ }
178
+
179
+ parentChilds.push(item);
180
+ var rest = {
181
+ row: item,
182
+ rowid: rowid,
183
+ index: -1,
184
+ _index: -1,
185
+ $index: -1,
186
+ items: parentChilds,
187
+ parent: parent,
188
+ level: parentLevel + 1
189
+ };
190
+ fullDataRowIdData[rowid] = rest;
191
+ fullAllDataRowIdData[rowid] = rest;
192
+ } else {// 父节点不存在
193
+ }
194
+ } else {
195
+ afterFullData.unshift(item);
196
+ treeFullData.unshift(item);
197
+ }
198
+ });
199
+ $xetable.updateVirtualTreeData();
200
+ } else {
201
+ afterFullData.unshift.apply(afterFullData, newRecords);
202
+ tableFullData.unshift.apply(tableFullData, newRecords); // 刷新单元格合并
156
203
 
157
- mergeList.forEach(function (mergeItem) {
158
- var mergeRowIndex = mergeItem.row;
204
+ mergeList.forEach(function (mergeItem) {
205
+ var mergeRowIndex = mergeItem.row;
159
206
 
160
- if (mergeRowIndex > 0) {
161
- mergeItem.row = mergeRowIndex + newRecords.length;
162
- }
163
- });
207
+ if (mergeRowIndex > 0) {
208
+ mergeItem.row = mergeRowIndex + newRecords.length;
209
+ }
210
+ });
211
+ }
164
212
  } else {
165
213
  if (row === -1) {
166
214
  afterFullData.push.apply(afterFullData, newRecords);
@@ -237,10 +285,12 @@ var editHook = {
237
285
  editStore = reactData.editStore,
238
286
  selection = reactData.selection,
239
287
  scrollYLoad = reactData.scrollYLoad;
240
- var afterFullData = internalData.afterFullData,
288
+ var treeFullData = internalData.treeFullData,
289
+ afterFullData = internalData.afterFullData,
241
290
  tableFullData = internalData.tableFullData;
242
291
  var checkboxOpts = computeCheckboxOpts.value;
243
292
  var sYOpts = computeSYOpts.value;
293
+ var treeOpts = computeTreeOpts.value;
244
294
  var actived = editStore.actived,
245
295
  removeList = editStore.removeList,
246
296
  insertList = editStore.insertList;
@@ -277,31 +327,55 @@ var editHook = {
277
327
  internalData.afterFullData = [];
278
328
  $xetable.clearMergeCells();
279
329
  } else {
280
- rows.forEach(function (row) {
281
- var tfIndex = $xetable.findRowIndexOf(tableFullData, row);
330
+ // 如果为虚拟树
331
+ if (treeConfig && treeOpts.transform) {
332
+ rows.forEach(function (row) {
333
+ var rowid = (0, _util.getRowid)($xetable, row);
334
+
335
+ var matchObj = _xeUtils.default.findTree(treeFullData, function (item) {
336
+ return rowid === (0, _util.getRowid)($xetable, item);
337
+ }, treeOpts);
338
+
339
+ if (matchObj) {
340
+ var rItems = matchObj.items.splice(matchObj.index, 1);
341
+ rest.push(rItems[0]);
342
+ }
282
343
 
283
- if (tfIndex > -1) {
284
- var rItems = tableFullData.splice(tfIndex, 1);
285
- rest.push(rItems[0]);
286
- }
344
+ var afIndex = $xetable.findRowIndexOf(afterFullData, row);
287
345
 
288
- var afIndex = $xetable.findRowIndexOf(afterFullData, row);
346
+ if (afIndex > -1) {
347
+ afterFullData.splice(afIndex, 1);
348
+ }
289
349
 
290
- if (afIndex > -1) {
291
- // 刷新单元格合并
292
- mergeList.forEach(function (mergeItem) {
293
- var mergeRowIndex = mergeItem.row,
294
- mergeRowspan = mergeItem.rowspan;
350
+ $xetable.updateVirtualTreeData();
351
+ });
352
+ } else {
353
+ rows.forEach(function (row) {
354
+ var tfIndex = $xetable.findRowIndexOf(tableFullData, row);
295
355
 
296
- if (mergeRowIndex > afIndex) {
297
- mergeItem.row = mergeRowIndex - 1;
298
- } else if (mergeRowIndex + mergeRowspan > afIndex) {
299
- mergeItem.rowspan = mergeRowspan - 1;
300
- }
301
- });
302
- afterFullData.splice(afIndex, 1);
303
- }
304
- });
356
+ if (tfIndex > -1) {
357
+ var rItems = tableFullData.splice(tfIndex, 1);
358
+ rest.push(rItems[0]);
359
+ }
360
+
361
+ var afIndex = $xetable.findRowIndexOf(afterFullData, row);
362
+
363
+ if (afIndex > -1) {
364
+ // 刷新单元格合并
365
+ mergeList.forEach(function (mergeItem) {
366
+ var mergeRowIndex = mergeItem.row,
367
+ mergeRowspan = mergeItem.rowspan;
368
+
369
+ if (mergeRowIndex > afIndex) {
370
+ mergeItem.row = mergeRowIndex - 1;
371
+ } else if (mergeRowIndex + mergeRowspan > afIndex) {
372
+ mergeItem.rowspan = mergeRowspan - 1;
373
+ }
374
+ });
375
+ afterFullData.splice(afIndex, 1);
376
+ }
377
+ });
378
+ }
305
379
  } // 如果当前行被激活编辑,则清除激活状态
306
380
 
307
381
 
@@ -386,17 +460,35 @@ var editHook = {
386
460
  * 获取新增的临时数据
387
461
  */
388
462
  getInsertRecords: function getInsertRecords() {
463
+ var treeConfig = props.treeConfig;
389
464
  var editStore = reactData.editStore;
390
- var tableFullData = internalData.tableFullData;
465
+ var treeFullData = internalData.treeFullData,
466
+ tableFullData = internalData.tableFullData;
467
+ var treeOpts = computeTreeOpts.value;
391
468
  var insertList = editStore.insertList;
392
469
  var insertRecords = [];
393
470
 
394
471
  if (insertList.length) {
395
- tableFullData.forEach(function (row) {
396
- if ($xetable.findRowIndexOf(insertList, row) > -1) {
397
- insertRecords.push(row);
398
- }
399
- });
472
+ // 如果为虚拟树
473
+ if (treeConfig && treeOpts.transform) {
474
+ insertList.forEach(function (row) {
475
+ var rowid = (0, _util.getRowid)($xetable, row);
476
+
477
+ var matchObj = _xeUtils.default.findTree(treeFullData, function (item) {
478
+ return rowid === (0, _util.getRowid)($xetable, item);
479
+ }, treeOpts);
480
+
481
+ if (matchObj) {
482
+ insertRecords.push(row);
483
+ }
484
+ });
485
+ } else {
486
+ insertList.forEach(function (row) {
487
+ if ($xetable.findRowIndexOf(tableFullData, row) > -1) {
488
+ insertRecords.push(row);
489
+ }
490
+ });
491
+ }
400
492
  }
401
493
 
402
494
  return insertRecords;