vxe-table 3.14.0-beta.9 → 3.14.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.
- package/es/grid/src/grid.js +62 -42
- package/es/locale/lang/ar-EG.js +7 -1
- package/es/locale/lang/de-DE.js +7 -1
- package/es/locale/lang/en-US.js +7 -1
- package/es/locale/lang/es-ES.js +7 -1
- package/es/locale/lang/fr-FR.js +7 -1
- package/es/locale/lang/hu-HU.js +7 -1
- package/es/locale/lang/hy-AM.js +7 -1
- package/es/locale/lang/id-ID.js +7 -1
- package/es/locale/lang/it-IT.js +7 -1
- package/es/locale/lang/ja-JP.js +7 -1
- package/es/locale/lang/ko-KR.js +7 -1
- package/es/locale/lang/nb-NO.js +7 -1
- package/es/locale/lang/pt-BR.js +7 -1
- package/es/locale/lang/ru-RU.js +7 -1
- package/es/locale/lang/th-TH.js +7 -1
- package/es/locale/lang/ug-CN.js +7 -1
- package/es/locale/lang/uk-UA.js +7 -1
- package/es/locale/lang/vi-VN.js +7 -1
- package/es/locale/lang/zh-CHT.js +7 -1
- package/es/locale/lang/zh-CN.js +7 -1
- package/es/style.css +1 -1
- package/es/table/module/custom/mixin.js +4 -2
- package/es/table/module/custom/panel.js +24 -23
- package/es/table/module/edit/mixin.js +17 -11
- package/es/table/module/export/export-panel.js +5 -4
- package/es/table/module/export/import-panel.js +8 -7
- package/es/table/module/export/mixin.js +30 -27
- package/es/table/module/filter/panel.js +21 -10
- package/es/table/module/keyboard/mixin.js +141 -41
- package/es/table/module/menu/mixin.js +6 -3
- package/es/table/module/menu/panel.js +7 -7
- package/es/table/module/validator/mixin.js +2 -2
- package/es/table/render/index.js +2 -2
- package/es/table/src/body.js +39 -20
- package/es/table/src/cell.js +27 -22
- package/es/table/src/column.js +11 -9
- package/es/table/src/columnInfo.js +6 -6
- package/es/table/src/footer.js +12 -7
- package/es/table/src/group.js +6 -5
- package/es/table/src/header.js +15 -9
- package/es/table/src/methods.js +761 -698
- package/es/table/src/props.js +4 -0
- package/es/table/src/table.js +85 -49
- package/es/table/src/util.js +55 -20
- package/es/toolbar/src/toolbar.js +3 -3
- package/es/ui/index.js +2 -1
- package/es/ui/src/log.js +1 -1
- package/helper/vetur/attributes.json +1 -1
- package/helper/vetur/tags.json +1 -1
- package/lib/grid/src/grid.js +69 -59
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.umd.js +1558 -1232
- package/lib/index.umd.min.js +1 -1
- package/lib/locale/lang/ar-EG.js +7 -1
- package/lib/locale/lang/ar-EG.min.js +1 -1
- package/lib/locale/lang/de-DE.js +7 -1
- package/lib/locale/lang/de-DE.min.js +1 -1
- package/lib/locale/lang/en-US.js +7 -1
- package/lib/locale/lang/en-US.min.js +1 -1
- package/lib/locale/lang/en-US.umd.js +7 -1
- package/lib/locale/lang/es-ES.js +7 -1
- package/lib/locale/lang/es-ES.min.js +1 -1
- package/lib/locale/lang/es-ES.umd.js +7 -1
- package/lib/locale/lang/fr-FR.js +7 -1
- package/lib/locale/lang/fr-FR.min.js +1 -1
- package/lib/locale/lang/hu-HU.js +7 -1
- package/lib/locale/lang/hu-HU.min.js +1 -1
- package/lib/locale/lang/hu-HU.umd.js +7 -1
- package/lib/locale/lang/hy-AM.js +7 -1
- package/lib/locale/lang/hy-AM.min.js +1 -1
- package/lib/locale/lang/id-ID.js +7 -1
- package/lib/locale/lang/id-ID.min.js +1 -1
- package/lib/locale/lang/it-IT.js +7 -1
- package/lib/locale/lang/it-IT.min.js +1 -1
- package/lib/locale/lang/ja-JP.js +7 -1
- package/lib/locale/lang/ja-JP.min.js +1 -1
- package/lib/locale/lang/ja-JP.umd.js +7 -1
- package/lib/locale/lang/ko-KR.js +7 -1
- package/lib/locale/lang/ko-KR.min.js +1 -1
- package/lib/locale/lang/ko-KR.umd.js +7 -1
- package/lib/locale/lang/nb-NO.js +7 -1
- package/lib/locale/lang/nb-NO.min.js +1 -1
- package/lib/locale/lang/pt-BR.js +7 -1
- package/lib/locale/lang/pt-BR.min.js +1 -1
- package/lib/locale/lang/pt-BR.umd.js +7 -1
- package/lib/locale/lang/ru-RU.js +7 -1
- package/lib/locale/lang/ru-RU.min.js +1 -1
- package/lib/locale/lang/ru-RU.umd.js +7 -1
- package/lib/locale/lang/th-TH.js +7 -1
- package/lib/locale/lang/th-TH.min.js +1 -1
- package/lib/locale/lang/ug-CN.js +7 -1
- package/lib/locale/lang/ug-CN.min.js +1 -1
- package/lib/locale/lang/uk-UA.js +7 -1
- package/lib/locale/lang/uk-UA.min.js +1 -1
- package/lib/locale/lang/uk-UA.umd.js +7 -1
- package/lib/locale/lang/vi-VN.js +7 -1
- package/lib/locale/lang/vi-VN.min.js +1 -1
- package/lib/locale/lang/zh-CHT.js +7 -1
- package/lib/locale/lang/zh-CHT.min.js +1 -1
- package/lib/locale/lang/zh-CHT.umd.js +7 -1
- package/lib/locale/lang/zh-CN.js +7 -1
- package/lib/locale/lang/zh-CN.min.js +1 -1
- package/lib/locale/lang/zh-CN.umd.js +7 -1
- package/lib/style.css +1 -1
- package/lib/table/module/custom/mixin.js +5 -3
- package/lib/table/module/custom/mixin.min.js +1 -1
- package/lib/table/module/custom/panel.js +22 -29
- package/lib/table/module/custom/panel.min.js +1 -1
- package/lib/table/module/edit/mixin.js +19 -13
- package/lib/table/module/edit/mixin.min.js +1 -1
- package/lib/table/module/export/export-panel.js +5 -4
- package/lib/table/module/export/export-panel.min.js +1 -1
- package/lib/table/module/export/import-panel.js +8 -7
- package/lib/table/module/export/import-panel.min.js +1 -1
- package/lib/table/module/export/mixin.js +35 -34
- package/lib/table/module/export/mixin.min.js +1 -1
- package/lib/table/module/filter/panel.js +16 -16
- package/lib/table/module/filter/panel.min.js +1 -1
- package/lib/table/module/keyboard/mixin.js +149 -47
- package/lib/table/module/keyboard/mixin.min.js +1 -1
- package/lib/table/module/menu/mixin.js +6 -3
- package/lib/table/module/menu/mixin.min.js +1 -1
- package/lib/table/module/menu/panel.js +7 -7
- package/lib/table/module/menu/panel.min.js +1 -1
- package/lib/table/module/validator/mixin.js +3 -3
- package/lib/table/module/validator/mixin.min.js +1 -1
- package/lib/table/render/index.js +3 -2
- package/lib/table/render/index.min.js +1 -1
- package/lib/table/src/body.js +47 -20
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/cell.js +39 -23
- package/lib/table/src/cell.min.js +1 -1
- package/lib/table/src/column.js +11 -9
- package/lib/table/src/column.min.js +1 -1
- package/lib/table/src/columnInfo.js +6 -6
- package/lib/table/src/columnInfo.min.js +1 -1
- package/lib/table/src/footer.js +12 -5
- package/lib/table/src/footer.min.js +1 -1
- package/lib/table/src/group.js +6 -5
- package/lib/table/src/group.min.js +1 -1
- package/lib/table/src/header.js +16 -8
- package/lib/table/src/header.min.js +1 -1
- package/lib/table/src/methods.js +898 -825
- package/lib/table/src/methods.min.js +1 -1
- package/lib/table/src/props.js +4 -0
- package/lib/table/src/props.min.js +1 -1
- package/lib/table/src/table.js +93 -52
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +62 -21
- package/lib/table/src/util.min.js +1 -1
- package/lib/toolbar/src/toolbar.js +3 -3
- package/lib/ui/index.js +2 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/package.json +2 -2
- package/packages/grid/src/grid.ts +75 -51
- package/packages/locale/lang/ar-EG.ts +7 -1
- package/packages/locale/lang/de-DE.ts +7 -1
- package/packages/locale/lang/en-US.ts +7 -1
- package/packages/locale/lang/es-ES.ts +7 -1
- package/packages/locale/lang/fr-FR.ts +7 -1
- package/packages/locale/lang/hu-HU.ts +7 -1
- package/packages/locale/lang/hy-AM.ts +7 -1
- package/packages/locale/lang/id-ID.ts +7 -1
- package/packages/locale/lang/it-IT.ts +7 -1
- package/packages/locale/lang/ja-JP.ts +7 -1
- package/packages/locale/lang/ko-KR.ts +7 -1
- package/packages/locale/lang/nb-NO.ts +7 -1
- package/packages/locale/lang/pt-BR.ts +7 -1
- package/packages/locale/lang/ru-RU.ts +7 -1
- package/packages/locale/lang/th-TH.ts +7 -1
- package/packages/locale/lang/ug-CN.ts +7 -1
- package/packages/locale/lang/uk-UA.ts +7 -1
- package/packages/locale/lang/vi-VN.ts +7 -1
- package/packages/locale/lang/zh-CHT.ts +7 -1
- package/packages/locale/lang/zh-CN.ts +7 -1
- package/packages/table/module/custom/mixin.ts +6 -3
- package/packages/table/module/custom/panel.ts +42 -37
- package/packages/table/module/edit/mixin.ts +20 -14
- package/packages/table/module/export/export-panel.ts +8 -5
- package/packages/table/module/export/import-panel.ts +11 -7
- package/packages/table/module/export/mixin.ts +37 -32
- package/packages/table/module/filter/panel.ts +25 -10
- package/packages/table/module/keyboard/mixin.ts +155 -49
- package/packages/table/module/menu/mixin.ts +12 -6
- package/packages/table/module/menu/panel.ts +10 -7
- package/packages/table/module/validator/mixin.ts +2 -2
- package/packages/table/render/index.ts +2 -2
- package/packages/table/src/body.ts +39 -20
- package/packages/table/src/cell.ts +27 -22
- package/packages/table/src/column.ts +14 -10
- package/packages/table/src/columnInfo.ts +9 -6
- package/packages/table/src/footer.ts +12 -7
- package/packages/table/src/group.ts +9 -5
- package/packages/table/src/header.ts +16 -9
- package/packages/table/src/methods.ts +840 -734
- package/packages/table/src/props.ts +16 -12
- package/packages/table/src/table.ts +99 -52
- package/packages/table/src/util.ts +63 -21
- package/packages/toolbar/src/toolbar.ts +3 -3
- package/packages/ui/index.ts +1 -0
- /package/es/{iconfont.1741336976538.ttf → iconfont.1742955973002.ttf} +0 -0
- /package/es/{iconfont.1741336976538.woff → iconfont.1742955973002.woff} +0 -0
- /package/es/{iconfont.1741336976538.woff2 → iconfont.1742955973002.woff2} +0 -0
- /package/lib/{iconfont.1741336976538.ttf → iconfont.1742955973002.ttf} +0 -0
- /package/lib/{iconfont.1741336976538.woff → iconfont.1742955973002.woff} +0 -0
- /package/lib/{iconfont.1741336976538.woff2 → iconfont.1742955973002.woff2} +0 -0
package/es/table/src/methods.js
CHANGED
|
@@ -3,10 +3,11 @@ import { browse, getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEv
|
|
|
3
3
|
import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../ui/src/utils';
|
|
4
4
|
import { VxeUI } from '../../ui';
|
|
5
5
|
import Cell from './cell';
|
|
6
|
-
import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth,
|
|
6
|
+
import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId, getRefElem } from './util';
|
|
7
7
|
import { getSlotVNs } from '../../ui/src/vn';
|
|
8
8
|
import { warnLog, errLog } from '../../ui/src/log';
|
|
9
9
|
const { getConfig, getI18n, renderer, formats, interceptor, createEvent } = VxeUI;
|
|
10
|
+
const supportMaxRow = 5e6;
|
|
10
11
|
const customStorageKey = 'VXE_CUSTOM_STORE';
|
|
11
12
|
const maxYHeight = 5e6;
|
|
12
13
|
const maxXWidth = 5e6;
|
|
@@ -218,7 +219,7 @@ function cacheColumnMap($xeTable) {
|
|
|
218
219
|
}
|
|
219
220
|
else {
|
|
220
221
|
if ((storage && !type) || (columnOpts.drag && (isCrossDrag || isSelfToChildDrag))) {
|
|
221
|
-
errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field
|
|
222
|
+
errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field=?`]);
|
|
222
223
|
}
|
|
223
224
|
}
|
|
224
225
|
if (!hasFixed && fixed) {
|
|
@@ -317,9 +318,10 @@ function updateAfterListIndex($xeTable) {
|
|
|
317
318
|
const internalData = $xeTable;
|
|
318
319
|
const { treeConfig } = props;
|
|
319
320
|
const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData;
|
|
321
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
320
322
|
const fullMaps = {};
|
|
321
323
|
afterFullData.forEach((row, index) => {
|
|
322
|
-
const rowid =
|
|
324
|
+
const rowid = handleGetRowId(row);
|
|
323
325
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
324
326
|
const seq = index + 1;
|
|
325
327
|
if (rowRest) {
|
|
@@ -351,8 +353,9 @@ function updateAfterDataIndex($xeTable) {
|
|
|
351
353
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
352
354
|
const fullMaps = {};
|
|
353
355
|
if (treeConfig) {
|
|
356
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
354
357
|
XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
|
|
355
|
-
const rowid =
|
|
358
|
+
const rowid = handleGetRowId(row);
|
|
356
359
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
357
360
|
const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('');
|
|
358
361
|
if (rowRest) {
|
|
@@ -379,19 +382,18 @@ function updateAfterDataIndex($xeTable) {
|
|
|
379
382
|
*/
|
|
380
383
|
function handleVirtualTreeToList($xeTable) {
|
|
381
384
|
const props = $xeTable;
|
|
382
|
-
const reactData = $xeTable;
|
|
383
385
|
const internalData = $xeTable;
|
|
384
386
|
const { treeConfig } = props;
|
|
385
|
-
const { treeExpandedMaps } =
|
|
386
|
-
const { fullAllDataRowIdData } = internalData;
|
|
387
|
+
const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
|
|
387
388
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
388
389
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
389
390
|
if (treeConfig && treeOpts.transform) {
|
|
391
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
390
392
|
const fullData = [];
|
|
391
393
|
const expandMaps = {};
|
|
392
394
|
XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => {
|
|
393
|
-
const rowid =
|
|
394
|
-
const parentRowid =
|
|
395
|
+
const rowid = handleGetRowId(row);
|
|
396
|
+
const parentRowid = handleGetRowId(parentRow);
|
|
395
397
|
if (!parentRow || (expandMaps[parentRowid] && treeExpandedMaps[parentRowid])) {
|
|
396
398
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
397
399
|
if (rowRest) {
|
|
@@ -413,7 +415,7 @@ function updateStyle($xeTable) {
|
|
|
413
415
|
const internalData = $xeTable;
|
|
414
416
|
const { border, showHeaderOverflow: allColumnHeaderOverflow, showFooterOverflow: allColumnFooterOverflow, mouseConfig, spanMethod, footerSpanMethod } = props;
|
|
415
417
|
const { isGroup, currentRow, tableColumn, scrollXLoad, scrollYLoad, overflowX, scrollbarWidth, overflowY, scrollbarHeight, scrollXWidth, columnStore, editStore, isAllOverflow, expandColumn } = reactData;
|
|
416
|
-
const { visibleColumn,
|
|
418
|
+
const { visibleColumn, tableHeight, headerHeight, footerHeight, elemStore, customHeight, customMinHeight, customMaxHeight } = internalData;
|
|
417
419
|
const el = $xeTable.$refs.refElem;
|
|
418
420
|
if (!el) {
|
|
419
421
|
return;
|
|
@@ -422,7 +424,6 @@ function updateStyle($xeTable) {
|
|
|
422
424
|
const osbWidth = overflowY ? scrollbarWidth : 0;
|
|
423
425
|
const osbHeight = overflowX ? scrollbarHeight : 0;
|
|
424
426
|
const emptyPlaceholderElem = $xeTable.$refs.refEmptyPlaceholder;
|
|
425
|
-
const cellOffsetWidth = $xeTable.computeCellOffsetWidth;
|
|
426
427
|
const mouseOpts = $xeTable.computeMouseOpts;
|
|
427
428
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
428
429
|
const bodyWrapperElem = getRefElem(elemStore['main-body-wrapper']);
|
|
@@ -690,56 +691,6 @@ function updateStyle($xeTable) {
|
|
|
690
691
|
tableElem.style.width = tWidth ? `${tWidth}px` : '';
|
|
691
692
|
}
|
|
692
693
|
}
|
|
693
|
-
const colgroupElem = getRefElem(elemStore[`${name}-${layout}-colgroup`]);
|
|
694
|
-
if (colgroupElem) {
|
|
695
|
-
XEUtils.arrayEach(colgroupElem.children, (colElem) => {
|
|
696
|
-
const colid = colElem.getAttribute('name');
|
|
697
|
-
if (fullColumnIdData[colid]) {
|
|
698
|
-
const colRest = fullColumnIdData[colid];
|
|
699
|
-
const column = colRest.column;
|
|
700
|
-
const { showHeaderOverflow, showFooterOverflow, showOverflow } = column;
|
|
701
|
-
let cellOverflow;
|
|
702
|
-
colElem.style.width = `${column.renderWidth}px`;
|
|
703
|
-
if (layout === 'header') {
|
|
704
|
-
cellOverflow = XEUtils.isUndefined(showHeaderOverflow) || XEUtils.isNull(showHeaderOverflow) ? allColumnHeaderOverflow : showHeaderOverflow;
|
|
705
|
-
}
|
|
706
|
-
else if (layout === 'footer') {
|
|
707
|
-
cellOverflow = XEUtils.isUndefined(showFooterOverflow) || XEUtils.isNull(showFooterOverflow) ? allColumnFooterOverflow : showFooterOverflow;
|
|
708
|
-
}
|
|
709
|
-
else {
|
|
710
|
-
cellOverflow = XEUtils.isUndefined(showOverflow) || XEUtils.isNull(showOverflow) ? isAllOverflow : showOverflow;
|
|
711
|
-
}
|
|
712
|
-
const showEllipsis = cellOverflow === 'ellipsis';
|
|
713
|
-
const showTitle = cellOverflow === 'title';
|
|
714
|
-
const showTooltip = cellOverflow === true || cellOverflow === 'tooltip';
|
|
715
|
-
let hasEllipsis = showTitle || showTooltip || showEllipsis;
|
|
716
|
-
const listElem = getRefElem(elemStore[`${name}-${layout}-list`]);
|
|
717
|
-
// 纵向虚拟滚动不支持动态行高
|
|
718
|
-
if (scrollYLoad && !hasEllipsis) {
|
|
719
|
-
hasEllipsis = true;
|
|
720
|
-
}
|
|
721
|
-
if (listElem) {
|
|
722
|
-
XEUtils.arrayEach(listElem.querySelectorAll(`.${column.id}`), (elem) => {
|
|
723
|
-
const colspan = parseInt(elem.getAttribute('colspan') || 1);
|
|
724
|
-
const cellElem = elem.querySelector('.vxe-cell');
|
|
725
|
-
let colWidth = column.renderWidth;
|
|
726
|
-
if (cellElem) {
|
|
727
|
-
if (colspan > 1) {
|
|
728
|
-
const columnIndex = $xeTable.getColumnIndex(column);
|
|
729
|
-
for (let index = 1; index < colspan; index++) {
|
|
730
|
-
const nextColumn = $xeTable.getColumns(columnIndex + index);
|
|
731
|
-
if (nextColumn) {
|
|
732
|
-
colWidth += nextColumn.renderWidth;
|
|
733
|
-
}
|
|
734
|
-
}
|
|
735
|
-
}
|
|
736
|
-
cellElem.style.width = hasEllipsis ? `${colWidth - (cellOffsetWidth * colspan)}px` : '';
|
|
737
|
-
}
|
|
738
|
-
});
|
|
739
|
-
}
|
|
740
|
-
}
|
|
741
|
-
});
|
|
742
|
-
}
|
|
743
694
|
});
|
|
744
695
|
});
|
|
745
696
|
if (currentRow) {
|
|
@@ -750,6 +701,25 @@ function updateStyle($xeTable) {
|
|
|
750
701
|
}
|
|
751
702
|
return $xeTable.$nextTick();
|
|
752
703
|
}
|
|
704
|
+
function checkValidate($xeTable, type) {
|
|
705
|
+
if ($xeTable.triggerValidate) {
|
|
706
|
+
return $xeTable.triggerValidate(type);
|
|
707
|
+
}
|
|
708
|
+
return $xeTable.$nextTick();
|
|
709
|
+
}
|
|
710
|
+
/**
|
|
711
|
+
* 当单元格发生改变时
|
|
712
|
+
* 如果存在规则,则校验
|
|
713
|
+
*/
|
|
714
|
+
function handleChangeCell($xeTable, evnt, params) {
|
|
715
|
+
checkValidate($xeTable, 'blur')
|
|
716
|
+
.catch((e) => e)
|
|
717
|
+
.then(() => {
|
|
718
|
+
$xeTable.handleEdit(params, evnt)
|
|
719
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
720
|
+
.catch((e) => e);
|
|
721
|
+
});
|
|
722
|
+
}
|
|
753
723
|
function handleRadioReserveRow($xeTable, row) {
|
|
754
724
|
const internalData = $xeTable;
|
|
755
725
|
const radioOpts = $xeTable.computeRadioOpts;
|
|
@@ -794,12 +764,12 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
794
764
|
const reactData = $xeTable;
|
|
795
765
|
const internalData = $xeTable;
|
|
796
766
|
const { treeConfig } = props;
|
|
797
|
-
const { selectCheckboxMaps } =
|
|
798
|
-
const { afterFullData, checkboxReserveRowMap } = internalData;
|
|
767
|
+
const { afterFullData, checkboxReserveRowMap, selectCheckboxMaps } = internalData;
|
|
799
768
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
800
769
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
801
770
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
802
771
|
const { checkField, reserve, checkMethod } = checkboxOpts;
|
|
772
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
803
773
|
// indeterminateField 仅支持读取
|
|
804
774
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
805
775
|
const selectRowMaps = {};
|
|
@@ -811,7 +781,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
811
781
|
const checkValFn = (row) => {
|
|
812
782
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
813
783
|
if (checked) {
|
|
814
|
-
selectRowMaps[
|
|
784
|
+
selectRowMaps[handleGetRowId(row)] = row;
|
|
815
785
|
}
|
|
816
786
|
XEUtils.set(row, checkField, checked);
|
|
817
787
|
}
|
|
@@ -841,7 +811,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
841
811
|
*/
|
|
842
812
|
XEUtils.eachTree(afterFullData, (row) => {
|
|
843
813
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
844
|
-
|
|
814
|
+
const rowid = handleGetRowId(row);
|
|
815
|
+
selectRowMaps[rowid] = row;
|
|
845
816
|
}
|
|
846
817
|
}, { children: childrenField });
|
|
847
818
|
}
|
|
@@ -852,7 +823,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
852
823
|
*/
|
|
853
824
|
if (!isForce && checkMethod) {
|
|
854
825
|
XEUtils.eachTree(afterFullData, (row) => {
|
|
855
|
-
const rowid =
|
|
826
|
+
const rowid = handleGetRowId(row);
|
|
856
827
|
if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
|
|
857
828
|
selectRowMaps[rowid] = row;
|
|
858
829
|
}
|
|
@@ -869,7 +840,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
869
840
|
*/
|
|
870
841
|
if (!isForce && checkMethod) {
|
|
871
842
|
afterFullData.forEach((row) => {
|
|
872
|
-
const rowid =
|
|
843
|
+
const rowid = handleGetRowId(row);
|
|
873
844
|
if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
|
|
874
845
|
selectRowMaps[rowid] = row;
|
|
875
846
|
}
|
|
@@ -877,7 +848,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
877
848
|
}
|
|
878
849
|
else {
|
|
879
850
|
afterFullData.forEach(row => {
|
|
880
|
-
|
|
851
|
+
const rowid = handleGetRowId(row);
|
|
852
|
+
selectRowMaps[rowid] = row;
|
|
881
853
|
});
|
|
882
854
|
}
|
|
883
855
|
}
|
|
@@ -889,7 +861,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
889
861
|
*/
|
|
890
862
|
if (!isForce && checkMethod) {
|
|
891
863
|
afterFullData.forEach((row) => {
|
|
892
|
-
const rowid =
|
|
864
|
+
const rowid = handleGetRowId(row);
|
|
893
865
|
if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
|
|
894
866
|
selectRowMaps[rowid] = row;
|
|
895
867
|
}
|
|
@@ -908,10 +880,10 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
908
880
|
afterFullData.forEach((row) => handleCheckboxReserveRow($xeTable, row, false));
|
|
909
881
|
}
|
|
910
882
|
}
|
|
911
|
-
reactData.
|
|
883
|
+
reactData.updateCheckboxFlag++;
|
|
884
|
+
internalData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
|
|
912
885
|
reactData.isAllSelected = checked;
|
|
913
886
|
reactData.isIndeterminate = false;
|
|
914
|
-
reactData.treeIndeterminateMaps = {};
|
|
915
887
|
internalData.treeIndeterminateRowMaps = {};
|
|
916
888
|
$xeTable.checkSelectionStatus();
|
|
917
889
|
return $xeTable.$nextTick();
|
|
@@ -922,8 +894,8 @@ function handleReserveStatus($xeTable) {
|
|
|
922
894
|
const reactData = $xeTable;
|
|
923
895
|
const internalData = $xeTable;
|
|
924
896
|
const { treeConfig } = props;
|
|
925
|
-
const { expandColumn, currentRow,
|
|
926
|
-
const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData;
|
|
897
|
+
const { expandColumn, currentRow, selectRadioRow } = reactData;
|
|
898
|
+
const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow, selectCheckboxMaps, treeExpandedMaps, rowExpandedMaps } = internalData;
|
|
927
899
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
928
900
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
929
901
|
const radioOpts = $xeTable.computeRadioOpts;
|
|
@@ -940,7 +912,8 @@ function handleReserveStatus($xeTable) {
|
|
|
940
912
|
}
|
|
941
913
|
}
|
|
942
914
|
// 复选框
|
|
943
|
-
|
|
915
|
+
internalData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
|
|
916
|
+
reactData.updateCheckboxFlag++;
|
|
944
917
|
// 还原保留选中状态
|
|
945
918
|
if (checkboxOpts.reserve) {
|
|
946
919
|
handleCheckedCheckboxRow($xeTable, handleReserveRow($xeTable, internalData.checkboxReserveRowMap), true, true);
|
|
@@ -949,17 +922,161 @@ function handleReserveStatus($xeTable) {
|
|
|
949
922
|
reactData.currentRow = null; // 刷新当前行状态
|
|
950
923
|
}
|
|
951
924
|
// 行展开
|
|
952
|
-
|
|
925
|
+
internalData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
|
|
926
|
+
reactData.rowExpandedFlag++;
|
|
953
927
|
// 还原保留状态
|
|
954
928
|
if (expandColumn && expandOpts.reserve) {
|
|
955
929
|
$xeTable.setRowExpand(handleReserveRow($xeTable, internalData.rowExpandedReserveRowMap), true);
|
|
956
930
|
}
|
|
957
931
|
// 树展开
|
|
958
|
-
|
|
932
|
+
internalData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
|
|
933
|
+
reactData.treeExpandedFlag++;
|
|
959
934
|
if (treeConfig && treeOpts.reserve) {
|
|
960
935
|
$xeTable.setTreeExpand(handleReserveRow($xeTable, internalData.treeExpandedReserveRowMap), true);
|
|
961
936
|
}
|
|
962
937
|
}
|
|
938
|
+
/**
|
|
939
|
+
* 处理默认展开树节点
|
|
940
|
+
*/
|
|
941
|
+
const handleDefaultTreeExpand = ($xeTable) => {
|
|
942
|
+
const props = $xeTable;
|
|
943
|
+
const internalData = $xeTable;
|
|
944
|
+
const { treeConfig } = props;
|
|
945
|
+
if (treeConfig) {
|
|
946
|
+
const { tableFullData } = internalData;
|
|
947
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
948
|
+
const { expandAll, expandRowKeys } = treeOpts;
|
|
949
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
950
|
+
if (expandAll) {
|
|
951
|
+
$xeTable.setAllTreeExpand(true);
|
|
952
|
+
}
|
|
953
|
+
else if (expandRowKeys) {
|
|
954
|
+
const defExpandeds = [];
|
|
955
|
+
const rowkey = getRowkey($xeTable);
|
|
956
|
+
expandRowKeys.forEach((rowid) => {
|
|
957
|
+
const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
|
|
958
|
+
if (matchObj) {
|
|
959
|
+
defExpandeds.push(matchObj.item);
|
|
960
|
+
}
|
|
961
|
+
});
|
|
962
|
+
$xeTable.setTreeExpand(defExpandeds, true);
|
|
963
|
+
}
|
|
964
|
+
}
|
|
965
|
+
};
|
|
966
|
+
const handleAsyncTreeExpandChilds = ($xeTable, row) => {
|
|
967
|
+
const reactData = $xeTable;
|
|
968
|
+
const internalData = $xeTable;
|
|
969
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
970
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
971
|
+
const { transform, loadMethod } = treeOpts;
|
|
972
|
+
const { checkStrictly } = checkboxOpts;
|
|
973
|
+
return new Promise(resolve => {
|
|
974
|
+
if (loadMethod) {
|
|
975
|
+
const { fullAllDataRowIdData, treeExpandLazyLoadedMaps } = internalData;
|
|
976
|
+
const rowid = getRowid($xeTable, row);
|
|
977
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
978
|
+
treeExpandLazyLoadedMaps[rowid] = row;
|
|
979
|
+
Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
|
|
980
|
+
if (rowRest) {
|
|
981
|
+
rowRest.treeLoaded = true;
|
|
982
|
+
}
|
|
983
|
+
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
984
|
+
delete treeExpandLazyLoadedMaps[rowid];
|
|
985
|
+
}
|
|
986
|
+
if (!XEUtils.isArray(childRecords)) {
|
|
987
|
+
childRecords = [];
|
|
988
|
+
}
|
|
989
|
+
if (childRecords) {
|
|
990
|
+
return $xeTable.loadTreeChildren(row, childRecords).then(childRows => {
|
|
991
|
+
const { treeExpandedMaps } = internalData;
|
|
992
|
+
if (childRows.length && !treeExpandedMaps[rowid]) {
|
|
993
|
+
treeExpandedMaps[rowid] = row;
|
|
994
|
+
}
|
|
995
|
+
reactData.treeExpandedFlag++;
|
|
996
|
+
// 如果当前节点已选中,则展开后子节点也被选中
|
|
997
|
+
if (!checkStrictly && $xeTable.isCheckedByCheckboxRow(row)) {
|
|
998
|
+
handleCheckedCheckboxRow($xeTable, childRows, true);
|
|
999
|
+
}
|
|
1000
|
+
return $xeTable.$nextTick().then(() => {
|
|
1001
|
+
if (transform) {
|
|
1002
|
+
$xeTable.handleTableData();
|
|
1003
|
+
updateAfterDataIndex($xeTable);
|
|
1004
|
+
return $xeTable.$nextTick();
|
|
1005
|
+
}
|
|
1006
|
+
});
|
|
1007
|
+
});
|
|
1008
|
+
}
|
|
1009
|
+
}).catch(() => {
|
|
1010
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
1011
|
+
if (rowRest) {
|
|
1012
|
+
rowRest.treeLoaded = false;
|
|
1013
|
+
}
|
|
1014
|
+
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
1015
|
+
delete treeExpandLazyLoadedMaps[rowid];
|
|
1016
|
+
}
|
|
1017
|
+
}).finally(() => {
|
|
1018
|
+
reactData.treeExpandedFlag++;
|
|
1019
|
+
$xeTable.$nextTick().then(() => $xeTable.recalculate()).then(() => resolve());
|
|
1020
|
+
});
|
|
1021
|
+
}
|
|
1022
|
+
else {
|
|
1023
|
+
resolve();
|
|
1024
|
+
}
|
|
1025
|
+
});
|
|
1026
|
+
};
|
|
1027
|
+
const handleTreeExpandReserve = ($xeTable, row, expanded) => {
|
|
1028
|
+
const internalData = $xeTable;
|
|
1029
|
+
const { treeExpandedReserveRowMap } = internalData;
|
|
1030
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
1031
|
+
if (treeOpts.reserve) {
|
|
1032
|
+
const rowid = getRowid($xeTable, row);
|
|
1033
|
+
if (expanded) {
|
|
1034
|
+
treeExpandedReserveRowMap[rowid] = row;
|
|
1035
|
+
}
|
|
1036
|
+
else if (treeExpandedReserveRowMap[rowid]) {
|
|
1037
|
+
delete treeExpandedReserveRowMap[rowid];
|
|
1038
|
+
}
|
|
1039
|
+
}
|
|
1040
|
+
};
|
|
1041
|
+
const handleAsyncRowExpand = ($xeTable, row) => {
|
|
1042
|
+
const reactData = $xeTable;
|
|
1043
|
+
const internalData = $xeTable;
|
|
1044
|
+
return new Promise(resolve => {
|
|
1045
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
1046
|
+
const { loadMethod } = expandOpts;
|
|
1047
|
+
if (loadMethod) {
|
|
1048
|
+
const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
|
|
1049
|
+
const rowid = getRowid($xeTable, row);
|
|
1050
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
1051
|
+
rowExpandLazyLoadedMaps[rowid] = row;
|
|
1052
|
+
loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
|
|
1053
|
+
const { rowExpandedMaps } = internalData;
|
|
1054
|
+
if (rowRest) {
|
|
1055
|
+
rowRest.expandLoaded = true;
|
|
1056
|
+
}
|
|
1057
|
+
rowExpandedMaps[rowid] = row;
|
|
1058
|
+
reactData.rowExpandedFlag++;
|
|
1059
|
+
}).catch(() => {
|
|
1060
|
+
if (rowRest) {
|
|
1061
|
+
rowRest.expandLoaded = false;
|
|
1062
|
+
}
|
|
1063
|
+
}).finally(() => {
|
|
1064
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
1065
|
+
if (rowExpandLazyLoadedMaps[rowid]) {
|
|
1066
|
+
delete rowExpandLazyLoadedMaps[rowid];
|
|
1067
|
+
}
|
|
1068
|
+
reactData.rowExpandedFlag++;
|
|
1069
|
+
$xeTable.$nextTick()
|
|
1070
|
+
.then(() => $xeTable.recalculate())
|
|
1071
|
+
.then(() => $xeTable.updateCellAreas())
|
|
1072
|
+
.then(() => resolve());
|
|
1073
|
+
});
|
|
1074
|
+
}
|
|
1075
|
+
else {
|
|
1076
|
+
resolve();
|
|
1077
|
+
}
|
|
1078
|
+
});
|
|
1079
|
+
};
|
|
963
1080
|
function calcVarRowHeightConfig($xeTable, sizeKey, sizeEl) {
|
|
964
1081
|
const reactData = $xeTable;
|
|
965
1082
|
const { rowHeightStore } = reactData;
|
|
@@ -1022,12 +1139,13 @@ function handleVirtualYVisible($xeTable) {
|
|
|
1022
1139
|
visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1;
|
|
1023
1140
|
}
|
|
1024
1141
|
else {
|
|
1142
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1025
1143
|
let leftIndex = 0;
|
|
1026
1144
|
let rightIndex = afterFullData.length;
|
|
1027
1145
|
while (leftIndex < rightIndex) {
|
|
1028
1146
|
const rIndex = Math.floor((leftIndex + rightIndex) / 2);
|
|
1029
1147
|
const row = afterFullData[rIndex];
|
|
1030
|
-
const rowid =
|
|
1148
|
+
const rowid = handleGetRowId(row);
|
|
1031
1149
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
1032
1150
|
if (rowRest.oTop <= startTop) {
|
|
1033
1151
|
leftIndex = rIndex + 1;
|
|
@@ -1039,7 +1157,7 @@ function handleVirtualYVisible($xeTable) {
|
|
|
1039
1157
|
toVisibleIndex = Math.max(0, leftIndex < afterFullData.length ? leftIndex - 2 : 0);
|
|
1040
1158
|
for (let rIndex = toVisibleIndex, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
1041
1159
|
const row = afterFullData[rIndex];
|
|
1042
|
-
const rowid =
|
|
1160
|
+
const rowid = handleGetRowId(row);
|
|
1043
1161
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
1044
1162
|
visibleSize++;
|
|
1045
1163
|
if (rowRest.oTop > endTop || visibleSize >= 100) {
|
|
@@ -1069,9 +1187,12 @@ function calculateMergerOffsetIndex(list, offsetItem, type) {
|
|
|
1069
1187
|
}
|
|
1070
1188
|
}
|
|
1071
1189
|
}
|
|
1072
|
-
function setMerges(
|
|
1190
|
+
function setMerges($xeTable, merges, mList, rowList) {
|
|
1191
|
+
const props = $xeTable;
|
|
1192
|
+
const internalData = $xeTable;
|
|
1073
1193
|
if (merges) {
|
|
1074
|
-
const { treeConfig
|
|
1194
|
+
const { treeConfig } = props;
|
|
1195
|
+
const { visibleColumn } = internalData;
|
|
1075
1196
|
if (!XEUtils.isArray(merges)) {
|
|
1076
1197
|
merges = [merges];
|
|
1077
1198
|
}
|
|
@@ -1117,10 +1238,13 @@ function setMerges(_vm, merges, mList, rowList) {
|
|
|
1117
1238
|
});
|
|
1118
1239
|
}
|
|
1119
1240
|
}
|
|
1120
|
-
function removeMerges(
|
|
1241
|
+
function removeMerges($xeTable, merges, mList, rowList) {
|
|
1242
|
+
const props = $xeTable;
|
|
1243
|
+
const internalData = $xeTable;
|
|
1121
1244
|
const rest = [];
|
|
1122
1245
|
if (merges) {
|
|
1123
|
-
const { treeConfig
|
|
1246
|
+
const { treeConfig } = props;
|
|
1247
|
+
const { visibleColumn } = internalData;
|
|
1124
1248
|
if (!XEUtils.isArray(merges)) {
|
|
1125
1249
|
merges = [merges];
|
|
1126
1250
|
}
|
|
@@ -1300,6 +1424,7 @@ function autoCellWidth($xeTable) {
|
|
|
1300
1424
|
internalData.headerHeight = headerHeight;
|
|
1301
1425
|
internalData.footerHeight = footerHeight;
|
|
1302
1426
|
reactData.overflowX = overflowX;
|
|
1427
|
+
reactData.resizeWidthFlag++;
|
|
1303
1428
|
updateColumnOffsetLeft($xeTable);
|
|
1304
1429
|
updateHeight($xeTable);
|
|
1305
1430
|
reactData.parentHeight = Math.max(internalData.headerHeight + footerHeight + 20, $xeTable.getParentHeight());
|
|
@@ -1327,8 +1452,9 @@ const calcCellHeight = ($xeTable) => {
|
|
|
1327
1452
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
1328
1453
|
const el = $xeTable.$refs.refElem;
|
|
1329
1454
|
if (!isAllOverflow && scrollYLoad && el) {
|
|
1455
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1330
1456
|
tableData.forEach(row => {
|
|
1331
|
-
const rowid =
|
|
1457
|
+
const rowid = handleGetRowId(row);
|
|
1332
1458
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
1333
1459
|
if (rowRest) {
|
|
1334
1460
|
const height = calcCellAutoHeight(rowRest, el);
|
|
@@ -1569,9 +1695,10 @@ function hideDropTip($xeTable) {
|
|
|
1569
1695
|
* @param {Event} evnt 事件
|
|
1570
1696
|
* @param {Row} row 行对象
|
|
1571
1697
|
*/
|
|
1572
|
-
function handleTooltip($xeTable, evnt, tdEl, overflowElem,
|
|
1698
|
+
function handleTooltip($xeTable, evnt, tdEl, overflowElem, params) {
|
|
1573
1699
|
const reactData = $xeTable;
|
|
1574
|
-
|
|
1700
|
+
const tipOverEl = overflowElem || tdEl;
|
|
1701
|
+
if (!tipOverEl) {
|
|
1575
1702
|
return $xeTable.$nextTick();
|
|
1576
1703
|
}
|
|
1577
1704
|
params.cell = tdEl;
|
|
@@ -1581,9 +1708,8 @@ function handleTooltip($xeTable, evnt, tdEl, overflowElem, tipElem, params) {
|
|
|
1581
1708
|
const { showAll, contentMethod } = tooltipOpts;
|
|
1582
1709
|
const customContent = contentMethod ? contentMethod(params) : null;
|
|
1583
1710
|
const useCustom = contentMethod && !XEUtils.eqNull(customContent);
|
|
1584
|
-
const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ?
|
|
1585
|
-
|
|
1586
|
-
if (content && (showAll || useCustom || isCellOverflow)) {
|
|
1711
|
+
const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? tipOverEl.innerText : tipOverEl.textContent).trim();
|
|
1712
|
+
if (content && (showAll || useCustom || (tipOverEl.scrollWidth > tipOverEl.clientWidth))) {
|
|
1587
1713
|
Object.assign(tooltipStore, {
|
|
1588
1714
|
row,
|
|
1589
1715
|
column,
|
|
@@ -1593,7 +1719,7 @@ function handleTooltip($xeTable, evnt, tdEl, overflowElem, tipElem, params) {
|
|
|
1593
1719
|
$xeTable.$nextTick(() => {
|
|
1594
1720
|
const $tooltip = $xeTable.$refs.refTooltip;
|
|
1595
1721
|
if ($tooltip && $tooltip.open) {
|
|
1596
|
-
$tooltip.open(
|
|
1722
|
+
$tooltip.open(tipOverEl, formatText(content));
|
|
1597
1723
|
}
|
|
1598
1724
|
});
|
|
1599
1725
|
}
|
|
@@ -1768,8 +1894,8 @@ function parseColumns($xeTable, isReset) {
|
|
|
1768
1894
|
const props = $xeTable;
|
|
1769
1895
|
const reactData = $xeTable;
|
|
1770
1896
|
const internalData = $xeTable;
|
|
1771
|
-
const { showOverflow } = props
|
|
1772
|
-
const rowOpts = $xeTable.computeRowOpts
|
|
1897
|
+
// const { showOverflow } = props
|
|
1898
|
+
// const rowOpts = $xeTable.computeRowOpts
|
|
1773
1899
|
const leftList = [];
|
|
1774
1900
|
const centerList = [];
|
|
1775
1901
|
const rightList = [];
|
|
@@ -1842,28 +1968,28 @@ function parseColumns($xeTable, isReset) {
|
|
|
1842
1968
|
reactData.hasFixedColumn = leftList.length > 0 || rightList.length > 0;
|
|
1843
1969
|
Object.assign(columnStore, { leftList, centerList, rightList });
|
|
1844
1970
|
if (scrollXLoad) {
|
|
1845
|
-
if (showOverflow) {
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
}
|
|
1853
|
-
if (process.env.NODE_ENV === 'development') {
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
}
|
|
1971
|
+
// if (showOverflow) {
|
|
1972
|
+
// if (!rowOpts.height) {
|
|
1973
|
+
// const errColumn = internalData.tableFullColumn.find(column => column.showOverflow === false)
|
|
1974
|
+
// if (errColumn) {
|
|
1975
|
+
// errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true'])
|
|
1976
|
+
// }
|
|
1977
|
+
// }
|
|
1978
|
+
// }
|
|
1979
|
+
// if (process.env.NODE_ENV === 'development') {
|
|
1980
|
+
// if (props.showHeader && !props.showHeaderOverflow) {
|
|
1981
|
+
// warnLog('vxe.error.reqProp', ['show-header-overflow'])
|
|
1982
|
+
// }
|
|
1983
|
+
// if (props.showFooter && !props.showFooterOverflow) {
|
|
1984
|
+
// warnLog('vxe.error.reqProp', ['show-footer-overflow'])
|
|
1985
|
+
// }
|
|
1986
|
+
if (props.spanMethod) {
|
|
1987
|
+
warnLog('vxe.error.scrollErrProp', ['span-method']);
|
|
1988
|
+
}
|
|
1989
|
+
if (props.footerSpanMethod) {
|
|
1990
|
+
warnLog('vxe.error.scrollErrProp', ['footer-span-method']);
|
|
1991
|
+
}
|
|
1992
|
+
// }
|
|
1867
1993
|
if (isReset) {
|
|
1868
1994
|
const { visibleSize } = handleVirtualXVisible($xeTable);
|
|
1869
1995
|
scrollXStore.startIndex = 0;
|
|
@@ -1975,6 +2101,35 @@ function loadScrollYData($xeTable) {
|
|
|
1975
2101
|
}
|
|
1976
2102
|
}
|
|
1977
2103
|
}
|
|
2104
|
+
const createGetRowCacheProp = (prop) => {
|
|
2105
|
+
return function (row) {
|
|
2106
|
+
const $xeTable = this;
|
|
2107
|
+
const internalData = $xeTable;
|
|
2108
|
+
const { fullAllDataRowIdData } = internalData;
|
|
2109
|
+
if (row) {
|
|
2110
|
+
const rowid = getRowid($xeTable, row);
|
|
2111
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
2112
|
+
if (rowRest) {
|
|
2113
|
+
return rowRest[prop];
|
|
2114
|
+
}
|
|
2115
|
+
}
|
|
2116
|
+
return -1;
|
|
2117
|
+
};
|
|
2118
|
+
};
|
|
2119
|
+
const createGetColumnCacheProp = (prop) => {
|
|
2120
|
+
return function (column) {
|
|
2121
|
+
const $xeTable = this;
|
|
2122
|
+
const internalData = $xeTable;
|
|
2123
|
+
const { fullColumnIdData } = internalData;
|
|
2124
|
+
if (column) {
|
|
2125
|
+
const colRest = fullColumnIdData[column.id];
|
|
2126
|
+
if (colRest) {
|
|
2127
|
+
return colRest[prop];
|
|
2128
|
+
}
|
|
2129
|
+
}
|
|
2130
|
+
return -1;
|
|
2131
|
+
};
|
|
2132
|
+
};
|
|
1978
2133
|
function lazyScrollXData($xeTable) {
|
|
1979
2134
|
const internalData = $xeTable;
|
|
1980
2135
|
const { lxTimeout, lxRunTime, scrollXStore } = internalData;
|
|
@@ -2132,7 +2287,7 @@ function calcCellWidth($xeTable) {
|
|
|
2132
2287
|
}
|
|
2133
2288
|
function handleUpdateColResize($xeTable, evnt, params) {
|
|
2134
2289
|
$xeTable.analyColumnWidth();
|
|
2135
|
-
$xeTable.recalculate(
|
|
2290
|
+
$xeTable.recalculate().then(() => {
|
|
2136
2291
|
$xeTable.saveCustomStore('update:width');
|
|
2137
2292
|
$xeTable.updateCellAreas();
|
|
2138
2293
|
$xeTable.dispatchEvent('column-resizable-change', params, evnt);
|
|
@@ -2144,7 +2299,7 @@ function handleUpdateColResize($xeTable, evnt, params) {
|
|
|
2144
2299
|
function handleUpdateRowResize($xeTable, evnt, params) {
|
|
2145
2300
|
const reactData = $xeTable;
|
|
2146
2301
|
reactData.resizeHeightFlag++;
|
|
2147
|
-
$xeTable.recalculate(
|
|
2302
|
+
$xeTable.recalculate().then(() => {
|
|
2148
2303
|
$xeTable.updateCellAreas();
|
|
2149
2304
|
$xeTable.dispatchEvent('row-resizable-change', params, evnt);
|
|
2150
2305
|
setTimeout(() => $xeTable.recalculate(true), 300);
|
|
@@ -2165,16 +2320,17 @@ function updateColumnOffsetLeft($xeTable) {
|
|
|
2165
2320
|
function updateRowOffsetTop($xeTable) {
|
|
2166
2321
|
const reactData = $xeTable;
|
|
2167
2322
|
const internalData = $xeTable;
|
|
2168
|
-
const { expandColumn
|
|
2169
|
-
const { afterFullData, fullAllDataRowIdData } = internalData;
|
|
2323
|
+
const { expandColumn } = reactData;
|
|
2324
|
+
const { afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
2170
2325
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
2171
2326
|
const rowOpts = $xeTable.computeRowOpts;
|
|
2172
2327
|
const cellOpts = $xeTable.computeCellOpts;
|
|
2173
2328
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
2329
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
2174
2330
|
let offsetTop = 0;
|
|
2175
2331
|
for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
2176
2332
|
const row = afterFullData[rIndex];
|
|
2177
|
-
const rowid =
|
|
2333
|
+
const rowid = handleGetRowId(row);
|
|
2178
2334
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
2179
2335
|
rowRest.oTop = offsetTop;
|
|
2180
2336
|
offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
|
|
@@ -2187,47 +2343,43 @@ function updateRowOffsetTop($xeTable) {
|
|
|
2187
2343
|
function updateRowExpandStyle($xeTable) {
|
|
2188
2344
|
const reactData = $xeTable;
|
|
2189
2345
|
const internalData = $xeTable;
|
|
2190
|
-
const { expandColumn, scrollYLoad,
|
|
2346
|
+
const { expandColumn, scrollYLoad, scrollYTop, isScrollYBig } = reactData;
|
|
2191
2347
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
2192
2348
|
const rowOpts = $xeTable.computeRowOpts;
|
|
2193
2349
|
const cellOpts = $xeTable.computeCellOpts;
|
|
2194
2350
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
2195
2351
|
const { mode } = expandOpts;
|
|
2196
2352
|
if (expandColumn && mode === 'fixed') {
|
|
2197
|
-
const { elemStore,
|
|
2353
|
+
const { elemStore, fullAllDataRowIdData } = internalData;
|
|
2198
2354
|
const rowExpandEl = $xeTable.$refs.refRowExpandElem;
|
|
2199
2355
|
const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
|
|
2200
2356
|
if (rowExpandEl && bodyScrollElem) {
|
|
2201
2357
|
let isUpdateHeight = false;
|
|
2202
|
-
if (scrollYLoad) {
|
|
2203
|
-
let offsetTop = 0;
|
|
2204
|
-
for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
2205
|
-
const row = afterFullData[rIndex];
|
|
2206
|
-
const rowid = getRowid($xeTable, row);
|
|
2207
|
-
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
2208
|
-
rowRest.oTop = offsetTop;
|
|
2209
|
-
offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
|
|
2210
|
-
// 是否展开行
|
|
2211
|
-
if (expandColumn && rowExpandedMaps[rowid]) {
|
|
2212
|
-
offsetTop += rowRest.expandHeight || expandOpts.height || 0;
|
|
2213
|
-
}
|
|
2214
|
-
}
|
|
2215
|
-
}
|
|
2216
2358
|
XEUtils.arrayEach(rowExpandEl.children, reEl => {
|
|
2217
2359
|
const expandEl = reEl;
|
|
2218
2360
|
const rowid = expandEl.getAttribute('rowid') || '';
|
|
2219
2361
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
2220
2362
|
if (rowRest) {
|
|
2221
2363
|
const expandHeight = expandEl.offsetHeight + 1;
|
|
2364
|
+
const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
|
|
2365
|
+
let offsetTop = 0;
|
|
2222
2366
|
if (scrollYLoad) {
|
|
2223
|
-
|
|
2367
|
+
if (isScrollYBig && trEl) {
|
|
2368
|
+
offsetTop = trEl.offsetTop + trEl.offsetHeight;
|
|
2369
|
+
}
|
|
2370
|
+
else {
|
|
2371
|
+
offsetTop = rowRest.oTop + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight);
|
|
2372
|
+
}
|
|
2224
2373
|
}
|
|
2225
2374
|
else {
|
|
2226
|
-
const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
|
|
2227
2375
|
if (trEl) {
|
|
2228
|
-
|
|
2376
|
+
offsetTop = trEl.offsetTop + trEl.offsetHeight;
|
|
2229
2377
|
}
|
|
2230
2378
|
}
|
|
2379
|
+
if (isScrollYBig) {
|
|
2380
|
+
offsetTop += scrollYTop;
|
|
2381
|
+
}
|
|
2382
|
+
expandEl.style.top = toCssUnit(offsetTop);
|
|
2231
2383
|
if (!isUpdateHeight) {
|
|
2232
2384
|
if (rowRest.expandHeight !== expandHeight) {
|
|
2233
2385
|
isUpdateHeight = true;
|
|
@@ -2238,6 +2390,9 @@ function updateRowExpandStyle($xeTable) {
|
|
|
2238
2390
|
});
|
|
2239
2391
|
if (isUpdateHeight) {
|
|
2240
2392
|
reactData.rowExpandHeightFlag++;
|
|
2393
|
+
$xeTable.$nextTick(() => {
|
|
2394
|
+
updateRowOffsetTop($xeTable);
|
|
2395
|
+
});
|
|
2241
2396
|
}
|
|
2242
2397
|
}
|
|
2243
2398
|
}
|
|
@@ -2253,10 +2408,11 @@ function handleRowExpandScroll($xeTable) {
|
|
|
2253
2408
|
}
|
|
2254
2409
|
const Methods = {
|
|
2255
2410
|
callSlot(slotFunc, params, h, vNodes) {
|
|
2411
|
+
const $xeTable = this;
|
|
2412
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
2256
2413
|
if (slotFunc) {
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
return $xegrid.callSlot(slotFunc, params, h, vNodes);
|
|
2414
|
+
if ($xeGrid) {
|
|
2415
|
+
return $xeGrid.callSlot(slotFunc, params, h, vNodes);
|
|
2260
2416
|
}
|
|
2261
2417
|
if (XEUtils.isFunction(slotFunc)) {
|
|
2262
2418
|
return getSlotVNs(slotFunc.call(this, params, h, vNodes));
|
|
@@ -2272,8 +2428,10 @@ const Methods = {
|
|
|
2272
2428
|
* 获取父容器元素
|
|
2273
2429
|
*/
|
|
2274
2430
|
getParentElem() {
|
|
2275
|
-
const
|
|
2276
|
-
|
|
2431
|
+
const $xeTable = this;
|
|
2432
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
2433
|
+
const { $el } = this;
|
|
2434
|
+
return $xeGrid ? $xeGrid.$el.parentNode : $el.parentNode;
|
|
2277
2435
|
},
|
|
2278
2436
|
/**
|
|
2279
2437
|
* 获取父容器的高度
|
|
@@ -2306,8 +2464,9 @@ const Methods = {
|
|
|
2306
2464
|
* 如果存在表尾合计滚动条,则需要排除滚动条高度
|
|
2307
2465
|
*/
|
|
2308
2466
|
getExcludeHeight() {
|
|
2309
|
-
const
|
|
2310
|
-
|
|
2467
|
+
const $xeTable = this;
|
|
2468
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
2469
|
+
return $xeGrid ? $xeGrid.getExcludeHeight() : 0;
|
|
2311
2470
|
},
|
|
2312
2471
|
/**
|
|
2313
2472
|
* 重置表格的一切数据状态
|
|
@@ -2386,6 +2545,9 @@ const Methods = {
|
|
|
2386
2545
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2387
2546
|
let treeData = [];
|
|
2388
2547
|
let fullData = datas ? datas.slice(0) : [];
|
|
2548
|
+
if (fullData.length > supportMaxRow) {
|
|
2549
|
+
errLog('vxe.error.errMaxRow', [supportMaxRow]);
|
|
2550
|
+
}
|
|
2389
2551
|
if (treeConfig) {
|
|
2390
2552
|
// 树结构自动转换
|
|
2391
2553
|
if (treeOpts.transform) {
|
|
@@ -2628,18 +2790,14 @@ const Methods = {
|
|
|
2628
2790
|
const reactData = $xeTable;
|
|
2629
2791
|
const internalData = $xeTable;
|
|
2630
2792
|
const { treeConfig } = props;
|
|
2631
|
-
const { treeExpandedMaps } =
|
|
2632
|
-
const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData;
|
|
2793
|
+
const { fullAllDataRowIdData, tableFullData, tableFullTreeData, treeExpandedMaps } = internalData;
|
|
2633
2794
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
2634
2795
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2635
2796
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
2636
2797
|
const { lazy } = treeOpts;
|
|
2637
|
-
const rowkey = getRowkey($xeTable);
|
|
2638
|
-
const isDeepKey = rowkey.indexOf('.') > -1;
|
|
2639
2798
|
const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
|
|
2640
2799
|
const fullDataRowIdMaps = {};
|
|
2641
|
-
const
|
|
2642
|
-
const handleRowId = isDeepKey ? updateDeepRowKey : updateFastRowKey;
|
|
2800
|
+
const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
|
|
2643
2801
|
const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
|
|
2644
2802
|
let rowRest = fullAllDataRowIdMaps[rowid];
|
|
2645
2803
|
if (!rowRest) {
|
|
@@ -2658,15 +2816,14 @@ const Methods = {
|
|
|
2658
2816
|
};
|
|
2659
2817
|
if (treeConfig) {
|
|
2660
2818
|
XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
|
|
2661
|
-
const rowid =
|
|
2819
|
+
const rowid = handleUpdateRowId(row);
|
|
2662
2820
|
if (treeConfig && lazy) {
|
|
2663
|
-
const treeExpRest = treeTempExpandedMaps[rowid];
|
|
2664
2821
|
if (row[hasChildField] && row[childrenField] === undefined) {
|
|
2665
2822
|
row[childrenField] = null;
|
|
2666
2823
|
}
|
|
2667
|
-
if (
|
|
2824
|
+
if (treeExpandedMaps[rowid]) {
|
|
2668
2825
|
if (!row[childrenField] || !row[childrenField].length) {
|
|
2669
|
-
delete
|
|
2826
|
+
delete treeExpandedMaps[rowid];
|
|
2670
2827
|
}
|
|
2671
2828
|
}
|
|
2672
2829
|
}
|
|
@@ -2675,12 +2832,12 @@ const Methods = {
|
|
|
2675
2832
|
}
|
|
2676
2833
|
else {
|
|
2677
2834
|
tableFullData.forEach((row, index, items) => {
|
|
2678
|
-
handleRowCache(row, index, items, index, null,
|
|
2835
|
+
handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1);
|
|
2679
2836
|
});
|
|
2680
2837
|
}
|
|
2681
2838
|
internalData.fullDataRowIdData = fullDataRowIdMaps;
|
|
2682
2839
|
internalData.fullAllDataRowIdData = fullAllDataRowIdMaps;
|
|
2683
|
-
reactData.
|
|
2840
|
+
reactData.treeExpandedFlag++;
|
|
2684
2841
|
},
|
|
2685
2842
|
cacheSourceMap(fullData) {
|
|
2686
2843
|
const $xeTable = this;
|
|
@@ -2688,17 +2845,12 @@ const Methods = {
|
|
|
2688
2845
|
const internalData = $xeTable;
|
|
2689
2846
|
const { treeConfig } = props;
|
|
2690
2847
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
2691
|
-
let { sourceDataRowIdData } = internalData;
|
|
2692
2848
|
const sourceData = XEUtils.clone(fullData, true);
|
|
2693
|
-
const
|
|
2694
|
-
|
|
2849
|
+
const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
|
|
2850
|
+
const sourceRowIdData = {};
|
|
2695
2851
|
const handleSourceRow = (row) => {
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
rowid = getRowUniqueId();
|
|
2699
|
-
XEUtils.set(row, rowkey, rowid);
|
|
2700
|
-
}
|
|
2701
|
-
sourceDataRowIdData[rowid] = row;
|
|
2852
|
+
const rowid = handleUpdateRowId(row);
|
|
2853
|
+
sourceRowIdData[rowid] = row;
|
|
2702
2854
|
};
|
|
2703
2855
|
// 源数据缓存
|
|
2704
2856
|
if (treeConfig) {
|
|
@@ -2708,6 +2860,7 @@ const Methods = {
|
|
|
2708
2860
|
else {
|
|
2709
2861
|
sourceData.forEach(handleSourceRow);
|
|
2710
2862
|
}
|
|
2863
|
+
internalData.sourceDataRowIdData = sourceRowIdData;
|
|
2711
2864
|
internalData.tableSourceData = sourceData;
|
|
2712
2865
|
},
|
|
2713
2866
|
getParams() {
|
|
@@ -2795,47 +2948,22 @@ const Methods = {
|
|
|
2795
2948
|
* 根据 row 获取序号
|
|
2796
2949
|
* @param {Row} row 行对象
|
|
2797
2950
|
*/
|
|
2798
|
-
getRowSeq(
|
|
2799
|
-
const { fullAllDataRowIdData } = this;
|
|
2800
|
-
if (row) {
|
|
2801
|
-
const rowid = getRowid(this, row);
|
|
2802
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2803
|
-
if (rest) {
|
|
2804
|
-
return rest.seq;
|
|
2805
|
-
}
|
|
2806
|
-
}
|
|
2807
|
-
return -1;
|
|
2808
|
-
},
|
|
2951
|
+
getRowSeq: createGetRowCacheProp('seq'),
|
|
2809
2952
|
/**
|
|
2810
2953
|
* 根据 row 获取相对于 data 中的索引
|
|
2811
2954
|
* @param {Row} row 行对象
|
|
2812
2955
|
*/
|
|
2813
|
-
getRowIndex(
|
|
2814
|
-
const { fullAllDataRowIdData } = this;
|
|
2815
|
-
if (row) {
|
|
2816
|
-
const rowid = getRowid(this, row);
|
|
2817
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2818
|
-
if (rest) {
|
|
2819
|
-
return rest.index;
|
|
2820
|
-
}
|
|
2821
|
-
}
|
|
2822
|
-
return -1;
|
|
2823
|
-
},
|
|
2956
|
+
getRowIndex: createGetRowCacheProp('index'),
|
|
2824
2957
|
/**
|
|
2825
2958
|
* 根据 row 获取相对于当前数据中的索引
|
|
2826
2959
|
* @param {Row} row 行对象
|
|
2827
2960
|
*/
|
|
2828
|
-
getVTRowIndex(
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
return rest._index;
|
|
2835
|
-
}
|
|
2836
|
-
}
|
|
2837
|
-
return -1;
|
|
2838
|
-
},
|
|
2961
|
+
getVTRowIndex: createGetRowCacheProp('_index'),
|
|
2962
|
+
/**
|
|
2963
|
+
* 根据 row 获取渲染中的虚拟索引
|
|
2964
|
+
* @param {Row} row 行对象
|
|
2965
|
+
*/
|
|
2966
|
+
getVMRowIndex: createGetRowCacheProp('$index'),
|
|
2839
2967
|
// 在 v3 中废弃
|
|
2840
2968
|
_getRowIndex(row) {
|
|
2841
2969
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2843,21 +2971,6 @@ const Methods = {
|
|
|
2843
2971
|
}
|
|
2844
2972
|
return this.getVTRowIndex(row);
|
|
2845
2973
|
},
|
|
2846
|
-
/**
|
|
2847
|
-
* 根据 row 获取渲染中的虚拟索引
|
|
2848
|
-
* @param {Row} row 行对象
|
|
2849
|
-
*/
|
|
2850
|
-
getVMRowIndex(row) {
|
|
2851
|
-
const { fullAllDataRowIdData } = this;
|
|
2852
|
-
if (row) {
|
|
2853
|
-
const rowid = getRowid(this, row);
|
|
2854
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2855
|
-
if (rest) {
|
|
2856
|
-
return rest.$index;
|
|
2857
|
-
}
|
|
2858
|
-
}
|
|
2859
|
-
return -1;
|
|
2860
|
-
},
|
|
2861
2974
|
// 在 v3 中废弃
|
|
2862
2975
|
$getRowIndex(row) {
|
|
2863
2976
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2869,30 +2982,17 @@ const Methods = {
|
|
|
2869
2982
|
* 根据 column 获取相对于 columns 中的索引
|
|
2870
2983
|
* @param {ColumnInfo} column 列配置
|
|
2871
2984
|
*/
|
|
2872
|
-
getColumnIndex(
|
|
2873
|
-
const { fullColumnIdData } = this;
|
|
2874
|
-
if (column) {
|
|
2875
|
-
const rest = fullColumnIdData[column.id];
|
|
2876
|
-
if (rest) {
|
|
2877
|
-
return rest.index;
|
|
2878
|
-
}
|
|
2879
|
-
}
|
|
2880
|
-
return -1;
|
|
2881
|
-
},
|
|
2985
|
+
getColumnIndex: createGetColumnCacheProp('index'),
|
|
2882
2986
|
/**
|
|
2883
2987
|
* 根据 column 获取相对于当前表格列中的索引
|
|
2884
2988
|
* @param {ColumnInfo} column 列配置
|
|
2885
2989
|
*/
|
|
2886
|
-
getVTColumnIndex(
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
}
|
|
2893
|
-
}
|
|
2894
|
-
return -1;
|
|
2895
|
-
},
|
|
2990
|
+
getVTColumnIndex: createGetColumnCacheProp('_index'),
|
|
2991
|
+
/**
|
|
2992
|
+
* 根据 column 获取渲染中的虚拟索引
|
|
2993
|
+
* @param {ColumnInfo} column 列配置
|
|
2994
|
+
*/
|
|
2995
|
+
getVMColumnIndex: createGetColumnCacheProp('$index'),
|
|
2896
2996
|
// 在 v3 中废弃
|
|
2897
2997
|
_getColumnIndex(column) {
|
|
2898
2998
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2900,20 +3000,6 @@ const Methods = {
|
|
|
2900
3000
|
}
|
|
2901
3001
|
return this.getVTColumnIndex(column);
|
|
2902
3002
|
},
|
|
2903
|
-
/**
|
|
2904
|
-
* 根据 column 获取渲染中的虚拟索引
|
|
2905
|
-
* @param {ColumnInfo} column 列配置
|
|
2906
|
-
*/
|
|
2907
|
-
getVMColumnIndex(column) {
|
|
2908
|
-
const { fullColumnIdData } = this;
|
|
2909
|
-
if (column) {
|
|
2910
|
-
const rest = fullColumnIdData[column.id];
|
|
2911
|
-
if (rest) {
|
|
2912
|
-
return rest.$index;
|
|
2913
|
-
}
|
|
2914
|
-
}
|
|
2915
|
-
return -1;
|
|
2916
|
-
},
|
|
2917
3003
|
// 在 v3 中废弃
|
|
2918
3004
|
$getColumnIndex(column) {
|
|
2919
3005
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -3012,6 +3098,7 @@ const Methods = {
|
|
|
3012
3098
|
const removeTempMaps = Object.assign({}, editStore.removeMaps);
|
|
3013
3099
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3014
3100
|
const { transform } = treeOpts;
|
|
3101
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
3015
3102
|
if (!keepSource) {
|
|
3016
3103
|
if (process.env.NODE_ENV === 'development') {
|
|
3017
3104
|
errLog('vxe.error.reqProp', ['keep-source']);
|
|
@@ -3030,7 +3117,7 @@ const Methods = {
|
|
|
3030
3117
|
let reDelFlag = false;
|
|
3031
3118
|
if (targetRows.length) {
|
|
3032
3119
|
targetRows.forEach((item) => {
|
|
3033
|
-
const rowid =
|
|
3120
|
+
const rowid = handleGetRowId(item);
|
|
3034
3121
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
3035
3122
|
if (rowRest) {
|
|
3036
3123
|
const row = rowRest.row;
|
|
@@ -3414,11 +3501,9 @@ const Methods = {
|
|
|
3414
3501
|
getCheckboxRecords(isFull) {
|
|
3415
3502
|
const $xeTable = this;
|
|
3416
3503
|
const props = $xeTable;
|
|
3417
|
-
const reactData = $xeTable;
|
|
3418
3504
|
const internalData = $xeTable;
|
|
3419
3505
|
const { treeConfig } = props;
|
|
3420
|
-
const { selectCheckboxMaps } =
|
|
3421
|
-
const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData;
|
|
3506
|
+
const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData;
|
|
3422
3507
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3423
3508
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
3424
3509
|
const { transform, mapChildrenField } = treeOpts;
|
|
@@ -3466,7 +3551,7 @@ const Methods = {
|
|
|
3466
3551
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3467
3552
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
3468
3553
|
const { transform, rowField, parentField, mapChildrenField } = treeOpts;
|
|
3469
|
-
const { remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
|
|
3554
|
+
const { isEvery, remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
|
|
3470
3555
|
const { remote: allRemoteSort, sortMethod: allSortMethod, multiple: sortMultiple, chronological } = sortOpts;
|
|
3471
3556
|
let tableData = [];
|
|
3472
3557
|
let tableTree = [];
|
|
@@ -3525,7 +3610,7 @@ const Methods = {
|
|
|
3525
3610
|
// 筛选虚拟树
|
|
3526
3611
|
tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, {
|
|
3527
3612
|
original: true,
|
|
3528
|
-
isEvery
|
|
3613
|
+
isEvery,
|
|
3529
3614
|
children: mapChildrenField,
|
|
3530
3615
|
mapChildren: childrenField
|
|
3531
3616
|
});
|
|
@@ -3541,7 +3626,7 @@ const Methods = {
|
|
|
3541
3626
|
// 还原虚拟树
|
|
3542
3627
|
tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
|
|
3543
3628
|
original: true,
|
|
3544
|
-
isEvery
|
|
3629
|
+
isEvery,
|
|
3545
3630
|
children: mapChildrenField,
|
|
3546
3631
|
mapChildren: childrenField
|
|
3547
3632
|
});
|
|
@@ -3604,7 +3689,7 @@ const Methods = {
|
|
|
3604
3689
|
// 还原虚拟树
|
|
3605
3690
|
tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
|
|
3606
3691
|
original: true,
|
|
3607
|
-
isEvery
|
|
3692
|
+
isEvery,
|
|
3608
3693
|
children: treeOpts.mapChildrenField,
|
|
3609
3694
|
mapChildren: childrenField
|
|
3610
3695
|
});
|
|
@@ -3751,6 +3836,7 @@ const Methods = {
|
|
|
3751
3836
|
* 默认执行一次,除非被重置
|
|
3752
3837
|
*/
|
|
3753
3838
|
handleLoadDefaults() {
|
|
3839
|
+
const $xeTable = this;
|
|
3754
3840
|
if (this.checkboxConfig) {
|
|
3755
3841
|
this.handleDefaultSelectionChecked();
|
|
3756
3842
|
}
|
|
@@ -3761,7 +3847,7 @@ const Methods = {
|
|
|
3761
3847
|
this.handleDefaultRowExpand();
|
|
3762
3848
|
}
|
|
3763
3849
|
if (this.treeConfig) {
|
|
3764
|
-
|
|
3850
|
+
handleDefaultTreeExpand($xeTable);
|
|
3765
3851
|
}
|
|
3766
3852
|
if (this.mergeCells) {
|
|
3767
3853
|
this.handleDefaultMergeCells();
|
|
@@ -3949,9 +4035,9 @@ const Methods = {
|
|
|
3949
4035
|
return this.refreshColumn(true);
|
|
3950
4036
|
},
|
|
3951
4037
|
handleCustomRestore(storeData) {
|
|
3952
|
-
const $
|
|
3953
|
-
const reactData = $
|
|
3954
|
-
const internalData = $
|
|
4038
|
+
const $xeTable = this;
|
|
4039
|
+
const reactData = $xeTable;
|
|
4040
|
+
const internalData = $xeTable;
|
|
3955
4041
|
let { collectColumn } = internalData;
|
|
3956
4042
|
const { resizableData, sortData, visibleData, fixedData } = storeData;
|
|
3957
4043
|
let hasCustomSort = false;
|
|
@@ -4020,8 +4106,19 @@ const Methods = {
|
|
|
4020
4106
|
}
|
|
4021
4107
|
},
|
|
4022
4108
|
getCustomStoreData() {
|
|
4023
|
-
const
|
|
4024
|
-
const
|
|
4109
|
+
const $xeTable = this;
|
|
4110
|
+
const props = $xeTable;
|
|
4111
|
+
const internalData = $xeTable;
|
|
4112
|
+
const { id } = props;
|
|
4113
|
+
const customOpts = $xeTable.computeCustomOpts;
|
|
4114
|
+
const { collectColumn } = internalData;
|
|
4115
|
+
const { storage, checkMethod } = customOpts;
|
|
4116
|
+
const isAllCustom = storage === true;
|
|
4117
|
+
const storageOpts = isAllCustom ? {} : Object.assign({}, storage || {});
|
|
4118
|
+
const isCustomResizable = isAllCustom || storageOpts.resizable;
|
|
4119
|
+
const isCustomVisible = isAllCustom || storageOpts.visible;
|
|
4120
|
+
const isCustomFixed = isAllCustom || storageOpts.fixed;
|
|
4121
|
+
const isCustomSort = isAllCustom || storageOpts.sort;
|
|
4025
4122
|
const resizableData = {};
|
|
4026
4123
|
const sortData = {};
|
|
4027
4124
|
const visibleData = {};
|
|
@@ -4038,47 +4135,37 @@ const Methods = {
|
|
|
4038
4135
|
}
|
|
4039
4136
|
let hasResizable = 0;
|
|
4040
4137
|
let hasSort = 0;
|
|
4041
|
-
let
|
|
4138
|
+
let hasFixed = 0;
|
|
4042
4139
|
let hasVisible = 0;
|
|
4043
4140
|
XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => {
|
|
4141
|
+
const colKey = column.getKey();
|
|
4142
|
+
if (!colKey) {
|
|
4143
|
+
errLog('vxe.error.reqProp', [`${column.getTitle() || column.type || ''} -> column.field=?`]);
|
|
4144
|
+
return;
|
|
4145
|
+
}
|
|
4044
4146
|
// 只支持一级
|
|
4045
4147
|
if (!parentColumn) {
|
|
4046
|
-
|
|
4047
|
-
|
|
4048
|
-
|
|
4049
|
-
hasSort = 1;
|
|
4050
|
-
sortData[colKey] = column.renderSortNumber;
|
|
4051
|
-
}
|
|
4052
|
-
});
|
|
4053
|
-
if (column.fixed !== column.defaultFixed) {
|
|
4054
|
-
const colKey = column.getKey();
|
|
4055
|
-
if (colKey) {
|
|
4056
|
-
hasFixedt = 1;
|
|
4057
|
-
fixedData[colKey] = column.fixed;
|
|
4058
|
-
}
|
|
4148
|
+
if (isCustomSort) {
|
|
4149
|
+
hasSort = 1;
|
|
4150
|
+
sortData[colKey] = column.renderSortNumber;
|
|
4059
4151
|
}
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
if (colKey) {
|
|
4064
|
-
hasResizable = 1;
|
|
4065
|
-
resizableData[colKey] = column.renderWidth;
|
|
4152
|
+
if (isCustomFixed && column.fixed !== column.defaultFixed) {
|
|
4153
|
+
hasFixed = 1;
|
|
4154
|
+
fixedData[colKey] = column.fixed;
|
|
4066
4155
|
}
|
|
4067
4156
|
}
|
|
4068
|
-
if (
|
|
4157
|
+
if (isCustomResizable && column.resizeWidth) {
|
|
4158
|
+
hasResizable = 1;
|
|
4159
|
+
resizableData[colKey] = column.renderWidth;
|
|
4160
|
+
}
|
|
4161
|
+
if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
|
|
4069
4162
|
if (!column.visible && column.defaultVisible) {
|
|
4070
|
-
|
|
4071
|
-
|
|
4072
|
-
hasVisible = 1;
|
|
4073
|
-
visibleData[colKey] = false;
|
|
4074
|
-
}
|
|
4163
|
+
hasVisible = 1;
|
|
4164
|
+
visibleData[colKey] = false;
|
|
4075
4165
|
}
|
|
4076
4166
|
else if (column.visible && !column.defaultVisible) {
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
hasVisible = 1;
|
|
4080
|
-
visibleData[colKey] = true;
|
|
4081
|
-
}
|
|
4167
|
+
hasVisible = 1;
|
|
4168
|
+
visibleData[colKey] = true;
|
|
4082
4169
|
}
|
|
4083
4170
|
}
|
|
4084
4171
|
});
|
|
@@ -4088,7 +4175,7 @@ const Methods = {
|
|
|
4088
4175
|
if (hasSort) {
|
|
4089
4176
|
storeData.sortData = sortData;
|
|
4090
4177
|
}
|
|
4091
|
-
if (
|
|
4178
|
+
if (hasFixed) {
|
|
4092
4179
|
storeData.fixedData = fixedData;
|
|
4093
4180
|
}
|
|
4094
4181
|
if (hasVisible) {
|
|
@@ -4576,12 +4663,13 @@ const Methods = {
|
|
|
4576
4663
|
const $xeTable = this;
|
|
4577
4664
|
const internalData = $xeTable;
|
|
4578
4665
|
const { fullAllDataRowIdData, afterFullData } = internalData;
|
|
4666
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4579
4667
|
const rowOpts = $xeTable.computeRowOpts;
|
|
4580
4668
|
const cellOpts = $xeTable.computeCellOpts;
|
|
4581
4669
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
4582
4670
|
const rest = {};
|
|
4583
4671
|
afterFullData.forEach(row => {
|
|
4584
|
-
const rowid =
|
|
4672
|
+
const rowid = handleGetRowId(row);
|
|
4585
4673
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4586
4674
|
if (rowRest) {
|
|
4587
4675
|
const resizeHeight = rowRest.resizeHeight;
|
|
@@ -4608,8 +4696,9 @@ const Methods = {
|
|
|
4608
4696
|
rHeight = Math.floor(rHeight * bodyHeight);
|
|
4609
4697
|
}
|
|
4610
4698
|
if (rHeight) {
|
|
4699
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4611
4700
|
rows.forEach(row => {
|
|
4612
|
-
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row :
|
|
4701
|
+
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row);
|
|
4613
4702
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4614
4703
|
if (rowRest) {
|
|
4615
4704
|
rowRest.resizeHeight = rHeight;
|
|
@@ -4750,6 +4839,8 @@ const Methods = {
|
|
|
4750
4839
|
}
|
|
4751
4840
|
},
|
|
4752
4841
|
preventEvent(evnt, type, args, next, end) {
|
|
4842
|
+
const $xeTable = this;
|
|
4843
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
4753
4844
|
let evntList = interceptor.get(type);
|
|
4754
4845
|
// 兼容老版本
|
|
4755
4846
|
if (!evntList.length && type === 'event.clearEdit') {
|
|
@@ -4761,8 +4852,22 @@ const Methods = {
|
|
|
4761
4852
|
}
|
|
4762
4853
|
}
|
|
4763
4854
|
// 兼容老版本
|
|
4764
|
-
let rest;
|
|
4765
|
-
|
|
4855
|
+
let rest = null;
|
|
4856
|
+
let isStop = false;
|
|
4857
|
+
for (let i = 0; i < evntList.length; i++) {
|
|
4858
|
+
const func = evntList[i];
|
|
4859
|
+
const fnRest = func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args));
|
|
4860
|
+
if (fnRest === false) {
|
|
4861
|
+
isStop = true;
|
|
4862
|
+
break;
|
|
4863
|
+
}
|
|
4864
|
+
else if (fnRest && fnRest.status === false) {
|
|
4865
|
+
rest = fnRest.result;
|
|
4866
|
+
isStop = true;
|
|
4867
|
+
break;
|
|
4868
|
+
}
|
|
4869
|
+
}
|
|
4870
|
+
if (!isStop) {
|
|
4766
4871
|
if (next) {
|
|
4767
4872
|
rest = next();
|
|
4768
4873
|
}
|
|
@@ -4776,7 +4881,9 @@ const Methods = {
|
|
|
4776
4881
|
* 全局按下事件处理
|
|
4777
4882
|
*/
|
|
4778
4883
|
handleGlobalMousedownEvent(evnt) {
|
|
4779
|
-
const
|
|
4884
|
+
const $xeTable = this;
|
|
4885
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
4886
|
+
const { $el, $refs, $toolbar, mouseConfig, editStore, ctxMenuStore, editRules, editOpts, validOpts, areaOpts, filterStore, customStore, getRowNode } = this;
|
|
4780
4887
|
const { actived } = editStore;
|
|
4781
4888
|
const { customWrapper, refValidTooltip } = $refs;
|
|
4782
4889
|
const tableFilter = $refs.refTableFilter;
|
|
@@ -4866,7 +4973,7 @@ const Methods = {
|
|
|
4866
4973
|
}
|
|
4867
4974
|
}
|
|
4868
4975
|
else if (mouseConfig) {
|
|
4869
|
-
if (!getEventTargetNode(evnt, $el).flag && !($
|
|
4976
|
+
if (!getEventTargetNode(evnt, $el).flag && !($xeGrid && getEventTargetNode(evnt, $xeGrid.$el).flag) && !(tableMenu && getEventTargetNode(evnt, tableMenu.$el).flag) && !($toolbar && getEventTargetNode(evnt, $toolbar.$el).flag)) {
|
|
4870
4977
|
if (this.clearSelected) {
|
|
4871
4978
|
this.clearSelected();
|
|
4872
4979
|
}
|
|
@@ -4888,7 +4995,7 @@ const Methods = {
|
|
|
4888
4995
|
if (ctxMenuStore.visible && tableMenu && !getEventTargetNode(evnt, tableMenu.$el).flag) {
|
|
4889
4996
|
this.closeMenu();
|
|
4890
4997
|
}
|
|
4891
|
-
const isActivated = getEventTargetNode(evnt, ($
|
|
4998
|
+
const isActivated = getEventTargetNode(evnt, ($xeGrid || this).$el).flag;
|
|
4892
4999
|
// 如果存在校验,点击了表格之外则清除
|
|
4893
5000
|
if (!isActivated && editRules && validOpts.autoClear) {
|
|
4894
5001
|
this.validErrorMaps = {};
|
|
@@ -4952,6 +5059,7 @@ const Methods = {
|
|
|
4952
5059
|
handleGlobalKeydownEvent(evnt) {
|
|
4953
5060
|
const $xeTable = this;
|
|
4954
5061
|
const internalData = $xeTable;
|
|
5062
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
4955
5063
|
// 该行为只对当前激活的表格有效
|
|
4956
5064
|
if (this.isActivated) {
|
|
4957
5065
|
this.preventEvent(evnt, 'event.keydown', null, () => {
|
|
@@ -5050,7 +5158,7 @@ const Methods = {
|
|
|
5050
5158
|
this.moveTabSelected(activeParams, hasShiftKey, evnt);
|
|
5051
5159
|
}
|
|
5052
5160
|
else {
|
|
5053
|
-
this.
|
|
5161
|
+
this.moveEnterSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt);
|
|
5054
5162
|
}
|
|
5055
5163
|
}
|
|
5056
5164
|
else {
|
|
@@ -5084,7 +5192,7 @@ const Methods = {
|
|
|
5084
5192
|
return;
|
|
5085
5193
|
}
|
|
5086
5194
|
}
|
|
5087
|
-
this.
|
|
5195
|
+
this.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt);
|
|
5088
5196
|
if (enterMethod) {
|
|
5089
5197
|
enterMethod(etrParams);
|
|
5090
5198
|
}
|
|
@@ -5110,11 +5218,7 @@ const Methods = {
|
|
|
5110
5218
|
if (!isEditStatus) {
|
|
5111
5219
|
// 如果按下了方向键
|
|
5112
5220
|
if (selected.row && selected.column) {
|
|
5113
|
-
|
|
5114
|
-
}
|
|
5115
|
-
else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
|
|
5116
|
-
// 当前行按键上下移动
|
|
5117
|
-
this.moveCurrentRow(isUpArrow, isDwArrow, evnt);
|
|
5221
|
+
$xeTable.moveArrowSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
|
|
5118
5222
|
}
|
|
5119
5223
|
}
|
|
5120
5224
|
}
|
|
@@ -5137,7 +5241,7 @@ const Methods = {
|
|
|
5137
5241
|
column: selected.column,
|
|
5138
5242
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5139
5243
|
$table: this,
|
|
5140
|
-
$grid:
|
|
5244
|
+
$grid: $xeGrid
|
|
5141
5245
|
};
|
|
5142
5246
|
// 是否被禁用
|
|
5143
5247
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
@@ -5164,7 +5268,7 @@ const Methods = {
|
|
|
5164
5268
|
column: selected.column,
|
|
5165
5269
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5166
5270
|
$table: this,
|
|
5167
|
-
$grid:
|
|
5271
|
+
$grid: $xeGrid
|
|
5168
5272
|
};
|
|
5169
5273
|
// 是否被禁用
|
|
5170
5274
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
@@ -5193,7 +5297,7 @@ const Methods = {
|
|
|
5193
5297
|
rowIndex: this.getRowIndex(parentRow),
|
|
5194
5298
|
$rowIndex: this.getVMRowIndex(parentRow),
|
|
5195
5299
|
$table: this,
|
|
5196
|
-
$grid:
|
|
5300
|
+
$grid: $xeGrid
|
|
5197
5301
|
};
|
|
5198
5302
|
this.setTreeExpand(parentRow, false)
|
|
5199
5303
|
.then(() => this.scrollToRow(parentRow))
|
|
@@ -5215,7 +5319,7 @@ const Methods = {
|
|
|
5215
5319
|
column: selected.column,
|
|
5216
5320
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5217
5321
|
$table: this,
|
|
5218
|
-
$grid:
|
|
5322
|
+
$grid: $xeGrid
|
|
5219
5323
|
};
|
|
5220
5324
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
5221
5325
|
if (editMethod) {
|
|
@@ -5336,7 +5440,7 @@ const Methods = {
|
|
|
5336
5440
|
return;
|
|
5337
5441
|
}
|
|
5338
5442
|
if (tooltipStore.column !== column || !tooltipStore.visible) {
|
|
5339
|
-
handleTooltip($xeTable, evnt, thEl, cellEl,
|
|
5443
|
+
handleTooltip($xeTable, evnt, thEl, thEl.querySelector('.vxe-cell--title') || cellEl, params);
|
|
5340
5444
|
}
|
|
5341
5445
|
},
|
|
5342
5446
|
/**
|
|
@@ -5366,7 +5470,7 @@ const Methods = {
|
|
|
5366
5470
|
}
|
|
5367
5471
|
}
|
|
5368
5472
|
if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
|
|
5369
|
-
handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--wrapper'),
|
|
5473
|
+
handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
|
|
5370
5474
|
}
|
|
5371
5475
|
},
|
|
5372
5476
|
/**
|
|
@@ -5377,10 +5481,10 @@ const Methods = {
|
|
|
5377
5481
|
const reactData = $xeTable;
|
|
5378
5482
|
const { column } = params;
|
|
5379
5483
|
const { tooltipStore } = reactData;
|
|
5380
|
-
const
|
|
5484
|
+
const tdEl = evnt.currentTarget;
|
|
5381
5485
|
handleTargetEnterEvent($xeTable, tooltipStore.column !== column || !!tooltipStore.row);
|
|
5382
5486
|
if (tooltipStore.column !== column || !tooltipStore.visible) {
|
|
5383
|
-
handleTooltip($xeTable, evnt,
|
|
5487
|
+
handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
|
|
5384
5488
|
}
|
|
5385
5489
|
},
|
|
5386
5490
|
openTooltip(target, content) {
|
|
@@ -5437,11 +5541,15 @@ const Methods = {
|
|
|
5437
5541
|
* 获取复选框半选状态的行数据
|
|
5438
5542
|
*/
|
|
5439
5543
|
getCheckboxIndeterminateRecords(isFull) {
|
|
5440
|
-
const
|
|
5544
|
+
const $xeTable = this;
|
|
5545
|
+
const props = $xeTable;
|
|
5546
|
+
const internalData = $xeTable;
|
|
5547
|
+
const { treeConfig } = props;
|
|
5548
|
+
const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData;
|
|
5441
5549
|
if (treeConfig) {
|
|
5442
5550
|
const fullRest = [];
|
|
5443
5551
|
const defRest = [];
|
|
5444
|
-
XEUtils.each(
|
|
5552
|
+
XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
|
|
5445
5553
|
if (item) {
|
|
5446
5554
|
fullRest.push(item);
|
|
5447
5555
|
if (fullDataRowIdData[rowid]) {
|
|
@@ -5511,20 +5619,22 @@ const Methods = {
|
|
|
5511
5619
|
isCheckedByCheckboxRow(row) {
|
|
5512
5620
|
const $xeTable = this;
|
|
5513
5621
|
const reactData = $xeTable;
|
|
5514
|
-
const
|
|
5622
|
+
const internalData = $xeTable;
|
|
5623
|
+
const { updateCheckboxFlag } = reactData;
|
|
5624
|
+
const { selectCheckboxMaps } = internalData;
|
|
5515
5625
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5516
5626
|
const { checkField } = checkboxOpts;
|
|
5517
5627
|
if (checkField) {
|
|
5518
5628
|
return XEUtils.get(row, checkField);
|
|
5519
5629
|
}
|
|
5520
|
-
return !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5630
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5521
5631
|
},
|
|
5522
5632
|
isCheckedByCheckboxRowKey(rowid) {
|
|
5523
5633
|
const $xeTable = this;
|
|
5524
5634
|
const reactData = $xeTable;
|
|
5525
5635
|
const internalData = $xeTable;
|
|
5526
|
-
const {
|
|
5527
|
-
const { fullAllDataRowIdData } = internalData;
|
|
5636
|
+
const { updateCheckboxFlag } = reactData;
|
|
5637
|
+
const { fullAllDataRowIdData, selectCheckboxMaps } = internalData;
|
|
5528
5638
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5529
5639
|
const { checkField } = checkboxOpts;
|
|
5530
5640
|
if (checkField) {
|
|
@@ -5534,19 +5644,19 @@ const Methods = {
|
|
|
5534
5644
|
}
|
|
5535
5645
|
return false;
|
|
5536
5646
|
}
|
|
5537
|
-
return !!selectCheckboxMaps[rowid];
|
|
5647
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid];
|
|
5538
5648
|
},
|
|
5539
5649
|
isIndeterminateByCheckboxRow(row) {
|
|
5540
5650
|
const $xeTable = this;
|
|
5541
|
-
const
|
|
5542
|
-
const {
|
|
5543
|
-
return !!
|
|
5651
|
+
const internalData = $xeTable;
|
|
5652
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5653
|
+
return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
|
|
5544
5654
|
},
|
|
5545
5655
|
isIndeterminateByCheckboxRowKey(rowid) {
|
|
5546
5656
|
const $xeTable = this;
|
|
5547
|
-
const
|
|
5548
|
-
const {
|
|
5549
|
-
return !!
|
|
5657
|
+
const internalData = $xeTable;
|
|
5658
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5659
|
+
return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
|
|
5550
5660
|
},
|
|
5551
5661
|
/**
|
|
5552
5662
|
* 切换选中
|
|
@@ -5556,14 +5666,15 @@ const Methods = {
|
|
|
5556
5666
|
const $xeTable = this;
|
|
5557
5667
|
const props = $xeTable;
|
|
5558
5668
|
const reactData = $xeTable;
|
|
5669
|
+
const internalData = $xeTable;
|
|
5559
5670
|
const { treeConfig } = props;
|
|
5560
|
-
const { selectCheckboxMaps } =
|
|
5561
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5671
|
+
const { selectCheckboxMaps } = internalData;
|
|
5562
5672
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5563
5673
|
const { transform, mapChildrenField } = treeOpts;
|
|
5564
5674
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
5565
5675
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5566
5676
|
const { checkField, checkStrictly, checkMethod } = checkboxOpts;
|
|
5677
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5567
5678
|
// indeterminateField 仅支持读取
|
|
5568
5679
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
5569
5680
|
if (checkField) {
|
|
@@ -5579,59 +5690,57 @@ const Methods = {
|
|
|
5579
5690
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5580
5691
|
}
|
|
5581
5692
|
}, { children: transform ? mapChildrenField : childrenField });
|
|
5582
|
-
reactData.
|
|
5693
|
+
reactData.updateCheckboxFlag++;
|
|
5583
5694
|
return;
|
|
5584
5695
|
}
|
|
5585
|
-
|
|
5586
|
-
|
|
5587
|
-
|
|
5588
|
-
|
|
5589
|
-
|
|
5590
|
-
|
|
5591
|
-
|
|
5592
|
-
|
|
5593
|
-
}
|
|
5594
|
-
reactData.selectCheckboxMaps = selectRowMaps;
|
|
5696
|
+
// 列表
|
|
5697
|
+
rows.forEach(row => {
|
|
5698
|
+
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5699
|
+
XEUtils.set(row, checkField, checked);
|
|
5700
|
+
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5701
|
+
}
|
|
5702
|
+
});
|
|
5703
|
+
reactData.updateCheckboxFlag++;
|
|
5595
5704
|
return;
|
|
5596
5705
|
}
|
|
5597
5706
|
// 树结构
|
|
5598
5707
|
if (treeConfig && !checkStrictly) {
|
|
5599
5708
|
// 更新子节点状态
|
|
5600
5709
|
XEUtils.eachTree(rows, (row) => {
|
|
5601
|
-
const rowid =
|
|
5710
|
+
const rowid = handleGetRowId(row);
|
|
5602
5711
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5603
5712
|
if (checked) {
|
|
5604
|
-
|
|
5713
|
+
selectCheckboxMaps[rowid] = row;
|
|
5605
5714
|
}
|
|
5606
5715
|
else {
|
|
5607
|
-
if (
|
|
5608
|
-
delete
|
|
5716
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5717
|
+
delete selectCheckboxMaps[rowid];
|
|
5609
5718
|
}
|
|
5610
5719
|
}
|
|
5611
5720
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5612
5721
|
}
|
|
5613
5722
|
}, { children: transform ? mapChildrenField : childrenField });
|
|
5614
|
-
reactData.
|
|
5723
|
+
reactData.updateCheckboxFlag++;
|
|
5615
5724
|
return;
|
|
5616
5725
|
}
|
|
5617
5726
|
// 列表
|
|
5618
5727
|
rows.forEach(row => {
|
|
5619
|
-
const rowid =
|
|
5728
|
+
const rowid = handleGetRowId(row);
|
|
5620
5729
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5621
5730
|
if (checked) {
|
|
5622
|
-
if (!
|
|
5623
|
-
|
|
5731
|
+
if (!selectCheckboxMaps[rowid]) {
|
|
5732
|
+
selectCheckboxMaps[rowid] = row;
|
|
5624
5733
|
}
|
|
5625
5734
|
}
|
|
5626
5735
|
else {
|
|
5627
|
-
if (
|
|
5628
|
-
delete
|
|
5736
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5737
|
+
delete selectCheckboxMaps[rowid];
|
|
5629
5738
|
}
|
|
5630
5739
|
}
|
|
5631
5740
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5741
|
+
reactData.updateCheckboxFlag++;
|
|
5632
5742
|
}
|
|
5633
5743
|
});
|
|
5634
|
-
reactData.selectCheckboxMaps = selectRowMaps;
|
|
5635
5744
|
},
|
|
5636
5745
|
/**
|
|
5637
5746
|
* 即将移除
|
|
@@ -5642,7 +5751,10 @@ const Methods = {
|
|
|
5642
5751
|
$xeTable.handleBatchSelectRows([row], checked, isForce);
|
|
5643
5752
|
},
|
|
5644
5753
|
handleToggleCheckRowEvent(evnt, params) {
|
|
5645
|
-
const
|
|
5754
|
+
const $xeTable = this;
|
|
5755
|
+
const internalData = $xeTable;
|
|
5756
|
+
const { selectCheckboxMaps } = internalData;
|
|
5757
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5646
5758
|
const { checkField, trigger } = checkboxOpts;
|
|
5647
5759
|
const { row } = params;
|
|
5648
5760
|
if (trigger === 'manual') {
|
|
@@ -5653,47 +5765,52 @@ const Methods = {
|
|
|
5653
5765
|
checked = !XEUtils.get(row, checkField);
|
|
5654
5766
|
}
|
|
5655
5767
|
else {
|
|
5656
|
-
checked = !selectCheckboxMaps[getRowid(
|
|
5768
|
+
checked = !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5657
5769
|
}
|
|
5658
5770
|
if (evnt) {
|
|
5659
|
-
|
|
5771
|
+
$xeTable.triggerCheckRowEvent(evnt, params, checked);
|
|
5660
5772
|
}
|
|
5661
5773
|
else {
|
|
5662
|
-
|
|
5663
|
-
|
|
5774
|
+
$xeTable.handleBatchSelectRows([row], checked);
|
|
5775
|
+
$xeTable.checkSelectionStatus();
|
|
5664
5776
|
}
|
|
5665
5777
|
},
|
|
5666
5778
|
triggerCheckRowEvent(evnt, params, checked) {
|
|
5667
5779
|
const $xeTable = this;
|
|
5668
|
-
const
|
|
5669
|
-
const
|
|
5780
|
+
const props = $xeTable;
|
|
5781
|
+
const internalData = $xeTable;
|
|
5670
5782
|
const { row } = params;
|
|
5783
|
+
const { afterFullData } = internalData;
|
|
5784
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5785
|
+
const { checkMethod, trigger } = checkboxOpts;
|
|
5671
5786
|
if (trigger === 'manual') {
|
|
5672
5787
|
return;
|
|
5673
5788
|
}
|
|
5674
5789
|
evnt.stopPropagation();
|
|
5675
|
-
if (checkboxOpts.isShiftKey && evnt.shiftKey && !
|
|
5676
|
-
const checkboxRecords =
|
|
5790
|
+
if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
|
|
5791
|
+
const checkboxRecords = $xeTable.getCheckboxRecords();
|
|
5677
5792
|
if (checkboxRecords.length) {
|
|
5678
5793
|
const firstRow = checkboxRecords[0];
|
|
5679
|
-
const _rowIndex =
|
|
5680
|
-
const _firstRowIndex =
|
|
5794
|
+
const _rowIndex = $xeTable.getVTRowIndex(row);
|
|
5795
|
+
const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
|
|
5681
5796
|
if (_rowIndex !== _firstRowIndex) {
|
|
5682
|
-
|
|
5797
|
+
$xeTable.setAllCheckboxRow(false);
|
|
5683
5798
|
const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
|
|
5684
|
-
|
|
5685
|
-
|
|
5799
|
+
$xeTable.$nextTick(() => {
|
|
5800
|
+
handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
|
|
5801
|
+
});
|
|
5802
|
+
$xeTable.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
|
|
5686
5803
|
return;
|
|
5687
5804
|
}
|
|
5688
5805
|
}
|
|
5689
5806
|
}
|
|
5690
5807
|
if (!checkMethod || checkMethod({ row })) {
|
|
5691
|
-
|
|
5692
|
-
|
|
5693
|
-
|
|
5694
|
-
records:
|
|
5695
|
-
reserves:
|
|
5696
|
-
indeterminates:
|
|
5808
|
+
$xeTable.handleBatchSelectRows([row], checked);
|
|
5809
|
+
$xeTable.checkSelectionStatus();
|
|
5810
|
+
$xeTable.dispatchEvent('checkbox-change', Object.assign({
|
|
5811
|
+
records: () => $xeTable.getCheckboxRecords(),
|
|
5812
|
+
reserves: () => $xeTable.getCheckboxReserveRecords(),
|
|
5813
|
+
indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
|
|
5697
5814
|
checked
|
|
5698
5815
|
}, params), evnt);
|
|
5699
5816
|
}
|
|
@@ -5703,7 +5820,9 @@ const Methods = {
|
|
|
5703
5820
|
*/
|
|
5704
5821
|
toggleCheckboxRow(row) {
|
|
5705
5822
|
const $xeTable = this;
|
|
5706
|
-
const
|
|
5823
|
+
const internalData = $xeTable;
|
|
5824
|
+
const { selectCheckboxMaps } = internalData;
|
|
5825
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5707
5826
|
const { checkField } = checkboxOpts;
|
|
5708
5827
|
const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5709
5828
|
$xeTable.handleBatchSelectRows([row], checked, true);
|
|
@@ -5724,9 +5843,7 @@ const Methods = {
|
|
|
5724
5843
|
const reactData = $xeTable;
|
|
5725
5844
|
const internalData = $xeTable;
|
|
5726
5845
|
const { treeConfig } = props;
|
|
5727
|
-
const { selectCheckboxMaps,
|
|
5728
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5729
|
-
const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
|
|
5846
|
+
const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5730
5847
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5731
5848
|
const { transform, mapChildrenField } = treeOpts;
|
|
5732
5849
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
@@ -5738,10 +5855,11 @@ const Methods = {
|
|
|
5738
5855
|
}
|
|
5739
5856
|
// 树结构
|
|
5740
5857
|
if (treeConfig) {
|
|
5858
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5741
5859
|
const childRowMaps = {};
|
|
5742
5860
|
const childRowList = [];
|
|
5743
5861
|
XEUtils.eachTree(afterTreeFullData, (row) => {
|
|
5744
|
-
const rowid =
|
|
5862
|
+
const rowid = handleGetRowId(row);
|
|
5745
5863
|
const childList = row[transform ? mapChildrenField : childrenField];
|
|
5746
5864
|
if (childList && childList.length && !childRowMaps[rowid]) {
|
|
5747
5865
|
childRowMaps[rowid] = 1;
|
|
@@ -5757,13 +5875,13 @@ const Methods = {
|
|
|
5757
5875
|
let vLen = 0; // 有效行
|
|
5758
5876
|
childList.forEach(checkMethod
|
|
5759
5877
|
? (item) => {
|
|
5760
|
-
const childRowid =
|
|
5761
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5878
|
+
const childRowid = handleGetRowId(item);
|
|
5879
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5762
5880
|
if (checkMethod({ row: item })) {
|
|
5763
5881
|
if (isSelect) {
|
|
5764
5882
|
sLen++;
|
|
5765
5883
|
}
|
|
5766
|
-
else if (
|
|
5884
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5767
5885
|
hLen++;
|
|
5768
5886
|
}
|
|
5769
5887
|
vLen++;
|
|
@@ -5772,18 +5890,18 @@ const Methods = {
|
|
|
5772
5890
|
if (isSelect) {
|
|
5773
5891
|
sLen++;
|
|
5774
5892
|
}
|
|
5775
|
-
else if (
|
|
5893
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5776
5894
|
hLen++;
|
|
5777
5895
|
}
|
|
5778
5896
|
}
|
|
5779
5897
|
}
|
|
5780
5898
|
: item => {
|
|
5781
|
-
const childRowid =
|
|
5782
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5899
|
+
const childRowid = handleGetRowId(item);
|
|
5900
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5783
5901
|
if (isSelect) {
|
|
5784
5902
|
sLen++;
|
|
5785
5903
|
}
|
|
5786
|
-
else if (
|
|
5904
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5787
5905
|
hLen++;
|
|
5788
5906
|
}
|
|
5789
5907
|
vLen++;
|
|
@@ -5795,31 +5913,30 @@ const Methods = {
|
|
|
5795
5913
|
}
|
|
5796
5914
|
if (isSelected) {
|
|
5797
5915
|
if (!checkField) {
|
|
5798
|
-
|
|
5916
|
+
selectCheckboxMaps[rowid] = row;
|
|
5799
5917
|
}
|
|
5800
|
-
if (
|
|
5801
|
-
delete
|
|
5918
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
5919
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5802
5920
|
}
|
|
5803
5921
|
}
|
|
5804
5922
|
else {
|
|
5805
5923
|
if (!checkField) {
|
|
5806
|
-
if (
|
|
5807
|
-
delete
|
|
5924
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5925
|
+
delete selectCheckboxMaps[rowid];
|
|
5808
5926
|
}
|
|
5809
5927
|
}
|
|
5810
5928
|
if (halfSelect) {
|
|
5811
|
-
|
|
5929
|
+
treeIndeterminateRowMaps[rowid] = row;
|
|
5812
5930
|
}
|
|
5813
5931
|
else {
|
|
5814
|
-
if (
|
|
5815
|
-
delete
|
|
5932
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
5933
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5816
5934
|
}
|
|
5817
5935
|
}
|
|
5818
5936
|
}
|
|
5819
5937
|
});
|
|
5820
5938
|
}
|
|
5821
|
-
reactData.
|
|
5822
|
-
reactData.treeIndeterminateMaps = halfRowMaps;
|
|
5939
|
+
reactData.updateCheckboxFlag++;
|
|
5823
5940
|
},
|
|
5824
5941
|
updateAllCheckboxStatus() {
|
|
5825
5942
|
const $xeTable = this;
|
|
@@ -5827,23 +5944,23 @@ const Methods = {
|
|
|
5827
5944
|
const reactData = $xeTable;
|
|
5828
5945
|
const internalData = $xeTable;
|
|
5829
5946
|
const { treeConfig } = props;
|
|
5830
|
-
const { selectCheckboxMaps,
|
|
5947
|
+
const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5831
5948
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5832
5949
|
const { checkField, checkMethod, showReserveStatus } = checkboxOpts;
|
|
5833
|
-
const {
|
|
5950
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5834
5951
|
let sLen = 0; // 已选
|
|
5835
5952
|
let hLen = 0; // 半选
|
|
5836
5953
|
let vLen = 0; // 有效行
|
|
5837
5954
|
const rootList = (treeConfig ? afterTreeFullData : afterFullData);
|
|
5838
5955
|
rootList.forEach(checkMethod
|
|
5839
5956
|
? row => {
|
|
5840
|
-
const childRowid =
|
|
5957
|
+
const childRowid = handleGetRowId(row);
|
|
5841
5958
|
const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
5842
5959
|
if (checkMethod({ row })) {
|
|
5843
5960
|
if (selected) {
|
|
5844
5961
|
sLen++;
|
|
5845
5962
|
}
|
|
5846
|
-
else if (
|
|
5963
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5847
5964
|
hLen++;
|
|
5848
5965
|
}
|
|
5849
5966
|
vLen++;
|
|
@@ -5852,18 +5969,18 @@ const Methods = {
|
|
|
5852
5969
|
if (selected) {
|
|
5853
5970
|
sLen++;
|
|
5854
5971
|
}
|
|
5855
|
-
else if (
|
|
5972
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5856
5973
|
hLen++;
|
|
5857
5974
|
}
|
|
5858
5975
|
}
|
|
5859
5976
|
}
|
|
5860
5977
|
: row => {
|
|
5861
|
-
const childRowid =
|
|
5978
|
+
const childRowid = handleGetRowId(row);
|
|
5862
5979
|
const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
5863
5980
|
if (selected) {
|
|
5864
5981
|
sLen++;
|
|
5865
5982
|
}
|
|
5866
|
-
else if (
|
|
5983
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5867
5984
|
hLen++;
|
|
5868
5985
|
}
|
|
5869
5986
|
vLen++;
|
|
@@ -5920,19 +6037,26 @@ const Methods = {
|
|
|
5920
6037
|
* 获取复选框保留选中的行
|
|
5921
6038
|
*/
|
|
5922
6039
|
getCheckboxReserveRecords(isFull) {
|
|
5923
|
-
const
|
|
6040
|
+
const $xeTable = this;
|
|
6041
|
+
const props = $xeTable;
|
|
6042
|
+
const internalData = $xeTable;
|
|
6043
|
+
const { treeConfig } = props;
|
|
6044
|
+
const { afterFullData, fullDataRowIdData, checkboxReserveRowMap } = internalData;
|
|
6045
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6046
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
5924
6047
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
5925
6048
|
const reserveSelection = [];
|
|
5926
6049
|
if (checkboxOpts.reserve) {
|
|
6050
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5927
6051
|
const afterFullIdMaps = {};
|
|
5928
6052
|
if (treeConfig) {
|
|
5929
6053
|
XEUtils.eachTree(afterFullData, row => {
|
|
5930
|
-
afterFullIdMaps[
|
|
6054
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5931
6055
|
}, { children: childrenField });
|
|
5932
6056
|
}
|
|
5933
6057
|
else {
|
|
5934
6058
|
afterFullData.forEach((row) => {
|
|
5935
|
-
afterFullIdMaps[
|
|
6059
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5936
6060
|
});
|
|
5937
6061
|
}
|
|
5938
6062
|
XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
|
|
@@ -5973,9 +6097,9 @@ const Methods = {
|
|
|
5973
6097
|
handleCheckedAllCheckboxRow($xeTable, value);
|
|
5974
6098
|
if (evnt) {
|
|
5975
6099
|
$xeTable.dispatchEvent('checkbox-all', {
|
|
5976
|
-
records: $xeTable.getCheckboxRecords(),
|
|
5977
|
-
reserves: $xeTable.getCheckboxReserveRecords(),
|
|
5978
|
-
indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
|
|
6100
|
+
records: () => $xeTable.getCheckboxRecords(),
|
|
6101
|
+
reserves: () => $xeTable.getCheckboxReserveRecords(),
|
|
6102
|
+
indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
|
|
5979
6103
|
checked: value
|
|
5980
6104
|
}, evnt);
|
|
5981
6105
|
}
|
|
@@ -6007,9 +6131,16 @@ const Methods = {
|
|
|
6007
6131
|
* 清空行为不管是否被禁用还是保留记录,都将彻底清空选中状态
|
|
6008
6132
|
*/
|
|
6009
6133
|
clearCheckboxRow() {
|
|
6010
|
-
const
|
|
6011
|
-
const
|
|
6134
|
+
const $xeTable = this;
|
|
6135
|
+
const props = $xeTable;
|
|
6136
|
+
const reactData = $xeTable;
|
|
6137
|
+
const internalData = $xeTable;
|
|
6138
|
+
const { treeConfig } = props;
|
|
6139
|
+
const { tableFullData } = internalData;
|
|
6140
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
6012
6141
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6142
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6143
|
+
const { checkField, reserve } = checkboxOpts;
|
|
6013
6144
|
// indeterminateField 仅支持读取
|
|
6014
6145
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
6015
6146
|
if (checkField) {
|
|
@@ -6029,10 +6160,11 @@ const Methods = {
|
|
|
6029
6160
|
if (reserve) {
|
|
6030
6161
|
tableFullData.forEach((row) => this.handleCheckboxReserveRow(row, false));
|
|
6031
6162
|
}
|
|
6032
|
-
|
|
6033
|
-
|
|
6034
|
-
|
|
6035
|
-
|
|
6163
|
+
reactData.isAllSelected = false;
|
|
6164
|
+
reactData.isIndeterminate = false;
|
|
6165
|
+
internalData.selectCheckboxMaps = {};
|
|
6166
|
+
internalData.treeIndeterminateRowMaps = {};
|
|
6167
|
+
reactData.updateCheckboxFlag++;
|
|
6036
6168
|
return this.$nextTick();
|
|
6037
6169
|
},
|
|
6038
6170
|
/**
|
|
@@ -6229,10 +6361,12 @@ const Methods = {
|
|
|
6229
6361
|
},
|
|
6230
6362
|
triggerHeaderCellClickEvent(evnt, params) {
|
|
6231
6363
|
const $xeTable = this;
|
|
6364
|
+
const props = $xeTable;
|
|
6232
6365
|
const internalData = $xeTable;
|
|
6233
6366
|
const { _lastResizeTime } = internalData;
|
|
6234
6367
|
const sortOpts = $xeTable.computeSortOpts;
|
|
6235
6368
|
const columnOpts = $xeTable.computeColumnOpts;
|
|
6369
|
+
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
6236
6370
|
const { column } = params;
|
|
6237
6371
|
const cell = evnt.currentTarget;
|
|
6238
6372
|
const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
|
|
@@ -6242,7 +6376,7 @@ const Methods = {
|
|
|
6242
6376
|
$xeTable.triggerSortEvent(evnt, column, getNextSortOrder($xeTable, column));
|
|
6243
6377
|
}
|
|
6244
6378
|
$xeTable.dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
|
|
6245
|
-
if (columnOpts.isCurrent ||
|
|
6379
|
+
if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
|
|
6246
6380
|
$xeTable.triggerCurrentColumnEvent(evnt, params);
|
|
6247
6381
|
}
|
|
6248
6382
|
return $xeTable.$nextTick();
|
|
@@ -6258,13 +6392,23 @@ const Methods = {
|
|
|
6258
6392
|
* @param {ColumnInfo} fieldOrColumn 列配置
|
|
6259
6393
|
*/
|
|
6260
6394
|
setCurrentColumn(fieldOrColumn) {
|
|
6261
|
-
const
|
|
6395
|
+
const $xeTable = this;
|
|
6396
|
+
const props = $xeTable;
|
|
6397
|
+
const reactData = $xeTable;
|
|
6398
|
+
const { mouseConfig } = props;
|
|
6399
|
+
const mouseOpts = $xeTable.computeMouseOpts;
|
|
6400
|
+
const isMouseSelected = mouseConfig && mouseOpts.selected;
|
|
6401
|
+
const column = handleFieldOrColumn($xeTable, fieldOrColumn);
|
|
6262
6402
|
if (column) {
|
|
6263
|
-
|
|
6264
|
-
|
|
6265
|
-
this.currentColumn = column;
|
|
6403
|
+
$xeTable.clearCurrentColumn();
|
|
6404
|
+
reactData.currentColumn = column;
|
|
6266
6405
|
}
|
|
6267
|
-
return
|
|
6406
|
+
return $xeTable.$nextTick().then(() => {
|
|
6407
|
+
// 更新状选中态
|
|
6408
|
+
if (isMouseSelected) {
|
|
6409
|
+
$xeTable.addCellSelectedClass();
|
|
6410
|
+
}
|
|
6411
|
+
});
|
|
6268
6412
|
},
|
|
6269
6413
|
/**
|
|
6270
6414
|
* 用于当前列,手动清空当前高亮的状态
|
|
@@ -6273,25 +6417,6 @@ const Methods = {
|
|
|
6273
6417
|
this.currentColumn = null;
|
|
6274
6418
|
return this.$nextTick();
|
|
6275
6419
|
},
|
|
6276
|
-
checkValidate(type) {
|
|
6277
|
-
if (this.triggerValidate) {
|
|
6278
|
-
return this.triggerValidate(type);
|
|
6279
|
-
}
|
|
6280
|
-
return this.$nextTick();
|
|
6281
|
-
},
|
|
6282
|
-
/**
|
|
6283
|
-
* 当单元格发生改变时
|
|
6284
|
-
* 如果存在规则,则校验
|
|
6285
|
-
*/
|
|
6286
|
-
handleChangeCell(evnt, params) {
|
|
6287
|
-
this.checkValidate('blur')
|
|
6288
|
-
.catch((e) => e)
|
|
6289
|
-
.then(() => {
|
|
6290
|
-
this.handleEdit(params, evnt)
|
|
6291
|
-
.then(() => this.checkValidate('change'))
|
|
6292
|
-
.catch((e) => e);
|
|
6293
|
-
});
|
|
6294
|
-
},
|
|
6295
6420
|
/**
|
|
6296
6421
|
* 列点击事件
|
|
6297
6422
|
* 如果是单击模式,则激活为编辑状态
|
|
@@ -6301,7 +6426,7 @@ const Methods = {
|
|
|
6301
6426
|
const $xeTable = this;
|
|
6302
6427
|
const props = $xeTable;
|
|
6303
6428
|
const reactData = $xeTable;
|
|
6304
|
-
const { highlightCurrentRow, editConfig } = props;
|
|
6429
|
+
const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props;
|
|
6305
6430
|
const { editStore, isDragResize } = reactData;
|
|
6306
6431
|
if (isDragResize) {
|
|
6307
6432
|
return;
|
|
@@ -6313,6 +6438,8 @@ const Methods = {
|
|
|
6313
6438
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6314
6439
|
const keyboardOpts = $xeTable.computeKeyboardOpts;
|
|
6315
6440
|
const rowOpts = $xeTable.computeRowOpts;
|
|
6441
|
+
const columnOpts = $xeTable.computeColumnOpts;
|
|
6442
|
+
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
6316
6443
|
const { actived, focused } = editStore;
|
|
6317
6444
|
const { row, column } = params;
|
|
6318
6445
|
const { type, treeNode } = column;
|
|
@@ -6328,11 +6455,11 @@ const Methods = {
|
|
|
6328
6455
|
if (!triggerCheckbox && !triggerRadio) {
|
|
6329
6456
|
// 如果是展开行
|
|
6330
6457
|
if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
|
|
6331
|
-
|
|
6458
|
+
$xeTable.triggerRowExpandEvent(evnt, params);
|
|
6332
6459
|
}
|
|
6333
6460
|
// 如果是树形表格
|
|
6334
6461
|
if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
|
|
6335
|
-
|
|
6462
|
+
$xeTable.triggerTreeExpandEvent(evnt, params);
|
|
6336
6463
|
}
|
|
6337
6464
|
}
|
|
6338
6465
|
// 如果点击了树节点
|
|
@@ -6341,16 +6468,22 @@ const Methods = {
|
|
|
6341
6468
|
// 如果是高亮行
|
|
6342
6469
|
if (rowOpts.isCurrent || highlightCurrentRow) {
|
|
6343
6470
|
if (!triggerCheckbox && !triggerRadio) {
|
|
6344
|
-
|
|
6471
|
+
$xeTable.triggerCurrentRowEvent(evnt, params);
|
|
6472
|
+
}
|
|
6473
|
+
}
|
|
6474
|
+
// 如果是当前列
|
|
6475
|
+
if ((columnOpts.isCurrent || highlightCurrentColumn) && (!currentColumnOpts.trigger || ['cell', 'default'].includes(currentColumnOpts.trigger))) {
|
|
6476
|
+
if (!triggerCheckbox && !triggerRadio) {
|
|
6477
|
+
$xeTable.triggerCurrentColumnEvent(evnt, params);
|
|
6345
6478
|
}
|
|
6346
6479
|
}
|
|
6347
6480
|
// 如果是单选框
|
|
6348
6481
|
if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
|
|
6349
|
-
|
|
6482
|
+
$xeTable.triggerRadioRowEvent(evnt, params);
|
|
6350
6483
|
}
|
|
6351
6484
|
// 如果是复选框
|
|
6352
6485
|
if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
|
|
6353
|
-
|
|
6486
|
+
$xeTable.handleToggleCheckRowEvent(evnt, params);
|
|
6354
6487
|
}
|
|
6355
6488
|
}
|
|
6356
6489
|
// 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
|
|
@@ -6362,16 +6495,16 @@ const Methods = {
|
|
|
6362
6495
|
}
|
|
6363
6496
|
if (editOpts.trigger === 'manual') {
|
|
6364
6497
|
if (actived.args && actived.row === row && column !== actived.column) {
|
|
6365
|
-
|
|
6498
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6366
6499
|
}
|
|
6367
6500
|
}
|
|
6368
6501
|
else if (!actived.args || row !== actived.row || column !== actived.column) {
|
|
6369
6502
|
if (editOpts.trigger === 'click') {
|
|
6370
|
-
|
|
6503
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6371
6504
|
}
|
|
6372
6505
|
else if (editOpts.trigger === 'dblclick') {
|
|
6373
6506
|
if (editOpts.mode === 'row' && actived.row === row) {
|
|
6374
|
-
|
|
6507
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6375
6508
|
}
|
|
6376
6509
|
}
|
|
6377
6510
|
}
|
|
@@ -6392,7 +6525,7 @@ const Methods = {
|
|
|
6392
6525
|
}
|
|
6393
6526
|
}
|
|
6394
6527
|
}
|
|
6395
|
-
|
|
6528
|
+
$xeTable.dispatchEvent('cell-click', params, evnt);
|
|
6396
6529
|
},
|
|
6397
6530
|
/**
|
|
6398
6531
|
* 列双击点击事件
|
|
@@ -6414,17 +6547,17 @@ const Methods = {
|
|
|
6414
6547
|
if (isEnableConf(editConfig) && editOpts.trigger === 'dblclick') {
|
|
6415
6548
|
if (!actived.args || evnt.currentTarget !== actived.args.cell) {
|
|
6416
6549
|
if (editOpts.mode === 'row') {
|
|
6417
|
-
|
|
6550
|
+
checkValidate($xeTable, 'blur')
|
|
6418
6551
|
.catch((e) => e)
|
|
6419
6552
|
.then(() => {
|
|
6420
6553
|
this.handleEdit(params, evnt)
|
|
6421
|
-
.then(() =>
|
|
6554
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
6422
6555
|
.catch((e) => e);
|
|
6423
6556
|
});
|
|
6424
6557
|
}
|
|
6425
6558
|
else if (editOpts.mode === 'cell') {
|
|
6426
6559
|
this.handleEdit(params, evnt)
|
|
6427
|
-
.then(() =>
|
|
6560
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
6428
6561
|
.catch((e) => e);
|
|
6429
6562
|
}
|
|
6430
6563
|
}
|
|
@@ -6610,12 +6743,11 @@ const Methods = {
|
|
|
6610
6743
|
const internalData = $xeTable;
|
|
6611
6744
|
const { treeConfig, dragConfig } = props;
|
|
6612
6745
|
const rowDragOpts = $xeTable.computeRowDragOpts;
|
|
6613
|
-
const { fullAllDataRowIdData } = internalData;
|
|
6746
|
+
const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData;
|
|
6614
6747
|
const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
|
|
6615
6748
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
6616
6749
|
const { transform, rowField, mapChildrenField, parentField } = treeOpts;
|
|
6617
6750
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6618
|
-
const { afterFullData, tableFullData } = internalData;
|
|
6619
6751
|
const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
|
|
6620
6752
|
const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
|
|
6621
6753
|
const errRest = {
|
|
@@ -7219,48 +7351,52 @@ const Methods = {
|
|
|
7219
7351
|
setPendingRow(rows, status) {
|
|
7220
7352
|
const $xeTable = this;
|
|
7221
7353
|
const reactData = $xeTable;
|
|
7222
|
-
const
|
|
7354
|
+
const internalData = $xeTable;
|
|
7355
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7356
|
+
const { pendingRowMaps } = internalData;
|
|
7223
7357
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7224
7358
|
rows = [rows];
|
|
7225
7359
|
}
|
|
7226
7360
|
if (status) {
|
|
7227
7361
|
rows.forEach((row) => {
|
|
7228
|
-
const rowid =
|
|
7229
|
-
if (rowid && !
|
|
7230
|
-
|
|
7362
|
+
const rowid = handleGetRowId(row);
|
|
7363
|
+
if (rowid && !pendingRowMaps[rowid]) {
|
|
7364
|
+
pendingRowMaps[rowid] = row;
|
|
7231
7365
|
}
|
|
7232
7366
|
});
|
|
7233
7367
|
}
|
|
7234
7368
|
else {
|
|
7235
7369
|
rows.forEach((row) => {
|
|
7236
|
-
const rowid =
|
|
7237
|
-
if (rowid &&
|
|
7238
|
-
delete
|
|
7370
|
+
const rowid = handleGetRowId(row);
|
|
7371
|
+
if (rowid && pendingRowMaps[rowid]) {
|
|
7372
|
+
delete pendingRowMaps[rowid];
|
|
7239
7373
|
}
|
|
7240
7374
|
});
|
|
7241
7375
|
}
|
|
7242
|
-
reactData.
|
|
7376
|
+
reactData.pendingRowFlag++;
|
|
7243
7377
|
return $xeTable.$nextTick();
|
|
7244
7378
|
},
|
|
7245
7379
|
togglePendingRow(rows) {
|
|
7246
7380
|
const $xeTable = this;
|
|
7247
7381
|
const reactData = $xeTable;
|
|
7248
|
-
const
|
|
7382
|
+
const internalData = $xeTable;
|
|
7383
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7384
|
+
const { pendingRowMaps } = internalData;
|
|
7249
7385
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7250
7386
|
rows = [rows];
|
|
7251
7387
|
}
|
|
7252
7388
|
rows.forEach((row) => {
|
|
7253
|
-
const rowid =
|
|
7389
|
+
const rowid = handleGetRowId(row);
|
|
7254
7390
|
if (rowid) {
|
|
7255
|
-
if (
|
|
7256
|
-
delete
|
|
7391
|
+
if (pendingRowMaps[rowid]) {
|
|
7392
|
+
delete pendingRowMaps[rowid];
|
|
7257
7393
|
}
|
|
7258
7394
|
else {
|
|
7259
|
-
|
|
7395
|
+
pendingRowMaps[rowid] = row;
|
|
7260
7396
|
}
|
|
7261
7397
|
}
|
|
7262
7398
|
});
|
|
7263
|
-
reactData.
|
|
7399
|
+
reactData.pendingRowFlag++;
|
|
7264
7400
|
return $xeTable.$nextTick();
|
|
7265
7401
|
},
|
|
7266
7402
|
hasPendingByRow(row) {
|
|
@@ -7276,10 +7412,8 @@ const Methods = {
|
|
|
7276
7412
|
},
|
|
7277
7413
|
getPendingRecords() {
|
|
7278
7414
|
const $xeTable = this;
|
|
7279
|
-
const reactData = $xeTable;
|
|
7280
7415
|
const internalData = $xeTable;
|
|
7281
|
-
const { pendingRowMaps } =
|
|
7282
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7416
|
+
const { fullAllDataRowIdData, pendingRowMaps } = internalData;
|
|
7283
7417
|
const insertRecords = [];
|
|
7284
7418
|
XEUtils.each(pendingRowMaps, (row, rowid) => {
|
|
7285
7419
|
if (fullAllDataRowIdData[rowid]) {
|
|
@@ -7289,8 +7423,12 @@ const Methods = {
|
|
|
7289
7423
|
return insertRecords;
|
|
7290
7424
|
},
|
|
7291
7425
|
clearPendingRow() {
|
|
7292
|
-
|
|
7293
|
-
|
|
7426
|
+
const $xeTable = this;
|
|
7427
|
+
const reactData = $xeTable;
|
|
7428
|
+
const internalData = $xeTable;
|
|
7429
|
+
internalData.pendingRowMaps = {};
|
|
7430
|
+
reactData.pendingRowFlag++;
|
|
7431
|
+
return $xeTable.$nextTick();
|
|
7294
7432
|
},
|
|
7295
7433
|
sort(sortConfs, sortOrder) {
|
|
7296
7434
|
const $xeTable = this;
|
|
@@ -7441,7 +7579,9 @@ const Methods = {
|
|
|
7441
7579
|
* @param {Event} evnt 事件
|
|
7442
7580
|
*/
|
|
7443
7581
|
closeFilter() {
|
|
7444
|
-
const
|
|
7582
|
+
const $xeTable = this;
|
|
7583
|
+
const reactData = $xeTable;
|
|
7584
|
+
const { filterStore } = reactData;
|
|
7445
7585
|
const { column, visible } = filterStore;
|
|
7446
7586
|
Object.assign(filterStore, {
|
|
7447
7587
|
isAllSelected: false,
|
|
@@ -7450,9 +7590,15 @@ const Methods = {
|
|
|
7450
7590
|
visible: false
|
|
7451
7591
|
});
|
|
7452
7592
|
if (visible) {
|
|
7453
|
-
|
|
7593
|
+
$xeTable.dispatchEvent('filter-visible', {
|
|
7594
|
+
column,
|
|
7595
|
+
field: column.field,
|
|
7596
|
+
property: column.field,
|
|
7597
|
+
filterList: () => $xeTable.getCheckedFilters(),
|
|
7598
|
+
visible: false
|
|
7599
|
+
}, null);
|
|
7454
7600
|
}
|
|
7455
|
-
return
|
|
7601
|
+
return $xeTable.$nextTick();
|
|
7456
7602
|
},
|
|
7457
7603
|
/**
|
|
7458
7604
|
* 判断指定列是否为筛选状态,如果为空则判断所有列
|
|
@@ -7483,17 +7629,16 @@ const Methods = {
|
|
|
7483
7629
|
const $xeTable = this;
|
|
7484
7630
|
const reactData = $xeTable;
|
|
7485
7631
|
const internalData = $xeTable;
|
|
7486
|
-
const
|
|
7487
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7632
|
+
const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
|
|
7488
7633
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7489
7634
|
const { lazy } = expandOpts;
|
|
7490
7635
|
const rowid = getRowid($xeTable, row);
|
|
7491
7636
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7492
7637
|
if (lazy && rowRest) {
|
|
7493
7638
|
rowRest.expandLoaded = false;
|
|
7494
|
-
delete
|
|
7639
|
+
delete rowExpandLazyLoadedMaps[rowid];
|
|
7495
7640
|
}
|
|
7496
|
-
reactData.
|
|
7641
|
+
reactData.rowExpandedFlag++;
|
|
7497
7642
|
return $xeTable.$nextTick();
|
|
7498
7643
|
},
|
|
7499
7644
|
/**
|
|
@@ -7501,14 +7646,17 @@ const Methods = {
|
|
|
7501
7646
|
* @param {Row} row 行对象
|
|
7502
7647
|
*/
|
|
7503
7648
|
reloadRowExpand(row) {
|
|
7504
|
-
const
|
|
7649
|
+
const $xeTable = this;
|
|
7650
|
+
const internalData = $xeTable;
|
|
7651
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
7652
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7505
7653
|
const { lazy } = expandOpts;
|
|
7506
7654
|
const rowid = getRowid(this, row);
|
|
7507
7655
|
if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
|
|
7508
|
-
|
|
7509
|
-
.then(() =>
|
|
7656
|
+
$xeTable.clearRowExpandLoaded(row)
|
|
7657
|
+
.then(() => handleAsyncRowExpand($xeTable, row));
|
|
7510
7658
|
}
|
|
7511
|
-
return
|
|
7659
|
+
return $xeTable.$nextTick();
|
|
7512
7660
|
},
|
|
7513
7661
|
reloadExpandContent(row) {
|
|
7514
7662
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7521,20 +7669,33 @@ const Methods = {
|
|
|
7521
7669
|
* 展开行事件
|
|
7522
7670
|
*/
|
|
7523
7671
|
triggerRowExpandEvent(evnt, params) {
|
|
7524
|
-
const
|
|
7672
|
+
const $xeTable = this;
|
|
7673
|
+
const reactData = $xeTable;
|
|
7674
|
+
const internalData = $xeTable;
|
|
7675
|
+
const { expandColumn: column } = reactData;
|
|
7676
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
7677
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7525
7678
|
const { row } = params;
|
|
7526
7679
|
const { lazy, trigger } = expandOpts;
|
|
7527
7680
|
if (trigger === 'manual') {
|
|
7528
7681
|
return;
|
|
7529
7682
|
}
|
|
7530
7683
|
evnt.stopPropagation();
|
|
7531
|
-
const rowid = getRowid(
|
|
7684
|
+
const rowid = getRowid($xeTable, row);
|
|
7532
7685
|
if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
|
|
7533
|
-
const expanded =
|
|
7534
|
-
const columnIndex =
|
|
7535
|
-
const $columnIndex =
|
|
7536
|
-
|
|
7537
|
-
|
|
7686
|
+
const expanded = !$xeTable.isRowExpandByRow(row);
|
|
7687
|
+
const columnIndex = $xeTable.getColumnIndex(column);
|
|
7688
|
+
const $columnIndex = $xeTable.getVMColumnIndex(column);
|
|
7689
|
+
$xeTable.setRowExpand(row, expanded);
|
|
7690
|
+
$xeTable.dispatchEvent('toggle-row-expand', {
|
|
7691
|
+
expanded,
|
|
7692
|
+
column,
|
|
7693
|
+
columnIndex,
|
|
7694
|
+
$columnIndex,
|
|
7695
|
+
row,
|
|
7696
|
+
rowIndex: $xeTable.getRowIndex(row),
|
|
7697
|
+
$rowIndex: $xeTable.getVMRowIndex(row)
|
|
7698
|
+
}, evnt);
|
|
7538
7699
|
}
|
|
7539
7700
|
},
|
|
7540
7701
|
/**
|
|
@@ -7580,48 +7741,6 @@ const Methods = {
|
|
|
7580
7741
|
}
|
|
7581
7742
|
return this.setRowExpand(expandedRows, expanded);
|
|
7582
7743
|
},
|
|
7583
|
-
handleAsyncRowExpand(row) {
|
|
7584
|
-
const $xeTable = this;
|
|
7585
|
-
const reactData = $xeTable;
|
|
7586
|
-
const internalData = $xeTable;
|
|
7587
|
-
return new Promise(resolve => {
|
|
7588
|
-
const { expandOpts } = this;
|
|
7589
|
-
const { loadMethod } = expandOpts;
|
|
7590
|
-
if (loadMethod) {
|
|
7591
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7592
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7593
|
-
const rowid = getRowid($xeTable, row);
|
|
7594
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7595
|
-
rExpandLazyLoadedMaps[rowid] = row;
|
|
7596
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7597
|
-
loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
|
|
7598
|
-
const rExpandedMaps = Object.assign({}, reactData.rowExpandedMaps);
|
|
7599
|
-
if (rowRest) {
|
|
7600
|
-
rowRest.expandLoaded = true;
|
|
7601
|
-
}
|
|
7602
|
-
rExpandedMaps[rowid] = row;
|
|
7603
|
-
reactData.rowExpandedMaps = rExpandedMaps;
|
|
7604
|
-
}).catch(() => {
|
|
7605
|
-
if (rowRest) {
|
|
7606
|
-
rowRest.expandLoaded = false;
|
|
7607
|
-
}
|
|
7608
|
-
}).finally(() => {
|
|
7609
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7610
|
-
if (rExpandLazyLoadedMaps[rowid]) {
|
|
7611
|
-
delete rExpandLazyLoadedMaps[rowid];
|
|
7612
|
-
}
|
|
7613
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7614
|
-
$xeTable.$nextTick()
|
|
7615
|
-
.then(() => $xeTable.recalculate())
|
|
7616
|
-
.then(() => $xeTable.updateCellAreas())
|
|
7617
|
-
.then(() => resolve());
|
|
7618
|
-
});
|
|
7619
|
-
}
|
|
7620
|
-
else {
|
|
7621
|
-
resolve();
|
|
7622
|
-
}
|
|
7623
|
-
});
|
|
7624
|
-
},
|
|
7625
7744
|
/**
|
|
7626
7745
|
* 设置展开行,二个参数设置这一行展开与否
|
|
7627
7746
|
* 支持单行
|
|
@@ -7631,8 +7750,12 @@ const Methods = {
|
|
|
7631
7750
|
*/
|
|
7632
7751
|
setRowExpand(rows, expanded) {
|
|
7633
7752
|
const $xeTable = this;
|
|
7634
|
-
const
|
|
7635
|
-
|
|
7753
|
+
const reactData = $xeTable;
|
|
7754
|
+
const internalData = $xeTable;
|
|
7755
|
+
const { expandColumn } = reactData;
|
|
7756
|
+
let { fullAllDataRowIdData, rowExpandedMaps, rowExpandLazyLoadedMaps } = internalData;
|
|
7757
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7758
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7636
7759
|
const { reserve, lazy, accordion, toggleMethod } = expandOpts;
|
|
7637
7760
|
const lazyRests = [];
|
|
7638
7761
|
const columnIndex = $xeTable.getColumnIndex(expandColumn);
|
|
@@ -7643,30 +7766,31 @@ const Methods = {
|
|
|
7643
7766
|
}
|
|
7644
7767
|
if (accordion) {
|
|
7645
7768
|
// 只能同时展开一个
|
|
7646
|
-
|
|
7769
|
+
rowExpandedMaps = {};
|
|
7770
|
+
internalData.rowExpandedMaps = rowExpandedMaps;
|
|
7647
7771
|
rows = rows.slice(rows.length - 1, rows.length);
|
|
7648
7772
|
}
|
|
7649
|
-
const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) })) : rows;
|
|
7773
|
+
const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) })) : rows;
|
|
7650
7774
|
if (expanded) {
|
|
7651
7775
|
validRows.forEach((row) => {
|
|
7652
|
-
const rowid =
|
|
7653
|
-
if (!
|
|
7776
|
+
const rowid = handleGetRowId(row);
|
|
7777
|
+
if (!rowExpandedMaps[rowid]) {
|
|
7654
7778
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7655
7779
|
const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid];
|
|
7656
7780
|
if (isLoad) {
|
|
7657
|
-
lazyRests.push(
|
|
7781
|
+
lazyRests.push(handleAsyncRowExpand($xeTable, row));
|
|
7658
7782
|
}
|
|
7659
7783
|
else {
|
|
7660
|
-
|
|
7784
|
+
rowExpandedMaps[rowid] = row;
|
|
7661
7785
|
}
|
|
7662
7786
|
}
|
|
7663
7787
|
});
|
|
7664
7788
|
}
|
|
7665
7789
|
else {
|
|
7666
7790
|
validRows.forEach((item) => {
|
|
7667
|
-
const rowid =
|
|
7668
|
-
if (
|
|
7669
|
-
delete
|
|
7791
|
+
const rowid = handleGetRowId(item);
|
|
7792
|
+
if (rowExpandedMaps[rowid]) {
|
|
7793
|
+
delete rowExpandedMaps[rowid];
|
|
7670
7794
|
}
|
|
7671
7795
|
});
|
|
7672
7796
|
}
|
|
@@ -7674,7 +7798,7 @@ const Methods = {
|
|
|
7674
7798
|
validRows.forEach((row) => handleRowExpandReserve($xeTable, row, expanded));
|
|
7675
7799
|
}
|
|
7676
7800
|
}
|
|
7677
|
-
|
|
7801
|
+
reactData.rowExpandedFlag++;
|
|
7678
7802
|
return Promise.all(lazyRests)
|
|
7679
7803
|
.then(() => $xeTable.$nextTick())
|
|
7680
7804
|
.then(() => $xeTable.recalculate(true))
|
|
@@ -7690,9 +7814,13 @@ const Methods = {
|
|
|
7690
7814
|
* @param {Row} row 行对象
|
|
7691
7815
|
*/
|
|
7692
7816
|
isRowExpandByRow(row) {
|
|
7693
|
-
const
|
|
7817
|
+
const $xeTable = this;
|
|
7818
|
+
const reactData = $xeTable;
|
|
7819
|
+
const internalData = $xeTable;
|
|
7820
|
+
const { rowExpandedFlag } = reactData;
|
|
7821
|
+
const { rowExpandedMaps } = internalData;
|
|
7694
7822
|
const rowid = getRowid(this, row);
|
|
7695
|
-
return !!rowExpandedMaps[rowid];
|
|
7823
|
+
return !!rowExpandedFlag && !!rowExpandedMaps[rowid];
|
|
7696
7824
|
},
|
|
7697
7825
|
isExpandByRow(row) {
|
|
7698
7826
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7712,7 +7840,8 @@ const Methods = {
|
|
|
7712
7840
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7713
7841
|
const { reserve } = expandOpts;
|
|
7714
7842
|
const expList = $xeTable.getRowExpandRecords();
|
|
7715
|
-
|
|
7843
|
+
internalData.rowExpandedMaps = {};
|
|
7844
|
+
reactData.rowExpandedFlag++;
|
|
7716
7845
|
if (reserve) {
|
|
7717
7846
|
tableFullData.forEach((row) => handleRowExpandReserve($xeTable, row, false));
|
|
7718
7847
|
}
|
|
@@ -7732,8 +7861,10 @@ const Methods = {
|
|
|
7732
7861
|
return this.$nextTick();
|
|
7733
7862
|
},
|
|
7734
7863
|
getRowExpandRecords() {
|
|
7864
|
+
const $xeTable = this;
|
|
7865
|
+
const internalData = $xeTable;
|
|
7735
7866
|
const rest = [];
|
|
7736
|
-
XEUtils.each(
|
|
7867
|
+
XEUtils.each(internalData.rowExpandedMaps, item => {
|
|
7737
7868
|
if (item) {
|
|
7738
7869
|
rest.push(item);
|
|
7739
7870
|
}
|
|
@@ -7741,8 +7872,10 @@ const Methods = {
|
|
|
7741
7872
|
return rest;
|
|
7742
7873
|
},
|
|
7743
7874
|
getTreeExpandRecords() {
|
|
7875
|
+
const $xeTable = this;
|
|
7876
|
+
const internalData = $xeTable;
|
|
7744
7877
|
const rest = [];
|
|
7745
|
-
XEUtils.each(
|
|
7878
|
+
XEUtils.each(internalData.treeExpandedMaps, item => {
|
|
7746
7879
|
if (item) {
|
|
7747
7880
|
rest.push(item);
|
|
7748
7881
|
}
|
|
@@ -7775,12 +7908,10 @@ const Methods = {
|
|
|
7775
7908
|
const $xeTable = this;
|
|
7776
7909
|
const reactData = $xeTable;
|
|
7777
7910
|
const internalData = $xeTable;
|
|
7778
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7911
|
+
const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
|
|
7779
7912
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
7780
7913
|
const { transform } = treeOpts;
|
|
7781
|
-
let tExpandedMaps = {};
|
|
7782
7914
|
if (rows) {
|
|
7783
|
-
tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
|
|
7784
7915
|
if (!XEUtils.isArray(rows)) {
|
|
7785
7916
|
rows = [rows];
|
|
7786
7917
|
}
|
|
@@ -7789,8 +7920,8 @@ const Methods = {
|
|
|
7789
7920
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7790
7921
|
if (rowRest) {
|
|
7791
7922
|
rowRest.treeLoaded = false;
|
|
7792
|
-
if (
|
|
7793
|
-
delete
|
|
7923
|
+
if (treeExpandedMaps[rowid]) {
|
|
7924
|
+
delete treeExpandedMaps[rowid];
|
|
7794
7925
|
}
|
|
7795
7926
|
}
|
|
7796
7927
|
});
|
|
@@ -7800,7 +7931,8 @@ const Methods = {
|
|
|
7800
7931
|
rowRest.treeLoaded = false;
|
|
7801
7932
|
});
|
|
7802
7933
|
}
|
|
7803
|
-
|
|
7934
|
+
internalData.treeExpandedMaps = {};
|
|
7935
|
+
reactData.treeExpandedFlag++;
|
|
7804
7936
|
if (transform) {
|
|
7805
7937
|
handleVirtualTreeToList($xeTable);
|
|
7806
7938
|
return $xeTable.handleTableData();
|
|
@@ -7813,36 +7945,42 @@ const Methods = {
|
|
|
7813
7945
|
*/
|
|
7814
7946
|
reloadTreeExpand(row) {
|
|
7815
7947
|
const $xeTable = this;
|
|
7816
|
-
const
|
|
7948
|
+
const internalData = $xeTable;
|
|
7949
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
7950
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7817
7951
|
const { transform, lazy } = treeOpts;
|
|
7818
7952
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
7819
|
-
const rowid = getRowid(
|
|
7953
|
+
const rowid = getRowid($xeTable, row);
|
|
7820
7954
|
if (lazy && row[hasChildField] && !treeExpandLazyLoadedMaps[rowid]) {
|
|
7821
|
-
return
|
|
7822
|
-
return
|
|
7955
|
+
return $xeTable.clearTreeExpandLoaded(row).then(() => {
|
|
7956
|
+
return handleAsyncTreeExpandChilds($xeTable, row);
|
|
7823
7957
|
}).then(() => {
|
|
7824
7958
|
if (transform) {
|
|
7825
7959
|
handleVirtualTreeToList($xeTable);
|
|
7826
|
-
return
|
|
7960
|
+
return $xeTable.handleTableData();
|
|
7827
7961
|
}
|
|
7828
7962
|
}).then(() => {
|
|
7829
|
-
return
|
|
7963
|
+
return $xeTable.recalculate();
|
|
7830
7964
|
});
|
|
7831
7965
|
}
|
|
7832
|
-
return
|
|
7966
|
+
return $xeTable.$nextTick();
|
|
7833
7967
|
},
|
|
7834
7968
|
reloadTreeChilds(row) {
|
|
7969
|
+
const $xeTable = this;
|
|
7835
7970
|
if (process.env.NODE_ENV === 'development') {
|
|
7836
7971
|
warnLog('vxe.error.delFunc', ['reloadTreeChilds', 'reloadTreeExpand']);
|
|
7837
7972
|
}
|
|
7838
7973
|
// 即将废弃
|
|
7839
|
-
return
|
|
7974
|
+
return $xeTable.reloadTreeExpand(row);
|
|
7840
7975
|
},
|
|
7841
7976
|
/**
|
|
7842
7977
|
* 展开树节点事件
|
|
7843
7978
|
*/
|
|
7844
7979
|
triggerTreeExpandEvent(evnt, params) {
|
|
7845
|
-
const
|
|
7980
|
+
const $xeTable = this;
|
|
7981
|
+
const internalData = $xeTable;
|
|
7982
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
7983
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7846
7984
|
const { row, column } = params;
|
|
7847
7985
|
const { lazy, trigger } = treeOpts;
|
|
7848
7986
|
if (trigger === 'manual') {
|
|
@@ -7851,11 +7989,11 @@ const Methods = {
|
|
|
7851
7989
|
evnt.stopPropagation();
|
|
7852
7990
|
const rowid = getRowid(this, row);
|
|
7853
7991
|
if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
|
|
7854
|
-
const expanded =
|
|
7855
|
-
const columnIndex =
|
|
7856
|
-
const $columnIndex =
|
|
7857
|
-
|
|
7858
|
-
|
|
7992
|
+
const expanded = !$xeTable.isTreeExpandByRow(row);
|
|
7993
|
+
const columnIndex = $xeTable.getColumnIndex(column);
|
|
7994
|
+
const $columnIndex = $xeTable.getVMColumnIndex(column);
|
|
7995
|
+
$xeTable.setTreeExpand(row, expanded);
|
|
7996
|
+
$xeTable.dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
|
|
7859
7997
|
}
|
|
7860
7998
|
},
|
|
7861
7999
|
/**
|
|
@@ -7864,87 +8002,6 @@ const Methods = {
|
|
|
7864
8002
|
toggleTreeExpand(row) {
|
|
7865
8003
|
return this.setTreeExpand(row, !this.isTreeExpandByRow(row));
|
|
7866
8004
|
},
|
|
7867
|
-
/**
|
|
7868
|
-
* 处理默认展开树节点
|
|
7869
|
-
*/
|
|
7870
|
-
handleDefaultTreeExpand() {
|
|
7871
|
-
const { treeConfig, treeOpts, tableFullData } = this;
|
|
7872
|
-
if (treeConfig) {
|
|
7873
|
-
const { expandAll, expandRowKeys } = treeOpts;
|
|
7874
|
-
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7875
|
-
if (expandAll) {
|
|
7876
|
-
this.setAllTreeExpand(true);
|
|
7877
|
-
}
|
|
7878
|
-
else if (expandRowKeys) {
|
|
7879
|
-
const defExpandeds = [];
|
|
7880
|
-
const rowkey = getRowkey(this);
|
|
7881
|
-
expandRowKeys.forEach((rowid) => {
|
|
7882
|
-
const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
|
|
7883
|
-
if (matchObj) {
|
|
7884
|
-
defExpandeds.push(matchObj.item);
|
|
7885
|
-
}
|
|
7886
|
-
});
|
|
7887
|
-
this.setTreeExpand(defExpandeds, true);
|
|
7888
|
-
}
|
|
7889
|
-
}
|
|
7890
|
-
},
|
|
7891
|
-
handleAsyncTreeExpandChilds(row) {
|
|
7892
|
-
const $xeTable = this;
|
|
7893
|
-
const { treeOpts, checkboxOpts } = this;
|
|
7894
|
-
const { transform, loadMethod } = treeOpts;
|
|
7895
|
-
const { checkStrictly } = checkboxOpts;
|
|
7896
|
-
return new Promise(resolve => {
|
|
7897
|
-
if (loadMethod) {
|
|
7898
|
-
const { treeExpandLazyLoadedMaps, fullAllDataRowIdData } = this;
|
|
7899
|
-
const rowid = getRowid($xeTable, row);
|
|
7900
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7901
|
-
treeExpandLazyLoadedMaps[rowid] = row;
|
|
7902
|
-
Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
|
|
7903
|
-
if (rowRest) {
|
|
7904
|
-
rowRest.treeLoaded = true;
|
|
7905
|
-
}
|
|
7906
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7907
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7908
|
-
}
|
|
7909
|
-
if (!XEUtils.isArray(childRecords)) {
|
|
7910
|
-
childRecords = [];
|
|
7911
|
-
}
|
|
7912
|
-
if (childRecords) {
|
|
7913
|
-
return this.loadTreeChildren(row, childRecords).then((childRows) => {
|
|
7914
|
-
const { treeExpandedMaps } = this;
|
|
7915
|
-
if (childRows.length && !treeExpandedMaps[rowid]) {
|
|
7916
|
-
treeExpandedMaps[rowid] = row;
|
|
7917
|
-
}
|
|
7918
|
-
// 如果当前节点已选中,则展开后子节点也被选中
|
|
7919
|
-
if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
|
|
7920
|
-
handleCheckedCheckboxRow($xeTable, childRows, true);
|
|
7921
|
-
}
|
|
7922
|
-
return this.$nextTick().then(() => {
|
|
7923
|
-
if (transform) {
|
|
7924
|
-
this.handleTableData();
|
|
7925
|
-
updateAfterDataIndex($xeTable);
|
|
7926
|
-
return this.$nextTick();
|
|
7927
|
-
}
|
|
7928
|
-
});
|
|
7929
|
-
});
|
|
7930
|
-
}
|
|
7931
|
-
}).catch(() => {
|
|
7932
|
-
const { treeExpandLazyLoadedMaps } = this;
|
|
7933
|
-
if (rowRest) {
|
|
7934
|
-
rowRest.treeLoaded = false;
|
|
7935
|
-
}
|
|
7936
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7937
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7938
|
-
}
|
|
7939
|
-
}).finally(() => {
|
|
7940
|
-
this.$nextTick().then(() => this.recalculate()).then(() => resolve());
|
|
7941
|
-
});
|
|
7942
|
-
}
|
|
7943
|
-
else {
|
|
7944
|
-
resolve();
|
|
7945
|
-
}
|
|
7946
|
-
});
|
|
7947
|
-
},
|
|
7948
8005
|
/**
|
|
7949
8006
|
* 设置所有树节点的展开与否
|
|
7950
8007
|
* @param {Boolean} expanded 是否展开
|
|
@@ -7969,42 +8026,47 @@ const Methods = {
|
|
|
7969
8026
|
* @returns
|
|
7970
8027
|
*/
|
|
7971
8028
|
handleBaseTreeExpand(rows, expanded) {
|
|
7972
|
-
const
|
|
8029
|
+
const $xeTable = this;
|
|
8030
|
+
const reactData = $xeTable;
|
|
8031
|
+
const internalData = $xeTable;
|
|
8032
|
+
const { treeNodeColumn } = reactData;
|
|
8033
|
+
const { fullAllDataRowIdData, tableFullData, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData;
|
|
8034
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7973
8035
|
const { reserve, lazy, accordion, toggleMethod } = treeOpts;
|
|
7974
|
-
const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
|
|
7975
8036
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7976
8037
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
7977
8038
|
const result = [];
|
|
7978
|
-
const columnIndex =
|
|
7979
|
-
const $columnIndex =
|
|
7980
|
-
|
|
8039
|
+
const columnIndex = $xeTable.getColumnIndex(treeNodeColumn);
|
|
8040
|
+
const $columnIndex = $xeTable.getVMColumnIndex(treeNodeColumn);
|
|
8041
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
8042
|
+
let validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: treeNodeColumn, columnIndex, $columnIndex, row })) : rows;
|
|
7981
8043
|
if (accordion) {
|
|
7982
8044
|
validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
|
|
7983
8045
|
// 同一级只能展开一个
|
|
7984
8046
|
const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField });
|
|
7985
8047
|
if (matchObj) {
|
|
7986
8048
|
matchObj.items.forEach(item => {
|
|
7987
|
-
const rowid =
|
|
7988
|
-
if (
|
|
7989
|
-
delete
|
|
8049
|
+
const rowid = handleGetRowId(item);
|
|
8050
|
+
if (treeExpandedMaps[rowid]) {
|
|
8051
|
+
delete treeExpandedMaps[rowid];
|
|
7990
8052
|
}
|
|
7991
8053
|
});
|
|
7992
8054
|
}
|
|
7993
8055
|
}
|
|
7994
8056
|
if (expanded) {
|
|
7995
8057
|
validRows.forEach((row) => {
|
|
7996
|
-
const rowid =
|
|
7997
|
-
if (!
|
|
8058
|
+
const rowid = handleGetRowId(row);
|
|
8059
|
+
if (!treeExpandedMaps[rowid]) {
|
|
7998
8060
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7999
8061
|
if (rowRest) {
|
|
8000
8062
|
const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
|
|
8001
8063
|
// 是否使用懒加载
|
|
8002
8064
|
if (isLoad) {
|
|
8003
|
-
result.push(
|
|
8065
|
+
result.push(handleAsyncTreeExpandChilds($xeTable, row));
|
|
8004
8066
|
}
|
|
8005
8067
|
else {
|
|
8006
8068
|
if (row[childrenField] && row[childrenField].length) {
|
|
8007
|
-
|
|
8069
|
+
treeExpandedMaps[rowid] = row;
|
|
8008
8070
|
}
|
|
8009
8071
|
}
|
|
8010
8072
|
}
|
|
@@ -8013,18 +8075,18 @@ const Methods = {
|
|
|
8013
8075
|
}
|
|
8014
8076
|
else {
|
|
8015
8077
|
validRows.forEach((item) => {
|
|
8016
|
-
const rowid =
|
|
8017
|
-
if (
|
|
8018
|
-
delete
|
|
8078
|
+
const rowid = handleGetRowId(item);
|
|
8079
|
+
if (treeExpandedMaps[rowid]) {
|
|
8080
|
+
delete treeExpandedMaps[rowid];
|
|
8019
8081
|
}
|
|
8020
8082
|
});
|
|
8021
8083
|
}
|
|
8022
8084
|
if (reserve) {
|
|
8023
|
-
validRows.forEach((row) =>
|
|
8085
|
+
validRows.forEach((row) => handleTreeExpandReserve($xeTable, row, expanded));
|
|
8024
8086
|
}
|
|
8025
|
-
|
|
8087
|
+
reactData.treeExpandedFlag++;
|
|
8026
8088
|
return Promise.all(result).then(() => {
|
|
8027
|
-
return
|
|
8089
|
+
return $xeTable.recalculate();
|
|
8028
8090
|
});
|
|
8029
8091
|
},
|
|
8030
8092
|
/**
|
|
@@ -8078,30 +8140,38 @@ const Methods = {
|
|
|
8078
8140
|
* @param {Row} row 行对象
|
|
8079
8141
|
*/
|
|
8080
8142
|
isTreeExpandByRow(row) {
|
|
8081
|
-
const
|
|
8082
|
-
|
|
8143
|
+
const $xeTable = this;
|
|
8144
|
+
const reactData = $xeTable;
|
|
8145
|
+
const internalData = $xeTable;
|
|
8146
|
+
const { treeExpandedFlag } = reactData;
|
|
8147
|
+
const { treeExpandedMaps } = internalData;
|
|
8148
|
+
return !!treeExpandedFlag && !!treeExpandedMaps[getRowid($xeTable, row)];
|
|
8083
8149
|
},
|
|
8084
8150
|
/**
|
|
8085
8151
|
* 手动清空树形节点的展开状态,数据会恢复成未展开的状态
|
|
8086
8152
|
*/
|
|
8087
8153
|
clearTreeExpand() {
|
|
8088
8154
|
const $xeTable = this;
|
|
8089
|
-
const
|
|
8090
|
-
const
|
|
8155
|
+
const reactData = $xeTable;
|
|
8156
|
+
const internalData = $xeTable;
|
|
8157
|
+
const { tableFullTreeData } = internalData;
|
|
8158
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
8091
8159
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
8092
|
-
const
|
|
8093
|
-
|
|
8160
|
+
const { transform, reserve } = treeOpts;
|
|
8161
|
+
const expList = $xeTable.getTreeExpandRecords();
|
|
8162
|
+
internalData.treeExpandedMaps = {};
|
|
8163
|
+
reactData.treeExpandedFlag++;
|
|
8094
8164
|
if (reserve) {
|
|
8095
|
-
XEUtils.eachTree(
|
|
8165
|
+
XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), { children: childrenField });
|
|
8096
8166
|
}
|
|
8097
|
-
return
|
|
8167
|
+
return $xeTable.handleTableData().then(() => {
|
|
8098
8168
|
if (transform) {
|
|
8099
8169
|
handleVirtualTreeToList($xeTable);
|
|
8100
|
-
return
|
|
8170
|
+
return $xeTable.handleTableData();
|
|
8101
8171
|
}
|
|
8102
8172
|
}).then(() => {
|
|
8103
8173
|
if (expList.length) {
|
|
8104
|
-
|
|
8174
|
+
$xeTable.recalculate();
|
|
8105
8175
|
}
|
|
8106
8176
|
});
|
|
8107
8177
|
},
|
|
@@ -8109,18 +8179,6 @@ const Methods = {
|
|
|
8109
8179
|
this.treeExpandedReserveRowMap = {};
|
|
8110
8180
|
return this.$nextTick();
|
|
8111
8181
|
},
|
|
8112
|
-
handleTreeExpandReserve(row, expanded) {
|
|
8113
|
-
const { treeExpandedReserveRowMap, treeOpts } = this;
|
|
8114
|
-
if (treeOpts.reserve) {
|
|
8115
|
-
const rowid = getRowid(this, row);
|
|
8116
|
-
if (expanded) {
|
|
8117
|
-
treeExpandedReserveRowMap[rowid] = row;
|
|
8118
|
-
}
|
|
8119
|
-
else if (treeExpandedReserveRowMap[rowid]) {
|
|
8120
|
-
delete treeExpandedReserveRowMap[rowid];
|
|
8121
|
-
}
|
|
8122
|
-
}
|
|
8123
|
-
},
|
|
8124
8182
|
/**
|
|
8125
8183
|
* 获取表格的滚动状态
|
|
8126
8184
|
*/
|
|
@@ -8438,10 +8496,10 @@ const Methods = {
|
|
|
8438
8496
|
return;
|
|
8439
8497
|
}
|
|
8440
8498
|
const { highlightHoverRow } = tableProps;
|
|
8441
|
-
const { scrollXLoad, scrollYLoad } = reactData;
|
|
8499
|
+
const { scrollXLoad, scrollYLoad, expandColumn } = reactData;
|
|
8442
8500
|
const leftFixedWidth = $xeTable.computeLeftFixedWidth;
|
|
8443
8501
|
const rightFixedWidth = $xeTable.computeRightFixedWidth;
|
|
8444
|
-
if (!(
|
|
8502
|
+
if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
|
|
8445
8503
|
return;
|
|
8446
8504
|
}
|
|
8447
8505
|
const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
|
|
@@ -8693,8 +8751,8 @@ const Methods = {
|
|
|
8693
8751
|
const $xeTable = this;
|
|
8694
8752
|
const reactData = $xeTable;
|
|
8695
8753
|
const internalData = $xeTable;
|
|
8696
|
-
const { isAllOverflow, scrollYLoad, expandColumn
|
|
8697
|
-
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData;
|
|
8754
|
+
const { isAllOverflow, scrollYLoad, expandColumn } = reactData;
|
|
8755
|
+
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
8698
8756
|
const { startIndex } = scrollYStore;
|
|
8699
8757
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
8700
8758
|
const rowOpts = $xeTable.computeRowOpts;
|
|
@@ -8937,13 +8995,15 @@ const Methods = {
|
|
|
8937
8995
|
* 更新表尾合计
|
|
8938
8996
|
*/
|
|
8939
8997
|
updateFooter() {
|
|
8998
|
+
const $xeTable = this;
|
|
8999
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
8940
9000
|
const { showFooter, visibleColumn, footerData, footerMethod } = this;
|
|
8941
9001
|
let footData = [];
|
|
8942
9002
|
if (showFooter && footerData && footerData.length) {
|
|
8943
9003
|
footData = footerData.slice(0);
|
|
8944
9004
|
}
|
|
8945
9005
|
else if (showFooter && footerMethod) {
|
|
8946
|
-
footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table:
|
|
9006
|
+
footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table: $xeTable, $grid: $xeGrid }) : [];
|
|
8947
9007
|
}
|
|
8948
9008
|
this.footerTableData = footData;
|
|
8949
9009
|
return this.$nextTick();
|
|
@@ -9021,7 +9081,7 @@ const Methods = {
|
|
|
9021
9081
|
if (this.footerSpanMethod) {
|
|
9022
9082
|
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
9023
9083
|
}
|
|
9024
|
-
setMerges(this, merges, this.mergeFooterList
|
|
9084
|
+
setMerges(this, merges, this.mergeFooterList);
|
|
9025
9085
|
return this.$nextTick().then(() => {
|
|
9026
9086
|
this.updateCellAreas();
|
|
9027
9087
|
return updateStyle($xeTable);
|
|
@@ -9075,11 +9135,14 @@ const Methods = {
|
|
|
9075
9135
|
},
|
|
9076
9136
|
dispatchEvent(type, params, evnt) {
|
|
9077
9137
|
const $xeTable = this;
|
|
9078
|
-
|
|
9138
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
9139
|
+
$xeTable.$emit(type, createEvent(evnt, { $table: $xeTable, $grid: $xeGrid }, params));
|
|
9079
9140
|
},
|
|
9080
9141
|
// 已废弃,使用 dispatchEvent
|
|
9081
9142
|
emitEvent(type, params, evnt) {
|
|
9082
|
-
|
|
9143
|
+
const $xeTable = this;
|
|
9144
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
9145
|
+
this.$emit(type, Object.assign({ $table: $xeTable, $grid: $xeGrid, $event: evnt }, params));
|
|
9083
9146
|
},
|
|
9084
9147
|
focus() {
|
|
9085
9148
|
this.isActivated = true;
|