vxe-table 3.14.0-beta.8 → 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 +75 -50
- 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 +773 -704
- 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 +82 -67
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.umd.js +1590 -1249
- 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 +911 -830
- 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 +88 -59
- 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 +854 -740
- 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.1741333630357.ttf → iconfont.1742955973002.ttf} +0 -0
- /package/es/{iconfont.1741333630357.woff → iconfont.1742955973002.woff} +0 -0
- /package/es/{iconfont.1741333630357.woff2 → iconfont.1742955973002.woff2} +0 -0
- /package/lib/{iconfont.1741333630357.ttf → iconfont.1742955973002.ttf} +0 -0
- /package/lib/{iconfont.1741333630357.woff → iconfont.1742955973002.woff} +0 -0
- /package/lib/{iconfont.1741333630357.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,24 +2790,18 @@ 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) {
|
|
2646
2804
|
rowRest = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
|
|
2647
|
-
fullDataRowIdMaps[rowid] = rowRest;
|
|
2648
|
-
fullAllDataRowIdMaps[rowid] = rowRest;
|
|
2649
2805
|
}
|
|
2650
2806
|
rowRest.treeLoaded = false;
|
|
2651
2807
|
rowRest.expandLoaded = false;
|
|
@@ -2655,18 +2811,19 @@ const Methods = {
|
|
|
2655
2811
|
rowRest.level = level;
|
|
2656
2812
|
rowRest.index = currIndex;
|
|
2657
2813
|
rowRest.treeIndex = index;
|
|
2814
|
+
fullDataRowIdMaps[rowid] = rowRest;
|
|
2815
|
+
fullAllDataRowIdMaps[rowid] = rowRest;
|
|
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,28 +2832,25 @@ 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;
|
|
2844
|
+
const props = $xeTable;
|
|
2845
|
+
const internalData = $xeTable;
|
|
2846
|
+
const { treeConfig } = props;
|
|
2847
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
2687
2848
|
const sourceData = XEUtils.clone(fullData, true);
|
|
2688
|
-
const
|
|
2689
|
-
|
|
2849
|
+
const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
|
|
2850
|
+
const sourceRowIdData = {};
|
|
2690
2851
|
const handleSourceRow = (row) => {
|
|
2691
|
-
|
|
2692
|
-
|
|
2693
|
-
rowid = getRowUniqueId();
|
|
2694
|
-
XEUtils.set(row, rowkey, rowid);
|
|
2695
|
-
}
|
|
2696
|
-
sourceDataRowIdData[rowid] = {
|
|
2697
|
-
row,
|
|
2698
|
-
rowid
|
|
2699
|
-
};
|
|
2852
|
+
const rowid = handleUpdateRowId(row);
|
|
2853
|
+
sourceRowIdData[rowid] = row;
|
|
2700
2854
|
};
|
|
2701
2855
|
// 源数据缓存
|
|
2702
2856
|
if (treeConfig) {
|
|
@@ -2706,7 +2860,8 @@ const Methods = {
|
|
|
2706
2860
|
else {
|
|
2707
2861
|
sourceData.forEach(handleSourceRow);
|
|
2708
2862
|
}
|
|
2709
|
-
|
|
2863
|
+
internalData.sourceDataRowIdData = sourceRowIdData;
|
|
2864
|
+
internalData.tableSourceData = sourceData;
|
|
2710
2865
|
},
|
|
2711
2866
|
getParams() {
|
|
2712
2867
|
return this.params;
|
|
@@ -2793,47 +2948,22 @@ const Methods = {
|
|
|
2793
2948
|
* 根据 row 获取序号
|
|
2794
2949
|
* @param {Row} row 行对象
|
|
2795
2950
|
*/
|
|
2796
|
-
getRowSeq(
|
|
2797
|
-
const { fullAllDataRowIdData } = this;
|
|
2798
|
-
if (row) {
|
|
2799
|
-
const rowid = getRowid(this, row);
|
|
2800
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2801
|
-
if (rest) {
|
|
2802
|
-
return rest.seq;
|
|
2803
|
-
}
|
|
2804
|
-
}
|
|
2805
|
-
return -1;
|
|
2806
|
-
},
|
|
2951
|
+
getRowSeq: createGetRowCacheProp('seq'),
|
|
2807
2952
|
/**
|
|
2808
2953
|
* 根据 row 获取相对于 data 中的索引
|
|
2809
2954
|
* @param {Row} row 行对象
|
|
2810
2955
|
*/
|
|
2811
|
-
getRowIndex(
|
|
2812
|
-
const { fullAllDataRowIdData } = this;
|
|
2813
|
-
if (row) {
|
|
2814
|
-
const rowid = getRowid(this, row);
|
|
2815
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2816
|
-
if (rest) {
|
|
2817
|
-
return rest.index;
|
|
2818
|
-
}
|
|
2819
|
-
}
|
|
2820
|
-
return -1;
|
|
2821
|
-
},
|
|
2956
|
+
getRowIndex: createGetRowCacheProp('index'),
|
|
2822
2957
|
/**
|
|
2823
2958
|
* 根据 row 获取相对于当前数据中的索引
|
|
2824
2959
|
* @param {Row} row 行对象
|
|
2825
2960
|
*/
|
|
2826
|
-
getVTRowIndex(
|
|
2827
|
-
|
|
2828
|
-
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
return rest._index;
|
|
2833
|
-
}
|
|
2834
|
-
}
|
|
2835
|
-
return -1;
|
|
2836
|
-
},
|
|
2961
|
+
getVTRowIndex: createGetRowCacheProp('_index'),
|
|
2962
|
+
/**
|
|
2963
|
+
* 根据 row 获取渲染中的虚拟索引
|
|
2964
|
+
* @param {Row} row 行对象
|
|
2965
|
+
*/
|
|
2966
|
+
getVMRowIndex: createGetRowCacheProp('$index'),
|
|
2837
2967
|
// 在 v3 中废弃
|
|
2838
2968
|
_getRowIndex(row) {
|
|
2839
2969
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2841,21 +2971,6 @@ const Methods = {
|
|
|
2841
2971
|
}
|
|
2842
2972
|
return this.getVTRowIndex(row);
|
|
2843
2973
|
},
|
|
2844
|
-
/**
|
|
2845
|
-
* 根据 row 获取渲染中的虚拟索引
|
|
2846
|
-
* @param {Row} row 行对象
|
|
2847
|
-
*/
|
|
2848
|
-
getVMRowIndex(row) {
|
|
2849
|
-
const { fullAllDataRowIdData } = this;
|
|
2850
|
-
if (row) {
|
|
2851
|
-
const rowid = getRowid(this, row);
|
|
2852
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2853
|
-
if (rest) {
|
|
2854
|
-
return rest.$index;
|
|
2855
|
-
}
|
|
2856
|
-
}
|
|
2857
|
-
return -1;
|
|
2858
|
-
},
|
|
2859
2974
|
// 在 v3 中废弃
|
|
2860
2975
|
$getRowIndex(row) {
|
|
2861
2976
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2867,30 +2982,17 @@ const Methods = {
|
|
|
2867
2982
|
* 根据 column 获取相对于 columns 中的索引
|
|
2868
2983
|
* @param {ColumnInfo} column 列配置
|
|
2869
2984
|
*/
|
|
2870
|
-
getColumnIndex(
|
|
2871
|
-
const { fullColumnIdData } = this;
|
|
2872
|
-
if (column) {
|
|
2873
|
-
const rest = fullColumnIdData[column.id];
|
|
2874
|
-
if (rest) {
|
|
2875
|
-
return rest.index;
|
|
2876
|
-
}
|
|
2877
|
-
}
|
|
2878
|
-
return -1;
|
|
2879
|
-
},
|
|
2985
|
+
getColumnIndex: createGetColumnCacheProp('index'),
|
|
2880
2986
|
/**
|
|
2881
2987
|
* 根据 column 获取相对于当前表格列中的索引
|
|
2882
2988
|
* @param {ColumnInfo} column 列配置
|
|
2883
2989
|
*/
|
|
2884
|
-
getVTColumnIndex(
|
|
2885
|
-
|
|
2886
|
-
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
}
|
|
2891
|
-
}
|
|
2892
|
-
return -1;
|
|
2893
|
-
},
|
|
2990
|
+
getVTColumnIndex: createGetColumnCacheProp('_index'),
|
|
2991
|
+
/**
|
|
2992
|
+
* 根据 column 获取渲染中的虚拟索引
|
|
2993
|
+
* @param {ColumnInfo} column 列配置
|
|
2994
|
+
*/
|
|
2995
|
+
getVMColumnIndex: createGetColumnCacheProp('$index'),
|
|
2894
2996
|
// 在 v3 中废弃
|
|
2895
2997
|
_getColumnIndex(column) {
|
|
2896
2998
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2898,20 +3000,6 @@ const Methods = {
|
|
|
2898
3000
|
}
|
|
2899
3001
|
return this.getVTColumnIndex(column);
|
|
2900
3002
|
},
|
|
2901
|
-
/**
|
|
2902
|
-
* 根据 column 获取渲染中的虚拟索引
|
|
2903
|
-
* @param {ColumnInfo} column 列配置
|
|
2904
|
-
*/
|
|
2905
|
-
getVMColumnIndex(column) {
|
|
2906
|
-
const { fullColumnIdData } = this;
|
|
2907
|
-
if (column) {
|
|
2908
|
-
const rest = fullColumnIdData[column.id];
|
|
2909
|
-
if (rest) {
|
|
2910
|
-
return rest.$index;
|
|
2911
|
-
}
|
|
2912
|
-
}
|
|
2913
|
-
return -1;
|
|
2914
|
-
},
|
|
2915
3003
|
// 在 v3 中废弃
|
|
2916
3004
|
$getColumnIndex(column) {
|
|
2917
3005
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -3005,9 +3093,12 @@ const Methods = {
|
|
|
3005
3093
|
const reactData = $xeTable;
|
|
3006
3094
|
const internalData = $xeTable;
|
|
3007
3095
|
const { keepSource, treeConfig } = props;
|
|
3096
|
+
const { editStore } = reactData;
|
|
3008
3097
|
const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
|
|
3098
|
+
const removeTempMaps = Object.assign({}, editStore.removeMaps);
|
|
3009
3099
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3010
3100
|
const { transform } = treeOpts;
|
|
3101
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
3011
3102
|
if (!keepSource) {
|
|
3012
3103
|
if (process.env.NODE_ENV === 'development') {
|
|
3013
3104
|
errLog('vxe.error.reqProp', ['keep-source']);
|
|
@@ -3026,7 +3117,7 @@ const Methods = {
|
|
|
3026
3117
|
let reDelFlag = false;
|
|
3027
3118
|
if (targetRows.length) {
|
|
3028
3119
|
targetRows.forEach((item) => {
|
|
3029
|
-
const rowid =
|
|
3120
|
+
const rowid = handleGetRowId(item);
|
|
3030
3121
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
3031
3122
|
if (rowRest) {
|
|
3032
3123
|
const row = rowRest.row;
|
|
@@ -3040,6 +3131,7 @@ const Methods = {
|
|
|
3040
3131
|
XEUtils.destructuring(row, XEUtils.clone(oRow, true));
|
|
3041
3132
|
}
|
|
3042
3133
|
if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
|
|
3134
|
+
delete removeTempMaps[rowid];
|
|
3043
3135
|
tableFullData.unshift(row);
|
|
3044
3136
|
afterFullData.unshift(row);
|
|
3045
3137
|
reDelFlag = true;
|
|
@@ -3051,6 +3143,7 @@ const Methods = {
|
|
|
3051
3143
|
}
|
|
3052
3144
|
if (rows) {
|
|
3053
3145
|
if (reDelFlag) {
|
|
3146
|
+
editStore.removeMaps = removeTempMaps;
|
|
3054
3147
|
$xeTable.updateFooter();
|
|
3055
3148
|
$xeTable.cacheRowMap(false);
|
|
3056
3149
|
$xeTable.handleTableData(treeConfig && transform);
|
|
@@ -3408,11 +3501,9 @@ const Methods = {
|
|
|
3408
3501
|
getCheckboxRecords(isFull) {
|
|
3409
3502
|
const $xeTable = this;
|
|
3410
3503
|
const props = $xeTable;
|
|
3411
|
-
const reactData = $xeTable;
|
|
3412
3504
|
const internalData = $xeTable;
|
|
3413
3505
|
const { treeConfig } = props;
|
|
3414
|
-
const { selectCheckboxMaps } =
|
|
3415
|
-
const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData;
|
|
3506
|
+
const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData;
|
|
3416
3507
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3417
3508
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
3418
3509
|
const { transform, mapChildrenField } = treeOpts;
|
|
@@ -3460,7 +3551,7 @@ const Methods = {
|
|
|
3460
3551
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3461
3552
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
3462
3553
|
const { transform, rowField, parentField, mapChildrenField } = treeOpts;
|
|
3463
|
-
const { remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
|
|
3554
|
+
const { isEvery, remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
|
|
3464
3555
|
const { remote: allRemoteSort, sortMethod: allSortMethod, multiple: sortMultiple, chronological } = sortOpts;
|
|
3465
3556
|
let tableData = [];
|
|
3466
3557
|
let tableTree = [];
|
|
@@ -3519,7 +3610,7 @@ const Methods = {
|
|
|
3519
3610
|
// 筛选虚拟树
|
|
3520
3611
|
tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, {
|
|
3521
3612
|
original: true,
|
|
3522
|
-
isEvery
|
|
3613
|
+
isEvery,
|
|
3523
3614
|
children: mapChildrenField,
|
|
3524
3615
|
mapChildren: childrenField
|
|
3525
3616
|
});
|
|
@@ -3535,7 +3626,7 @@ const Methods = {
|
|
|
3535
3626
|
// 还原虚拟树
|
|
3536
3627
|
tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
|
|
3537
3628
|
original: true,
|
|
3538
|
-
isEvery
|
|
3629
|
+
isEvery,
|
|
3539
3630
|
children: mapChildrenField,
|
|
3540
3631
|
mapChildren: childrenField
|
|
3541
3632
|
});
|
|
@@ -3598,7 +3689,7 @@ const Methods = {
|
|
|
3598
3689
|
// 还原虚拟树
|
|
3599
3690
|
tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
|
|
3600
3691
|
original: true,
|
|
3601
|
-
isEvery
|
|
3692
|
+
isEvery,
|
|
3602
3693
|
children: treeOpts.mapChildrenField,
|
|
3603
3694
|
mapChildren: childrenField
|
|
3604
3695
|
});
|
|
@@ -3745,6 +3836,7 @@ const Methods = {
|
|
|
3745
3836
|
* 默认执行一次,除非被重置
|
|
3746
3837
|
*/
|
|
3747
3838
|
handleLoadDefaults() {
|
|
3839
|
+
const $xeTable = this;
|
|
3748
3840
|
if (this.checkboxConfig) {
|
|
3749
3841
|
this.handleDefaultSelectionChecked();
|
|
3750
3842
|
}
|
|
@@ -3755,7 +3847,7 @@ const Methods = {
|
|
|
3755
3847
|
this.handleDefaultRowExpand();
|
|
3756
3848
|
}
|
|
3757
3849
|
if (this.treeConfig) {
|
|
3758
|
-
|
|
3850
|
+
handleDefaultTreeExpand($xeTable);
|
|
3759
3851
|
}
|
|
3760
3852
|
if (this.mergeCells) {
|
|
3761
3853
|
this.handleDefaultMergeCells();
|
|
@@ -3943,9 +4035,9 @@ const Methods = {
|
|
|
3943
4035
|
return this.refreshColumn(true);
|
|
3944
4036
|
},
|
|
3945
4037
|
handleCustomRestore(storeData) {
|
|
3946
|
-
const $
|
|
3947
|
-
const reactData = $
|
|
3948
|
-
const internalData = $
|
|
4038
|
+
const $xeTable = this;
|
|
4039
|
+
const reactData = $xeTable;
|
|
4040
|
+
const internalData = $xeTable;
|
|
3949
4041
|
let { collectColumn } = internalData;
|
|
3950
4042
|
const { resizableData, sortData, visibleData, fixedData } = storeData;
|
|
3951
4043
|
let hasCustomSort = false;
|
|
@@ -4014,8 +4106,19 @@ const Methods = {
|
|
|
4014
4106
|
}
|
|
4015
4107
|
},
|
|
4016
4108
|
getCustomStoreData() {
|
|
4017
|
-
const
|
|
4018
|
-
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;
|
|
4019
4122
|
const resizableData = {};
|
|
4020
4123
|
const sortData = {};
|
|
4021
4124
|
const visibleData = {};
|
|
@@ -4032,47 +4135,37 @@ const Methods = {
|
|
|
4032
4135
|
}
|
|
4033
4136
|
let hasResizable = 0;
|
|
4034
4137
|
let hasSort = 0;
|
|
4035
|
-
let
|
|
4138
|
+
let hasFixed = 0;
|
|
4036
4139
|
let hasVisible = 0;
|
|
4037
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
|
+
}
|
|
4038
4146
|
// 只支持一级
|
|
4039
4147
|
if (!parentColumn) {
|
|
4040
|
-
|
|
4041
|
-
|
|
4042
|
-
|
|
4043
|
-
hasSort = 1;
|
|
4044
|
-
sortData[colKey] = column.renderSortNumber;
|
|
4045
|
-
}
|
|
4046
|
-
});
|
|
4047
|
-
if (column.fixed !== column.defaultFixed) {
|
|
4048
|
-
const colKey = column.getKey();
|
|
4049
|
-
if (colKey) {
|
|
4050
|
-
hasFixedt = 1;
|
|
4051
|
-
fixedData[colKey] = column.fixed;
|
|
4052
|
-
}
|
|
4148
|
+
if (isCustomSort) {
|
|
4149
|
+
hasSort = 1;
|
|
4150
|
+
sortData[colKey] = column.renderSortNumber;
|
|
4053
4151
|
}
|
|
4054
|
-
|
|
4055
|
-
|
|
4056
|
-
|
|
4057
|
-
if (colKey) {
|
|
4058
|
-
hasResizable = 1;
|
|
4059
|
-
resizableData[colKey] = column.renderWidth;
|
|
4152
|
+
if (isCustomFixed && column.fixed !== column.defaultFixed) {
|
|
4153
|
+
hasFixed = 1;
|
|
4154
|
+
fixedData[colKey] = column.fixed;
|
|
4060
4155
|
}
|
|
4061
4156
|
}
|
|
4062
|
-
if (
|
|
4157
|
+
if (isCustomResizable && column.resizeWidth) {
|
|
4158
|
+
hasResizable = 1;
|
|
4159
|
+
resizableData[colKey] = column.renderWidth;
|
|
4160
|
+
}
|
|
4161
|
+
if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
|
|
4063
4162
|
if (!column.visible && column.defaultVisible) {
|
|
4064
|
-
|
|
4065
|
-
|
|
4066
|
-
hasVisible = 1;
|
|
4067
|
-
visibleData[colKey] = false;
|
|
4068
|
-
}
|
|
4163
|
+
hasVisible = 1;
|
|
4164
|
+
visibleData[colKey] = false;
|
|
4069
4165
|
}
|
|
4070
4166
|
else if (column.visible && !column.defaultVisible) {
|
|
4071
|
-
|
|
4072
|
-
|
|
4073
|
-
hasVisible = 1;
|
|
4074
|
-
visibleData[colKey] = true;
|
|
4075
|
-
}
|
|
4167
|
+
hasVisible = 1;
|
|
4168
|
+
visibleData[colKey] = true;
|
|
4076
4169
|
}
|
|
4077
4170
|
}
|
|
4078
4171
|
});
|
|
@@ -4082,7 +4175,7 @@ const Methods = {
|
|
|
4082
4175
|
if (hasSort) {
|
|
4083
4176
|
storeData.sortData = sortData;
|
|
4084
4177
|
}
|
|
4085
|
-
if (
|
|
4178
|
+
if (hasFixed) {
|
|
4086
4179
|
storeData.fixedData = fixedData;
|
|
4087
4180
|
}
|
|
4088
4181
|
if (hasVisible) {
|
|
@@ -4570,12 +4663,13 @@ const Methods = {
|
|
|
4570
4663
|
const $xeTable = this;
|
|
4571
4664
|
const internalData = $xeTable;
|
|
4572
4665
|
const { fullAllDataRowIdData, afterFullData } = internalData;
|
|
4666
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4573
4667
|
const rowOpts = $xeTable.computeRowOpts;
|
|
4574
4668
|
const cellOpts = $xeTable.computeCellOpts;
|
|
4575
4669
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
4576
4670
|
const rest = {};
|
|
4577
4671
|
afterFullData.forEach(row => {
|
|
4578
|
-
const rowid =
|
|
4672
|
+
const rowid = handleGetRowId(row);
|
|
4579
4673
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4580
4674
|
if (rowRest) {
|
|
4581
4675
|
const resizeHeight = rowRest.resizeHeight;
|
|
@@ -4602,8 +4696,9 @@ const Methods = {
|
|
|
4602
4696
|
rHeight = Math.floor(rHeight * bodyHeight);
|
|
4603
4697
|
}
|
|
4604
4698
|
if (rHeight) {
|
|
4699
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4605
4700
|
rows.forEach(row => {
|
|
4606
|
-
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row :
|
|
4701
|
+
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row);
|
|
4607
4702
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4608
4703
|
if (rowRest) {
|
|
4609
4704
|
rowRest.resizeHeight = rHeight;
|
|
@@ -4744,6 +4839,8 @@ const Methods = {
|
|
|
4744
4839
|
}
|
|
4745
4840
|
},
|
|
4746
4841
|
preventEvent(evnt, type, args, next, end) {
|
|
4842
|
+
const $xeTable = this;
|
|
4843
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
4747
4844
|
let evntList = interceptor.get(type);
|
|
4748
4845
|
// 兼容老版本
|
|
4749
4846
|
if (!evntList.length && type === 'event.clearEdit') {
|
|
@@ -4755,8 +4852,22 @@ const Methods = {
|
|
|
4755
4852
|
}
|
|
4756
4853
|
}
|
|
4757
4854
|
// 兼容老版本
|
|
4758
|
-
let rest;
|
|
4759
|
-
|
|
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) {
|
|
4760
4871
|
if (next) {
|
|
4761
4872
|
rest = next();
|
|
4762
4873
|
}
|
|
@@ -4770,7 +4881,9 @@ const Methods = {
|
|
|
4770
4881
|
* 全局按下事件处理
|
|
4771
4882
|
*/
|
|
4772
4883
|
handleGlobalMousedownEvent(evnt) {
|
|
4773
|
-
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;
|
|
4774
4887
|
const { actived } = editStore;
|
|
4775
4888
|
const { customWrapper, refValidTooltip } = $refs;
|
|
4776
4889
|
const tableFilter = $refs.refTableFilter;
|
|
@@ -4860,7 +4973,7 @@ const Methods = {
|
|
|
4860
4973
|
}
|
|
4861
4974
|
}
|
|
4862
4975
|
else if (mouseConfig) {
|
|
4863
|
-
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)) {
|
|
4864
4977
|
if (this.clearSelected) {
|
|
4865
4978
|
this.clearSelected();
|
|
4866
4979
|
}
|
|
@@ -4882,7 +4995,7 @@ const Methods = {
|
|
|
4882
4995
|
if (ctxMenuStore.visible && tableMenu && !getEventTargetNode(evnt, tableMenu.$el).flag) {
|
|
4883
4996
|
this.closeMenu();
|
|
4884
4997
|
}
|
|
4885
|
-
const isActivated = getEventTargetNode(evnt, ($
|
|
4998
|
+
const isActivated = getEventTargetNode(evnt, ($xeGrid || this).$el).flag;
|
|
4886
4999
|
// 如果存在校验,点击了表格之外则清除
|
|
4887
5000
|
if (!isActivated && editRules && validOpts.autoClear) {
|
|
4888
5001
|
this.validErrorMaps = {};
|
|
@@ -4946,6 +5059,7 @@ const Methods = {
|
|
|
4946
5059
|
handleGlobalKeydownEvent(evnt) {
|
|
4947
5060
|
const $xeTable = this;
|
|
4948
5061
|
const internalData = $xeTable;
|
|
5062
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
4949
5063
|
// 该行为只对当前激活的表格有效
|
|
4950
5064
|
if (this.isActivated) {
|
|
4951
5065
|
this.preventEvent(evnt, 'event.keydown', null, () => {
|
|
@@ -5044,7 +5158,7 @@ const Methods = {
|
|
|
5044
5158
|
this.moveTabSelected(activeParams, hasShiftKey, evnt);
|
|
5045
5159
|
}
|
|
5046
5160
|
else {
|
|
5047
|
-
this.
|
|
5161
|
+
this.moveEnterSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt);
|
|
5048
5162
|
}
|
|
5049
5163
|
}
|
|
5050
5164
|
else {
|
|
@@ -5078,7 +5192,7 @@ const Methods = {
|
|
|
5078
5192
|
return;
|
|
5079
5193
|
}
|
|
5080
5194
|
}
|
|
5081
|
-
this.
|
|
5195
|
+
this.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt);
|
|
5082
5196
|
if (enterMethod) {
|
|
5083
5197
|
enterMethod(etrParams);
|
|
5084
5198
|
}
|
|
@@ -5104,11 +5218,7 @@ const Methods = {
|
|
|
5104
5218
|
if (!isEditStatus) {
|
|
5105
5219
|
// 如果按下了方向键
|
|
5106
5220
|
if (selected.row && selected.column) {
|
|
5107
|
-
|
|
5108
|
-
}
|
|
5109
|
-
else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
|
|
5110
|
-
// 当前行按键上下移动
|
|
5111
|
-
this.moveCurrentRow(isUpArrow, isDwArrow, evnt);
|
|
5221
|
+
$xeTable.moveArrowSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
|
|
5112
5222
|
}
|
|
5113
5223
|
}
|
|
5114
5224
|
}
|
|
@@ -5131,7 +5241,7 @@ const Methods = {
|
|
|
5131
5241
|
column: selected.column,
|
|
5132
5242
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5133
5243
|
$table: this,
|
|
5134
|
-
$grid:
|
|
5244
|
+
$grid: $xeGrid
|
|
5135
5245
|
};
|
|
5136
5246
|
// 是否被禁用
|
|
5137
5247
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
@@ -5158,7 +5268,7 @@ const Methods = {
|
|
|
5158
5268
|
column: selected.column,
|
|
5159
5269
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5160
5270
|
$table: this,
|
|
5161
|
-
$grid:
|
|
5271
|
+
$grid: $xeGrid
|
|
5162
5272
|
};
|
|
5163
5273
|
// 是否被禁用
|
|
5164
5274
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
@@ -5187,7 +5297,7 @@ const Methods = {
|
|
|
5187
5297
|
rowIndex: this.getRowIndex(parentRow),
|
|
5188
5298
|
$rowIndex: this.getVMRowIndex(parentRow),
|
|
5189
5299
|
$table: this,
|
|
5190
|
-
$grid:
|
|
5300
|
+
$grid: $xeGrid
|
|
5191
5301
|
};
|
|
5192
5302
|
this.setTreeExpand(parentRow, false)
|
|
5193
5303
|
.then(() => this.scrollToRow(parentRow))
|
|
@@ -5209,7 +5319,7 @@ const Methods = {
|
|
|
5209
5319
|
column: selected.column,
|
|
5210
5320
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5211
5321
|
$table: this,
|
|
5212
|
-
$grid:
|
|
5322
|
+
$grid: $xeGrid
|
|
5213
5323
|
};
|
|
5214
5324
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
5215
5325
|
if (editMethod) {
|
|
@@ -5330,7 +5440,7 @@ const Methods = {
|
|
|
5330
5440
|
return;
|
|
5331
5441
|
}
|
|
5332
5442
|
if (tooltipStore.column !== column || !tooltipStore.visible) {
|
|
5333
|
-
handleTooltip($xeTable, evnt, thEl, cellEl,
|
|
5443
|
+
handleTooltip($xeTable, evnt, thEl, thEl.querySelector('.vxe-cell--title') || cellEl, params);
|
|
5334
5444
|
}
|
|
5335
5445
|
},
|
|
5336
5446
|
/**
|
|
@@ -5360,7 +5470,7 @@ const Methods = {
|
|
|
5360
5470
|
}
|
|
5361
5471
|
}
|
|
5362
5472
|
if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
|
|
5363
|
-
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);
|
|
5364
5474
|
}
|
|
5365
5475
|
},
|
|
5366
5476
|
/**
|
|
@@ -5371,10 +5481,10 @@ const Methods = {
|
|
|
5371
5481
|
const reactData = $xeTable;
|
|
5372
5482
|
const { column } = params;
|
|
5373
5483
|
const { tooltipStore } = reactData;
|
|
5374
|
-
const
|
|
5484
|
+
const tdEl = evnt.currentTarget;
|
|
5375
5485
|
handleTargetEnterEvent($xeTable, tooltipStore.column !== column || !!tooltipStore.row);
|
|
5376
5486
|
if (tooltipStore.column !== column || !tooltipStore.visible) {
|
|
5377
|
-
handleTooltip($xeTable, evnt,
|
|
5487
|
+
handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
|
|
5378
5488
|
}
|
|
5379
5489
|
},
|
|
5380
5490
|
openTooltip(target, content) {
|
|
@@ -5431,11 +5541,15 @@ const Methods = {
|
|
|
5431
5541
|
* 获取复选框半选状态的行数据
|
|
5432
5542
|
*/
|
|
5433
5543
|
getCheckboxIndeterminateRecords(isFull) {
|
|
5434
|
-
const
|
|
5544
|
+
const $xeTable = this;
|
|
5545
|
+
const props = $xeTable;
|
|
5546
|
+
const internalData = $xeTable;
|
|
5547
|
+
const { treeConfig } = props;
|
|
5548
|
+
const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData;
|
|
5435
5549
|
if (treeConfig) {
|
|
5436
5550
|
const fullRest = [];
|
|
5437
5551
|
const defRest = [];
|
|
5438
|
-
XEUtils.each(
|
|
5552
|
+
XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
|
|
5439
5553
|
if (item) {
|
|
5440
5554
|
fullRest.push(item);
|
|
5441
5555
|
if (fullDataRowIdData[rowid]) {
|
|
@@ -5505,20 +5619,22 @@ const Methods = {
|
|
|
5505
5619
|
isCheckedByCheckboxRow(row) {
|
|
5506
5620
|
const $xeTable = this;
|
|
5507
5621
|
const reactData = $xeTable;
|
|
5508
|
-
const
|
|
5622
|
+
const internalData = $xeTable;
|
|
5623
|
+
const { updateCheckboxFlag } = reactData;
|
|
5624
|
+
const { selectCheckboxMaps } = internalData;
|
|
5509
5625
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5510
5626
|
const { checkField } = checkboxOpts;
|
|
5511
5627
|
if (checkField) {
|
|
5512
5628
|
return XEUtils.get(row, checkField);
|
|
5513
5629
|
}
|
|
5514
|
-
return !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5630
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5515
5631
|
},
|
|
5516
5632
|
isCheckedByCheckboxRowKey(rowid) {
|
|
5517
5633
|
const $xeTable = this;
|
|
5518
5634
|
const reactData = $xeTable;
|
|
5519
5635
|
const internalData = $xeTable;
|
|
5520
|
-
const {
|
|
5521
|
-
const { fullAllDataRowIdData } = internalData;
|
|
5636
|
+
const { updateCheckboxFlag } = reactData;
|
|
5637
|
+
const { fullAllDataRowIdData, selectCheckboxMaps } = internalData;
|
|
5522
5638
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5523
5639
|
const { checkField } = checkboxOpts;
|
|
5524
5640
|
if (checkField) {
|
|
@@ -5528,19 +5644,19 @@ const Methods = {
|
|
|
5528
5644
|
}
|
|
5529
5645
|
return false;
|
|
5530
5646
|
}
|
|
5531
|
-
return !!selectCheckboxMaps[rowid];
|
|
5647
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid];
|
|
5532
5648
|
},
|
|
5533
5649
|
isIndeterminateByCheckboxRow(row) {
|
|
5534
5650
|
const $xeTable = this;
|
|
5535
|
-
const
|
|
5536
|
-
const {
|
|
5537
|
-
return !!
|
|
5651
|
+
const internalData = $xeTable;
|
|
5652
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5653
|
+
return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
|
|
5538
5654
|
},
|
|
5539
5655
|
isIndeterminateByCheckboxRowKey(rowid) {
|
|
5540
5656
|
const $xeTable = this;
|
|
5541
|
-
const
|
|
5542
|
-
const {
|
|
5543
|
-
return !!
|
|
5657
|
+
const internalData = $xeTable;
|
|
5658
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5659
|
+
return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
|
|
5544
5660
|
},
|
|
5545
5661
|
/**
|
|
5546
5662
|
* 切换选中
|
|
@@ -5550,14 +5666,15 @@ const Methods = {
|
|
|
5550
5666
|
const $xeTable = this;
|
|
5551
5667
|
const props = $xeTable;
|
|
5552
5668
|
const reactData = $xeTable;
|
|
5669
|
+
const internalData = $xeTable;
|
|
5553
5670
|
const { treeConfig } = props;
|
|
5554
|
-
const { selectCheckboxMaps } =
|
|
5555
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5671
|
+
const { selectCheckboxMaps } = internalData;
|
|
5556
5672
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5557
5673
|
const { transform, mapChildrenField } = treeOpts;
|
|
5558
5674
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
5559
5675
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5560
5676
|
const { checkField, checkStrictly, checkMethod } = checkboxOpts;
|
|
5677
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5561
5678
|
// indeterminateField 仅支持读取
|
|
5562
5679
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
5563
5680
|
if (checkField) {
|
|
@@ -5573,59 +5690,57 @@ const Methods = {
|
|
|
5573
5690
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5574
5691
|
}
|
|
5575
5692
|
}, { children: transform ? mapChildrenField : childrenField });
|
|
5576
|
-
reactData.
|
|
5693
|
+
reactData.updateCheckboxFlag++;
|
|
5577
5694
|
return;
|
|
5578
5695
|
}
|
|
5579
|
-
|
|
5580
|
-
|
|
5581
|
-
|
|
5582
|
-
|
|
5583
|
-
|
|
5584
|
-
|
|
5585
|
-
|
|
5586
|
-
|
|
5587
|
-
}
|
|
5588
|
-
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++;
|
|
5589
5704
|
return;
|
|
5590
5705
|
}
|
|
5591
5706
|
// 树结构
|
|
5592
5707
|
if (treeConfig && !checkStrictly) {
|
|
5593
5708
|
// 更新子节点状态
|
|
5594
5709
|
XEUtils.eachTree(rows, (row) => {
|
|
5595
|
-
const rowid =
|
|
5710
|
+
const rowid = handleGetRowId(row);
|
|
5596
5711
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5597
5712
|
if (checked) {
|
|
5598
|
-
|
|
5713
|
+
selectCheckboxMaps[rowid] = row;
|
|
5599
5714
|
}
|
|
5600
5715
|
else {
|
|
5601
|
-
if (
|
|
5602
|
-
delete
|
|
5716
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5717
|
+
delete selectCheckboxMaps[rowid];
|
|
5603
5718
|
}
|
|
5604
5719
|
}
|
|
5605
5720
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5606
5721
|
}
|
|
5607
5722
|
}, { children: transform ? mapChildrenField : childrenField });
|
|
5608
|
-
reactData.
|
|
5723
|
+
reactData.updateCheckboxFlag++;
|
|
5609
5724
|
return;
|
|
5610
5725
|
}
|
|
5611
5726
|
// 列表
|
|
5612
5727
|
rows.forEach(row => {
|
|
5613
|
-
const rowid =
|
|
5728
|
+
const rowid = handleGetRowId(row);
|
|
5614
5729
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5615
5730
|
if (checked) {
|
|
5616
|
-
if (!
|
|
5617
|
-
|
|
5731
|
+
if (!selectCheckboxMaps[rowid]) {
|
|
5732
|
+
selectCheckboxMaps[rowid] = row;
|
|
5618
5733
|
}
|
|
5619
5734
|
}
|
|
5620
5735
|
else {
|
|
5621
|
-
if (
|
|
5622
|
-
delete
|
|
5736
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5737
|
+
delete selectCheckboxMaps[rowid];
|
|
5623
5738
|
}
|
|
5624
5739
|
}
|
|
5625
5740
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5741
|
+
reactData.updateCheckboxFlag++;
|
|
5626
5742
|
}
|
|
5627
5743
|
});
|
|
5628
|
-
reactData.selectCheckboxMaps = selectRowMaps;
|
|
5629
5744
|
},
|
|
5630
5745
|
/**
|
|
5631
5746
|
* 即将移除
|
|
@@ -5636,7 +5751,10 @@ const Methods = {
|
|
|
5636
5751
|
$xeTable.handleBatchSelectRows([row], checked, isForce);
|
|
5637
5752
|
},
|
|
5638
5753
|
handleToggleCheckRowEvent(evnt, params) {
|
|
5639
|
-
const
|
|
5754
|
+
const $xeTable = this;
|
|
5755
|
+
const internalData = $xeTable;
|
|
5756
|
+
const { selectCheckboxMaps } = internalData;
|
|
5757
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5640
5758
|
const { checkField, trigger } = checkboxOpts;
|
|
5641
5759
|
const { row } = params;
|
|
5642
5760
|
if (trigger === 'manual') {
|
|
@@ -5647,47 +5765,52 @@ const Methods = {
|
|
|
5647
5765
|
checked = !XEUtils.get(row, checkField);
|
|
5648
5766
|
}
|
|
5649
5767
|
else {
|
|
5650
|
-
checked = !selectCheckboxMaps[getRowid(
|
|
5768
|
+
checked = !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5651
5769
|
}
|
|
5652
5770
|
if (evnt) {
|
|
5653
|
-
|
|
5771
|
+
$xeTable.triggerCheckRowEvent(evnt, params, checked);
|
|
5654
5772
|
}
|
|
5655
5773
|
else {
|
|
5656
|
-
|
|
5657
|
-
|
|
5774
|
+
$xeTable.handleBatchSelectRows([row], checked);
|
|
5775
|
+
$xeTable.checkSelectionStatus();
|
|
5658
5776
|
}
|
|
5659
5777
|
},
|
|
5660
5778
|
triggerCheckRowEvent(evnt, params, checked) {
|
|
5661
5779
|
const $xeTable = this;
|
|
5662
|
-
const
|
|
5663
|
-
const
|
|
5780
|
+
const props = $xeTable;
|
|
5781
|
+
const internalData = $xeTable;
|
|
5664
5782
|
const { row } = params;
|
|
5783
|
+
const { afterFullData } = internalData;
|
|
5784
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5785
|
+
const { checkMethod, trigger } = checkboxOpts;
|
|
5665
5786
|
if (trigger === 'manual') {
|
|
5666
5787
|
return;
|
|
5667
5788
|
}
|
|
5668
5789
|
evnt.stopPropagation();
|
|
5669
|
-
if (checkboxOpts.isShiftKey && evnt.shiftKey && !
|
|
5670
|
-
const checkboxRecords =
|
|
5790
|
+
if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
|
|
5791
|
+
const checkboxRecords = $xeTable.getCheckboxRecords();
|
|
5671
5792
|
if (checkboxRecords.length) {
|
|
5672
5793
|
const firstRow = checkboxRecords[0];
|
|
5673
|
-
const _rowIndex =
|
|
5674
|
-
const _firstRowIndex =
|
|
5794
|
+
const _rowIndex = $xeTable.getVTRowIndex(row);
|
|
5795
|
+
const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
|
|
5675
5796
|
if (_rowIndex !== _firstRowIndex) {
|
|
5676
|
-
|
|
5797
|
+
$xeTable.setAllCheckboxRow(false);
|
|
5677
5798
|
const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
|
|
5678
|
-
|
|
5679
|
-
|
|
5799
|
+
$xeTable.$nextTick(() => {
|
|
5800
|
+
handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
|
|
5801
|
+
});
|
|
5802
|
+
$xeTable.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
|
|
5680
5803
|
return;
|
|
5681
5804
|
}
|
|
5682
5805
|
}
|
|
5683
5806
|
}
|
|
5684
5807
|
if (!checkMethod || checkMethod({ row })) {
|
|
5685
|
-
|
|
5686
|
-
|
|
5687
|
-
|
|
5688
|
-
records:
|
|
5689
|
-
reserves:
|
|
5690
|
-
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(),
|
|
5691
5814
|
checked
|
|
5692
5815
|
}, params), evnt);
|
|
5693
5816
|
}
|
|
@@ -5697,7 +5820,9 @@ const Methods = {
|
|
|
5697
5820
|
*/
|
|
5698
5821
|
toggleCheckboxRow(row) {
|
|
5699
5822
|
const $xeTable = this;
|
|
5700
|
-
const
|
|
5823
|
+
const internalData = $xeTable;
|
|
5824
|
+
const { selectCheckboxMaps } = internalData;
|
|
5825
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5701
5826
|
const { checkField } = checkboxOpts;
|
|
5702
5827
|
const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5703
5828
|
$xeTable.handleBatchSelectRows([row], checked, true);
|
|
@@ -5718,9 +5843,7 @@ const Methods = {
|
|
|
5718
5843
|
const reactData = $xeTable;
|
|
5719
5844
|
const internalData = $xeTable;
|
|
5720
5845
|
const { treeConfig } = props;
|
|
5721
|
-
const { selectCheckboxMaps,
|
|
5722
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5723
|
-
const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
|
|
5846
|
+
const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5724
5847
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5725
5848
|
const { transform, mapChildrenField } = treeOpts;
|
|
5726
5849
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
@@ -5732,10 +5855,11 @@ const Methods = {
|
|
|
5732
5855
|
}
|
|
5733
5856
|
// 树结构
|
|
5734
5857
|
if (treeConfig) {
|
|
5858
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5735
5859
|
const childRowMaps = {};
|
|
5736
5860
|
const childRowList = [];
|
|
5737
5861
|
XEUtils.eachTree(afterTreeFullData, (row) => {
|
|
5738
|
-
const rowid =
|
|
5862
|
+
const rowid = handleGetRowId(row);
|
|
5739
5863
|
const childList = row[transform ? mapChildrenField : childrenField];
|
|
5740
5864
|
if (childList && childList.length && !childRowMaps[rowid]) {
|
|
5741
5865
|
childRowMaps[rowid] = 1;
|
|
@@ -5751,13 +5875,13 @@ const Methods = {
|
|
|
5751
5875
|
let vLen = 0; // 有效行
|
|
5752
5876
|
childList.forEach(checkMethod
|
|
5753
5877
|
? (item) => {
|
|
5754
|
-
const childRowid =
|
|
5755
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5878
|
+
const childRowid = handleGetRowId(item);
|
|
5879
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5756
5880
|
if (checkMethod({ row: item })) {
|
|
5757
5881
|
if (isSelect) {
|
|
5758
5882
|
sLen++;
|
|
5759
5883
|
}
|
|
5760
|
-
else if (
|
|
5884
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5761
5885
|
hLen++;
|
|
5762
5886
|
}
|
|
5763
5887
|
vLen++;
|
|
@@ -5766,18 +5890,18 @@ const Methods = {
|
|
|
5766
5890
|
if (isSelect) {
|
|
5767
5891
|
sLen++;
|
|
5768
5892
|
}
|
|
5769
|
-
else if (
|
|
5893
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5770
5894
|
hLen++;
|
|
5771
5895
|
}
|
|
5772
5896
|
}
|
|
5773
5897
|
}
|
|
5774
5898
|
: item => {
|
|
5775
|
-
const childRowid =
|
|
5776
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5899
|
+
const childRowid = handleGetRowId(item);
|
|
5900
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5777
5901
|
if (isSelect) {
|
|
5778
5902
|
sLen++;
|
|
5779
5903
|
}
|
|
5780
|
-
else if (
|
|
5904
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5781
5905
|
hLen++;
|
|
5782
5906
|
}
|
|
5783
5907
|
vLen++;
|
|
@@ -5789,31 +5913,30 @@ const Methods = {
|
|
|
5789
5913
|
}
|
|
5790
5914
|
if (isSelected) {
|
|
5791
5915
|
if (!checkField) {
|
|
5792
|
-
|
|
5916
|
+
selectCheckboxMaps[rowid] = row;
|
|
5793
5917
|
}
|
|
5794
|
-
if (
|
|
5795
|
-
delete
|
|
5918
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
5919
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5796
5920
|
}
|
|
5797
5921
|
}
|
|
5798
5922
|
else {
|
|
5799
5923
|
if (!checkField) {
|
|
5800
|
-
if (
|
|
5801
|
-
delete
|
|
5924
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5925
|
+
delete selectCheckboxMaps[rowid];
|
|
5802
5926
|
}
|
|
5803
5927
|
}
|
|
5804
5928
|
if (halfSelect) {
|
|
5805
|
-
|
|
5929
|
+
treeIndeterminateRowMaps[rowid] = row;
|
|
5806
5930
|
}
|
|
5807
5931
|
else {
|
|
5808
|
-
if (
|
|
5809
|
-
delete
|
|
5932
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
5933
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5810
5934
|
}
|
|
5811
5935
|
}
|
|
5812
5936
|
}
|
|
5813
5937
|
});
|
|
5814
5938
|
}
|
|
5815
|
-
reactData.
|
|
5816
|
-
reactData.treeIndeterminateMaps = halfRowMaps;
|
|
5939
|
+
reactData.updateCheckboxFlag++;
|
|
5817
5940
|
},
|
|
5818
5941
|
updateAllCheckboxStatus() {
|
|
5819
5942
|
const $xeTable = this;
|
|
@@ -5821,23 +5944,23 @@ const Methods = {
|
|
|
5821
5944
|
const reactData = $xeTable;
|
|
5822
5945
|
const internalData = $xeTable;
|
|
5823
5946
|
const { treeConfig } = props;
|
|
5824
|
-
const { selectCheckboxMaps,
|
|
5947
|
+
const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5825
5948
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5826
5949
|
const { checkField, checkMethod, showReserveStatus } = checkboxOpts;
|
|
5827
|
-
const {
|
|
5950
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5828
5951
|
let sLen = 0; // 已选
|
|
5829
5952
|
let hLen = 0; // 半选
|
|
5830
5953
|
let vLen = 0; // 有效行
|
|
5831
5954
|
const rootList = (treeConfig ? afterTreeFullData : afterFullData);
|
|
5832
5955
|
rootList.forEach(checkMethod
|
|
5833
5956
|
? row => {
|
|
5834
|
-
const childRowid =
|
|
5957
|
+
const childRowid = handleGetRowId(row);
|
|
5835
5958
|
const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
5836
5959
|
if (checkMethod({ row })) {
|
|
5837
5960
|
if (selected) {
|
|
5838
5961
|
sLen++;
|
|
5839
5962
|
}
|
|
5840
|
-
else if (
|
|
5963
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5841
5964
|
hLen++;
|
|
5842
5965
|
}
|
|
5843
5966
|
vLen++;
|
|
@@ -5846,18 +5969,18 @@ const Methods = {
|
|
|
5846
5969
|
if (selected) {
|
|
5847
5970
|
sLen++;
|
|
5848
5971
|
}
|
|
5849
|
-
else if (
|
|
5972
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5850
5973
|
hLen++;
|
|
5851
5974
|
}
|
|
5852
5975
|
}
|
|
5853
5976
|
}
|
|
5854
5977
|
: row => {
|
|
5855
|
-
const childRowid =
|
|
5978
|
+
const childRowid = handleGetRowId(row);
|
|
5856
5979
|
const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
5857
5980
|
if (selected) {
|
|
5858
5981
|
sLen++;
|
|
5859
5982
|
}
|
|
5860
|
-
else if (
|
|
5983
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5861
5984
|
hLen++;
|
|
5862
5985
|
}
|
|
5863
5986
|
vLen++;
|
|
@@ -5914,19 +6037,26 @@ const Methods = {
|
|
|
5914
6037
|
* 获取复选框保留选中的行
|
|
5915
6038
|
*/
|
|
5916
6039
|
getCheckboxReserveRecords(isFull) {
|
|
5917
|
-
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;
|
|
5918
6047
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
5919
6048
|
const reserveSelection = [];
|
|
5920
6049
|
if (checkboxOpts.reserve) {
|
|
6050
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5921
6051
|
const afterFullIdMaps = {};
|
|
5922
6052
|
if (treeConfig) {
|
|
5923
6053
|
XEUtils.eachTree(afterFullData, row => {
|
|
5924
|
-
afterFullIdMaps[
|
|
6054
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5925
6055
|
}, { children: childrenField });
|
|
5926
6056
|
}
|
|
5927
6057
|
else {
|
|
5928
6058
|
afterFullData.forEach((row) => {
|
|
5929
|
-
afterFullIdMaps[
|
|
6059
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5930
6060
|
});
|
|
5931
6061
|
}
|
|
5932
6062
|
XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
|
|
@@ -5967,9 +6097,9 @@ const Methods = {
|
|
|
5967
6097
|
handleCheckedAllCheckboxRow($xeTable, value);
|
|
5968
6098
|
if (evnt) {
|
|
5969
6099
|
$xeTable.dispatchEvent('checkbox-all', {
|
|
5970
|
-
records: $xeTable.getCheckboxRecords(),
|
|
5971
|
-
reserves: $xeTable.getCheckboxReserveRecords(),
|
|
5972
|
-
indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
|
|
6100
|
+
records: () => $xeTable.getCheckboxRecords(),
|
|
6101
|
+
reserves: () => $xeTable.getCheckboxReserveRecords(),
|
|
6102
|
+
indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
|
|
5973
6103
|
checked: value
|
|
5974
6104
|
}, evnt);
|
|
5975
6105
|
}
|
|
@@ -6001,9 +6131,16 @@ const Methods = {
|
|
|
6001
6131
|
* 清空行为不管是否被禁用还是保留记录,都将彻底清空选中状态
|
|
6002
6132
|
*/
|
|
6003
6133
|
clearCheckboxRow() {
|
|
6004
|
-
const
|
|
6005
|
-
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;
|
|
6006
6141
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6142
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6143
|
+
const { checkField, reserve } = checkboxOpts;
|
|
6007
6144
|
// indeterminateField 仅支持读取
|
|
6008
6145
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
6009
6146
|
if (checkField) {
|
|
@@ -6023,10 +6160,11 @@ const Methods = {
|
|
|
6023
6160
|
if (reserve) {
|
|
6024
6161
|
tableFullData.forEach((row) => this.handleCheckboxReserveRow(row, false));
|
|
6025
6162
|
}
|
|
6026
|
-
|
|
6027
|
-
|
|
6028
|
-
|
|
6029
|
-
|
|
6163
|
+
reactData.isAllSelected = false;
|
|
6164
|
+
reactData.isIndeterminate = false;
|
|
6165
|
+
internalData.selectCheckboxMaps = {};
|
|
6166
|
+
internalData.treeIndeterminateRowMaps = {};
|
|
6167
|
+
reactData.updateCheckboxFlag++;
|
|
6030
6168
|
return this.$nextTick();
|
|
6031
6169
|
},
|
|
6032
6170
|
/**
|
|
@@ -6223,10 +6361,12 @@ const Methods = {
|
|
|
6223
6361
|
},
|
|
6224
6362
|
triggerHeaderCellClickEvent(evnt, params) {
|
|
6225
6363
|
const $xeTable = this;
|
|
6364
|
+
const props = $xeTable;
|
|
6226
6365
|
const internalData = $xeTable;
|
|
6227
6366
|
const { _lastResizeTime } = internalData;
|
|
6228
6367
|
const sortOpts = $xeTable.computeSortOpts;
|
|
6229
6368
|
const columnOpts = $xeTable.computeColumnOpts;
|
|
6369
|
+
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
6230
6370
|
const { column } = params;
|
|
6231
6371
|
const cell = evnt.currentTarget;
|
|
6232
6372
|
const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
|
|
@@ -6236,7 +6376,7 @@ const Methods = {
|
|
|
6236
6376
|
$xeTable.triggerSortEvent(evnt, column, getNextSortOrder($xeTable, column));
|
|
6237
6377
|
}
|
|
6238
6378
|
$xeTable.dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
|
|
6239
|
-
if (columnOpts.isCurrent ||
|
|
6379
|
+
if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
|
|
6240
6380
|
$xeTable.triggerCurrentColumnEvent(evnt, params);
|
|
6241
6381
|
}
|
|
6242
6382
|
return $xeTable.$nextTick();
|
|
@@ -6252,13 +6392,23 @@ const Methods = {
|
|
|
6252
6392
|
* @param {ColumnInfo} fieldOrColumn 列配置
|
|
6253
6393
|
*/
|
|
6254
6394
|
setCurrentColumn(fieldOrColumn) {
|
|
6255
|
-
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);
|
|
6256
6402
|
if (column) {
|
|
6257
|
-
|
|
6258
|
-
|
|
6259
|
-
this.currentColumn = column;
|
|
6403
|
+
$xeTable.clearCurrentColumn();
|
|
6404
|
+
reactData.currentColumn = column;
|
|
6260
6405
|
}
|
|
6261
|
-
return
|
|
6406
|
+
return $xeTable.$nextTick().then(() => {
|
|
6407
|
+
// 更新状选中态
|
|
6408
|
+
if (isMouseSelected) {
|
|
6409
|
+
$xeTable.addCellSelectedClass();
|
|
6410
|
+
}
|
|
6411
|
+
});
|
|
6262
6412
|
},
|
|
6263
6413
|
/**
|
|
6264
6414
|
* 用于当前列,手动清空当前高亮的状态
|
|
@@ -6267,25 +6417,6 @@ const Methods = {
|
|
|
6267
6417
|
this.currentColumn = null;
|
|
6268
6418
|
return this.$nextTick();
|
|
6269
6419
|
},
|
|
6270
|
-
checkValidate(type) {
|
|
6271
|
-
if (this.triggerValidate) {
|
|
6272
|
-
return this.triggerValidate(type);
|
|
6273
|
-
}
|
|
6274
|
-
return this.$nextTick();
|
|
6275
|
-
},
|
|
6276
|
-
/**
|
|
6277
|
-
* 当单元格发生改变时
|
|
6278
|
-
* 如果存在规则,则校验
|
|
6279
|
-
*/
|
|
6280
|
-
handleChangeCell(evnt, params) {
|
|
6281
|
-
this.checkValidate('blur')
|
|
6282
|
-
.catch((e) => e)
|
|
6283
|
-
.then(() => {
|
|
6284
|
-
this.handleEdit(params, evnt)
|
|
6285
|
-
.then(() => this.checkValidate('change'))
|
|
6286
|
-
.catch((e) => e);
|
|
6287
|
-
});
|
|
6288
|
-
},
|
|
6289
6420
|
/**
|
|
6290
6421
|
* 列点击事件
|
|
6291
6422
|
* 如果是单击模式,则激活为编辑状态
|
|
@@ -6295,7 +6426,7 @@ const Methods = {
|
|
|
6295
6426
|
const $xeTable = this;
|
|
6296
6427
|
const props = $xeTable;
|
|
6297
6428
|
const reactData = $xeTable;
|
|
6298
|
-
const { highlightCurrentRow, editConfig } = props;
|
|
6429
|
+
const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props;
|
|
6299
6430
|
const { editStore, isDragResize } = reactData;
|
|
6300
6431
|
if (isDragResize) {
|
|
6301
6432
|
return;
|
|
@@ -6307,6 +6438,8 @@ const Methods = {
|
|
|
6307
6438
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6308
6439
|
const keyboardOpts = $xeTable.computeKeyboardOpts;
|
|
6309
6440
|
const rowOpts = $xeTable.computeRowOpts;
|
|
6441
|
+
const columnOpts = $xeTable.computeColumnOpts;
|
|
6442
|
+
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
6310
6443
|
const { actived, focused } = editStore;
|
|
6311
6444
|
const { row, column } = params;
|
|
6312
6445
|
const { type, treeNode } = column;
|
|
@@ -6322,11 +6455,11 @@ const Methods = {
|
|
|
6322
6455
|
if (!triggerCheckbox && !triggerRadio) {
|
|
6323
6456
|
// 如果是展开行
|
|
6324
6457
|
if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
|
|
6325
|
-
|
|
6458
|
+
$xeTable.triggerRowExpandEvent(evnt, params);
|
|
6326
6459
|
}
|
|
6327
6460
|
// 如果是树形表格
|
|
6328
6461
|
if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
|
|
6329
|
-
|
|
6462
|
+
$xeTable.triggerTreeExpandEvent(evnt, params);
|
|
6330
6463
|
}
|
|
6331
6464
|
}
|
|
6332
6465
|
// 如果点击了树节点
|
|
@@ -6335,16 +6468,22 @@ const Methods = {
|
|
|
6335
6468
|
// 如果是高亮行
|
|
6336
6469
|
if (rowOpts.isCurrent || highlightCurrentRow) {
|
|
6337
6470
|
if (!triggerCheckbox && !triggerRadio) {
|
|
6338
|
-
|
|
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);
|
|
6339
6478
|
}
|
|
6340
6479
|
}
|
|
6341
6480
|
// 如果是单选框
|
|
6342
6481
|
if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
|
|
6343
|
-
|
|
6482
|
+
$xeTable.triggerRadioRowEvent(evnt, params);
|
|
6344
6483
|
}
|
|
6345
6484
|
// 如果是复选框
|
|
6346
6485
|
if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
|
|
6347
|
-
|
|
6486
|
+
$xeTable.handleToggleCheckRowEvent(evnt, params);
|
|
6348
6487
|
}
|
|
6349
6488
|
}
|
|
6350
6489
|
// 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
|
|
@@ -6356,16 +6495,16 @@ const Methods = {
|
|
|
6356
6495
|
}
|
|
6357
6496
|
if (editOpts.trigger === 'manual') {
|
|
6358
6497
|
if (actived.args && actived.row === row && column !== actived.column) {
|
|
6359
|
-
|
|
6498
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6360
6499
|
}
|
|
6361
6500
|
}
|
|
6362
6501
|
else if (!actived.args || row !== actived.row || column !== actived.column) {
|
|
6363
6502
|
if (editOpts.trigger === 'click') {
|
|
6364
|
-
|
|
6503
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6365
6504
|
}
|
|
6366
6505
|
else if (editOpts.trigger === 'dblclick') {
|
|
6367
6506
|
if (editOpts.mode === 'row' && actived.row === row) {
|
|
6368
|
-
|
|
6507
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6369
6508
|
}
|
|
6370
6509
|
}
|
|
6371
6510
|
}
|
|
@@ -6386,7 +6525,7 @@ const Methods = {
|
|
|
6386
6525
|
}
|
|
6387
6526
|
}
|
|
6388
6527
|
}
|
|
6389
|
-
|
|
6528
|
+
$xeTable.dispatchEvent('cell-click', params, evnt);
|
|
6390
6529
|
},
|
|
6391
6530
|
/**
|
|
6392
6531
|
* 列双击点击事件
|
|
@@ -6408,17 +6547,17 @@ const Methods = {
|
|
|
6408
6547
|
if (isEnableConf(editConfig) && editOpts.trigger === 'dblclick') {
|
|
6409
6548
|
if (!actived.args || evnt.currentTarget !== actived.args.cell) {
|
|
6410
6549
|
if (editOpts.mode === 'row') {
|
|
6411
|
-
|
|
6550
|
+
checkValidate($xeTable, 'blur')
|
|
6412
6551
|
.catch((e) => e)
|
|
6413
6552
|
.then(() => {
|
|
6414
6553
|
this.handleEdit(params, evnt)
|
|
6415
|
-
.then(() =>
|
|
6554
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
6416
6555
|
.catch((e) => e);
|
|
6417
6556
|
});
|
|
6418
6557
|
}
|
|
6419
6558
|
else if (editOpts.mode === 'cell') {
|
|
6420
6559
|
this.handleEdit(params, evnt)
|
|
6421
|
-
.then(() =>
|
|
6560
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
6422
6561
|
.catch((e) => e);
|
|
6423
6562
|
}
|
|
6424
6563
|
}
|
|
@@ -6604,12 +6743,11 @@ const Methods = {
|
|
|
6604
6743
|
const internalData = $xeTable;
|
|
6605
6744
|
const { treeConfig, dragConfig } = props;
|
|
6606
6745
|
const rowDragOpts = $xeTable.computeRowDragOpts;
|
|
6607
|
-
const { fullAllDataRowIdData } = internalData;
|
|
6746
|
+
const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData;
|
|
6608
6747
|
const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
|
|
6609
6748
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
6610
6749
|
const { transform, rowField, mapChildrenField, parentField } = treeOpts;
|
|
6611
6750
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6612
|
-
const { afterFullData, tableFullData } = internalData;
|
|
6613
6751
|
const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
|
|
6614
6752
|
const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
|
|
6615
6753
|
const errRest = {
|
|
@@ -7213,48 +7351,52 @@ const Methods = {
|
|
|
7213
7351
|
setPendingRow(rows, status) {
|
|
7214
7352
|
const $xeTable = this;
|
|
7215
7353
|
const reactData = $xeTable;
|
|
7216
|
-
const
|
|
7354
|
+
const internalData = $xeTable;
|
|
7355
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7356
|
+
const { pendingRowMaps } = internalData;
|
|
7217
7357
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7218
7358
|
rows = [rows];
|
|
7219
7359
|
}
|
|
7220
7360
|
if (status) {
|
|
7221
7361
|
rows.forEach((row) => {
|
|
7222
|
-
const rowid =
|
|
7223
|
-
if (rowid && !
|
|
7224
|
-
|
|
7362
|
+
const rowid = handleGetRowId(row);
|
|
7363
|
+
if (rowid && !pendingRowMaps[rowid]) {
|
|
7364
|
+
pendingRowMaps[rowid] = row;
|
|
7225
7365
|
}
|
|
7226
7366
|
});
|
|
7227
7367
|
}
|
|
7228
7368
|
else {
|
|
7229
7369
|
rows.forEach((row) => {
|
|
7230
|
-
const rowid =
|
|
7231
|
-
if (rowid &&
|
|
7232
|
-
delete
|
|
7370
|
+
const rowid = handleGetRowId(row);
|
|
7371
|
+
if (rowid && pendingRowMaps[rowid]) {
|
|
7372
|
+
delete pendingRowMaps[rowid];
|
|
7233
7373
|
}
|
|
7234
7374
|
});
|
|
7235
7375
|
}
|
|
7236
|
-
reactData.
|
|
7376
|
+
reactData.pendingRowFlag++;
|
|
7237
7377
|
return $xeTable.$nextTick();
|
|
7238
7378
|
},
|
|
7239
7379
|
togglePendingRow(rows) {
|
|
7240
7380
|
const $xeTable = this;
|
|
7241
7381
|
const reactData = $xeTable;
|
|
7242
|
-
const
|
|
7382
|
+
const internalData = $xeTable;
|
|
7383
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7384
|
+
const { pendingRowMaps } = internalData;
|
|
7243
7385
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7244
7386
|
rows = [rows];
|
|
7245
7387
|
}
|
|
7246
7388
|
rows.forEach((row) => {
|
|
7247
|
-
const rowid =
|
|
7389
|
+
const rowid = handleGetRowId(row);
|
|
7248
7390
|
if (rowid) {
|
|
7249
|
-
if (
|
|
7250
|
-
delete
|
|
7391
|
+
if (pendingRowMaps[rowid]) {
|
|
7392
|
+
delete pendingRowMaps[rowid];
|
|
7251
7393
|
}
|
|
7252
7394
|
else {
|
|
7253
|
-
|
|
7395
|
+
pendingRowMaps[rowid] = row;
|
|
7254
7396
|
}
|
|
7255
7397
|
}
|
|
7256
7398
|
});
|
|
7257
|
-
reactData.
|
|
7399
|
+
reactData.pendingRowFlag++;
|
|
7258
7400
|
return $xeTable.$nextTick();
|
|
7259
7401
|
},
|
|
7260
7402
|
hasPendingByRow(row) {
|
|
@@ -7270,10 +7412,8 @@ const Methods = {
|
|
|
7270
7412
|
},
|
|
7271
7413
|
getPendingRecords() {
|
|
7272
7414
|
const $xeTable = this;
|
|
7273
|
-
const reactData = $xeTable;
|
|
7274
7415
|
const internalData = $xeTable;
|
|
7275
|
-
const { pendingRowMaps } =
|
|
7276
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7416
|
+
const { fullAllDataRowIdData, pendingRowMaps } = internalData;
|
|
7277
7417
|
const insertRecords = [];
|
|
7278
7418
|
XEUtils.each(pendingRowMaps, (row, rowid) => {
|
|
7279
7419
|
if (fullAllDataRowIdData[rowid]) {
|
|
@@ -7283,8 +7423,12 @@ const Methods = {
|
|
|
7283
7423
|
return insertRecords;
|
|
7284
7424
|
},
|
|
7285
7425
|
clearPendingRow() {
|
|
7286
|
-
|
|
7287
|
-
|
|
7426
|
+
const $xeTable = this;
|
|
7427
|
+
const reactData = $xeTable;
|
|
7428
|
+
const internalData = $xeTable;
|
|
7429
|
+
internalData.pendingRowMaps = {};
|
|
7430
|
+
reactData.pendingRowFlag++;
|
|
7431
|
+
return $xeTable.$nextTick();
|
|
7288
7432
|
},
|
|
7289
7433
|
sort(sortConfs, sortOrder) {
|
|
7290
7434
|
const $xeTable = this;
|
|
@@ -7435,7 +7579,9 @@ const Methods = {
|
|
|
7435
7579
|
* @param {Event} evnt 事件
|
|
7436
7580
|
*/
|
|
7437
7581
|
closeFilter() {
|
|
7438
|
-
const
|
|
7582
|
+
const $xeTable = this;
|
|
7583
|
+
const reactData = $xeTable;
|
|
7584
|
+
const { filterStore } = reactData;
|
|
7439
7585
|
const { column, visible } = filterStore;
|
|
7440
7586
|
Object.assign(filterStore, {
|
|
7441
7587
|
isAllSelected: false,
|
|
@@ -7444,9 +7590,15 @@ const Methods = {
|
|
|
7444
7590
|
visible: false
|
|
7445
7591
|
});
|
|
7446
7592
|
if (visible) {
|
|
7447
|
-
|
|
7593
|
+
$xeTable.dispatchEvent('filter-visible', {
|
|
7594
|
+
column,
|
|
7595
|
+
field: column.field,
|
|
7596
|
+
property: column.field,
|
|
7597
|
+
filterList: () => $xeTable.getCheckedFilters(),
|
|
7598
|
+
visible: false
|
|
7599
|
+
}, null);
|
|
7448
7600
|
}
|
|
7449
|
-
return
|
|
7601
|
+
return $xeTable.$nextTick();
|
|
7450
7602
|
},
|
|
7451
7603
|
/**
|
|
7452
7604
|
* 判断指定列是否为筛选状态,如果为空则判断所有列
|
|
@@ -7477,17 +7629,16 @@ const Methods = {
|
|
|
7477
7629
|
const $xeTable = this;
|
|
7478
7630
|
const reactData = $xeTable;
|
|
7479
7631
|
const internalData = $xeTable;
|
|
7480
|
-
const
|
|
7481
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7632
|
+
const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
|
|
7482
7633
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7483
7634
|
const { lazy } = expandOpts;
|
|
7484
7635
|
const rowid = getRowid($xeTable, row);
|
|
7485
7636
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7486
7637
|
if (lazy && rowRest) {
|
|
7487
7638
|
rowRest.expandLoaded = false;
|
|
7488
|
-
delete
|
|
7639
|
+
delete rowExpandLazyLoadedMaps[rowid];
|
|
7489
7640
|
}
|
|
7490
|
-
reactData.
|
|
7641
|
+
reactData.rowExpandedFlag++;
|
|
7491
7642
|
return $xeTable.$nextTick();
|
|
7492
7643
|
},
|
|
7493
7644
|
/**
|
|
@@ -7495,14 +7646,17 @@ const Methods = {
|
|
|
7495
7646
|
* @param {Row} row 行对象
|
|
7496
7647
|
*/
|
|
7497
7648
|
reloadRowExpand(row) {
|
|
7498
|
-
const
|
|
7649
|
+
const $xeTable = this;
|
|
7650
|
+
const internalData = $xeTable;
|
|
7651
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
7652
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7499
7653
|
const { lazy } = expandOpts;
|
|
7500
7654
|
const rowid = getRowid(this, row);
|
|
7501
7655
|
if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
|
|
7502
|
-
|
|
7503
|
-
.then(() =>
|
|
7656
|
+
$xeTable.clearRowExpandLoaded(row)
|
|
7657
|
+
.then(() => handleAsyncRowExpand($xeTable, row));
|
|
7504
7658
|
}
|
|
7505
|
-
return
|
|
7659
|
+
return $xeTable.$nextTick();
|
|
7506
7660
|
},
|
|
7507
7661
|
reloadExpandContent(row) {
|
|
7508
7662
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7515,20 +7669,33 @@ const Methods = {
|
|
|
7515
7669
|
* 展开行事件
|
|
7516
7670
|
*/
|
|
7517
7671
|
triggerRowExpandEvent(evnt, params) {
|
|
7518
|
-
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;
|
|
7519
7678
|
const { row } = params;
|
|
7520
7679
|
const { lazy, trigger } = expandOpts;
|
|
7521
7680
|
if (trigger === 'manual') {
|
|
7522
7681
|
return;
|
|
7523
7682
|
}
|
|
7524
7683
|
evnt.stopPropagation();
|
|
7525
|
-
const rowid = getRowid(
|
|
7684
|
+
const rowid = getRowid($xeTable, row);
|
|
7526
7685
|
if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
|
|
7527
|
-
const expanded =
|
|
7528
|
-
const columnIndex =
|
|
7529
|
-
const $columnIndex =
|
|
7530
|
-
|
|
7531
|
-
|
|
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);
|
|
7532
7699
|
}
|
|
7533
7700
|
},
|
|
7534
7701
|
/**
|
|
@@ -7574,48 +7741,6 @@ const Methods = {
|
|
|
7574
7741
|
}
|
|
7575
7742
|
return this.setRowExpand(expandedRows, expanded);
|
|
7576
7743
|
},
|
|
7577
|
-
handleAsyncRowExpand(row) {
|
|
7578
|
-
const $xeTable = this;
|
|
7579
|
-
const reactData = $xeTable;
|
|
7580
|
-
const internalData = $xeTable;
|
|
7581
|
-
return new Promise(resolve => {
|
|
7582
|
-
const { expandOpts } = this;
|
|
7583
|
-
const { loadMethod } = expandOpts;
|
|
7584
|
-
if (loadMethod) {
|
|
7585
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7586
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7587
|
-
const rowid = getRowid($xeTable, row);
|
|
7588
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7589
|
-
rExpandLazyLoadedMaps[rowid] = row;
|
|
7590
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7591
|
-
loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
|
|
7592
|
-
const rExpandedMaps = Object.assign({}, reactData.rowExpandedMaps);
|
|
7593
|
-
if (rowRest) {
|
|
7594
|
-
rowRest.expandLoaded = true;
|
|
7595
|
-
}
|
|
7596
|
-
rExpandedMaps[rowid] = row;
|
|
7597
|
-
reactData.rowExpandedMaps = rExpandedMaps;
|
|
7598
|
-
}).catch(() => {
|
|
7599
|
-
if (rowRest) {
|
|
7600
|
-
rowRest.expandLoaded = false;
|
|
7601
|
-
}
|
|
7602
|
-
}).finally(() => {
|
|
7603
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7604
|
-
if (rExpandLazyLoadedMaps[rowid]) {
|
|
7605
|
-
delete rExpandLazyLoadedMaps[rowid];
|
|
7606
|
-
}
|
|
7607
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7608
|
-
$xeTable.$nextTick()
|
|
7609
|
-
.then(() => $xeTable.recalculate())
|
|
7610
|
-
.then(() => $xeTable.updateCellAreas())
|
|
7611
|
-
.then(() => resolve());
|
|
7612
|
-
});
|
|
7613
|
-
}
|
|
7614
|
-
else {
|
|
7615
|
-
resolve();
|
|
7616
|
-
}
|
|
7617
|
-
});
|
|
7618
|
-
},
|
|
7619
7744
|
/**
|
|
7620
7745
|
* 设置展开行,二个参数设置这一行展开与否
|
|
7621
7746
|
* 支持单行
|
|
@@ -7625,8 +7750,12 @@ const Methods = {
|
|
|
7625
7750
|
*/
|
|
7626
7751
|
setRowExpand(rows, expanded) {
|
|
7627
7752
|
const $xeTable = this;
|
|
7628
|
-
const
|
|
7629
|
-
|
|
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;
|
|
7630
7759
|
const { reserve, lazy, accordion, toggleMethod } = expandOpts;
|
|
7631
7760
|
const lazyRests = [];
|
|
7632
7761
|
const columnIndex = $xeTable.getColumnIndex(expandColumn);
|
|
@@ -7637,30 +7766,31 @@ const Methods = {
|
|
|
7637
7766
|
}
|
|
7638
7767
|
if (accordion) {
|
|
7639
7768
|
// 只能同时展开一个
|
|
7640
|
-
|
|
7769
|
+
rowExpandedMaps = {};
|
|
7770
|
+
internalData.rowExpandedMaps = rowExpandedMaps;
|
|
7641
7771
|
rows = rows.slice(rows.length - 1, rows.length);
|
|
7642
7772
|
}
|
|
7643
|
-
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;
|
|
7644
7774
|
if (expanded) {
|
|
7645
7775
|
validRows.forEach((row) => {
|
|
7646
|
-
const rowid =
|
|
7647
|
-
if (!
|
|
7776
|
+
const rowid = handleGetRowId(row);
|
|
7777
|
+
if (!rowExpandedMaps[rowid]) {
|
|
7648
7778
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7649
7779
|
const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid];
|
|
7650
7780
|
if (isLoad) {
|
|
7651
|
-
lazyRests.push(
|
|
7781
|
+
lazyRests.push(handleAsyncRowExpand($xeTable, row));
|
|
7652
7782
|
}
|
|
7653
7783
|
else {
|
|
7654
|
-
|
|
7784
|
+
rowExpandedMaps[rowid] = row;
|
|
7655
7785
|
}
|
|
7656
7786
|
}
|
|
7657
7787
|
});
|
|
7658
7788
|
}
|
|
7659
7789
|
else {
|
|
7660
7790
|
validRows.forEach((item) => {
|
|
7661
|
-
const rowid =
|
|
7662
|
-
if (
|
|
7663
|
-
delete
|
|
7791
|
+
const rowid = handleGetRowId(item);
|
|
7792
|
+
if (rowExpandedMaps[rowid]) {
|
|
7793
|
+
delete rowExpandedMaps[rowid];
|
|
7664
7794
|
}
|
|
7665
7795
|
});
|
|
7666
7796
|
}
|
|
@@ -7668,7 +7798,7 @@ const Methods = {
|
|
|
7668
7798
|
validRows.forEach((row) => handleRowExpandReserve($xeTable, row, expanded));
|
|
7669
7799
|
}
|
|
7670
7800
|
}
|
|
7671
|
-
|
|
7801
|
+
reactData.rowExpandedFlag++;
|
|
7672
7802
|
return Promise.all(lazyRests)
|
|
7673
7803
|
.then(() => $xeTable.$nextTick())
|
|
7674
7804
|
.then(() => $xeTable.recalculate(true))
|
|
@@ -7684,9 +7814,13 @@ const Methods = {
|
|
|
7684
7814
|
* @param {Row} row 行对象
|
|
7685
7815
|
*/
|
|
7686
7816
|
isRowExpandByRow(row) {
|
|
7687
|
-
const
|
|
7817
|
+
const $xeTable = this;
|
|
7818
|
+
const reactData = $xeTable;
|
|
7819
|
+
const internalData = $xeTable;
|
|
7820
|
+
const { rowExpandedFlag } = reactData;
|
|
7821
|
+
const { rowExpandedMaps } = internalData;
|
|
7688
7822
|
const rowid = getRowid(this, row);
|
|
7689
|
-
return !!rowExpandedMaps[rowid];
|
|
7823
|
+
return !!rowExpandedFlag && !!rowExpandedMaps[rowid];
|
|
7690
7824
|
},
|
|
7691
7825
|
isExpandByRow(row) {
|
|
7692
7826
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7706,7 +7840,8 @@ const Methods = {
|
|
|
7706
7840
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7707
7841
|
const { reserve } = expandOpts;
|
|
7708
7842
|
const expList = $xeTable.getRowExpandRecords();
|
|
7709
|
-
|
|
7843
|
+
internalData.rowExpandedMaps = {};
|
|
7844
|
+
reactData.rowExpandedFlag++;
|
|
7710
7845
|
if (reserve) {
|
|
7711
7846
|
tableFullData.forEach((row) => handleRowExpandReserve($xeTable, row, false));
|
|
7712
7847
|
}
|
|
@@ -7726,8 +7861,10 @@ const Methods = {
|
|
|
7726
7861
|
return this.$nextTick();
|
|
7727
7862
|
},
|
|
7728
7863
|
getRowExpandRecords() {
|
|
7864
|
+
const $xeTable = this;
|
|
7865
|
+
const internalData = $xeTable;
|
|
7729
7866
|
const rest = [];
|
|
7730
|
-
XEUtils.each(
|
|
7867
|
+
XEUtils.each(internalData.rowExpandedMaps, item => {
|
|
7731
7868
|
if (item) {
|
|
7732
7869
|
rest.push(item);
|
|
7733
7870
|
}
|
|
@@ -7735,8 +7872,10 @@ const Methods = {
|
|
|
7735
7872
|
return rest;
|
|
7736
7873
|
},
|
|
7737
7874
|
getTreeExpandRecords() {
|
|
7875
|
+
const $xeTable = this;
|
|
7876
|
+
const internalData = $xeTable;
|
|
7738
7877
|
const rest = [];
|
|
7739
|
-
XEUtils.each(
|
|
7878
|
+
XEUtils.each(internalData.treeExpandedMaps, item => {
|
|
7740
7879
|
if (item) {
|
|
7741
7880
|
rest.push(item);
|
|
7742
7881
|
}
|
|
@@ -7769,12 +7908,10 @@ const Methods = {
|
|
|
7769
7908
|
const $xeTable = this;
|
|
7770
7909
|
const reactData = $xeTable;
|
|
7771
7910
|
const internalData = $xeTable;
|
|
7772
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7911
|
+
const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
|
|
7773
7912
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
7774
7913
|
const { transform } = treeOpts;
|
|
7775
|
-
let tExpandedMaps = {};
|
|
7776
7914
|
if (rows) {
|
|
7777
|
-
tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
|
|
7778
7915
|
if (!XEUtils.isArray(rows)) {
|
|
7779
7916
|
rows = [rows];
|
|
7780
7917
|
}
|
|
@@ -7783,8 +7920,8 @@ const Methods = {
|
|
|
7783
7920
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7784
7921
|
if (rowRest) {
|
|
7785
7922
|
rowRest.treeLoaded = false;
|
|
7786
|
-
if (
|
|
7787
|
-
delete
|
|
7923
|
+
if (treeExpandedMaps[rowid]) {
|
|
7924
|
+
delete treeExpandedMaps[rowid];
|
|
7788
7925
|
}
|
|
7789
7926
|
}
|
|
7790
7927
|
});
|
|
@@ -7794,7 +7931,8 @@ const Methods = {
|
|
|
7794
7931
|
rowRest.treeLoaded = false;
|
|
7795
7932
|
});
|
|
7796
7933
|
}
|
|
7797
|
-
|
|
7934
|
+
internalData.treeExpandedMaps = {};
|
|
7935
|
+
reactData.treeExpandedFlag++;
|
|
7798
7936
|
if (transform) {
|
|
7799
7937
|
handleVirtualTreeToList($xeTable);
|
|
7800
7938
|
return $xeTable.handleTableData();
|
|
@@ -7807,36 +7945,42 @@ const Methods = {
|
|
|
7807
7945
|
*/
|
|
7808
7946
|
reloadTreeExpand(row) {
|
|
7809
7947
|
const $xeTable = this;
|
|
7810
|
-
const
|
|
7948
|
+
const internalData = $xeTable;
|
|
7949
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
7950
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7811
7951
|
const { transform, lazy } = treeOpts;
|
|
7812
7952
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
7813
|
-
const rowid = getRowid(
|
|
7953
|
+
const rowid = getRowid($xeTable, row);
|
|
7814
7954
|
if (lazy && row[hasChildField] && !treeExpandLazyLoadedMaps[rowid]) {
|
|
7815
|
-
return
|
|
7816
|
-
return
|
|
7955
|
+
return $xeTable.clearTreeExpandLoaded(row).then(() => {
|
|
7956
|
+
return handleAsyncTreeExpandChilds($xeTable, row);
|
|
7817
7957
|
}).then(() => {
|
|
7818
7958
|
if (transform) {
|
|
7819
7959
|
handleVirtualTreeToList($xeTable);
|
|
7820
|
-
return
|
|
7960
|
+
return $xeTable.handleTableData();
|
|
7821
7961
|
}
|
|
7822
7962
|
}).then(() => {
|
|
7823
|
-
return
|
|
7963
|
+
return $xeTable.recalculate();
|
|
7824
7964
|
});
|
|
7825
7965
|
}
|
|
7826
|
-
return
|
|
7966
|
+
return $xeTable.$nextTick();
|
|
7827
7967
|
},
|
|
7828
7968
|
reloadTreeChilds(row) {
|
|
7969
|
+
const $xeTable = this;
|
|
7829
7970
|
if (process.env.NODE_ENV === 'development') {
|
|
7830
7971
|
warnLog('vxe.error.delFunc', ['reloadTreeChilds', 'reloadTreeExpand']);
|
|
7831
7972
|
}
|
|
7832
7973
|
// 即将废弃
|
|
7833
|
-
return
|
|
7974
|
+
return $xeTable.reloadTreeExpand(row);
|
|
7834
7975
|
},
|
|
7835
7976
|
/**
|
|
7836
7977
|
* 展开树节点事件
|
|
7837
7978
|
*/
|
|
7838
7979
|
triggerTreeExpandEvent(evnt, params) {
|
|
7839
|
-
const
|
|
7980
|
+
const $xeTable = this;
|
|
7981
|
+
const internalData = $xeTable;
|
|
7982
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
7983
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7840
7984
|
const { row, column } = params;
|
|
7841
7985
|
const { lazy, trigger } = treeOpts;
|
|
7842
7986
|
if (trigger === 'manual') {
|
|
@@ -7845,11 +7989,11 @@ const Methods = {
|
|
|
7845
7989
|
evnt.stopPropagation();
|
|
7846
7990
|
const rowid = getRowid(this, row);
|
|
7847
7991
|
if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
|
|
7848
|
-
const expanded =
|
|
7849
|
-
const columnIndex =
|
|
7850
|
-
const $columnIndex =
|
|
7851
|
-
|
|
7852
|
-
|
|
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);
|
|
7853
7997
|
}
|
|
7854
7998
|
},
|
|
7855
7999
|
/**
|
|
@@ -7858,87 +8002,6 @@ const Methods = {
|
|
|
7858
8002
|
toggleTreeExpand(row) {
|
|
7859
8003
|
return this.setTreeExpand(row, !this.isTreeExpandByRow(row));
|
|
7860
8004
|
},
|
|
7861
|
-
/**
|
|
7862
|
-
* 处理默认展开树节点
|
|
7863
|
-
*/
|
|
7864
|
-
handleDefaultTreeExpand() {
|
|
7865
|
-
const { treeConfig, treeOpts, tableFullData } = this;
|
|
7866
|
-
if (treeConfig) {
|
|
7867
|
-
const { expandAll, expandRowKeys } = treeOpts;
|
|
7868
|
-
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7869
|
-
if (expandAll) {
|
|
7870
|
-
this.setAllTreeExpand(true);
|
|
7871
|
-
}
|
|
7872
|
-
else if (expandRowKeys) {
|
|
7873
|
-
const defExpandeds = [];
|
|
7874
|
-
const rowkey = getRowkey(this);
|
|
7875
|
-
expandRowKeys.forEach((rowid) => {
|
|
7876
|
-
const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
|
|
7877
|
-
if (matchObj) {
|
|
7878
|
-
defExpandeds.push(matchObj.item);
|
|
7879
|
-
}
|
|
7880
|
-
});
|
|
7881
|
-
this.setTreeExpand(defExpandeds, true);
|
|
7882
|
-
}
|
|
7883
|
-
}
|
|
7884
|
-
},
|
|
7885
|
-
handleAsyncTreeExpandChilds(row) {
|
|
7886
|
-
const $xeTable = this;
|
|
7887
|
-
const { treeOpts, checkboxOpts } = this;
|
|
7888
|
-
const { transform, loadMethod } = treeOpts;
|
|
7889
|
-
const { checkStrictly } = checkboxOpts;
|
|
7890
|
-
return new Promise(resolve => {
|
|
7891
|
-
if (loadMethod) {
|
|
7892
|
-
const { treeExpandLazyLoadedMaps, fullAllDataRowIdData } = this;
|
|
7893
|
-
const rowid = getRowid($xeTable, row);
|
|
7894
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7895
|
-
treeExpandLazyLoadedMaps[rowid] = row;
|
|
7896
|
-
Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
|
|
7897
|
-
if (rowRest) {
|
|
7898
|
-
rowRest.treeLoaded = true;
|
|
7899
|
-
}
|
|
7900
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7901
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7902
|
-
}
|
|
7903
|
-
if (!XEUtils.isArray(childRecords)) {
|
|
7904
|
-
childRecords = [];
|
|
7905
|
-
}
|
|
7906
|
-
if (childRecords) {
|
|
7907
|
-
return this.loadTreeChildren(row, childRecords).then((childRows) => {
|
|
7908
|
-
const { treeExpandedMaps } = this;
|
|
7909
|
-
if (childRows.length && !treeExpandedMaps[rowid]) {
|
|
7910
|
-
treeExpandedMaps[rowid] = row;
|
|
7911
|
-
}
|
|
7912
|
-
// 如果当前节点已选中,则展开后子节点也被选中
|
|
7913
|
-
if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
|
|
7914
|
-
handleCheckedCheckboxRow($xeTable, childRows, true);
|
|
7915
|
-
}
|
|
7916
|
-
return this.$nextTick().then(() => {
|
|
7917
|
-
if (transform) {
|
|
7918
|
-
this.handleTableData();
|
|
7919
|
-
updateAfterDataIndex($xeTable);
|
|
7920
|
-
return this.$nextTick();
|
|
7921
|
-
}
|
|
7922
|
-
});
|
|
7923
|
-
});
|
|
7924
|
-
}
|
|
7925
|
-
}).catch(() => {
|
|
7926
|
-
const { treeExpandLazyLoadedMaps } = this;
|
|
7927
|
-
if (rowRest) {
|
|
7928
|
-
rowRest.treeLoaded = false;
|
|
7929
|
-
}
|
|
7930
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7931
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7932
|
-
}
|
|
7933
|
-
}).finally(() => {
|
|
7934
|
-
this.$nextTick().then(() => this.recalculate()).then(() => resolve());
|
|
7935
|
-
});
|
|
7936
|
-
}
|
|
7937
|
-
else {
|
|
7938
|
-
resolve();
|
|
7939
|
-
}
|
|
7940
|
-
});
|
|
7941
|
-
},
|
|
7942
8005
|
/**
|
|
7943
8006
|
* 设置所有树节点的展开与否
|
|
7944
8007
|
* @param {Boolean} expanded 是否展开
|
|
@@ -7963,42 +8026,47 @@ const Methods = {
|
|
|
7963
8026
|
* @returns
|
|
7964
8027
|
*/
|
|
7965
8028
|
handleBaseTreeExpand(rows, expanded) {
|
|
7966
|
-
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;
|
|
7967
8035
|
const { reserve, lazy, accordion, toggleMethod } = treeOpts;
|
|
7968
|
-
const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
|
|
7969
8036
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7970
8037
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
7971
8038
|
const result = [];
|
|
7972
|
-
const columnIndex =
|
|
7973
|
-
const $columnIndex =
|
|
7974
|
-
|
|
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;
|
|
7975
8043
|
if (accordion) {
|
|
7976
8044
|
validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
|
|
7977
8045
|
// 同一级只能展开一个
|
|
7978
8046
|
const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField });
|
|
7979
8047
|
if (matchObj) {
|
|
7980
8048
|
matchObj.items.forEach(item => {
|
|
7981
|
-
const rowid =
|
|
7982
|
-
if (
|
|
7983
|
-
delete
|
|
8049
|
+
const rowid = handleGetRowId(item);
|
|
8050
|
+
if (treeExpandedMaps[rowid]) {
|
|
8051
|
+
delete treeExpandedMaps[rowid];
|
|
7984
8052
|
}
|
|
7985
8053
|
});
|
|
7986
8054
|
}
|
|
7987
8055
|
}
|
|
7988
8056
|
if (expanded) {
|
|
7989
8057
|
validRows.forEach((row) => {
|
|
7990
|
-
const rowid =
|
|
7991
|
-
if (!
|
|
8058
|
+
const rowid = handleGetRowId(row);
|
|
8059
|
+
if (!treeExpandedMaps[rowid]) {
|
|
7992
8060
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7993
8061
|
if (rowRest) {
|
|
7994
8062
|
const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
|
|
7995
8063
|
// 是否使用懒加载
|
|
7996
8064
|
if (isLoad) {
|
|
7997
|
-
result.push(
|
|
8065
|
+
result.push(handleAsyncTreeExpandChilds($xeTable, row));
|
|
7998
8066
|
}
|
|
7999
8067
|
else {
|
|
8000
8068
|
if (row[childrenField] && row[childrenField].length) {
|
|
8001
|
-
|
|
8069
|
+
treeExpandedMaps[rowid] = row;
|
|
8002
8070
|
}
|
|
8003
8071
|
}
|
|
8004
8072
|
}
|
|
@@ -8007,18 +8075,18 @@ const Methods = {
|
|
|
8007
8075
|
}
|
|
8008
8076
|
else {
|
|
8009
8077
|
validRows.forEach((item) => {
|
|
8010
|
-
const rowid =
|
|
8011
|
-
if (
|
|
8012
|
-
delete
|
|
8078
|
+
const rowid = handleGetRowId(item);
|
|
8079
|
+
if (treeExpandedMaps[rowid]) {
|
|
8080
|
+
delete treeExpandedMaps[rowid];
|
|
8013
8081
|
}
|
|
8014
8082
|
});
|
|
8015
8083
|
}
|
|
8016
8084
|
if (reserve) {
|
|
8017
|
-
validRows.forEach((row) =>
|
|
8085
|
+
validRows.forEach((row) => handleTreeExpandReserve($xeTable, row, expanded));
|
|
8018
8086
|
}
|
|
8019
|
-
|
|
8087
|
+
reactData.treeExpandedFlag++;
|
|
8020
8088
|
return Promise.all(result).then(() => {
|
|
8021
|
-
return
|
|
8089
|
+
return $xeTable.recalculate();
|
|
8022
8090
|
});
|
|
8023
8091
|
},
|
|
8024
8092
|
/**
|
|
@@ -8072,30 +8140,38 @@ const Methods = {
|
|
|
8072
8140
|
* @param {Row} row 行对象
|
|
8073
8141
|
*/
|
|
8074
8142
|
isTreeExpandByRow(row) {
|
|
8075
|
-
const
|
|
8076
|
-
|
|
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)];
|
|
8077
8149
|
},
|
|
8078
8150
|
/**
|
|
8079
8151
|
* 手动清空树形节点的展开状态,数据会恢复成未展开的状态
|
|
8080
8152
|
*/
|
|
8081
8153
|
clearTreeExpand() {
|
|
8082
8154
|
const $xeTable = this;
|
|
8083
|
-
const
|
|
8084
|
-
const
|
|
8155
|
+
const reactData = $xeTable;
|
|
8156
|
+
const internalData = $xeTable;
|
|
8157
|
+
const { tableFullTreeData } = internalData;
|
|
8158
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
8085
8159
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
8086
|
-
const
|
|
8087
|
-
|
|
8160
|
+
const { transform, reserve } = treeOpts;
|
|
8161
|
+
const expList = $xeTable.getTreeExpandRecords();
|
|
8162
|
+
internalData.treeExpandedMaps = {};
|
|
8163
|
+
reactData.treeExpandedFlag++;
|
|
8088
8164
|
if (reserve) {
|
|
8089
|
-
XEUtils.eachTree(
|
|
8165
|
+
XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), { children: childrenField });
|
|
8090
8166
|
}
|
|
8091
|
-
return
|
|
8167
|
+
return $xeTable.handleTableData().then(() => {
|
|
8092
8168
|
if (transform) {
|
|
8093
8169
|
handleVirtualTreeToList($xeTable);
|
|
8094
|
-
return
|
|
8170
|
+
return $xeTable.handleTableData();
|
|
8095
8171
|
}
|
|
8096
8172
|
}).then(() => {
|
|
8097
8173
|
if (expList.length) {
|
|
8098
|
-
|
|
8174
|
+
$xeTable.recalculate();
|
|
8099
8175
|
}
|
|
8100
8176
|
});
|
|
8101
8177
|
},
|
|
@@ -8103,18 +8179,6 @@ const Methods = {
|
|
|
8103
8179
|
this.treeExpandedReserveRowMap = {};
|
|
8104
8180
|
return this.$nextTick();
|
|
8105
8181
|
},
|
|
8106
|
-
handleTreeExpandReserve(row, expanded) {
|
|
8107
|
-
const { treeExpandedReserveRowMap, treeOpts } = this;
|
|
8108
|
-
if (treeOpts.reserve) {
|
|
8109
|
-
const rowid = getRowid(this, row);
|
|
8110
|
-
if (expanded) {
|
|
8111
|
-
treeExpandedReserveRowMap[rowid] = row;
|
|
8112
|
-
}
|
|
8113
|
-
else if (treeExpandedReserveRowMap[rowid]) {
|
|
8114
|
-
delete treeExpandedReserveRowMap[rowid];
|
|
8115
|
-
}
|
|
8116
|
-
}
|
|
8117
|
-
},
|
|
8118
8182
|
/**
|
|
8119
8183
|
* 获取表格的滚动状态
|
|
8120
8184
|
*/
|
|
@@ -8432,10 +8496,10 @@ const Methods = {
|
|
|
8432
8496
|
return;
|
|
8433
8497
|
}
|
|
8434
8498
|
const { highlightHoverRow } = tableProps;
|
|
8435
|
-
const { scrollXLoad, scrollYLoad } = reactData;
|
|
8499
|
+
const { scrollXLoad, scrollYLoad, expandColumn } = reactData;
|
|
8436
8500
|
const leftFixedWidth = $xeTable.computeLeftFixedWidth;
|
|
8437
8501
|
const rightFixedWidth = $xeTable.computeRightFixedWidth;
|
|
8438
|
-
if (!(
|
|
8502
|
+
if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
|
|
8439
8503
|
return;
|
|
8440
8504
|
}
|
|
8441
8505
|
const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
|
|
@@ -8687,8 +8751,8 @@ const Methods = {
|
|
|
8687
8751
|
const $xeTable = this;
|
|
8688
8752
|
const reactData = $xeTable;
|
|
8689
8753
|
const internalData = $xeTable;
|
|
8690
|
-
const { isAllOverflow, scrollYLoad, expandColumn
|
|
8691
|
-
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData;
|
|
8754
|
+
const { isAllOverflow, scrollYLoad, expandColumn } = reactData;
|
|
8755
|
+
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
8692
8756
|
const { startIndex } = scrollYStore;
|
|
8693
8757
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
8694
8758
|
const rowOpts = $xeTable.computeRowOpts;
|
|
@@ -8931,13 +8995,15 @@ const Methods = {
|
|
|
8931
8995
|
* 更新表尾合计
|
|
8932
8996
|
*/
|
|
8933
8997
|
updateFooter() {
|
|
8998
|
+
const $xeTable = this;
|
|
8999
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
8934
9000
|
const { showFooter, visibleColumn, footerData, footerMethod } = this;
|
|
8935
9001
|
let footData = [];
|
|
8936
9002
|
if (showFooter && footerData && footerData.length) {
|
|
8937
9003
|
footData = footerData.slice(0);
|
|
8938
9004
|
}
|
|
8939
9005
|
else if (showFooter && footerMethod) {
|
|
8940
|
-
footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table:
|
|
9006
|
+
footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table: $xeTable, $grid: $xeGrid }) : [];
|
|
8941
9007
|
}
|
|
8942
9008
|
this.footerTableData = footData;
|
|
8943
9009
|
return this.$nextTick();
|
|
@@ -9015,7 +9081,7 @@ const Methods = {
|
|
|
9015
9081
|
if (this.footerSpanMethod) {
|
|
9016
9082
|
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
9017
9083
|
}
|
|
9018
|
-
setMerges(this, merges, this.mergeFooterList
|
|
9084
|
+
setMerges(this, merges, this.mergeFooterList);
|
|
9019
9085
|
return this.$nextTick().then(() => {
|
|
9020
9086
|
this.updateCellAreas();
|
|
9021
9087
|
return updateStyle($xeTable);
|
|
@@ -9069,11 +9135,14 @@ const Methods = {
|
|
|
9069
9135
|
},
|
|
9070
9136
|
dispatchEvent(type, params, evnt) {
|
|
9071
9137
|
const $xeTable = this;
|
|
9072
|
-
|
|
9138
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
9139
|
+
$xeTable.$emit(type, createEvent(evnt, { $table: $xeTable, $grid: $xeGrid }, params));
|
|
9073
9140
|
},
|
|
9074
9141
|
// 已废弃,使用 dispatchEvent
|
|
9075
9142
|
emitEvent(type, params, evnt) {
|
|
9076
|
-
|
|
9143
|
+
const $xeTable = this;
|
|
9144
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
9145
|
+
this.$emit(type, Object.assign({ $table: $xeTable, $grid: $xeGrid, $event: evnt }, params));
|
|
9077
9146
|
},
|
|
9078
9147
|
focus() {
|
|
9079
9148
|
this.isActivated = true;
|