vxe-table 4.1.3 → 4.1.6

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 (40) hide show
  1. package/README.en.md +3 -3
  2. package/README.md +3 -3
  3. package/README.zh-TW.md +2 -3
  4. package/es/edit/src/hook.js +189 -69
  5. package/es/form/src/form.js +2 -2
  6. package/es/input/src/input.js +8 -2
  7. package/es/table/src/body.js +6 -3
  8. package/es/table/src/table.js +44 -34
  9. package/es/v-x-e-table/src/conf.js +1 -1
  10. package/es/validator/src/hook.js +3 -3
  11. package/lib/edit/src/hook.js +243 -70
  12. package/lib/edit/src/hook.min.js +1 -1
  13. package/lib/form/src/form.js +2 -2
  14. package/lib/form/src/form.min.js +1 -1
  15. package/lib/index.umd.js +772 -209
  16. package/lib/index.umd.min.js +2 -1
  17. package/lib/input/src/input.js +10 -2
  18. package/lib/input/src/input.min.js +1 -1
  19. package/lib/table/src/body.js +6 -3
  20. package/lib/table/src/body.min.js +1 -1
  21. package/lib/table/src/table.js +46 -36
  22. package/lib/table/src/table.min.js +1 -1
  23. package/lib/v-x-e-table/src/conf.js +1 -1
  24. package/lib/v-x-e-table/src/conf.min.js +1 -1
  25. package/lib/validator/src/hook.js +3 -3
  26. package/lib/validator/src/hook.min.js +1 -1
  27. package/package.json +4 -27
  28. package/packages/edit/src/hook.ts +183 -69
  29. package/packages/form/src/form.ts +2 -2
  30. package/packages/input/src/input.ts +9 -2
  31. package/packages/table/src/body.ts +6 -3
  32. package/packages/table/src/table.ts +43 -32
  33. package/packages/v-x-e-table/src/conf.ts +1 -1
  34. package/packages/v-x-e-table/src/renderer.ts +1 -1
  35. package/packages/validator/src/hook.ts +3 -3
  36. package/types/edit.d.ts +6 -3
  37. package/types/index.d.ts +1 -1
  38. package/types/plugins/pro.d.ts +6 -6
  39. package/types/table.d.ts +5 -0
  40. package/types/v-x-e-table/renderer.d.ts +4 -2
@@ -2072,8 +2072,10 @@ export default defineComponent({
2072
2072
  var treeFullData = internalData.treeFullData;
2073
2073
  var treeOpts = computeTreeOpts.value;
2074
2074
  var fullData = [];
2075
+ var expandMaps = new Map();
2075
2076
  XEUtils.eachTree(treeFullData, function (row, index, items, path, parent) {
2076
- if (!parent || $xetable.findRowIndexOf(treeExpandeds, parent) > -1) {
2077
+ if (!parent || (expandMaps.has(parent) && $xetable.findRowIndexOf(treeExpandeds, parent) > -1)) {
2078
+ expandMaps.set(row, 1);
2077
2079
  fullData.push(row);
2078
2080
  }
2079
2081
  }, treeOpts);
@@ -2258,18 +2260,13 @@ export default defineComponent({
2258
2260
  var oRow = tableSourceData[rowIndex];
2259
2261
  if (oRow && row) {
2260
2262
  if (field) {
2261
- XEUtils.set(oRow, field, XEUtils.get(record || row, field));
2263
+ var newValue = XEUtils.get(record || row, field);
2264
+ XEUtils.set(row, field, newValue);
2265
+ XEUtils.set(oRow, field, newValue);
2262
2266
  }
2263
2267
  else {
2264
- if (record) {
2265
- tableSourceData[rowIndex] = record;
2266
- XEUtils.clear(row, undefined);
2267
- Object.assign(row, tablePrivateMethods.defineField(Object.assign({}, record)));
2268
- tablePrivateMethods.cacheRowMap(true);
2269
- }
2270
- else {
2271
- XEUtils.destructuring(oRow, XEUtils.clone(row, true));
2272
- }
2268
+ var newRecord = XEUtils.clone(__assign({}, record), true);
2269
+ XEUtils.destructuring(oRow, Object.assign(row, newRecord));
2273
2270
  }
2274
2271
  }
2275
2272
  reactData.tableData = tableData.slice(0);
@@ -2289,8 +2286,8 @@ export default defineComponent({
2289
2286
  var tableSourceData = internalData.tableSourceData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
2290
2287
  var treeOpts = computeTreeOpts.value;
2291
2288
  var children = treeOpts.children;
2292
- var rest = fullAllDataRowIdData[getRowid($xetable, row)];
2293
- var parentLevel = rest ? rest.level : 0;
2289
+ var parentRest = fullAllDataRowIdData[getRowid($xetable, row)];
2290
+ var parentLevel = parentRest ? parentRest.level : 0;
2294
2291
  return tableMethods.createData(childRecords).then(function (rows) {
2295
2292
  if (keepSource) {
2296
2293
  var rowid_1 = getRowid($xetable, row);
@@ -3057,6 +3054,17 @@ export default defineComponent({
3057
3054
  var treeOpts = computeTreeOpts.value;
3058
3055
  var reserveSelection = [];
3059
3056
  if (checkboxOpts.reserve) {
3057
+ var afterFullIdMaps_1 = {};
3058
+ if (treeConfig) {
3059
+ XEUtils.eachTree(afterFullData, function (row) {
3060
+ afterFullIdMaps_1[getRowid($xetable, row)] = 1;
3061
+ }, treeOpts);
3062
+ }
3063
+ else {
3064
+ afterFullData.forEach(function (row) {
3065
+ afterFullIdMaps_1[getRowid($xetable, row)] = 1;
3066
+ });
3067
+ }
3060
3068
  XEUtils.each(checkboxReserveRowMap, function (oldRow, oldRowid) {
3061
3069
  if (oldRow) {
3062
3070
  if (isFull) {
@@ -3065,15 +3073,8 @@ export default defineComponent({
3065
3073
  }
3066
3074
  }
3067
3075
  else {
3068
- if (treeConfig) {
3069
- if (!XEUtils.findTree(afterFullData, function (row) { return getRowid($xetable, row) === oldRowid; }, treeOpts)) {
3070
- reserveSelection.push(oldRow);
3071
- }
3072
- }
3073
- else {
3074
- if (!afterFullData.some(function (row) { return getRowid($xetable, row) === oldRowid; })) {
3075
- reserveSelection.push(oldRow);
3076
- }
3076
+ if (!afterFullIdMaps_1[oldRowid]) {
3077
+ reserveSelection.push(oldRow);
3077
3078
  }
3078
3079
  }
3079
3080
  }
@@ -3124,11 +3125,12 @@ export default defineComponent({
3124
3125
  * @param {Row} row 行对象
3125
3126
  */
3126
3127
  setCurrentRow: function (row) {
3128
+ var rowOpts = computeRowOpts.value;
3127
3129
  var el = refElem.value;
3128
3130
  tableMethods.clearCurrentRow();
3129
3131
  tableMethods.clearCurrentColumn();
3130
3132
  reactData.currentRow = row;
3131
- if (props.highlightCurrentRow) {
3133
+ if (rowOpts.isCurrent || props.highlightCurrentRow) {
3132
3134
  if (el) {
3133
3135
  XEUtils.arrayEach(el.querySelectorAll("[rowid=\"" + getRowid($xetable, row) + "\"]"), function (elem) { return addClass(elem, 'row--current'); });
3134
3136
  }
@@ -3174,7 +3176,8 @@ export default defineComponent({
3174
3176
  * 用于当前行,获取当前行的数据
3175
3177
  */
3176
3178
  getCurrentRecord: function () {
3177
- return props.highlightCurrentRow ? reactData.currentRow : null;
3179
+ var rowOpts = computeRowOpts.value;
3180
+ return rowOpts.isCurrent || props.highlightCurrentRow ? reactData.currentRow : null;
3178
3181
  },
3179
3182
  /**
3180
3183
  * 用于单选行,获取当已选中的数据
@@ -3209,7 +3212,8 @@ export default defineComponent({
3209
3212
  return null;
3210
3213
  },
3211
3214
  getCurrentColumn: function () {
3212
- return props.highlightCurrentColumn ? reactData.currentColumn : null;
3215
+ var columnOpts = computeColumnOpts.value;
3216
+ return columnOpts.isCurrent || props.highlightCurrentColumn ? reactData.currentColumn : null;
3213
3217
  },
3214
3218
  /**
3215
3219
  * 用于当前列,设置某列行为高亮状态
@@ -4012,6 +4016,7 @@ export default defineComponent({
4012
4016
  var editOpts = computeEditOpts.value;
4013
4017
  var treeOpts = computeTreeOpts.value;
4014
4018
  var menuList = computeMenuList.value;
4019
+ var rowOpts = computeRowOpts.value;
4015
4020
  var selected = editStore.selected, actived = editStore.actived;
4016
4021
  var keyCode = evnt.keyCode;
4017
4022
  var isEsc = hasEventKey(evnt, EVENT_KEYS.ESCAPE);
@@ -4092,7 +4097,7 @@ export default defineComponent({
4092
4097
  internalData._keyCtx = false;
4093
4098
  }, 1000);
4094
4099
  }
4095
- else if (isEnter && !isAltKey && keyboardConfig && keyboardOpts.isEnter && (selected.row || actived.row || (treeConfig && highlightCurrentRow && currentRow))) {
4100
+ else if (isEnter && !isAltKey && keyboardConfig && keyboardOpts.isEnter && (selected.row || actived.row || (treeConfig && (rowOpts.isCurrent || highlightCurrentRow) && currentRow))) {
4096
4101
  // 退出选中
4097
4102
  if (hasCtrlKey) {
4098
4103
  // 如果是激活编辑状态,则取消编辑
@@ -4126,7 +4131,7 @@ export default defineComponent({
4126
4131
  }
4127
4132
  }
4128
4133
  }
4129
- else if (treeConfig && highlightCurrentRow && currentRow) {
4134
+ else if (treeConfig && (rowOpts.isCurrent || highlightCurrentRow) && currentRow) {
4130
4135
  // 如果是树形表格当前行回车移动到子节点
4131
4136
  var childrens = currentRow[treeOpts.children];
4132
4137
  if (childrens && childrens.length) {
@@ -4151,7 +4156,7 @@ export default defineComponent({
4151
4156
  if (selected.row && selected.column) {
4152
4157
  $xetable.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
4153
4158
  }
4154
- else if ((isUpArrow || isDwArrow) && highlightCurrentRow) {
4159
+ else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
4155
4160
  // 当前行按键上下移动
4156
4161
  $xetable.moveCurrentRow(isUpArrow, isDwArrow, evnt);
4157
4162
  }
@@ -4166,7 +4171,7 @@ export default defineComponent({
4166
4171
  $xetable.moveTabSelected(actived.args, hasShiftKey, evnt);
4167
4172
  }
4168
4173
  }
4169
- else if (keyboardConfig && isEnableConf(editConfig) && (isDel || (treeConfig && highlightCurrentRow && currentRow ? isBack && keyboardOpts.isArrow : isBack))) {
4174
+ else if (keyboardConfig && isEnableConf(editConfig) && (isDel || (treeConfig && (rowOpts.isCurrent || highlightCurrentRow) && currentRow ? isBack && keyboardOpts.isArrow : isBack))) {
4170
4175
  if (!isEditStatus) {
4171
4176
  var delMethod = keyboardOpts.delMethod, backMethod = keyboardOpts.backMethod;
4172
4177
  // 如果是删除键
@@ -4202,7 +4207,7 @@ export default defineComponent({
4202
4207
  tableMethods.updateFooter();
4203
4208
  }
4204
4209
  }
4205
- else if (isBack && keyboardOpts.isArrow && treeConfig && highlightCurrentRow && currentRow) {
4210
+ else if (isBack && keyboardOpts.isArrow && treeConfig && (rowOpts.isCurrent || highlightCurrentRow) && currentRow) {
4206
4211
  // 如果树形表格回退键关闭当前行返回父节点
4207
4212
  var parentRow_1 = XEUtils.findTree(internalData.afterFullData, function (item) { return item === currentRow; }, treeOpts).parent;
4208
4213
  if (parentRow_1) {
@@ -4843,6 +4848,7 @@ export default defineComponent({
4843
4848
  triggerHeaderCellClickEvent: function (evnt, params) {
4844
4849
  var _lastResizeTime = internalData._lastResizeTime;
4845
4850
  var sortOpts = computeSortOpts.value;
4851
+ var columnOpts = computeColumnOpts.value;
4846
4852
  var column = params.column;
4847
4853
  var cell = evnt.currentTarget;
4848
4854
  var triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
@@ -4852,7 +4858,7 @@ export default defineComponent({
4852
4858
  tablePrivateMethods.triggerSortEvent(evnt, column, getNextSortOrder(column));
4853
4859
  }
4854
4860
  tableMethods.dispatchEvent('header-cell-click', Object.assign({ triggerResizable: triggerResizable, triggerSort: triggerSort, triggerFilter: triggerFilter, cell: cell }, params), evnt);
4855
- if (props.highlightCurrentColumn) {
4861
+ if (columnOpts.isCurrent || props.highlightCurrentColumn) {
4856
4862
  tableMethods.setCurrentColumn(column);
4857
4863
  }
4858
4864
  },
@@ -4872,6 +4878,7 @@ export default defineComponent({
4872
4878
  var treeOpts = computeTreeOpts.value;
4873
4879
  var radioOpts = computeRadioOpts.value;
4874
4880
  var checkboxOpts = computeCheckboxOpts.value;
4881
+ var rowOpts = computeRowOpts.value;
4875
4882
  var actived = editStore.actived;
4876
4883
  var row = params.row, column = params.column;
4877
4884
  var type = column.type, treeNode = column.treeNode;
@@ -4898,7 +4905,7 @@ export default defineComponent({
4898
4905
  if (!triggerTreeNode) {
4899
4906
  if (!triggerExpandNode) {
4900
4907
  // 如果是高亮行
4901
- if (highlightCurrentRow) {
4908
+ if (rowOpts.isCurrent || highlightCurrentRow) {
4902
4909
  if (!triggerCheckbox && !triggerRadio) {
4903
4910
  tablePrivateMethods.triggerCurrentRowEvent(evnt, params);
4904
4911
  }
@@ -5212,6 +5219,7 @@ export default defineComponent({
5212
5219
  tablePrivateMethods.handleTableData();
5213
5220
  tablePrivateMethods.updateScrollYSpace();
5214
5221
  },
5222
+ updateVirtualTreeData: updateVirtualTreeData,
5215
5223
  /**
5216
5224
  * 处理固定列的显示状态
5217
5225
  */
@@ -5679,6 +5687,8 @@ export default defineComponent({
5679
5687
  var leftList = columnStore.leftList, rightList = columnStore.rightList;
5680
5688
  var tooltipOpts = computeTooltipOpts.value;
5681
5689
  var treeOpts = computeTreeOpts.value;
5690
+ var rowOpts = computeRowOpts.value;
5691
+ var columnOpts = computeColumnOpts.value;
5682
5692
  var vSize = computeSize.value;
5683
5693
  var tableBorder = computeTableBorder.value;
5684
5694
  var mouseOpts = computeMouseOpts.value;
@@ -5693,8 +5703,8 @@ export default defineComponent({
5693
5703
  _a['cell--highlight'] = highlightCell,
5694
5704
  _a['cell--selected'] = mouseConfig && mouseOpts.selected,
5695
5705
  _a['cell--area'] = mouseConfig && mouseOpts.area,
5696
- _a['row--highlight'] = highlightHoverRow,
5697
- _a['column--highlight'] = highlightHoverColumn,
5706
+ _a['row--highlight'] = rowOpts.isHover || highlightHoverRow,
5707
+ _a['column--highlight'] = columnOpts.isHover || highlightHoverColumn,
5698
5708
  _a['is--header'] = showHeader,
5699
5709
  _a['is--footer'] = showFooter,
5700
5710
  _a['is--group'] = isGroup,
@@ -10,6 +10,7 @@ var GlobalConfig = {
10
10
  showHeader: true,
11
11
  animat: true,
12
12
  delayHover: 250,
13
+ autoResize: true,
13
14
  // keepSource: false,
14
15
  // showOverflow: null,
15
16
  // showHeaderOverflow: null,
@@ -17,7 +18,6 @@ var GlobalConfig = {
17
18
  // resizeInterval: 500,
18
19
  // size: null,
19
20
  // zIndex: null,
20
- // autoResize: false,
21
21
  // stripe: false,
22
22
  // border: false,
23
23
  // round: false,
@@ -160,14 +160,14 @@ var validatorHook = {
160
160
  var ruleProps = Object.keys(validRest);
161
161
  return nextTick().then(function () {
162
162
  if (ruleProps.length) {
163
- return Promise.reject(validRest[ruleProps[0]][0]);
163
+ return validRest[ruleProps[0]][0];
164
164
  }
165
165
  if (cb) {
166
166
  cb();
167
167
  }
168
168
  });
169
169
  }).catch(function (firstErrParams) {
170
- return new Promise(function (resolve, reject) {
170
+ return new Promise(function (resolve) {
171
171
  var finish = function () {
172
172
  nextTick(function () {
173
173
  if (cb) {
@@ -175,7 +175,7 @@ var validatorHook = {
175
175
  resolve();
176
176
  }
177
177
  else {
178
- reject(validRest);
178
+ resolve(validRest);
179
179
  }
180
180
  });
181
181
  };
@@ -113,6 +113,69 @@ var editHook = {
113
113
  }
114
114
  }
115
115
 
116
+ function insertTreeRow(newRecords, isAppend) {
117
+ var treeFullData = internalData.treeFullData,
118
+ afterFullData = internalData.afterFullData,
119
+ fullDataRowIdData = internalData.fullDataRowIdData,
120
+ fullAllDataRowIdData = internalData.fullAllDataRowIdData;
121
+ var treeOpts = computeTreeOpts.value;
122
+ var funcName = isAppend ? 'push' : 'unshift';
123
+ newRecords.forEach(function (item) {
124
+ var parentRowId = item[treeOpts.parentField];
125
+ var rowid = (0, _util.getRowid)($xetable, item);
126
+ var matchObj = parentRowId ? _xeUtils.default.findTree(treeFullData, function (item) {
127
+ return parentRowId === item[treeOpts.rowField];
128
+ }, treeOpts) : null;
129
+
130
+ if (matchObj) {
131
+ var parentRow = matchObj.item;
132
+ var parentRest = fullAllDataRowIdData[(0, _util.getRowid)($xetable, parentRow)];
133
+ var parentLevel = parentRest ? parentRest.level : 0;
134
+ var parentChilds = parentRow[treeOpts.children];
135
+
136
+ if (!_xeUtils.default.isArray(parentChilds)) {
137
+ parentChilds = parentRow[treeOpts.children] = [];
138
+ }
139
+
140
+ parentChilds[funcName](item);
141
+ var rest = {
142
+ row: item,
143
+ rowid: rowid,
144
+ index: -1,
145
+ _index: -1,
146
+ $index: -1,
147
+ items: parentChilds,
148
+ parent: parent,
149
+ level: parentLevel + 1
150
+ };
151
+ fullDataRowIdData[rowid] = rest;
152
+ fullAllDataRowIdData[rowid] = rest;
153
+ } else {
154
+ if (process.env.NODE_ENV === 'development') {
155
+ if (parentRowId) {
156
+ (0, _utils.warnLog)('vxe.error.unableInsert');
157
+ }
158
+ }
159
+
160
+ afterFullData[funcName](item);
161
+ treeFullData[funcName](item);
162
+ var rest = {
163
+ row: item,
164
+ rowid: rowid,
165
+ index: -1,
166
+ _index: -1,
167
+ $index: -1,
168
+ items: treeFullData,
169
+ parent: null,
170
+ level: 0
171
+ };
172
+ fullDataRowIdData[rowid] = rest;
173
+ fullAllDataRowIdData[rowid] = rest;
174
+ }
175
+ });
176
+ $xetable.updateVirtualTreeData();
177
+ }
178
+
116
179
  editMethods = {
117
180
  /**
118
181
  * 往表格中插入临时数据
@@ -125,9 +188,9 @@ var editHook = {
125
188
 
126
189
  /**
127
190
  * 往表格指定行中插入临时数据
128
- * 如果 row 为空则从插入到顶部
129
- * 如果 row 为 -1 则从插入到底部
130
- * 如果 row 为有效行则插入到该行的位置
191
+ * 如果 row 为空则从插入到顶部,如果为树结构,则插入到目标节点顶部
192
+ * 如果 row 为 -1 则从插入到底部,如果为树结构,则插入到目标节点底部
193
+ * 如果 row 为有效行则插入到该行的位置,如果为树结构,则有插入到效的目标节点该行的位置
131
194
  * @param {Object/Array} records 新的数据
132
195
  * @param {Row} row 指定行
133
196
  */
@@ -138,9 +201,14 @@ var editHook = {
138
201
  var mergeList = reactData.mergeList,
139
202
  editStore = reactData.editStore,
140
203
  scrollYLoad = reactData.scrollYLoad;
141
- var afterFullData = internalData.afterFullData,
142
- tableFullData = internalData.tableFullData;
204
+ var treeFullData = internalData.treeFullData,
205
+ afterFullData = internalData.afterFullData,
206
+ tableFullData = internalData.tableFullData,
207
+ fullDataRowIdData = internalData.fullDataRowIdData,
208
+ fullAllDataRowIdData = internalData.fullAllDataRowIdData;
143
209
  var sYOpts = computeSYOpts.value;
210
+ var treeOpts = computeTreeOpts.value;
211
+ var transform = treeOpts.transform;
144
212
 
145
213
  if (!_xeUtils.default.isArray(records)) {
146
214
  records = [records];
@@ -151,53 +219,113 @@ var editHook = {
151
219
  });
152
220
 
153
221
  if (!row) {
154
- afterFullData.unshift.apply(afterFullData, newRecords);
155
- tableFullData.unshift.apply(tableFullData, newRecords); // 刷新单元格合并
156
-
157
- mergeList.forEach(function (mergeItem) {
158
- var mergeRowIndex = mergeItem.row;
159
-
160
- if (mergeRowIndex > 0) {
161
- mergeItem.row = mergeRowIndex + newRecords.length;
162
- }
163
- });
164
- } else {
165
- if (row === -1) {
166
- afterFullData.push.apply(afterFullData, newRecords);
167
- tableFullData.push.apply(tableFullData, newRecords); // 刷新单元格合并
222
+ // 如果为虚拟树
223
+ if (treeConfig && transform) {
224
+ insertTreeRow(newRecords, false);
225
+ } else {
226
+ afterFullData.unshift.apply(afterFullData, newRecords);
227
+ tableFullData.unshift.apply(tableFullData, newRecords); // 刷新单元格合并
168
228
 
169
229
  mergeList.forEach(function (mergeItem) {
170
- var mergeRowIndex = mergeItem.row,
171
- mergeRowspan = mergeItem.rowspan;
230
+ var mergeRowIndex = mergeItem.row;
172
231
 
173
- if (mergeRowIndex + mergeRowspan > afterFullData.length) {
174
- mergeItem.rowspan = mergeRowspan + newRecords.length;
232
+ if (mergeRowIndex > 0) {
233
+ mergeItem.row = mergeRowIndex + newRecords.length;
175
234
  }
176
235
  });
177
- } else {
178
- if (treeConfig) {
179
- throw new Error((0, _utils.getLog)('vxe.error.noTree', ['insert']));
180
- }
236
+ }
237
+ } else {
238
+ if (row === -1) {
239
+ // 如果为虚拟树
240
+ if (treeConfig && transform) {
241
+ insertTreeRow(newRecords, true);
242
+ } else {
243
+ afterFullData.push.apply(afterFullData, newRecords);
244
+ tableFullData.push.apply(tableFullData, newRecords); // 刷新单元格合并
181
245
 
182
- var afIndex_1 = $xetable.findRowIndexOf(afterFullData, row);
246
+ mergeList.forEach(function (mergeItem) {
247
+ var mergeRowIndex = mergeItem.row,
248
+ mergeRowspan = mergeItem.rowspan;
183
249
 
184
- if (afIndex_1 === -1) {
185
- throw new Error((0, _utils.errLog)('vxe.error.unableInsert'));
250
+ if (mergeRowIndex + mergeRowspan > afterFullData.length) {
251
+ mergeItem.rowspan = mergeRowspan + newRecords.length;
252
+ }
253
+ });
186
254
  }
255
+ } else {
256
+ // 如果为虚拟树
257
+ if (treeConfig && transform) {
258
+ var matchObj_1 = _xeUtils.default.findTree(treeFullData, function (item) {
259
+ return row[treeOpts.rowField] === item[treeOpts.rowField];
260
+ }, treeOpts);
261
+
262
+ if (matchObj_1) {
263
+ var parentRow_1 = matchObj_1.parent;
264
+ var parentChilds_1 = matchObj_1.items;
265
+ var parentRest = fullAllDataRowIdData[(0, _util.getRowid)($xetable, parentRow_1)];
266
+ var parentLevel_1 = parentRest ? parentRest.level : 0;
267
+ newRecords.forEach(function (item, i) {
268
+ var rowid = (0, _util.getRowid)($xetable, item);
269
+
270
+ if (process.env.NODE_ENV === 'development') {
271
+ if (item[treeOpts.parentField]) {
272
+ if (parentRow_1 && item[treeOpts.parentField] !== parentRow_1[treeOpts.rowField]) {
273
+ (0, _utils.errLog)('vxe.error.errProp', [treeOpts.parentField + "=" + item[treeOpts.parentField], treeOpts.parentField + "=" + parentRow_1[treeOpts.rowField]]);
274
+ }
275
+ }
276
+ }
277
+
278
+ if (parentRow_1) {
279
+ item[treeOpts.parentField] = parentRow_1[treeOpts.rowField];
280
+ }
281
+
282
+ parentChilds_1.splice(matchObj_1.index + i, 0, item);
283
+ var rest = {
284
+ row: item,
285
+ rowid: rowid,
286
+ index: -1,
287
+ _index: -1,
288
+ $index: -1,
289
+ items: parentChilds_1,
290
+ parent: parentRow_1,
291
+ level: parentLevel_1 + 1
292
+ };
293
+ fullDataRowIdData[rowid] = rest;
294
+ fullAllDataRowIdData[rowid] = rest;
295
+ });
296
+ $xetable.updateVirtualTreeData();
297
+ } else {
298
+ if (process.env.NODE_ENV === 'development') {
299
+ (0, _utils.warnLog)('vxe.error.unableInsert');
300
+ }
187
301
 
188
- afterFullData.splice.apply(afterFullData, __spreadArray([afIndex_1, 0], newRecords));
189
- tableFullData.splice.apply(tableFullData, __spreadArray([$xetable.findRowIndexOf(tableFullData, row), 0], newRecords)); // 刷新单元格合并
302
+ insertTreeRow(newRecords, true);
303
+ }
304
+ } else {
305
+ if (treeConfig) {
306
+ throw new Error((0, _utils.getLog)('vxe.error.noTree', ['insert']));
307
+ }
190
308
 
191
- mergeList.forEach(function (mergeItem) {
192
- var mergeRowIndex = mergeItem.row,
193
- mergeRowspan = mergeItem.rowspan;
309
+ var afIndex_1 = $xetable.findRowIndexOf(afterFullData, row);
194
310
 
195
- if (mergeRowIndex > afIndex_1) {
196
- mergeItem.row = mergeRowIndex + newRecords.length;
197
- } else if (mergeRowIndex + mergeRowspan > afIndex_1) {
198
- mergeItem.rowspan = mergeRowspan + newRecords.length;
311
+ if (afIndex_1 === -1) {
312
+ throw new Error((0, _utils.errLog)('vxe.error.unableInsert'));
199
313
  }
200
- });
314
+
315
+ afterFullData.splice.apply(afterFullData, __spreadArray([afIndex_1, 0], newRecords));
316
+ tableFullData.splice.apply(tableFullData, __spreadArray([$xetable.findRowIndexOf(tableFullData, row), 0], newRecords)); // 刷新单元格合并
317
+
318
+ mergeList.forEach(function (mergeItem) {
319
+ var mergeRowIndex = mergeItem.row,
320
+ mergeRowspan = mergeItem.rowspan;
321
+
322
+ if (mergeRowIndex > afIndex_1) {
323
+ mergeItem.row = mergeRowIndex + newRecords.length;
324
+ } else if (mergeRowIndex + mergeRowspan > afIndex_1) {
325
+ mergeItem.rowspan = mergeRowspan + newRecords.length;
326
+ }
327
+ });
328
+ }
201
329
  }
202
330
  }
203
331
 
@@ -206,7 +334,7 @@ var editHook = {
206
334
  reactData.scrollYLoad = !treeConfig && sYOpts.gt > -1 && sYOpts.gt < tableFullData.length;
207
335
  $xetable.updateFooter();
208
336
  $xetable.cacheRowMap();
209
- $xetable.handleTableData();
337
+ $xetable.handleTableData(transform);
210
338
  $xetable.updateAfterDataIndex();
211
339
  $xetable.checkSelectionStatus();
212
340
 
@@ -237,10 +365,13 @@ var editHook = {
237
365
  editStore = reactData.editStore,
238
366
  selection = reactData.selection,
239
367
  scrollYLoad = reactData.scrollYLoad;
240
- var afterFullData = internalData.afterFullData,
368
+ var treeFullData = internalData.treeFullData,
369
+ afterFullData = internalData.afterFullData,
241
370
  tableFullData = internalData.tableFullData;
242
371
  var checkboxOpts = computeCheckboxOpts.value;
243
372
  var sYOpts = computeSYOpts.value;
373
+ var treeOpts = computeTreeOpts.value;
374
+ var transform = treeOpts.transform;
244
375
  var actived = editStore.actived,
245
376
  removeList = editStore.removeList,
246
377
  insertList = editStore.insertList;
@@ -277,31 +408,55 @@ var editHook = {
277
408
  internalData.afterFullData = [];
278
409
  $xetable.clearMergeCells();
279
410
  } else {
280
- rows.forEach(function (row) {
281
- var tfIndex = $xetable.findRowIndexOf(tableFullData, row);
411
+ // 如果为虚拟树
412
+ if (treeConfig && transform) {
413
+ rows.forEach(function (row) {
414
+ var rowid = (0, _util.getRowid)($xetable, row);
415
+
416
+ var matchObj = _xeUtils.default.findTree(treeFullData, function (item) {
417
+ return rowid === (0, _util.getRowid)($xetable, item);
418
+ }, treeOpts);
419
+
420
+ if (matchObj) {
421
+ var rItems = matchObj.items.splice(matchObj.index, 1);
422
+ rest.push(rItems[0]);
423
+ }
282
424
 
283
- if (tfIndex > -1) {
284
- var rItems = tableFullData.splice(tfIndex, 1);
285
- rest.push(rItems[0]);
286
- }
425
+ var afIndex = $xetable.findRowIndexOf(afterFullData, row);
287
426
 
288
- var afIndex = $xetable.findRowIndexOf(afterFullData, row);
427
+ if (afIndex > -1) {
428
+ afterFullData.splice(afIndex, 1);
429
+ }
289
430
 
290
- if (afIndex > -1) {
291
- // 刷新单元格合并
292
- mergeList.forEach(function (mergeItem) {
293
- var mergeRowIndex = mergeItem.row,
294
- mergeRowspan = mergeItem.rowspan;
431
+ $xetable.updateVirtualTreeData();
432
+ });
433
+ } else {
434
+ rows.forEach(function (row) {
435
+ var tfIndex = $xetable.findRowIndexOf(tableFullData, row);
295
436
 
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
- });
437
+ if (tfIndex > -1) {
438
+ var rItems = tableFullData.splice(tfIndex, 1);
439
+ rest.push(rItems[0]);
440
+ }
441
+
442
+ var afIndex = $xetable.findRowIndexOf(afterFullData, row);
443
+
444
+ if (afIndex > -1) {
445
+ // 刷新单元格合并
446
+ mergeList.forEach(function (mergeItem) {
447
+ var mergeRowIndex = mergeItem.row,
448
+ mergeRowspan = mergeItem.rowspan;
449
+
450
+ if (mergeRowIndex > afIndex) {
451
+ mergeItem.row = mergeRowIndex - 1;
452
+ } else if (mergeRowIndex + mergeRowspan > afIndex) {
453
+ mergeItem.rowspan = mergeRowspan - 1;
454
+ }
455
+ });
456
+ afterFullData.splice(afIndex, 1);
457
+ }
458
+ });
459
+ }
305
460
  } // 如果当前行被激活编辑,则清除激活状态
306
461
 
307
462
 
@@ -320,7 +475,7 @@ var editHook = {
320
475
  reactData.scrollYLoad = !treeConfig && sYOpts.gt > -1 && sYOpts.gt < tableFullData.length;
321
476
  $xetable.updateFooter();
322
477
  $xetable.cacheRowMap();
323
- $xetable.handleTableData();
478
+ $xetable.handleTableData(transform);
324
479
  $xetable.updateAfterDataIndex();
325
480
  $xetable.checkSelectionStatus();
326
481
 
@@ -386,17 +541,35 @@ var editHook = {
386
541
  * 获取新增的临时数据
387
542
  */
388
543
  getInsertRecords: function getInsertRecords() {
544
+ var treeConfig = props.treeConfig;
389
545
  var editStore = reactData.editStore;
390
- var tableFullData = internalData.tableFullData;
546
+ var treeFullData = internalData.treeFullData,
547
+ tableFullData = internalData.tableFullData;
548
+ var treeOpts = computeTreeOpts.value;
391
549
  var insertList = editStore.insertList;
392
550
  var insertRecords = [];
393
551
 
394
552
  if (insertList.length) {
395
- tableFullData.forEach(function (row) {
396
- if ($xetable.findRowIndexOf(insertList, row) > -1) {
397
- insertRecords.push(row);
398
- }
399
- });
553
+ // 如果为虚拟树
554
+ if (treeConfig && treeOpts.transform) {
555
+ insertList.forEach(function (row) {
556
+ var rowid = (0, _util.getRowid)($xetable, row);
557
+
558
+ var matchObj = _xeUtils.default.findTree(treeFullData, function (item) {
559
+ return rowid === (0, _util.getRowid)($xetable, item);
560
+ }, treeOpts);
561
+
562
+ if (matchObj) {
563
+ insertRecords.push(row);
564
+ }
565
+ });
566
+ } else {
567
+ insertList.forEach(function (row) {
568
+ if ($xetable.findRowIndexOf(tableFullData, row) > -1) {
569
+ insertRecords.push(row);
570
+ }
571
+ });
572
+ }
400
573
  }
401
574
 
402
575
  return insertRecords;