vxe-table 4.1.8 → 4.1.9

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 (42) hide show
  1. package/es/button/src/button.js +14 -14
  2. package/es/edit/src/hook.js +3 -3
  3. package/es/export/src/hook.js +4 -4
  4. package/es/filter/src/hook.js +20 -1
  5. package/es/table/src/body.js +11 -14
  6. package/es/table/src/cell.js +16 -14
  7. package/es/table/src/table.js +90 -80
  8. package/es/table/src/util.js +3 -0
  9. package/es/tools/dom.js +2 -8
  10. package/lib/button/src/button.js +15 -14
  11. package/lib/button/src/button.min.js +1 -1
  12. package/lib/edit/src/hook.js +3 -0
  13. package/lib/edit/src/hook.min.js +1 -1
  14. package/lib/export/src/hook.js +3 -5
  15. package/lib/export/src/hook.min.js +1 -1
  16. package/lib/filter/src/hook.js +23 -0
  17. package/lib/filter/src/hook.min.js +1 -1
  18. package/lib/index.umd.js +242 -179
  19. package/lib/index.umd.min.js +1 -1
  20. package/lib/table/src/body.js +8 -16
  21. package/lib/table/src/body.min.js +1 -1
  22. package/lib/table/src/cell.js +16 -16
  23. package/lib/table/src/cell.min.js +1 -1
  24. package/lib/table/src/table.js +144 -104
  25. package/lib/table/src/table.min.js +1 -1
  26. package/lib/table/src/util.js +7 -0
  27. package/lib/table/src/util.min.js +1 -1
  28. package/lib/tools/dom.js +2 -9
  29. package/lib/tools/dom.min.js +1 -1
  30. package/package.json +1 -1
  31. package/packages/button/src/button.ts +14 -14
  32. package/packages/edit/src/hook.ts +3 -3
  33. package/packages/export/src/hook.ts +4 -4
  34. package/packages/filter/src/hook.ts +20 -1
  35. package/packages/table/src/body.ts +11 -14
  36. package/packages/table/src/cell.ts +16 -14
  37. package/packages/table/src/table.ts +90 -80
  38. package/packages/table/src/util.ts +4 -0
  39. package/packages/tools/dom.ts +2 -7
  40. package/types/filter.d.ts +5 -0
  41. package/types/plugins/pro.d.ts +5 -0
  42. package/types/table.d.ts +8 -2
@@ -127,39 +127,39 @@ export default defineComponent({
127
127
  var panelStyle = {
128
128
  zIndex: panelIndex
129
129
  };
130
- var _a = getAbsolutePos(targetElem), boundingTop = _a.boundingTop, boundingLeft = _a.boundingLeft, visibleHeight = _a.visibleHeight, visibleWidth = _a.visibleWidth;
130
+ var _a = getAbsolutePos(targetElem), top_1 = _a.top, left = _a.left, boundingTop = _a.boundingTop, visibleHeight = _a.visibleHeight, visibleWidth = _a.visibleWidth;
131
131
  var panelPlacement = 'bottom';
132
132
  if (transfer) {
133
- var left = boundingLeft + targetWidth - panelWidth;
134
- var top_1 = boundingTop + targetHeight;
133
+ var btnLeft = left + targetWidth - panelWidth;
134
+ var btnTop = top_1 + targetHeight;
135
135
  if (placement === 'top') {
136
136
  panelPlacement = 'top';
137
- top_1 = boundingTop - panelHeight;
137
+ btnTop = top_1 - panelHeight;
138
138
  }
139
139
  else if (!placement) {
140
140
  // 如果下面不够放,则向上
141
- if (top_1 + panelHeight + marginSize > visibleHeight) {
141
+ if (boundingTop + targetHeight + panelHeight + marginSize > visibleHeight) {
142
142
  panelPlacement = 'top';
143
- top_1 = boundingTop - panelHeight;
143
+ btnTop = top_1 - panelHeight;
144
144
  }
145
145
  // 如果上面不够放,则向下(优先)
146
- if (top_1 < marginSize) {
146
+ if (btnTop < marginSize) {
147
147
  panelPlacement = 'bottom';
148
- top_1 = boundingTop + targetHeight;
148
+ btnTop = top_1 + targetHeight;
149
149
  }
150
150
  }
151
151
  // 如果溢出右边
152
- if (left + panelWidth + marginSize > visibleWidth) {
153
- left -= left + panelWidth + marginSize - visibleWidth;
152
+ if (btnLeft + panelWidth + marginSize > visibleWidth) {
153
+ btnLeft -= btnLeft + panelWidth + marginSize - visibleWidth;
154
154
  }
155
155
  // 如果溢出左边
156
- if (left < marginSize) {
157
- left = marginSize;
156
+ if (btnLeft < marginSize) {
157
+ btnLeft = marginSize;
158
158
  }
159
159
  Object.assign(panelStyle, {
160
- left: left + "px",
160
+ left: btnLeft + "px",
161
161
  right: 'auto',
162
- top: top_1 + "px",
162
+ top: btnTop + "px",
163
163
  minWidth: targetWidth + "px"
164
164
  });
165
165
  }
@@ -83,7 +83,7 @@ var editHook = {
83
83
  parentChilds = parentRow[treeOpts.children] = [];
84
84
  }
85
85
  parentChilds[funcName](item);
86
- var rest = { row: item, rowid: rowid, index: -1, _index: -1, $index: -1, items: parentChilds, parent: parent, level: parentLevel + 1 };
86
+ var rest = { row: item, rowid: rowid, seq: -1, index: -1, _index: -1, $index: -1, items: parentChilds, parent: parent, level: parentLevel + 1 };
87
87
  fullDataRowIdData[rowid] = rest;
88
88
  fullAllDataRowIdData[rowid] = rest;
89
89
  }
@@ -95,7 +95,7 @@ var editHook = {
95
95
  }
96
96
  afterFullData[funcName](item);
97
97
  treeFullData[funcName](item);
98
- var rest = { row: item, rowid: rowid, index: -1, _index: -1, $index: -1, items: treeFullData, parent: null, level: 0 };
98
+ var rest = { row: item, rowid: rowid, seq: -1, index: -1, _index: -1, $index: -1, items: treeFullData, parent: null, level: 0 };
99
99
  fullDataRowIdData[rowid] = rest;
100
100
  fullAllDataRowIdData[rowid] = rest;
101
101
  }
@@ -188,7 +188,7 @@ var editHook = {
188
188
  item[treeOpts.parentField] = parentRow_1[treeOpts.rowField];
189
189
  }
190
190
  parentChilds_1.splice(matchObj_1.index + i, 0, item);
191
- var rest = { row: item, rowid: rowid, index: -1, _index: -1, $index: -1, items: parentChilds_1, parent: parentRow_1, level: parentLevel_1 + 1 };
191
+ var rest = { row: item, rowid: rowid, seq: -1, index: -1, _index: -1, $index: -1, items: parentChilds_1, parent: parentRow_1, level: parentLevel_1 + 1 };
192
192
  fullDataRowIdData[rowid] = rest;
193
193
  fullAllDataRowIdData[rowid] = rest;
194
194
  });
@@ -2,7 +2,7 @@ import { inject, nextTick } from 'vue';
2
2
  import XEUtils from 'xe-utils';
3
3
  import GlobalConfig from '../../v-x-e-table/src/conf';
4
4
  import { VXETable } from '../../v-x-e-table';
5
- import { isColumnInfo, mergeBodyMethod, getCellValue } from '../../table/src/util';
5
+ import { isColumnInfo, mergeBodyMethod, getCellValue, toTreePathSeq } from '../../table/src/util';
6
6
  import { errLog, warnLog, parseFile, formatText } from '../../tools/utils';
7
7
  import { readLocalFile, handlePrint, saveLocalFile, createHtmlPage, getExportBlobByContent } from './util';
8
8
  var htmlCellElem;
@@ -265,14 +265,14 @@ var tableExportHook = {
265
265
  var treeOpts = computeTreeOpts.value;
266
266
  return row[treeOpts.children] && row[treeOpts.children].length;
267
267
  };
268
- var getSeq = function (row, rowIndex, column, columnIndex, paths) {
268
+ var getSeq = function (row, rowIndex, column, columnIndex, path) {
269
269
  var seqOpts = computeSeqOpts.value;
270
270
  var seqMethod = seqOpts.seqMethod || column.seqMethod;
271
271
  if (seqMethod) {
272
272
  return seqMethod({ row: row, rowIndex: rowIndex, column: column, columnIndex: columnIndex });
273
273
  }
274
- if (paths) {
275
- return paths.map(function (num, i) { return i % 2 === 0 ? (Number(num) + 1) : '.'; }).join('');
274
+ if (path) {
275
+ return toTreePathSeq(path);
276
276
  }
277
277
  return seqOpts.startIndex + rowIndex + 1;
278
278
  };
@@ -13,7 +13,7 @@ import { nextTick } from 'vue';
13
13
  import XEUtils from 'xe-utils';
14
14
  import { VXETable } from '../../v-x-e-table';
15
15
  import { toFilters, handleFieldOrColumn } from '../../table/src/util';
16
- import { getDomNode } from '../../tools/dom';
16
+ import { getDomNode, triggerEvent } from '../../tools/dom';
17
17
  var tableFilterMethodKeys = ['setFilter', 'clearFilter', 'getCheckedFilters'];
18
18
  var tableFilterHook = {
19
19
  setupTable: function ($xetable) {
@@ -181,6 +181,25 @@ var tableFilterHook = {
181
181
  }
182
182
  };
183
183
  var filterMethods = {
184
+ /**
185
+ * 手动弹出筛选面板
186
+ * @param column
187
+ */
188
+ openFilter: function (fieldOrColumn) {
189
+ var column = handleFieldOrColumn($xetable, fieldOrColumn);
190
+ if (column && column.filters) {
191
+ var elemStore_1 = internalData.elemStore;
192
+ var fixed_1 = column.fixed;
193
+ return $xetable.scrollToColumn(column).then(function () {
194
+ var headerWrapperElem = elemStore_1[(fixed_1 || 'main') + "-header-wrapper"] || elemStore_1['main-header-wrapper'];
195
+ if (headerWrapperElem) {
196
+ var filterBtnElem = headerWrapperElem.querySelector(".vxe-header--column." + column.id + " .vxe-filter--btn");
197
+ triggerEvent(filterBtnElem, 'click');
198
+ }
199
+ });
200
+ }
201
+ return nextTick();
202
+ },
184
203
  /**
185
204
  * 修改筛选条件列表
186
205
  * @param {ColumnInfo} fieldOrColumn 列或字段名
@@ -110,7 +110,7 @@ export default defineComponent({
110
110
  /**
111
111
  * 渲染列
112
112
  */
113
- var renderColumn = function ($seq, seq, rowid, fixedType, rowLevel, row, rowIndex, $rowIndex, _rowIndex, column, $columnIndex, columns, items) {
113
+ var renderColumn = function (seq, rowid, fixedType, rowLevel, row, rowIndex, $rowIndex, _rowIndex, column, $columnIndex, columns, items) {
114
114
  var _a;
115
115
  var columnKey = tableProps.columnKey, height = tableProps.height, allColumnOverflow = tableProps.showOverflow, cellClassName = tableProps.cellClassName, cellStyle = tableProps.cellStyle, allAlign = tableProps.align, spanMethod = tableProps.spanMethod, mouseConfig = tableProps.mouseConfig, editConfig = tableProps.editConfig, editRules = tableProps.editRules, tooltipConfig = tableProps.tooltipConfig;
116
116
  var tableData = tableReactData.tableData, overflowX = tableReactData.overflowX, scrollYLoad = tableReactData.scrollYLoad, currentColumn = tableReactData.currentColumn, mergeList = tableReactData.mergeList, editStore = tableReactData.editStore, validStore = tableReactData.validStore, isAllOverflow = tableReactData.isAllOverflow;
@@ -141,7 +141,7 @@ export default defineComponent({
141
141
  var hasValidError = validStore.row === row && validStore.column === column;
142
142
  var showValidTip = editRules && validOpts.showMessage && (validOpts.message === 'default' ? (height || tableData.length > 1) : validOpts.message === 'inline');
143
143
  var attrs = { colid: column.id };
144
- var params = { $table: $xetable, $seq: $seq, seq: seq, rowid: rowid, row: row, rowIndex: rowIndex, $rowIndex: $rowIndex, _rowIndex: _rowIndex, column: column, columnIndex: columnIndex, $columnIndex: $columnIndex, _columnIndex: _columnIndex, fixed: fixedType, type: renderType, isHidden: fixedHiddenColumn, level: rowLevel, visibleData: afterFullData, data: tableData, items: items };
144
+ var params = { $table: $xetable, seq: seq, rowid: rowid, row: row, rowIndex: rowIndex, $rowIndex: $rowIndex, _rowIndex: _rowIndex, column: column, columnIndex: columnIndex, $columnIndex: $columnIndex, _columnIndex: _columnIndex, fixed: fixedType, type: renderType, isHidden: fixedHiddenColumn, level: rowLevel, visibleData: afterFullData, data: tableData, items: items };
145
145
  // 虚拟滚动不支持动态高度
146
146
  if (scrollYLoad && !hasEllipsis) {
147
147
  showEllipsis = hasEllipsis = true;
@@ -282,10 +282,10 @@ export default defineComponent({
282
282
  height: hasEllipsis && (scrollYRHeight || rowHeight) ? (scrollYRHeight || rowHeight) + "px" : ''
283
283
  }, cellStyle ? (XEUtils.isFunction(cellStyle) ? cellStyle(params) : cellStyle) : null) }), tdOns), tdVNs);
284
284
  };
285
- var renderRows = function ($seq, fixedType, tableData, tableColumn) {
285
+ var renderRows = function (fixedType, tableData, tableColumn) {
286
286
  var stripe = tableProps.stripe, rowKey = tableProps.rowKey, highlightHoverRow = tableProps.highlightHoverRow, rowClassName = tableProps.rowClassName, rowStyle = tableProps.rowStyle, allColumnOverflow = tableProps.showOverflow, editConfig = tableProps.editConfig, treeConfig = tableProps.treeConfig;
287
287
  var hasFixedColumn = tableReactData.hasFixedColumn, treeExpandeds = tableReactData.treeExpandeds, scrollYLoad = tableReactData.scrollYLoad, editStore = tableReactData.editStore, rowExpandeds = tableReactData.rowExpandeds, expandColumn = tableReactData.expandColumn, selectRow = tableReactData.selectRow;
288
- var fullAllDataRowIdData = tableInternalData.fullAllDataRowIdData, scrollYStore = tableInternalData.scrollYStore;
288
+ var fullDataRowIdData = tableInternalData.fullDataRowIdData;
289
289
  var checkboxOpts = computeCheckboxOpts.value;
290
290
  var radioOpts = computeRadioOpts.value;
291
291
  var treeOpts = computeTreeOpts.value;
@@ -295,10 +295,6 @@ export default defineComponent({
295
295
  tableData.forEach(function (row, $rowIndex) {
296
296
  var trOn = {};
297
297
  var rowIndex = $rowIndex;
298
- var seq = rowIndex + 1;
299
- if (scrollYLoad) {
300
- seq += scrollYStore.startIndex;
301
- }
302
298
  var _rowIndex = $xetable.getVTRowIndex(row);
303
299
  // 确保任何情况下 rowIndex 都精准指向真实 data 索引
304
300
  rowIndex = $xetable.getRowIndex(row);
@@ -318,9 +314,10 @@ export default defineComponent({
318
314
  };
319
315
  }
320
316
  var rowid = getRowid($xetable, row);
321
- var rest = fullAllDataRowIdData[rowid];
317
+ var rest = fullDataRowIdData[rowid];
322
318
  var rowLevel = rest ? rest.level : 0;
323
- var params = { $table: $xetable, $seq: $seq, seq: seq, rowid: rowid, fixed: fixedType, type: renderType, level: rowLevel, row: row, rowIndex: rowIndex, $rowIndex: $rowIndex, _rowIndex: _rowIndex };
319
+ var seq = rest ? rest.seq : -1;
320
+ var params = { $table: $xetable, seq: seq, rowid: rowid, fixed: fixedType, type: renderType, level: rowLevel, row: row, rowIndex: rowIndex, $rowIndex: $rowIndex, _rowIndex: _rowIndex };
324
321
  var isNewRow = false;
325
322
  if (editConfig) {
326
323
  isNewRow = $xetable.findRowIndexOf(editStore.insertList, row) > -1;
@@ -332,7 +329,7 @@ export default defineComponent({
332
329
  'row--radio': radioOpts.highlight && selectRow === row,
333
330
  'row--checked': checkboxOpts.highlight && $xetable.isCheckedByCheckboxRow(row)
334
331
  }, rowClassName ? (XEUtils.isFunction(rowClassName) ? rowClassName(params) : rowClassName) : ''], rowid: rowid, style: rowStyle ? (XEUtils.isFunction(rowStyle) ? rowStyle(params) : rowStyle) : null, key: rowKey || treeConfig ? rowid : $rowIndex }, trOn), tableColumn.map(function (column, $columnIndex) {
335
- return renderColumn($seq, seq, rowid, fixedType, rowLevel, row, rowIndex, $rowIndex, _rowIndex, column, $columnIndex, tableColumn, tableData);
332
+ return renderColumn(seq, rowid, fixedType, rowLevel, row, rowIndex, $rowIndex, _rowIndex, column, $columnIndex, tableColumn, tableData);
336
333
  })));
337
334
  // 如果行被展开了
338
335
  if (expandColumn && rowExpandeds.length && $xetable.findRowIndexOf(rowExpandeds, row) > -1) {
@@ -344,7 +341,7 @@ export default defineComponent({
344
341
  }
345
342
  var showOverflow = expandColumn.showOverflow;
346
343
  var hasEllipsis = (XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow)) ? allColumnOverflow : showOverflow;
347
- var expandParams = { $table: $xetable, $seq: $seq, seq: seq, column: expandColumn, fixed: fixedType, type: renderType, level: rowLevel, row: row, rowIndex: rowIndex, $rowIndex: $rowIndex, _rowIndex: _rowIndex };
344
+ var expandParams = { $table: $xetable, seq: seq, column: expandColumn, fixed: fixedType, type: renderType, level: rowLevel, row: row, rowIndex: rowIndex, $rowIndex: $rowIndex, _rowIndex: _rowIndex };
348
345
  rows.push(h('tr', __assign({ class: 'vxe-body--expanded-row', key: "expand_" + rowid, style: rowStyle ? (XEUtils.isFunction(rowStyle) ? rowStyle(expandParams) : rowStyle) : null }, trOn), [
349
346
  h('td', {
350
347
  class: ['vxe-body--expanded-column', {
@@ -366,7 +363,7 @@ export default defineComponent({
366
363
  if (treeConfig && !scrollYLoad && treeExpandeds.length) {
367
364
  var rowChildren = row[treeOpts.children];
368
365
  if (rowChildren && rowChildren.length && $xetable.findRowIndexOf(treeExpandeds, row) > -1) {
369
- rows.push.apply(rows, renderRows($seq ? $seq + "." + seq : "" + seq, fixedType, rowChildren, tableColumn));
366
+ rows.push.apply(rows, renderRows(fixedType, rowChildren, tableColumn));
370
367
  }
371
368
  }
372
369
  });
@@ -655,7 +652,7 @@ export default defineComponent({
655
652
  */
656
653
  h('tbody', {
657
654
  ref: refBodyTBody
658
- }, renderRows('', fixedType, tableData, tableColumn))
655
+ }, renderRows(fixedType, tableData, tableColumn))
659
656
  ]),
660
657
  h('div', {
661
658
  class: 'vxe-table--checkbox-range'
@@ -105,16 +105,16 @@ export var Cell = {
105
105
  };
106
106
  switch (type) {
107
107
  case 'seq':
108
- renConfs.renderHeader = Cell.renderIndexHeader;
109
- renConfs.renderCell = treeNode ? Cell.renderTreeIndexCell : Cell.renderIndexCell;
108
+ renConfs.renderHeader = Cell.renderSeqHeader;
109
+ renConfs.renderCell = treeNode ? Cell.renderTreeIndexCell : Cell.renderSeqCell;
110
110
  break;
111
111
  case 'radio':
112
112
  renConfs.renderHeader = Cell.renderRadioHeader;
113
113
  renConfs.renderCell = treeNode ? Cell.renderTreeRadioCell : Cell.renderRadioCell;
114
114
  break;
115
115
  case 'checkbox':
116
- renConfs.renderHeader = Cell.renderSelectionHeader;
117
- renConfs.renderCell = checkboxOpts.checkField ? (treeNode ? Cell.renderTreeSelectionCellByProp : Cell.renderSelectionCellByProp) : (treeNode ? Cell.renderTreeSelectionCell : Cell.renderSelectionCell);
116
+ renConfs.renderHeader = Cell.renderCheckboxHeader;
117
+ renConfs.renderCell = checkboxOpts.checkField ? (treeNode ? Cell.renderTreeSelectionCellByProp : Cell.renderCheckboxCellByProp) : (treeNode ? Cell.renderTreeSelectionCell : Cell.renderCheckboxCell);
118
118
  break;
119
119
  case 'expand':
120
120
  renConfs.renderCell = Cell.renderExpandCell;
@@ -266,14 +266,16 @@ export var Cell = {
266
266
  /**
267
267
  * 索引
268
268
  */
269
- renderIndexHeader: function (params) {
269
+ renderSeqHeader: function (params) {
270
270
  var $table = params.$table, column = params.column;
271
271
  var slots = column.slots;
272
272
  var headerSlot = slots ? slots.header : null;
273
273
  return renderTitleContent(params, headerSlot ? $table.callSlot(headerSlot, params) : formatText(column.getTitle(), 1));
274
274
  },
275
- renderIndexCell: function (params) {
275
+ renderSeqCell: function (params) {
276
276
  var $table = params.$table, column = params.column;
277
+ var props = $table.props;
278
+ var treeConfig = props.treeConfig;
277
279
  var computeSeqOpts = $table.getComputeMaps().computeSeqOpts;
278
280
  var seqOpts = computeSeqOpts.value;
279
281
  var slots = column.slots;
@@ -281,12 +283,12 @@ export var Cell = {
281
283
  if (defaultSlot) {
282
284
  return $table.callSlot(defaultSlot, params);
283
285
  }
284
- var $seq = params.$seq, seq = params.seq, level = params.level;
286
+ var seq = params.seq;
285
287
  var seqMethod = seqOpts.seqMethod;
286
- return [formatText(seqMethod ? seqMethod(params) : level ? $seq + "." + seq : (seqOpts.startIndex || 0) + seq, 1)];
288
+ return [formatText(seqMethod ? seqMethod(params) : treeConfig ? seq : (seqOpts.startIndex || 0) + seq, 1)];
287
289
  },
288
290
  renderTreeIndexCell: function (params) {
289
- return Cell.renderTreeIcon(params, Cell.renderIndexCell(params));
291
+ return Cell.renderTreeIcon(params, Cell.renderSeqCell(params));
290
292
  },
291
293
  /**
292
294
  * 单选
@@ -359,7 +361,7 @@ export var Cell = {
359
361
  /**
360
362
  * 多选
361
363
  */
362
- renderSelectionHeader: function (params) {
364
+ renderCheckboxHeader: function (params) {
363
365
  var $table = params.$table, column = params.column, isHidden = params.isHidden;
364
366
  var reactData = $table.reactData;
365
367
  var _a = $table.getComputeMaps(), computeIsAllCheckboxDisabled = _a.computeIsAllCheckboxDisabled, computeCheckboxOpts = _a.computeCheckboxOpts;
@@ -415,7 +417,7 @@ export var Cell = {
415
417
  ] : []))
416
418
  ]);
417
419
  },
418
- renderSelectionCell: function (params) {
420
+ renderCheckboxCell: function (params) {
419
421
  var $table = params.$table, row = params.row, column = params.column, isHidden = params.isHidden;
420
422
  var props = $table.props, reactData = $table.reactData;
421
423
  var treeConfig = props.treeConfig;
@@ -475,9 +477,9 @@ export var Cell = {
475
477
  ];
476
478
  },
477
479
  renderTreeSelectionCell: function (params) {
478
- return Cell.renderTreeIcon(params, Cell.renderSelectionCell(params));
480
+ return Cell.renderTreeIcon(params, Cell.renderCheckboxCell(params));
479
481
  },
480
- renderSelectionCellByProp: function (params) {
482
+ renderCheckboxCellByProp: function (params) {
481
483
  var $table = params.$table, row = params.row, column = params.column, isHidden = params.isHidden;
482
484
  var props = $table.props, reactData = $table.reactData;
483
485
  var treeConfig = props.treeConfig;
@@ -537,7 +539,7 @@ export var Cell = {
537
539
  ];
538
540
  },
539
541
  renderTreeSelectionCellByProp: function (params) {
540
- return Cell.renderTreeIcon(params, Cell.renderSelectionCellByProp(params));
542
+ return Cell.renderTreeIcon(params, Cell.renderCheckboxCellByProp(params));
541
543
  },
542
544
  /**
543
545
  * 展开行
@@ -27,7 +27,7 @@ import Cell from './cell';
27
27
  import TableBodyComponent from './body';
28
28
  import tableProps from './props';
29
29
  import tableEmits from './emits';
30
- import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleFieldOrColumn, restoreScrollLocation, restoreScrollListener } from './util';
30
+ import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, restoreScrollListener } from './util';
31
31
  var isWebkit = browse['-webkit'] && !browse.edge;
32
32
  var resizableStorageKey = 'VXE_TABLE_CUSTOM_COLUMN_WIDTH';
33
33
  var visibleStorageKey = 'VXE_TABLE_CUSTOM_COLUMN_VISIBLE';
@@ -276,8 +276,9 @@ export default defineComponent({
276
276
  tableFullColumn: [],
277
277
  // 渲染所有列
278
278
  visibleColumn: [],
279
- // 缓存数据集
279
+ // 总的缓存数据集
280
280
  fullAllDataRowIdData: {},
281
+ // 渲染中缓存数据
281
282
  fullDataRowIdData: {},
282
283
  fullColumnIdData: {},
283
284
  fullColumnFieldData: {},
@@ -1081,18 +1082,52 @@ export default defineComponent({
1081
1082
  return cellValue;
1082
1083
  };
1083
1084
  };
1085
+ /**
1086
+ * 预编译
1087
+ * 对渲染中的数据提前解析序号及索引。牺牲提前编译耗时换取渲染中额外损耗,使运行时更加流畅
1088
+ */
1084
1089
  var updateAfterDataIndex = function () {
1085
- var afterFullData = internalData.afterFullData, fullDataRowIdData = internalData.fullDataRowIdData;
1086
- afterFullData.forEach(function (row, _index) {
1087
- var rowid = getRowid($xetable, row);
1088
- var rest = fullDataRowIdData[rowid];
1089
- if (rest) {
1090
- rest._index = _index;
1091
- }
1092
- else {
1093
- fullDataRowIdData[rowid] = { row: row, rowid: rowid, index: -1, $index: -1, _index: _index, items: [], parent: null, level: 0 };
1094
- }
1095
- });
1090
+ var treeConfig = props.treeConfig;
1091
+ var afterFullData = internalData.afterFullData, fullDataRowIdData = internalData.fullDataRowIdData, fullAllDataRowIdData = internalData.fullAllDataRowIdData;
1092
+ var treeFullData = internalData.treeFullData;
1093
+ var treeOpts = computeTreeOpts.value;
1094
+ if (treeConfig) {
1095
+ XEUtils.eachTree(treeFullData, function (row, index, items, path) {
1096
+ var rowid = getRowid($xetable, row);
1097
+ var allrest = fullAllDataRowIdData[rowid];
1098
+ var fullrest = fullDataRowIdData[rowid];
1099
+ var seq = path.map(function (num, i) { return i % 2 === 0 ? (Number(num) + 1) : '.'; }).join('');
1100
+ if (allrest) {
1101
+ allrest.seq = seq;
1102
+ }
1103
+ if (fullrest) {
1104
+ fullrest.seq = seq;
1105
+ }
1106
+ else {
1107
+ fullAllDataRowIdData[rowid] = { row: row, rowid: rowid, seq: seq, index: -1, $index: -1, _index: index, items: [], parent: null, level: 0 };
1108
+ fullDataRowIdData[rowid] = { row: row, rowid: rowid, seq: seq, index: -1, $index: -1, _index: index, items: [], parent: null, level: 0 };
1109
+ }
1110
+ }, treeOpts);
1111
+ }
1112
+ else {
1113
+ afterFullData.forEach(function (row, index) {
1114
+ var rowid = getRowid($xetable, row);
1115
+ var allrest = fullAllDataRowIdData[rowid];
1116
+ var fullrest = fullDataRowIdData[rowid];
1117
+ var seq = index + 1;
1118
+ if (allrest) {
1119
+ allrest.seq = seq;
1120
+ }
1121
+ if (fullrest) {
1122
+ fullrest.seq = seq;
1123
+ fullrest._index = index;
1124
+ }
1125
+ else {
1126
+ fullAllDataRowIdData[rowid] = { row: row, rowid: rowid, seq: seq, index: -1, $index: -1, _index: index, items: [], parent: null, level: 0 };
1127
+ fullDataRowIdData[rowid] = { row: row, rowid: rowid, seq: seq, index: -1, $index: -1, _index: index, items: [], parent: null, level: 0 };
1128
+ }
1129
+ });
1130
+ }
1096
1131
  };
1097
1132
  /**
1098
1133
  * 获取处理后全量的表格数据
@@ -2016,11 +2051,11 @@ export default defineComponent({
2016
2051
  tableMethods.clearMergeFooterItems();
2017
2052
  }
2018
2053
  reactData.scrollXLoad = scrollXLoad;
2019
- visibleColumn.forEach(function (column, _index) {
2054
+ visibleColumn.forEach(function (column, index) {
2020
2055
  var colid = column.id;
2021
2056
  var rest = fullColumnIdData[colid];
2022
2057
  if (rest) {
2023
- rest._index = _index;
2058
+ rest._index = index;
2024
2059
  }
2025
2060
  });
2026
2061
  internalData.visibleColumn = visibleColumn;
@@ -2173,6 +2208,31 @@ export default defineComponent({
2173
2208
  }
2174
2209
  }
2175
2210
  };
2211
+ var createGetRowCacheProp = function (prop) {
2212
+ return function (row) {
2213
+ var fullDataRowIdData = internalData.fullDataRowIdData;
2214
+ if (row) {
2215
+ var rowid = getRowid($xetable, row);
2216
+ var rest = fullDataRowIdData[rowid];
2217
+ if (rest) {
2218
+ return rest[prop];
2219
+ }
2220
+ }
2221
+ return -1;
2222
+ };
2223
+ };
2224
+ var createGetColumnCacheProp = function (prop) {
2225
+ return function (column) {
2226
+ var fullColumnIdData = internalData.fullColumnIdData;
2227
+ if (column) {
2228
+ var rest = fullColumnIdData[column.id];
2229
+ if (rest) {
2230
+ return rest[prop];
2231
+ }
2232
+ }
2233
+ return -1;
2234
+ };
2235
+ };
2176
2236
  var debounceScrollY = XEUtils.debounce(function (evnt) {
2177
2237
  loadScrollYData(evnt);
2178
2238
  }, 20, { leading: false, trailing: true });
@@ -2298,7 +2358,7 @@ export default defineComponent({
2298
2358
  }
2299
2359
  XEUtils.eachTree(rows, function (childRow, index, items, path, parent, nodes) {
2300
2360
  var rowid = getRowid($xetable, childRow);
2301
- var rest = { row: childRow, rowid: rowid, index: -1, _index: -1, $index: -1, items: items, parent: parent, level: parentLevel + nodes.length };
2361
+ var rest = { row: childRow, rowid: rowid, seq: -1, index: -1, _index: -1, $index: -1, items: items, parent: parent, level: parentLevel + nodes.length };
2302
2362
  fullDataRowIdData[rowid] = rest;
2303
2363
  fullAllDataRowIdData[rowid] = rest;
2304
2364
  }, treeOpts);
@@ -2359,93 +2419,41 @@ export default defineComponent({
2359
2419
  }
2360
2420
  return null;
2361
2421
  },
2422
+ /**
2423
+ * 根据 row 获取序号
2424
+ * @param {Row} row 行对象
2425
+ */
2426
+ getRowSeq: createGetRowCacheProp('seq'),
2362
2427
  /**
2363
2428
  * 根据 row 获取相对于 data 中的索引
2364
2429
  * @param {Row} row 行对象
2365
2430
  */
2366
- getRowIndex: function (row) {
2367
- var fullDataRowIdData = internalData.fullDataRowIdData;
2368
- if (row) {
2369
- var rowid = getRowid($xetable, row);
2370
- var rest = fullDataRowIdData[rowid];
2371
- if (rest) {
2372
- return rest.index;
2373
- }
2374
- }
2375
- return -1;
2376
- },
2431
+ getRowIndex: createGetRowCacheProp('index'),
2377
2432
  /**
2378
2433
  * 根据 row 获取相对于当前数据中的索引
2379
2434
  * @param {Row} row 行对象
2380
2435
  */
2381
- getVTRowIndex: function (row) {
2382
- var fullDataRowIdData = internalData.fullDataRowIdData;
2383
- if (row) {
2384
- var rowid = getRowid($xetable, row);
2385
- var rest = fullDataRowIdData[rowid];
2386
- if (rest) {
2387
- return rest._index;
2388
- }
2389
- }
2390
- return -1;
2391
- },
2436
+ getVTRowIndex: createGetRowCacheProp('_index'),
2392
2437
  /**
2393
2438
  * 根据 row 获取渲染中的虚拟索引
2394
2439
  * @param {Row} row 行对象
2395
2440
  */
2396
- getVMRowIndex: function (row) {
2397
- var fullDataRowIdData = internalData.fullDataRowIdData;
2398
- if (row) {
2399
- var rowid = getRowid($xetable, row);
2400
- var rest = fullDataRowIdData[rowid];
2401
- if (rest) {
2402
- return rest.$index;
2403
- }
2404
- }
2405
- return -1;
2406
- },
2441
+ getVMRowIndex: createGetRowCacheProp('$index'),
2407
2442
  /**
2408
2443
  * 根据 column 获取相对于 columns 中的索引
2409
2444
  * @param {ColumnInfo} column 列配置
2410
2445
  */
2411
- getColumnIndex: function (column) {
2412
- var fullColumnIdData = internalData.fullColumnIdData;
2413
- if (column) {
2414
- var rest = fullColumnIdData[column.id];
2415
- if (rest) {
2416
- return rest.index;
2417
- }
2418
- }
2419
- return -1;
2420
- },
2446
+ getColumnIndex: createGetColumnCacheProp('index'),
2421
2447
  /**
2422
2448
  * 根据 column 获取相对于当前表格列中的索引
2423
2449
  * @param {ColumnInfo} column 列配置
2424
2450
  */
2425
- getVTColumnIndex: function (column) {
2426
- var fullColumnIdData = internalData.fullColumnIdData;
2427
- if (column) {
2428
- var rest = fullColumnIdData[column.id];
2429
- if (rest) {
2430
- return rest._index;
2431
- }
2432
- }
2433
- return -1;
2434
- },
2451
+ getVTColumnIndex: createGetColumnCacheProp('_index'),
2435
2452
  /**
2436
2453
  * 根据 column 获取渲染中的虚拟索引
2437
2454
  * @param {ColumnInfo} column 列配置
2438
2455
  */
2439
- getVMColumnIndex: function (column) {
2440
- var fullColumnIdData = internalData.fullColumnIdData;
2441
- if (column) {
2442
- var rest = fullColumnIdData[column.id];
2443
- if (rest) {
2444
- return rest.$index;
2445
- }
2446
- }
2447
- return -1;
2448
- },
2456
+ getVMColumnIndex: createGetColumnCacheProp('$index'),
2449
2457
  /**
2450
2458
  * 创建 data 对象
2451
2459
  * 对于某些特殊场景可能会用到,会自动对数据的字段名进行检测,如果不存在就自动定义
@@ -4463,6 +4471,8 @@ export default defineComponent({
4463
4471
  var isLazy = treeConfig && treeOpts.lazy;
4464
4472
  var handleCache = function (row, index, items, path, parent, nodes) {
4465
4473
  var rowid = getRowid($xetable, row);
4474
+ var seq = treeConfig && path ? toTreePathSeq(path) : index + 1;
4475
+ var level = nodes ? nodes.length - 1 : 0;
4466
4476
  if (eqEmptyValue(rowid)) {
4467
4477
  rowid = getRowUniqueId();
4468
4478
  XEUtils.set(row, rowkey, rowid);
@@ -4470,7 +4480,7 @@ export default defineComponent({
4470
4480
  if (isLazy && row[treeOpts.hasChild] && XEUtils.isUndefined(row[treeOpts.children])) {
4471
4481
  row[treeOpts.children] = null;
4472
4482
  }
4473
- var rest = { row: row, rowid: rowid, index: treeConfig && parent ? -1 : index, _index: -1, $index: -1, items: items, parent: parent, level: nodes ? nodes.length - 1 : 0 };
4483
+ var rest = { row: row, rowid: rowid, seq: seq, index: treeConfig && parent ? -1 : index, _index: -1, $index: -1, items: items, parent: parent, level: level };
4474
4484
  if (isSource) {
4475
4485
  fullDataRowIdData[rowid] = rest;
4476
4486
  }
@@ -77,6 +77,9 @@ export function toFilters(filters) {
77
77
  }
78
78
  return filters;
79
79
  }
80
+ export function toTreePathSeq(path) {
81
+ return path.map(function (num, i) { return i % 2 === 0 ? (Number(num) + 1) : '.'; }).join('');
82
+ }
80
83
  export function getCellValue(row, column) {
81
84
  return XEUtils.get(row, column.property);
82
85
  }
package/es/tools/dom.js CHANGED
@@ -123,13 +123,7 @@ export function scrollToView(elem) {
123
123
  }
124
124
  }
125
125
  export function triggerEvent(targetElem, type) {
126
- var evnt;
127
- if (typeof Event === 'function') {
128
- evnt = new Event(type);
126
+ if (targetElem) {
127
+ targetElem.dispatchEvent(new Event(type));
129
128
  }
130
- else {
131
- evnt = document.createEvent('Event');
132
- evnt.initEvent(type, true, true);
133
- }
134
- targetElem.dispatchEvent(evnt);
135
129
  }