vxe-table 3.14.0-beta.3 → 3.14.0-beta.30
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 +79 -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 +14 -5
- package/es/table/src/body.js +50 -26
- 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 +19 -9
- package/es/table/src/group.js +6 -5
- package/es/table/src/header.js +15 -9
- package/es/table/src/methods.js +1008 -789
- package/es/table/src/props.js +4 -0
- package/es/table/src/table.js +85 -49
- package/es/table/src/util.js +84 -19
- 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 +86 -67
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.umd.js +1907 -1344
- 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 +18 -5
- package/lib/table/render/index.min.js +1 -1
- package/lib/table/src/body.js +57 -25
- 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 +19 -7
- 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 +1166 -919
- 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 +96 -20
- 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 +93 -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 +14 -5
- package/packages/table/src/body.ts +49 -25
- 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 +19 -9
- package/packages/table/src/group.ts +9 -5
- package/packages/table/src/header.ts +16 -9
- package/packages/table/src/methods.ts +1110 -830
- package/packages/table/src/props.ts +16 -12
- package/packages/table/src/table.ts +99 -52
- package/packages/table/src/util.ts +95 -19
- package/packages/toolbar/src/toolbar.ts +3 -3
- package/packages/ui/index.ts +1 -0
- /package/es/{iconfont.1741160631070.ttf → iconfont.1742890796110.ttf} +0 -0
- /package/es/{iconfont.1741160631070.woff → iconfont.1742890796110.woff} +0 -0
- /package/es/{iconfont.1741160631070.woff2 → iconfont.1742890796110.woff2} +0 -0
- /package/lib/{iconfont.1741160631070.ttf → iconfont.1742890796110.ttf} +0 -0
- /package/lib/{iconfont.1741160631070.woff → iconfont.1742890796110.woff} +0 -0
- /package/lib/{iconfont.1741160631070.woff2 → iconfont.1742890796110.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, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth, getRefElem } from './util';
|
|
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,13 @@ 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);
|
|
773
|
+
// indeterminateField 仅支持读取
|
|
803
774
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
804
775
|
const selectRowMaps = {};
|
|
805
776
|
/**
|
|
@@ -810,7 +781,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
810
781
|
const checkValFn = (row) => {
|
|
811
782
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
812
783
|
if (checked) {
|
|
813
|
-
selectRowMaps[
|
|
784
|
+
selectRowMaps[handleGetRowId(row)] = row;
|
|
814
785
|
}
|
|
815
786
|
XEUtils.set(row, checkField, checked);
|
|
816
787
|
}
|
|
@@ -840,7 +811,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
840
811
|
*/
|
|
841
812
|
XEUtils.eachTree(afterFullData, (row) => {
|
|
842
813
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
843
|
-
|
|
814
|
+
const rowid = handleGetRowId(row);
|
|
815
|
+
selectRowMaps[rowid] = row;
|
|
844
816
|
}
|
|
845
817
|
}, { children: childrenField });
|
|
846
818
|
}
|
|
@@ -851,7 +823,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
851
823
|
*/
|
|
852
824
|
if (!isForce && checkMethod) {
|
|
853
825
|
XEUtils.eachTree(afterFullData, (row) => {
|
|
854
|
-
const rowid =
|
|
826
|
+
const rowid = handleGetRowId(row);
|
|
855
827
|
if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
|
|
856
828
|
selectRowMaps[rowid] = row;
|
|
857
829
|
}
|
|
@@ -868,7 +840,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
868
840
|
*/
|
|
869
841
|
if (!isForce && checkMethod) {
|
|
870
842
|
afterFullData.forEach((row) => {
|
|
871
|
-
const rowid =
|
|
843
|
+
const rowid = handleGetRowId(row);
|
|
872
844
|
if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
|
|
873
845
|
selectRowMaps[rowid] = row;
|
|
874
846
|
}
|
|
@@ -876,7 +848,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
876
848
|
}
|
|
877
849
|
else {
|
|
878
850
|
afterFullData.forEach(row => {
|
|
879
|
-
|
|
851
|
+
const rowid = handleGetRowId(row);
|
|
852
|
+
selectRowMaps[rowid] = row;
|
|
880
853
|
});
|
|
881
854
|
}
|
|
882
855
|
}
|
|
@@ -888,7 +861,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
888
861
|
*/
|
|
889
862
|
if (!isForce && checkMethod) {
|
|
890
863
|
afterFullData.forEach((row) => {
|
|
891
|
-
const rowid =
|
|
864
|
+
const rowid = handleGetRowId(row);
|
|
892
865
|
if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
|
|
893
866
|
selectRowMaps[rowid] = row;
|
|
894
867
|
}
|
|
@@ -907,10 +880,10 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
907
880
|
afterFullData.forEach((row) => handleCheckboxReserveRow($xeTable, row, false));
|
|
908
881
|
}
|
|
909
882
|
}
|
|
910
|
-
reactData.
|
|
883
|
+
reactData.updateCheckboxFlag++;
|
|
884
|
+
internalData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
|
|
911
885
|
reactData.isAllSelected = checked;
|
|
912
886
|
reactData.isIndeterminate = false;
|
|
913
|
-
reactData.treeIndeterminateMaps = {};
|
|
914
887
|
internalData.treeIndeterminateRowMaps = {};
|
|
915
888
|
$xeTable.checkSelectionStatus();
|
|
916
889
|
return $xeTable.$nextTick();
|
|
@@ -921,8 +894,8 @@ function handleReserveStatus($xeTable) {
|
|
|
921
894
|
const reactData = $xeTable;
|
|
922
895
|
const internalData = $xeTable;
|
|
923
896
|
const { treeConfig } = props;
|
|
924
|
-
const { expandColumn, currentRow,
|
|
925
|
-
const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData;
|
|
897
|
+
const { expandColumn, currentRow, selectRadioRow } = reactData;
|
|
898
|
+
const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow, selectCheckboxMaps, treeExpandedMaps, rowExpandedMaps } = internalData;
|
|
926
899
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
927
900
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
928
901
|
const radioOpts = $xeTable.computeRadioOpts;
|
|
@@ -939,7 +912,8 @@ function handleReserveStatus($xeTable) {
|
|
|
939
912
|
}
|
|
940
913
|
}
|
|
941
914
|
// 复选框
|
|
942
|
-
|
|
915
|
+
internalData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
|
|
916
|
+
reactData.updateCheckboxFlag++;
|
|
943
917
|
// 还原保留选中状态
|
|
944
918
|
if (checkboxOpts.reserve) {
|
|
945
919
|
handleCheckedCheckboxRow($xeTable, handleReserveRow($xeTable, internalData.checkboxReserveRowMap), true, true);
|
|
@@ -948,17 +922,161 @@ function handleReserveStatus($xeTable) {
|
|
|
948
922
|
reactData.currentRow = null; // 刷新当前行状态
|
|
949
923
|
}
|
|
950
924
|
// 行展开
|
|
951
|
-
|
|
925
|
+
internalData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
|
|
926
|
+
reactData.rowExpandedFlag++;
|
|
952
927
|
// 还原保留状态
|
|
953
928
|
if (expandColumn && expandOpts.reserve) {
|
|
954
929
|
$xeTable.setRowExpand(handleReserveRow($xeTable, internalData.rowExpandedReserveRowMap), true);
|
|
955
930
|
}
|
|
956
931
|
// 树展开
|
|
957
|
-
|
|
932
|
+
internalData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
|
|
933
|
+
reactData.treeExpandedFlag++;
|
|
958
934
|
if (treeConfig && treeOpts.reserve) {
|
|
959
935
|
$xeTable.setTreeExpand(handleReserveRow($xeTable, internalData.treeExpandedReserveRowMap), true);
|
|
960
936
|
}
|
|
961
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
|
+
};
|
|
962
1080
|
function calcVarRowHeightConfig($xeTable, sizeKey, sizeEl) {
|
|
963
1081
|
const reactData = $xeTable;
|
|
964
1082
|
const { rowHeightStore } = reactData;
|
|
@@ -1021,12 +1139,13 @@ function handleVirtualYVisible($xeTable) {
|
|
|
1021
1139
|
visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1;
|
|
1022
1140
|
}
|
|
1023
1141
|
else {
|
|
1142
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1024
1143
|
let leftIndex = 0;
|
|
1025
1144
|
let rightIndex = afterFullData.length;
|
|
1026
1145
|
while (leftIndex < rightIndex) {
|
|
1027
1146
|
const rIndex = Math.floor((leftIndex + rightIndex) / 2);
|
|
1028
1147
|
const row = afterFullData[rIndex];
|
|
1029
|
-
const rowid =
|
|
1148
|
+
const rowid = handleGetRowId(row);
|
|
1030
1149
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
1031
1150
|
if (rowRest.oTop <= startTop) {
|
|
1032
1151
|
leftIndex = rIndex + 1;
|
|
@@ -1038,7 +1157,7 @@ function handleVirtualYVisible($xeTable) {
|
|
|
1038
1157
|
toVisibleIndex = Math.max(0, leftIndex < afterFullData.length ? leftIndex - 2 : 0);
|
|
1039
1158
|
for (let rIndex = toVisibleIndex, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
1040
1159
|
const row = afterFullData[rIndex];
|
|
1041
|
-
const rowid =
|
|
1160
|
+
const rowid = handleGetRowId(row);
|
|
1042
1161
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
1043
1162
|
visibleSize++;
|
|
1044
1163
|
if (rowRest.oTop > endTop || visibleSize >= 100) {
|
|
@@ -1068,9 +1187,12 @@ function calculateMergerOffsetIndex(list, offsetItem, type) {
|
|
|
1068
1187
|
}
|
|
1069
1188
|
}
|
|
1070
1189
|
}
|
|
1071
|
-
function setMerges(
|
|
1190
|
+
function setMerges($xeTable, merges, mList, rowList) {
|
|
1191
|
+
const props = $xeTable;
|
|
1192
|
+
const internalData = $xeTable;
|
|
1072
1193
|
if (merges) {
|
|
1073
|
-
const { treeConfig
|
|
1194
|
+
const { treeConfig } = props;
|
|
1195
|
+
const { visibleColumn } = internalData;
|
|
1074
1196
|
if (!XEUtils.isArray(merges)) {
|
|
1075
1197
|
merges = [merges];
|
|
1076
1198
|
}
|
|
@@ -1116,10 +1238,13 @@ function setMerges(_vm, merges, mList, rowList) {
|
|
|
1116
1238
|
});
|
|
1117
1239
|
}
|
|
1118
1240
|
}
|
|
1119
|
-
function removeMerges(
|
|
1241
|
+
function removeMerges($xeTable, merges, mList, rowList) {
|
|
1242
|
+
const props = $xeTable;
|
|
1243
|
+
const internalData = $xeTable;
|
|
1120
1244
|
const rest = [];
|
|
1121
1245
|
if (merges) {
|
|
1122
|
-
const { treeConfig
|
|
1246
|
+
const { treeConfig } = props;
|
|
1247
|
+
const { visibleColumn } = internalData;
|
|
1123
1248
|
if (!XEUtils.isArray(merges)) {
|
|
1124
1249
|
merges = [merges];
|
|
1125
1250
|
}
|
|
@@ -1299,6 +1424,7 @@ function autoCellWidth($xeTable) {
|
|
|
1299
1424
|
internalData.headerHeight = headerHeight;
|
|
1300
1425
|
internalData.footerHeight = footerHeight;
|
|
1301
1426
|
reactData.overflowX = overflowX;
|
|
1427
|
+
reactData.resizeWidthFlag++;
|
|
1302
1428
|
updateColumnOffsetLeft($xeTable);
|
|
1303
1429
|
updateHeight($xeTable);
|
|
1304
1430
|
reactData.parentHeight = Math.max(internalData.headerHeight + footerHeight + 20, $xeTable.getParentHeight());
|
|
@@ -1326,8 +1452,9 @@ const calcCellHeight = ($xeTable) => {
|
|
|
1326
1452
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
1327
1453
|
const el = $xeTable.$refs.refElem;
|
|
1328
1454
|
if (!isAllOverflow && scrollYLoad && el) {
|
|
1455
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1329
1456
|
tableData.forEach(row => {
|
|
1330
|
-
const rowid =
|
|
1457
|
+
const rowid = handleGetRowId(row);
|
|
1331
1458
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
1332
1459
|
if (rowRest) {
|
|
1333
1460
|
const height = calcCellAutoHeight(rowRest, el);
|
|
@@ -1568,9 +1695,10 @@ function hideDropTip($xeTable) {
|
|
|
1568
1695
|
* @param {Event} evnt 事件
|
|
1569
1696
|
* @param {Row} row 行对象
|
|
1570
1697
|
*/
|
|
1571
|
-
function handleTooltip($xeTable, evnt, tdEl, overflowElem,
|
|
1698
|
+
function handleTooltip($xeTable, evnt, tdEl, overflowElem, params) {
|
|
1572
1699
|
const reactData = $xeTable;
|
|
1573
|
-
|
|
1700
|
+
const tipOverEl = overflowElem || tdEl;
|
|
1701
|
+
if (!tipOverEl) {
|
|
1574
1702
|
return $xeTable.$nextTick();
|
|
1575
1703
|
}
|
|
1576
1704
|
params.cell = tdEl;
|
|
@@ -1580,9 +1708,8 @@ function handleTooltip($xeTable, evnt, tdEl, overflowElem, tipElem, params) {
|
|
|
1580
1708
|
const { showAll, contentMethod } = tooltipOpts;
|
|
1581
1709
|
const customContent = contentMethod ? contentMethod(params) : null;
|
|
1582
1710
|
const useCustom = contentMethod && !XEUtils.eqNull(customContent);
|
|
1583
|
-
const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ?
|
|
1584
|
-
|
|
1585
|
-
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))) {
|
|
1586
1713
|
Object.assign(tooltipStore, {
|
|
1587
1714
|
row,
|
|
1588
1715
|
column,
|
|
@@ -1592,7 +1719,7 @@ function handleTooltip($xeTable, evnt, tdEl, overflowElem, tipElem, params) {
|
|
|
1592
1719
|
$xeTable.$nextTick(() => {
|
|
1593
1720
|
const $tooltip = $xeTable.$refs.refTooltip;
|
|
1594
1721
|
if ($tooltip && $tooltip.open) {
|
|
1595
|
-
$tooltip.open(
|
|
1722
|
+
$tooltip.open(tipOverEl, formatText(content));
|
|
1596
1723
|
}
|
|
1597
1724
|
});
|
|
1598
1725
|
}
|
|
@@ -1767,8 +1894,8 @@ function parseColumns($xeTable, isReset) {
|
|
|
1767
1894
|
const props = $xeTable;
|
|
1768
1895
|
const reactData = $xeTable;
|
|
1769
1896
|
const internalData = $xeTable;
|
|
1770
|
-
const { showOverflow } = props
|
|
1771
|
-
const rowOpts = $xeTable.computeRowOpts
|
|
1897
|
+
// const { showOverflow } = props
|
|
1898
|
+
// const rowOpts = $xeTable.computeRowOpts
|
|
1772
1899
|
const leftList = [];
|
|
1773
1900
|
const centerList = [];
|
|
1774
1901
|
const rightList = [];
|
|
@@ -1841,28 +1968,28 @@ function parseColumns($xeTable, isReset) {
|
|
|
1841
1968
|
reactData.hasFixedColumn = leftList.length > 0 || rightList.length > 0;
|
|
1842
1969
|
Object.assign(columnStore, { leftList, centerList, rightList });
|
|
1843
1970
|
if (scrollXLoad) {
|
|
1844
|
-
if (showOverflow) {
|
|
1845
|
-
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
}
|
|
1852
|
-
if (process.env.NODE_ENV === 'development') {
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
}
|
|
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
|
+
// }
|
|
1866
1993
|
if (isReset) {
|
|
1867
1994
|
const { visibleSize } = handleVirtualXVisible($xeTable);
|
|
1868
1995
|
scrollXStore.startIndex = 0;
|
|
@@ -1974,6 +2101,35 @@ function loadScrollYData($xeTable) {
|
|
|
1974
2101
|
}
|
|
1975
2102
|
}
|
|
1976
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
|
+
};
|
|
1977
2133
|
function lazyScrollXData($xeTable) {
|
|
1978
2134
|
const internalData = $xeTable;
|
|
1979
2135
|
const { lxTimeout, lxRunTime, scrollXStore } = internalData;
|
|
@@ -2131,7 +2287,7 @@ function calcCellWidth($xeTable) {
|
|
|
2131
2287
|
}
|
|
2132
2288
|
function handleUpdateColResize($xeTable, evnt, params) {
|
|
2133
2289
|
$xeTable.analyColumnWidth();
|
|
2134
|
-
$xeTable.recalculate(
|
|
2290
|
+
$xeTable.recalculate().then(() => {
|
|
2135
2291
|
$xeTable.saveCustomStore('update:width');
|
|
2136
2292
|
$xeTable.updateCellAreas();
|
|
2137
2293
|
$xeTable.dispatchEvent('column-resizable-change', params, evnt);
|
|
@@ -2143,7 +2299,7 @@ function handleUpdateColResize($xeTable, evnt, params) {
|
|
|
2143
2299
|
function handleUpdateRowResize($xeTable, evnt, params) {
|
|
2144
2300
|
const reactData = $xeTable;
|
|
2145
2301
|
reactData.resizeHeightFlag++;
|
|
2146
|
-
$xeTable.recalculate(
|
|
2302
|
+
$xeTable.recalculate().then(() => {
|
|
2147
2303
|
$xeTable.updateCellAreas();
|
|
2148
2304
|
$xeTable.dispatchEvent('row-resizable-change', params, evnt);
|
|
2149
2305
|
setTimeout(() => $xeTable.recalculate(true), 300);
|
|
@@ -2164,16 +2320,17 @@ function updateColumnOffsetLeft($xeTable) {
|
|
|
2164
2320
|
function updateRowOffsetTop($xeTable) {
|
|
2165
2321
|
const reactData = $xeTable;
|
|
2166
2322
|
const internalData = $xeTable;
|
|
2167
|
-
const { expandColumn
|
|
2168
|
-
const { afterFullData, fullAllDataRowIdData } = internalData;
|
|
2323
|
+
const { expandColumn } = reactData;
|
|
2324
|
+
const { afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
2169
2325
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
2170
2326
|
const rowOpts = $xeTable.computeRowOpts;
|
|
2171
2327
|
const cellOpts = $xeTable.computeCellOpts;
|
|
2172
2328
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
2329
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
2173
2330
|
let offsetTop = 0;
|
|
2174
2331
|
for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
2175
2332
|
const row = afterFullData[rIndex];
|
|
2176
|
-
const rowid =
|
|
2333
|
+
const rowid = handleGetRowId(row);
|
|
2177
2334
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
2178
2335
|
rowRest.oTop = offsetTop;
|
|
2179
2336
|
offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
|
|
@@ -2186,47 +2343,43 @@ function updateRowOffsetTop($xeTable) {
|
|
|
2186
2343
|
function updateRowExpandStyle($xeTable) {
|
|
2187
2344
|
const reactData = $xeTable;
|
|
2188
2345
|
const internalData = $xeTable;
|
|
2189
|
-
const { expandColumn, scrollYLoad,
|
|
2346
|
+
const { expandColumn, scrollYLoad, scrollYTop, isScrollYBig } = reactData;
|
|
2190
2347
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
2191
2348
|
const rowOpts = $xeTable.computeRowOpts;
|
|
2192
2349
|
const cellOpts = $xeTable.computeCellOpts;
|
|
2193
2350
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
2194
2351
|
const { mode } = expandOpts;
|
|
2195
2352
|
if (expandColumn && mode === 'fixed') {
|
|
2196
|
-
const { elemStore,
|
|
2353
|
+
const { elemStore, fullAllDataRowIdData } = internalData;
|
|
2197
2354
|
const rowExpandEl = $xeTable.$refs.refRowExpandElem;
|
|
2198
2355
|
const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
|
|
2199
2356
|
if (rowExpandEl && bodyScrollElem) {
|
|
2200
2357
|
let isUpdateHeight = false;
|
|
2201
|
-
if (scrollYLoad) {
|
|
2202
|
-
let offsetTop = 0;
|
|
2203
|
-
for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
2204
|
-
const row = afterFullData[rIndex];
|
|
2205
|
-
const rowid = getRowid($xeTable, row);
|
|
2206
|
-
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
2207
|
-
rowRest.oTop = offsetTop;
|
|
2208
|
-
offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
|
|
2209
|
-
// 是否展开行
|
|
2210
|
-
if (expandColumn && rowExpandedMaps[rowid]) {
|
|
2211
|
-
offsetTop += rowRest.expandHeight || expandOpts.height || 0;
|
|
2212
|
-
}
|
|
2213
|
-
}
|
|
2214
|
-
}
|
|
2215
2358
|
XEUtils.arrayEach(rowExpandEl.children, reEl => {
|
|
2216
2359
|
const expandEl = reEl;
|
|
2217
2360
|
const rowid = expandEl.getAttribute('rowid') || '';
|
|
2218
2361
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
2219
2362
|
if (rowRest) {
|
|
2220
2363
|
const expandHeight = expandEl.offsetHeight + 1;
|
|
2364
|
+
const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
|
|
2365
|
+
let offsetTop = 0;
|
|
2221
2366
|
if (scrollYLoad) {
|
|
2222
|
-
|
|
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
|
+
}
|
|
2223
2373
|
}
|
|
2224
2374
|
else {
|
|
2225
|
-
const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
|
|
2226
2375
|
if (trEl) {
|
|
2227
|
-
|
|
2376
|
+
offsetTop = trEl.offsetTop + trEl.offsetHeight;
|
|
2228
2377
|
}
|
|
2229
2378
|
}
|
|
2379
|
+
if (isScrollYBig) {
|
|
2380
|
+
offsetTop += scrollYTop;
|
|
2381
|
+
}
|
|
2382
|
+
expandEl.style.top = toCssUnit(offsetTop);
|
|
2230
2383
|
if (!isUpdateHeight) {
|
|
2231
2384
|
if (rowRest.expandHeight !== expandHeight) {
|
|
2232
2385
|
isUpdateHeight = true;
|
|
@@ -2237,6 +2390,9 @@ function updateRowExpandStyle($xeTable) {
|
|
|
2237
2390
|
});
|
|
2238
2391
|
if (isUpdateHeight) {
|
|
2239
2392
|
reactData.rowExpandHeightFlag++;
|
|
2393
|
+
$xeTable.$nextTick(() => {
|
|
2394
|
+
updateRowOffsetTop($xeTable);
|
|
2395
|
+
});
|
|
2240
2396
|
}
|
|
2241
2397
|
}
|
|
2242
2398
|
}
|
|
@@ -2252,10 +2408,11 @@ function handleRowExpandScroll($xeTable) {
|
|
|
2252
2408
|
}
|
|
2253
2409
|
const Methods = {
|
|
2254
2410
|
callSlot(slotFunc, params, h, vNodes) {
|
|
2411
|
+
const $xeTable = this;
|
|
2412
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
2255
2413
|
if (slotFunc) {
|
|
2256
|
-
|
|
2257
|
-
|
|
2258
|
-
return $xegrid.callSlot(slotFunc, params, h, vNodes);
|
|
2414
|
+
if ($xeGrid) {
|
|
2415
|
+
return $xeGrid.callSlot(slotFunc, params, h, vNodes);
|
|
2259
2416
|
}
|
|
2260
2417
|
if (XEUtils.isFunction(slotFunc)) {
|
|
2261
2418
|
return getSlotVNs(slotFunc.call(this, params, h, vNodes));
|
|
@@ -2263,21 +2420,43 @@ const Methods = {
|
|
|
2263
2420
|
}
|
|
2264
2421
|
return [];
|
|
2265
2422
|
},
|
|
2423
|
+
getEl() {
|
|
2424
|
+
const $xeTable = this;
|
|
2425
|
+
return $xeTable.$refs.refElem;
|
|
2426
|
+
},
|
|
2266
2427
|
/**
|
|
2267
2428
|
* 获取父容器元素
|
|
2268
2429
|
*/
|
|
2269
2430
|
getParentElem() {
|
|
2270
|
-
const
|
|
2271
|
-
|
|
2431
|
+
const $xeTable = this;
|
|
2432
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
2433
|
+
const { $el } = this;
|
|
2434
|
+
return $xeGrid ? $xeGrid.$el.parentNode : $el.parentNode;
|
|
2272
2435
|
},
|
|
2273
2436
|
/**
|
|
2274
2437
|
* 获取父容器的高度
|
|
2275
2438
|
*/
|
|
2276
2439
|
getParentHeight() {
|
|
2277
|
-
const
|
|
2278
|
-
const
|
|
2279
|
-
const
|
|
2280
|
-
|
|
2440
|
+
const $xeTable = this;
|
|
2441
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
2442
|
+
const props = $xeTable;
|
|
2443
|
+
const { height } = props;
|
|
2444
|
+
const el = $xeTable.$refs.refElem;
|
|
2445
|
+
if (el) {
|
|
2446
|
+
const parentElem = el.parentNode;
|
|
2447
|
+
const parentPaddingSize = height === '100%' || height === 'auto' ? getPaddingTopBottomSize(parentElem) : 0;
|
|
2448
|
+
let parentWrapperHeight = 0;
|
|
2449
|
+
if (parentElem) {
|
|
2450
|
+
if ($xeGrid && hasClass(parentElem, 'vxe-grid--table-wrapper')) {
|
|
2451
|
+
parentWrapperHeight = $xeGrid.getParentHeight();
|
|
2452
|
+
}
|
|
2453
|
+
else {
|
|
2454
|
+
parentWrapperHeight = parentElem.clientHeight;
|
|
2455
|
+
}
|
|
2456
|
+
}
|
|
2457
|
+
return Math.floor(parentWrapperHeight - parentPaddingSize);
|
|
2458
|
+
}
|
|
2459
|
+
return 0;
|
|
2281
2460
|
},
|
|
2282
2461
|
/**
|
|
2283
2462
|
* 获取需要排除的高度
|
|
@@ -2285,8 +2464,9 @@ const Methods = {
|
|
|
2285
2464
|
* 如果存在表尾合计滚动条,则需要排除滚动条高度
|
|
2286
2465
|
*/
|
|
2287
2466
|
getExcludeHeight() {
|
|
2288
|
-
const
|
|
2289
|
-
|
|
2467
|
+
const $xeTable = this;
|
|
2468
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
2469
|
+
return $xeGrid ? $xeGrid.getExcludeHeight() : 0;
|
|
2290
2470
|
},
|
|
2291
2471
|
/**
|
|
2292
2472
|
* 重置表格的一切数据状态
|
|
@@ -2365,6 +2545,9 @@ const Methods = {
|
|
|
2365
2545
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2366
2546
|
let treeData = [];
|
|
2367
2547
|
let fullData = datas ? datas.slice(0) : [];
|
|
2548
|
+
if (fullData.length > supportMaxRow) {
|
|
2549
|
+
errLog('vxe.error.errMaxRow', [supportMaxRow]);
|
|
2550
|
+
}
|
|
2368
2551
|
if (treeConfig) {
|
|
2369
2552
|
// 树结构自动转换
|
|
2370
2553
|
if (treeOpts.transform) {
|
|
@@ -2607,35 +2790,16 @@ const Methods = {
|
|
|
2607
2790
|
const reactData = $xeTable;
|
|
2608
2791
|
const internalData = $xeTable;
|
|
2609
2792
|
const { treeConfig } = props;
|
|
2610
|
-
const { treeExpandedMaps } =
|
|
2611
|
-
const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData;
|
|
2793
|
+
const { fullAllDataRowIdData, tableFullData, tableFullTreeData, treeExpandedMaps } = internalData;
|
|
2612
2794
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
2613
2795
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2614
2796
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
2615
|
-
const
|
|
2797
|
+
const { lazy } = treeOpts;
|
|
2616
2798
|
const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
|
|
2617
2799
|
const fullDataRowIdMaps = {};
|
|
2618
|
-
const
|
|
2619
|
-
const
|
|
2620
|
-
let
|
|
2621
|
-
const seq = treeConfig && path ? toTreePathSeq(path) : index + 1;
|
|
2622
|
-
const level = nodes ? nodes.length - 1 : 0;
|
|
2623
|
-
if (eqEmptyValue(rowid)) {
|
|
2624
|
-
rowid = getRowUniqueId();
|
|
2625
|
-
XEUtils.set(row, rowkey, rowid);
|
|
2626
|
-
}
|
|
2627
|
-
if (treeConfig && treeOpts.lazy) {
|
|
2628
|
-
const treeExpRest = treeExpandedMaps[rowid];
|
|
2629
|
-
if (row[hasChildField] && XEUtils.isUndefined(row[childrenField])) {
|
|
2630
|
-
row[childrenField] = null;
|
|
2631
|
-
}
|
|
2632
|
-
if (treeExpRest) {
|
|
2633
|
-
if (!row[childrenField] || !row[childrenField].length) {
|
|
2634
|
-
delete treeTempExpandedMaps[rowid];
|
|
2635
|
-
}
|
|
2636
|
-
}
|
|
2637
|
-
}
|
|
2638
|
-
let rowRest = fullAllDataRowIdData[rowid];
|
|
2800
|
+
const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
|
|
2801
|
+
const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
|
|
2802
|
+
let rowRest = fullAllDataRowIdMaps[rowid];
|
|
2639
2803
|
if (!rowRest) {
|
|
2640
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 };
|
|
2641
2805
|
}
|
|
@@ -2645,35 +2809,48 @@ const Methods = {
|
|
|
2645
2809
|
rowRest.items = items;
|
|
2646
2810
|
rowRest.parent = parentRow;
|
|
2647
2811
|
rowRest.level = level;
|
|
2648
|
-
rowRest.index =
|
|
2812
|
+
rowRest.index = currIndex;
|
|
2813
|
+
rowRest.treeIndex = index;
|
|
2649
2814
|
fullDataRowIdMaps[rowid] = rowRest;
|
|
2650
2815
|
fullAllDataRowIdMaps[rowid] = rowRest;
|
|
2651
2816
|
};
|
|
2652
2817
|
if (treeConfig) {
|
|
2653
|
-
XEUtils.eachTree(tableFullTreeData,
|
|
2818
|
+
XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
|
|
2819
|
+
const rowid = handleUpdateRowId(row);
|
|
2820
|
+
if (treeConfig && lazy) {
|
|
2821
|
+
if (row[hasChildField] && row[childrenField] === undefined) {
|
|
2822
|
+
row[childrenField] = null;
|
|
2823
|
+
}
|
|
2824
|
+
if (treeExpandedMaps[rowid]) {
|
|
2825
|
+
if (!row[childrenField] || !row[childrenField].length) {
|
|
2826
|
+
delete treeExpandedMaps[rowid];
|
|
2827
|
+
}
|
|
2828
|
+
}
|
|
2829
|
+
}
|
|
2830
|
+
handleRowCache(row, index, items, parentRow ? -1 : index, parentRow, rowid, nodes.length - 1, toTreePathSeq(path));
|
|
2831
|
+
}, { children: childrenField });
|
|
2654
2832
|
}
|
|
2655
2833
|
else {
|
|
2656
|
-
tableFullData.forEach(
|
|
2834
|
+
tableFullData.forEach((row, index, items) => {
|
|
2835
|
+
handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1);
|
|
2836
|
+
});
|
|
2657
2837
|
}
|
|
2658
2838
|
internalData.fullDataRowIdData = fullDataRowIdMaps;
|
|
2659
2839
|
internalData.fullAllDataRowIdData = fullAllDataRowIdMaps;
|
|
2660
|
-
reactData.
|
|
2840
|
+
reactData.treeExpandedFlag++;
|
|
2661
2841
|
},
|
|
2662
2842
|
cacheSourceMap(fullData) {
|
|
2663
|
-
|
|
2843
|
+
const $xeTable = this;
|
|
2844
|
+
const props = $xeTable;
|
|
2845
|
+
const internalData = $xeTable;
|
|
2846
|
+
const { treeConfig } = props;
|
|
2847
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
2664
2848
|
const sourceData = XEUtils.clone(fullData, true);
|
|
2665
|
-
const
|
|
2666
|
-
|
|
2849
|
+
const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
|
|
2850
|
+
const sourceRowIdData = {};
|
|
2667
2851
|
const handleSourceRow = (row) => {
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
rowid = getRowUniqueId();
|
|
2671
|
-
XEUtils.set(row, rowkey, rowid);
|
|
2672
|
-
}
|
|
2673
|
-
sourceDataRowIdData[rowid] = {
|
|
2674
|
-
row,
|
|
2675
|
-
rowid
|
|
2676
|
-
};
|
|
2852
|
+
const rowid = handleUpdateRowId(row);
|
|
2853
|
+
sourceRowIdData[rowid] = row;
|
|
2677
2854
|
};
|
|
2678
2855
|
// 源数据缓存
|
|
2679
2856
|
if (treeConfig) {
|
|
@@ -2683,7 +2860,8 @@ const Methods = {
|
|
|
2683
2860
|
else {
|
|
2684
2861
|
sourceData.forEach(handleSourceRow);
|
|
2685
2862
|
}
|
|
2686
|
-
|
|
2863
|
+
internalData.sourceDataRowIdData = sourceRowIdData;
|
|
2864
|
+
internalData.tableSourceData = sourceData;
|
|
2687
2865
|
},
|
|
2688
2866
|
getParams() {
|
|
2689
2867
|
return this.params;
|
|
@@ -2770,47 +2948,22 @@ const Methods = {
|
|
|
2770
2948
|
* 根据 row 获取序号
|
|
2771
2949
|
* @param {Row} row 行对象
|
|
2772
2950
|
*/
|
|
2773
|
-
getRowSeq(
|
|
2774
|
-
const { fullAllDataRowIdData } = this;
|
|
2775
|
-
if (row) {
|
|
2776
|
-
const rowid = getRowid(this, row);
|
|
2777
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2778
|
-
if (rest) {
|
|
2779
|
-
return rest.seq;
|
|
2780
|
-
}
|
|
2781
|
-
}
|
|
2782
|
-
return -1;
|
|
2783
|
-
},
|
|
2951
|
+
getRowSeq: createGetRowCacheProp('seq'),
|
|
2784
2952
|
/**
|
|
2785
2953
|
* 根据 row 获取相对于 data 中的索引
|
|
2786
2954
|
* @param {Row} row 行对象
|
|
2787
2955
|
*/
|
|
2788
|
-
getRowIndex(
|
|
2789
|
-
const { fullAllDataRowIdData } = this;
|
|
2790
|
-
if (row) {
|
|
2791
|
-
const rowid = getRowid(this, row);
|
|
2792
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2793
|
-
if (rest) {
|
|
2794
|
-
return rest.index;
|
|
2795
|
-
}
|
|
2796
|
-
}
|
|
2797
|
-
return -1;
|
|
2798
|
-
},
|
|
2956
|
+
getRowIndex: createGetRowCacheProp('index'),
|
|
2799
2957
|
/**
|
|
2800
2958
|
* 根据 row 获取相对于当前数据中的索引
|
|
2801
2959
|
* @param {Row} row 行对象
|
|
2802
2960
|
*/
|
|
2803
|
-
getVTRowIndex(
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
return rest._index;
|
|
2810
|
-
}
|
|
2811
|
-
}
|
|
2812
|
-
return -1;
|
|
2813
|
-
},
|
|
2961
|
+
getVTRowIndex: createGetRowCacheProp('_index'),
|
|
2962
|
+
/**
|
|
2963
|
+
* 根据 row 获取渲染中的虚拟索引
|
|
2964
|
+
* @param {Row} row 行对象
|
|
2965
|
+
*/
|
|
2966
|
+
getVMRowIndex: createGetRowCacheProp('$index'),
|
|
2814
2967
|
// 在 v3 中废弃
|
|
2815
2968
|
_getRowIndex(row) {
|
|
2816
2969
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2818,21 +2971,6 @@ const Methods = {
|
|
|
2818
2971
|
}
|
|
2819
2972
|
return this.getVTRowIndex(row);
|
|
2820
2973
|
},
|
|
2821
|
-
/**
|
|
2822
|
-
* 根据 row 获取渲染中的虚拟索引
|
|
2823
|
-
* @param {Row} row 行对象
|
|
2824
|
-
*/
|
|
2825
|
-
getVMRowIndex(row) {
|
|
2826
|
-
const { fullAllDataRowIdData } = this;
|
|
2827
|
-
if (row) {
|
|
2828
|
-
const rowid = getRowid(this, row);
|
|
2829
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2830
|
-
if (rest) {
|
|
2831
|
-
return rest.$index;
|
|
2832
|
-
}
|
|
2833
|
-
}
|
|
2834
|
-
return -1;
|
|
2835
|
-
},
|
|
2836
2974
|
// 在 v3 中废弃
|
|
2837
2975
|
$getRowIndex(row) {
|
|
2838
2976
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2844,30 +2982,17 @@ const Methods = {
|
|
|
2844
2982
|
* 根据 column 获取相对于 columns 中的索引
|
|
2845
2983
|
* @param {ColumnInfo} column 列配置
|
|
2846
2984
|
*/
|
|
2847
|
-
getColumnIndex(
|
|
2848
|
-
const { fullColumnIdData } = this;
|
|
2849
|
-
if (column) {
|
|
2850
|
-
const rest = fullColumnIdData[column.id];
|
|
2851
|
-
if (rest) {
|
|
2852
|
-
return rest.index;
|
|
2853
|
-
}
|
|
2854
|
-
}
|
|
2855
|
-
return -1;
|
|
2856
|
-
},
|
|
2985
|
+
getColumnIndex: createGetColumnCacheProp('index'),
|
|
2857
2986
|
/**
|
|
2858
2987
|
* 根据 column 获取相对于当前表格列中的索引
|
|
2859
2988
|
* @param {ColumnInfo} column 列配置
|
|
2860
2989
|
*/
|
|
2861
|
-
getVTColumnIndex(
|
|
2862
|
-
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
}
|
|
2868
|
-
}
|
|
2869
|
-
return -1;
|
|
2870
|
-
},
|
|
2990
|
+
getVTColumnIndex: createGetColumnCacheProp('_index'),
|
|
2991
|
+
/**
|
|
2992
|
+
* 根据 column 获取渲染中的虚拟索引
|
|
2993
|
+
* @param {ColumnInfo} column 列配置
|
|
2994
|
+
*/
|
|
2995
|
+
getVMColumnIndex: createGetColumnCacheProp('$index'),
|
|
2871
2996
|
// 在 v3 中废弃
|
|
2872
2997
|
_getColumnIndex(column) {
|
|
2873
2998
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2875,20 +3000,6 @@ const Methods = {
|
|
|
2875
3000
|
}
|
|
2876
3001
|
return this.getVTColumnIndex(column);
|
|
2877
3002
|
},
|
|
2878
|
-
/**
|
|
2879
|
-
* 根据 column 获取渲染中的虚拟索引
|
|
2880
|
-
* @param {ColumnInfo} column 列配置
|
|
2881
|
-
*/
|
|
2882
|
-
getVMColumnIndex(column) {
|
|
2883
|
-
const { fullColumnIdData } = this;
|
|
2884
|
-
if (column) {
|
|
2885
|
-
const rest = fullColumnIdData[column.id];
|
|
2886
|
-
if (rest) {
|
|
2887
|
-
return rest.$index;
|
|
2888
|
-
}
|
|
2889
|
-
}
|
|
2890
|
-
return -1;
|
|
2891
|
-
},
|
|
2892
3003
|
// 在 v3 中废弃
|
|
2893
3004
|
$getColumnIndex(column) {
|
|
2894
3005
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2982,12 +3093,15 @@ const Methods = {
|
|
|
2982
3093
|
const reactData = $xeTable;
|
|
2983
3094
|
const internalData = $xeTable;
|
|
2984
3095
|
const { keepSource, treeConfig } = props;
|
|
2985
|
-
const {
|
|
3096
|
+
const { editStore } = reactData;
|
|
3097
|
+
const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
|
|
3098
|
+
const removeTempMaps = Object.assign({}, editStore.removeMaps);
|
|
2986
3099
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
2987
3100
|
const { transform } = treeOpts;
|
|
3101
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
2988
3102
|
if (!keepSource) {
|
|
2989
3103
|
if (process.env.NODE_ENV === 'development') {
|
|
2990
|
-
|
|
3104
|
+
errLog('vxe.error.reqProp', ['keep-source']);
|
|
2991
3105
|
}
|
|
2992
3106
|
return $xeTable.$nextTick();
|
|
2993
3107
|
}
|
|
@@ -3002,23 +3116,24 @@ const Methods = {
|
|
|
3002
3116
|
}
|
|
3003
3117
|
let reDelFlag = false;
|
|
3004
3118
|
if (targetRows.length) {
|
|
3005
|
-
targetRows.forEach((
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3119
|
+
targetRows.forEach((item) => {
|
|
3120
|
+
const rowid = handleGetRowId(item);
|
|
3121
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
3122
|
+
if (rowRest) {
|
|
3123
|
+
const row = rowRest.row;
|
|
3124
|
+
if (!$xeTable.isInsertByRow(row)) {
|
|
3125
|
+
const oRow = sourceDataRowIdData[rowid];
|
|
3126
|
+
if (oRow && row) {
|
|
3127
|
+
if (field) {
|
|
3128
|
+
XEUtils.set(row, field, XEUtils.clone(XEUtils.get(oRow, field), true));
|
|
3129
|
+
}
|
|
3130
|
+
else {
|
|
3131
|
+
XEUtils.destructuring(row, XEUtils.clone(oRow, true));
|
|
3132
|
+
}
|
|
3133
|
+
if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
|
|
3134
|
+
delete removeTempMaps[rowid];
|
|
3135
|
+
tableFullData.unshift(row);
|
|
3136
|
+
afterFullData.unshift(row);
|
|
3022
3137
|
reDelFlag = true;
|
|
3023
3138
|
}
|
|
3024
3139
|
}
|
|
@@ -3028,6 +3143,7 @@ const Methods = {
|
|
|
3028
3143
|
}
|
|
3029
3144
|
if (rows) {
|
|
3030
3145
|
if (reDelFlag) {
|
|
3146
|
+
editStore.removeMaps = removeTempMaps;
|
|
3031
3147
|
$xeTable.updateFooter();
|
|
3032
3148
|
$xeTable.cacheRowMap(false);
|
|
3033
3149
|
$xeTable.handleTableData(treeConfig && transform);
|
|
@@ -3190,20 +3306,25 @@ const Methods = {
|
|
|
3190
3306
|
},
|
|
3191
3307
|
/**
|
|
3192
3308
|
* 检查行或列数据是否发生改变
|
|
3193
|
-
* @param {Row}
|
|
3309
|
+
* @param {Row} rowOrId 行对象
|
|
3194
3310
|
* @param {String} field 字段名
|
|
3195
3311
|
*/
|
|
3196
|
-
isUpdateByRow(
|
|
3197
|
-
const
|
|
3312
|
+
isUpdateByRow(rowOrId, field) {
|
|
3313
|
+
const $xeTable = this;
|
|
3314
|
+
const props = $xeTable;
|
|
3315
|
+
const internalData = $xeTable;
|
|
3316
|
+
const { keepSource } = props;
|
|
3317
|
+
const { tableFullColumn, fullDataRowIdData, sourceDataRowIdData } = internalData;
|
|
3198
3318
|
if (keepSource) {
|
|
3199
|
-
const rowid = getRowid(
|
|
3319
|
+
const rowid = XEUtils.isString(rowOrId) || XEUtils.isNumber(rowOrId) ? rowOrId : getRowid($xeTable, rowOrId);
|
|
3320
|
+
const rowRest = fullDataRowIdData[rowid];
|
|
3200
3321
|
// 新增的数据不需要检测
|
|
3201
|
-
if (!
|
|
3322
|
+
if (!rowRest) {
|
|
3202
3323
|
return false;
|
|
3203
3324
|
}
|
|
3204
|
-
const
|
|
3205
|
-
|
|
3206
|
-
|
|
3325
|
+
const row = rowRest.row;
|
|
3326
|
+
const oRow = sourceDataRowIdData[rowid];
|
|
3327
|
+
if (oRow) {
|
|
3207
3328
|
if (arguments.length > 1) {
|
|
3208
3329
|
return !eqCellValue(oRow, row, field);
|
|
3209
3330
|
}
|
|
@@ -3265,6 +3386,99 @@ const Methods = {
|
|
|
3265
3386
|
tableColumn: this.tableColumn.slice(0)
|
|
3266
3387
|
};
|
|
3267
3388
|
},
|
|
3389
|
+
/**
|
|
3390
|
+
* 移动列到指定列的位置
|
|
3391
|
+
* @param fieldOrColumn
|
|
3392
|
+
* @param targetFieldOrColumn
|
|
3393
|
+
* @param options
|
|
3394
|
+
*/
|
|
3395
|
+
moveColumnTo(fieldOrColumn, targetFieldOrColumn, options) {
|
|
3396
|
+
const $xeTable = this;
|
|
3397
|
+
const internalData = $xeTable;
|
|
3398
|
+
const { fullColumnIdData, visibleColumn } = internalData;
|
|
3399
|
+
const { dragToChild, dragPos, isCrossDrag } = Object.assign({}, options);
|
|
3400
|
+
const dragCol = handleFieldOrColumn($xeTable, fieldOrColumn);
|
|
3401
|
+
let prevDragCol = null;
|
|
3402
|
+
const colRest = dragCol ? fullColumnIdData[dragCol.id] : null;
|
|
3403
|
+
let defPos = 'left';
|
|
3404
|
+
if (XEUtils.isNumber(targetFieldOrColumn)) {
|
|
3405
|
+
if (colRest && targetFieldOrColumn) {
|
|
3406
|
+
let currList = colRest.items;
|
|
3407
|
+
let offsetIndex = colRest._index + targetFieldOrColumn;
|
|
3408
|
+
if (isCrossDrag) {
|
|
3409
|
+
currList = visibleColumn;
|
|
3410
|
+
offsetIndex = colRest._index + targetFieldOrColumn;
|
|
3411
|
+
}
|
|
3412
|
+
if (offsetIndex > 0 && offsetIndex < currList.length - 1) {
|
|
3413
|
+
prevDragCol = currList[offsetIndex];
|
|
3414
|
+
}
|
|
3415
|
+
if (targetFieldOrColumn > 0) {
|
|
3416
|
+
defPos = 'right';
|
|
3417
|
+
}
|
|
3418
|
+
}
|
|
3419
|
+
}
|
|
3420
|
+
else {
|
|
3421
|
+
prevDragCol = handleFieldOrColumn($xeTable, targetFieldOrColumn);
|
|
3422
|
+
const targetColRest = prevDragCol ? fullColumnIdData[prevDragCol.id] : null;
|
|
3423
|
+
if (colRest && targetColRest) {
|
|
3424
|
+
if (targetColRest._index > colRest._index) {
|
|
3425
|
+
defPos = 'right';
|
|
3426
|
+
}
|
|
3427
|
+
}
|
|
3428
|
+
}
|
|
3429
|
+
return $xeTable.handleColDragSwapEvent(null, true, dragCol, prevDragCol, dragPos || defPos, dragToChild === true);
|
|
3430
|
+
},
|
|
3431
|
+
/**
|
|
3432
|
+
* 移动行到指定行的位置
|
|
3433
|
+
* @param rowidOrRow
|
|
3434
|
+
* @param targetRowidOrRow
|
|
3435
|
+
* @param options
|
|
3436
|
+
*/
|
|
3437
|
+
moveRowTo(rowidOrRow, targetRowidOrRow, options) {
|
|
3438
|
+
const $xeTable = this;
|
|
3439
|
+
const props = $xeTable;
|
|
3440
|
+
const internalData = $xeTable;
|
|
3441
|
+
const { treeConfig } = props;
|
|
3442
|
+
const { fullAllDataRowIdData, afterFullData } = internalData;
|
|
3443
|
+
const { dragToChild, dragPos, isCrossDrag } = Object.assign({}, options);
|
|
3444
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
3445
|
+
const dragRow = handleRowidOrRow($xeTable, rowidOrRow);
|
|
3446
|
+
let prevDragRow = null;
|
|
3447
|
+
let defPos = 'top';
|
|
3448
|
+
const rowRest = dragRow ? fullAllDataRowIdData[getRowid($xeTable, dragRow)] : null;
|
|
3449
|
+
if (XEUtils.isNumber(targetRowidOrRow)) {
|
|
3450
|
+
if (rowRest && targetRowidOrRow) {
|
|
3451
|
+
let currList = afterFullData;
|
|
3452
|
+
let offsetIndex = rowRest._index + targetRowidOrRow;
|
|
3453
|
+
if (treeConfig) {
|
|
3454
|
+
currList = rowRest.items;
|
|
3455
|
+
if (treeOpts.transform) {
|
|
3456
|
+
offsetIndex = rowRest.treeIndex + targetRowidOrRow;
|
|
3457
|
+
if (isCrossDrag) {
|
|
3458
|
+
currList = afterFullData;
|
|
3459
|
+
offsetIndex = rowRest._index + targetRowidOrRow;
|
|
3460
|
+
}
|
|
3461
|
+
}
|
|
3462
|
+
}
|
|
3463
|
+
if (offsetIndex >= 0 && offsetIndex <= currList.length - 1) {
|
|
3464
|
+
prevDragRow = currList[offsetIndex];
|
|
3465
|
+
}
|
|
3466
|
+
if (targetRowidOrRow > 0) {
|
|
3467
|
+
defPos = 'bottom';
|
|
3468
|
+
}
|
|
3469
|
+
}
|
|
3470
|
+
}
|
|
3471
|
+
else {
|
|
3472
|
+
prevDragRow = handleRowidOrRow($xeTable, targetRowidOrRow);
|
|
3473
|
+
const targetRowRest = prevDragRow ? fullAllDataRowIdData[getRowid($xeTable, prevDragRow)] : null;
|
|
3474
|
+
if (rowRest && targetRowRest) {
|
|
3475
|
+
if (targetRowRest._index > rowRest._index) {
|
|
3476
|
+
defPos = 'bottom';
|
|
3477
|
+
}
|
|
3478
|
+
}
|
|
3479
|
+
}
|
|
3480
|
+
return $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
|
|
3481
|
+
},
|
|
3268
3482
|
/**
|
|
3269
3483
|
* 获取表格的全量列
|
|
3270
3484
|
*/
|
|
@@ -3285,22 +3499,28 @@ const Methods = {
|
|
|
3285
3499
|
* 用于多选行,获取已选中的数据
|
|
3286
3500
|
*/
|
|
3287
3501
|
getCheckboxRecords(isFull) {
|
|
3288
|
-
const
|
|
3502
|
+
const $xeTable = this;
|
|
3503
|
+
const props = $xeTable;
|
|
3504
|
+
const internalData = $xeTable;
|
|
3505
|
+
const { treeConfig } = props;
|
|
3506
|
+
const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData;
|
|
3507
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
3508
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
3289
3509
|
const { transform, mapChildrenField } = treeOpts;
|
|
3290
3510
|
const { checkField } = checkboxOpts;
|
|
3291
3511
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
3292
|
-
const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData);
|
|
3293
3512
|
let rowList = [];
|
|
3294
3513
|
if (checkField) {
|
|
3295
3514
|
if (treeConfig) {
|
|
3515
|
+
const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData);
|
|
3296
3516
|
rowList = XEUtils.filterTree(currTableData, row => XEUtils.get(row, checkField), { children: transform ? mapChildrenField : childrenField });
|
|
3297
3517
|
}
|
|
3298
3518
|
else {
|
|
3519
|
+
const currTableData = isFull ? tableFullData : afterFullData;
|
|
3299
3520
|
rowList = currTableData.filter((row) => XEUtils.get(row, checkField));
|
|
3300
3521
|
}
|
|
3301
3522
|
}
|
|
3302
3523
|
else {
|
|
3303
|
-
const { selectCheckboxMaps, fullDataRowIdData } = this;
|
|
3304
3524
|
XEUtils.each(selectCheckboxMaps, (row, rowid) => {
|
|
3305
3525
|
if (isFull) {
|
|
3306
3526
|
if (fullDataRowIdData[rowid]) {
|
|
@@ -3331,7 +3551,7 @@ const Methods = {
|
|
|
3331
3551
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3332
3552
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
3333
3553
|
const { transform, rowField, parentField, mapChildrenField } = treeOpts;
|
|
3334
|
-
const { remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
|
|
3554
|
+
const { isEvery, remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
|
|
3335
3555
|
const { remote: allRemoteSort, sortMethod: allSortMethod, multiple: sortMultiple, chronological } = sortOpts;
|
|
3336
3556
|
let tableData = [];
|
|
3337
3557
|
let tableTree = [];
|
|
@@ -3390,7 +3610,7 @@ const Methods = {
|
|
|
3390
3610
|
// 筛选虚拟树
|
|
3391
3611
|
tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, {
|
|
3392
3612
|
original: true,
|
|
3393
|
-
isEvery
|
|
3613
|
+
isEvery,
|
|
3394
3614
|
children: mapChildrenField,
|
|
3395
3615
|
mapChildren: childrenField
|
|
3396
3616
|
});
|
|
@@ -3406,7 +3626,7 @@ const Methods = {
|
|
|
3406
3626
|
// 还原虚拟树
|
|
3407
3627
|
tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
|
|
3408
3628
|
original: true,
|
|
3409
|
-
isEvery
|
|
3629
|
+
isEvery,
|
|
3410
3630
|
children: mapChildrenField,
|
|
3411
3631
|
mapChildren: childrenField
|
|
3412
3632
|
});
|
|
@@ -3469,7 +3689,7 @@ const Methods = {
|
|
|
3469
3689
|
// 还原虚拟树
|
|
3470
3690
|
tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
|
|
3471
3691
|
original: true,
|
|
3472
|
-
isEvery
|
|
3692
|
+
isEvery,
|
|
3473
3693
|
children: treeOpts.mapChildrenField,
|
|
3474
3694
|
mapChildren: childrenField
|
|
3475
3695
|
});
|
|
@@ -3616,6 +3836,7 @@ const Methods = {
|
|
|
3616
3836
|
* 默认执行一次,除非被重置
|
|
3617
3837
|
*/
|
|
3618
3838
|
handleLoadDefaults() {
|
|
3839
|
+
const $xeTable = this;
|
|
3619
3840
|
if (this.checkboxConfig) {
|
|
3620
3841
|
this.handleDefaultSelectionChecked();
|
|
3621
3842
|
}
|
|
@@ -3626,7 +3847,7 @@ const Methods = {
|
|
|
3626
3847
|
this.handleDefaultRowExpand();
|
|
3627
3848
|
}
|
|
3628
3849
|
if (this.treeConfig) {
|
|
3629
|
-
|
|
3850
|
+
handleDefaultTreeExpand($xeTable);
|
|
3630
3851
|
}
|
|
3631
3852
|
if (this.mergeCells) {
|
|
3632
3853
|
this.handleDefaultMergeCells();
|
|
@@ -3814,9 +4035,9 @@ const Methods = {
|
|
|
3814
4035
|
return this.refreshColumn(true);
|
|
3815
4036
|
},
|
|
3816
4037
|
handleCustomRestore(storeData) {
|
|
3817
|
-
const $
|
|
3818
|
-
const reactData = $
|
|
3819
|
-
const internalData = $
|
|
4038
|
+
const $xeTable = this;
|
|
4039
|
+
const reactData = $xeTable;
|
|
4040
|
+
const internalData = $xeTable;
|
|
3820
4041
|
let { collectColumn } = internalData;
|
|
3821
4042
|
const { resizableData, sortData, visibleData, fixedData } = storeData;
|
|
3822
4043
|
let hasCustomSort = false;
|
|
@@ -3885,8 +4106,19 @@ const Methods = {
|
|
|
3885
4106
|
}
|
|
3886
4107
|
},
|
|
3887
4108
|
getCustomStoreData() {
|
|
3888
|
-
const
|
|
3889
|
-
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;
|
|
3890
4122
|
const resizableData = {};
|
|
3891
4123
|
const sortData = {};
|
|
3892
4124
|
const visibleData = {};
|
|
@@ -3903,47 +4135,37 @@ const Methods = {
|
|
|
3903
4135
|
}
|
|
3904
4136
|
let hasResizable = 0;
|
|
3905
4137
|
let hasSort = 0;
|
|
3906
|
-
let
|
|
4138
|
+
let hasFixed = 0;
|
|
3907
4139
|
let hasVisible = 0;
|
|
3908
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
|
+
}
|
|
3909
4146
|
// 只支持一级
|
|
3910
4147
|
if (!parentColumn) {
|
|
3911
|
-
|
|
3912
|
-
|
|
3913
|
-
|
|
3914
|
-
hasSort = 1;
|
|
3915
|
-
sortData[colKey] = column.renderSortNumber;
|
|
3916
|
-
}
|
|
3917
|
-
});
|
|
3918
|
-
if (column.fixed !== column.defaultFixed) {
|
|
3919
|
-
const colKey = column.getKey();
|
|
3920
|
-
if (colKey) {
|
|
3921
|
-
hasFixedt = 1;
|
|
3922
|
-
fixedData[colKey] = column.fixed;
|
|
3923
|
-
}
|
|
4148
|
+
if (isCustomSort) {
|
|
4149
|
+
hasSort = 1;
|
|
4150
|
+
sortData[colKey] = column.renderSortNumber;
|
|
3924
4151
|
}
|
|
3925
|
-
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
if (colKey) {
|
|
3929
|
-
hasResizable = 1;
|
|
3930
|
-
resizableData[colKey] = column.renderWidth;
|
|
4152
|
+
if (isCustomFixed && column.fixed !== column.defaultFixed) {
|
|
4153
|
+
hasFixed = 1;
|
|
4154
|
+
fixedData[colKey] = column.fixed;
|
|
3931
4155
|
}
|
|
3932
4156
|
}
|
|
3933
|
-
if (
|
|
4157
|
+
if (isCustomResizable && column.resizeWidth) {
|
|
4158
|
+
hasResizable = 1;
|
|
4159
|
+
resizableData[colKey] = column.renderWidth;
|
|
4160
|
+
}
|
|
4161
|
+
if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
|
|
3934
4162
|
if (!column.visible && column.defaultVisible) {
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
hasVisible = 1;
|
|
3938
|
-
visibleData[colKey] = false;
|
|
3939
|
-
}
|
|
4163
|
+
hasVisible = 1;
|
|
4164
|
+
visibleData[colKey] = false;
|
|
3940
4165
|
}
|
|
3941
4166
|
else if (column.visible && !column.defaultVisible) {
|
|
3942
|
-
|
|
3943
|
-
|
|
3944
|
-
hasVisible = 1;
|
|
3945
|
-
visibleData[colKey] = true;
|
|
3946
|
-
}
|
|
4167
|
+
hasVisible = 1;
|
|
4168
|
+
visibleData[colKey] = true;
|
|
3947
4169
|
}
|
|
3948
4170
|
}
|
|
3949
4171
|
});
|
|
@@ -3953,7 +4175,7 @@ const Methods = {
|
|
|
3953
4175
|
if (hasSort) {
|
|
3954
4176
|
storeData.sortData = sortData;
|
|
3955
4177
|
}
|
|
3956
|
-
if (
|
|
4178
|
+
if (hasFixed) {
|
|
3957
4179
|
storeData.fixedData = fixedData;
|
|
3958
4180
|
}
|
|
3959
4181
|
if (hasVisible) {
|
|
@@ -4441,12 +4663,13 @@ const Methods = {
|
|
|
4441
4663
|
const $xeTable = this;
|
|
4442
4664
|
const internalData = $xeTable;
|
|
4443
4665
|
const { fullAllDataRowIdData, afterFullData } = internalData;
|
|
4666
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4444
4667
|
const rowOpts = $xeTable.computeRowOpts;
|
|
4445
4668
|
const cellOpts = $xeTable.computeCellOpts;
|
|
4446
4669
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
4447
4670
|
const rest = {};
|
|
4448
4671
|
afterFullData.forEach(row => {
|
|
4449
|
-
const rowid =
|
|
4672
|
+
const rowid = handleGetRowId(row);
|
|
4450
4673
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4451
4674
|
if (rowRest) {
|
|
4452
4675
|
const resizeHeight = rowRest.resizeHeight;
|
|
@@ -4473,8 +4696,9 @@ const Methods = {
|
|
|
4473
4696
|
rHeight = Math.floor(rHeight * bodyHeight);
|
|
4474
4697
|
}
|
|
4475
4698
|
if (rHeight) {
|
|
4699
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4476
4700
|
rows.forEach(row => {
|
|
4477
|
-
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row :
|
|
4701
|
+
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row);
|
|
4478
4702
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4479
4703
|
if (rowRest) {
|
|
4480
4704
|
rowRest.resizeHeight = rHeight;
|
|
@@ -4615,6 +4839,8 @@ const Methods = {
|
|
|
4615
4839
|
}
|
|
4616
4840
|
},
|
|
4617
4841
|
preventEvent(evnt, type, args, next, end) {
|
|
4842
|
+
const $xeTable = this;
|
|
4843
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
4618
4844
|
let evntList = interceptor.get(type);
|
|
4619
4845
|
// 兼容老版本
|
|
4620
4846
|
if (!evntList.length && type === 'event.clearEdit') {
|
|
@@ -4626,8 +4852,22 @@ const Methods = {
|
|
|
4626
4852
|
}
|
|
4627
4853
|
}
|
|
4628
4854
|
// 兼容老版本
|
|
4629
|
-
let rest;
|
|
4630
|
-
|
|
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) {
|
|
4631
4871
|
if (next) {
|
|
4632
4872
|
rest = next();
|
|
4633
4873
|
}
|
|
@@ -4641,7 +4881,9 @@ const Methods = {
|
|
|
4641
4881
|
* 全局按下事件处理
|
|
4642
4882
|
*/
|
|
4643
4883
|
handleGlobalMousedownEvent(evnt) {
|
|
4644
|
-
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;
|
|
4645
4887
|
const { actived } = editStore;
|
|
4646
4888
|
const { customWrapper, refValidTooltip } = $refs;
|
|
4647
4889
|
const tableFilter = $refs.refTableFilter;
|
|
@@ -4731,7 +4973,7 @@ const Methods = {
|
|
|
4731
4973
|
}
|
|
4732
4974
|
}
|
|
4733
4975
|
else if (mouseConfig) {
|
|
4734
|
-
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)) {
|
|
4735
4977
|
if (this.clearSelected) {
|
|
4736
4978
|
this.clearSelected();
|
|
4737
4979
|
}
|
|
@@ -4753,7 +4995,7 @@ const Methods = {
|
|
|
4753
4995
|
if (ctxMenuStore.visible && tableMenu && !getEventTargetNode(evnt, tableMenu.$el).flag) {
|
|
4754
4996
|
this.closeMenu();
|
|
4755
4997
|
}
|
|
4756
|
-
const isActivated = getEventTargetNode(evnt, ($
|
|
4998
|
+
const isActivated = getEventTargetNode(evnt, ($xeGrid || this).$el).flag;
|
|
4757
4999
|
// 如果存在校验,点击了表格之外则清除
|
|
4758
5000
|
if (!isActivated && editRules && validOpts.autoClear) {
|
|
4759
5001
|
this.validErrorMaps = {};
|
|
@@ -4817,6 +5059,7 @@ const Methods = {
|
|
|
4817
5059
|
handleGlobalKeydownEvent(evnt) {
|
|
4818
5060
|
const $xeTable = this;
|
|
4819
5061
|
const internalData = $xeTable;
|
|
5062
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
4820
5063
|
// 该行为只对当前激活的表格有效
|
|
4821
5064
|
if (this.isActivated) {
|
|
4822
5065
|
this.preventEvent(evnt, 'event.keydown', null, () => {
|
|
@@ -4915,7 +5158,7 @@ const Methods = {
|
|
|
4915
5158
|
this.moveTabSelected(activeParams, hasShiftKey, evnt);
|
|
4916
5159
|
}
|
|
4917
5160
|
else {
|
|
4918
|
-
this.
|
|
5161
|
+
this.moveEnterSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt);
|
|
4919
5162
|
}
|
|
4920
5163
|
}
|
|
4921
5164
|
else {
|
|
@@ -4949,7 +5192,7 @@ const Methods = {
|
|
|
4949
5192
|
return;
|
|
4950
5193
|
}
|
|
4951
5194
|
}
|
|
4952
|
-
this.
|
|
5195
|
+
this.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt);
|
|
4953
5196
|
if (enterMethod) {
|
|
4954
5197
|
enterMethod(etrParams);
|
|
4955
5198
|
}
|
|
@@ -4975,11 +5218,7 @@ const Methods = {
|
|
|
4975
5218
|
if (!isEditStatus) {
|
|
4976
5219
|
// 如果按下了方向键
|
|
4977
5220
|
if (selected.row && selected.column) {
|
|
4978
|
-
|
|
4979
|
-
}
|
|
4980
|
-
else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
|
|
4981
|
-
// 当前行按键上下移动
|
|
4982
|
-
this.moveCurrentRow(isUpArrow, isDwArrow, evnt);
|
|
5221
|
+
$xeTable.moveArrowSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
|
|
4983
5222
|
}
|
|
4984
5223
|
}
|
|
4985
5224
|
}
|
|
@@ -5002,7 +5241,7 @@ const Methods = {
|
|
|
5002
5241
|
column: selected.column,
|
|
5003
5242
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5004
5243
|
$table: this,
|
|
5005
|
-
$grid:
|
|
5244
|
+
$grid: $xeGrid
|
|
5006
5245
|
};
|
|
5007
5246
|
// 是否被禁用
|
|
5008
5247
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
@@ -5029,7 +5268,7 @@ const Methods = {
|
|
|
5029
5268
|
column: selected.column,
|
|
5030
5269
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5031
5270
|
$table: this,
|
|
5032
|
-
$grid:
|
|
5271
|
+
$grid: $xeGrid
|
|
5033
5272
|
};
|
|
5034
5273
|
// 是否被禁用
|
|
5035
5274
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
@@ -5058,7 +5297,7 @@ const Methods = {
|
|
|
5058
5297
|
rowIndex: this.getRowIndex(parentRow),
|
|
5059
5298
|
$rowIndex: this.getVMRowIndex(parentRow),
|
|
5060
5299
|
$table: this,
|
|
5061
|
-
$grid:
|
|
5300
|
+
$grid: $xeGrid
|
|
5062
5301
|
};
|
|
5063
5302
|
this.setTreeExpand(parentRow, false)
|
|
5064
5303
|
.then(() => this.scrollToRow(parentRow))
|
|
@@ -5080,7 +5319,7 @@ const Methods = {
|
|
|
5080
5319
|
column: selected.column,
|
|
5081
5320
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5082
5321
|
$table: this,
|
|
5083
|
-
$grid:
|
|
5322
|
+
$grid: $xeGrid
|
|
5084
5323
|
};
|
|
5085
5324
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
5086
5325
|
if (editMethod) {
|
|
@@ -5201,7 +5440,7 @@ const Methods = {
|
|
|
5201
5440
|
return;
|
|
5202
5441
|
}
|
|
5203
5442
|
if (tooltipStore.column !== column || !tooltipStore.visible) {
|
|
5204
|
-
handleTooltip($xeTable, evnt, thEl, cellEl,
|
|
5443
|
+
handleTooltip($xeTable, evnt, thEl, thEl.querySelector('.vxe-cell--title') || cellEl, params);
|
|
5205
5444
|
}
|
|
5206
5445
|
},
|
|
5207
5446
|
/**
|
|
@@ -5231,7 +5470,7 @@ const Methods = {
|
|
|
5231
5470
|
}
|
|
5232
5471
|
}
|
|
5233
5472
|
if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
|
|
5234
|
-
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);
|
|
5235
5474
|
}
|
|
5236
5475
|
},
|
|
5237
5476
|
/**
|
|
@@ -5242,10 +5481,10 @@ const Methods = {
|
|
|
5242
5481
|
const reactData = $xeTable;
|
|
5243
5482
|
const { column } = params;
|
|
5244
5483
|
const { tooltipStore } = reactData;
|
|
5245
|
-
const
|
|
5484
|
+
const tdEl = evnt.currentTarget;
|
|
5246
5485
|
handleTargetEnterEvent($xeTable, tooltipStore.column !== column || !!tooltipStore.row);
|
|
5247
5486
|
if (tooltipStore.column !== column || !tooltipStore.visible) {
|
|
5248
|
-
handleTooltip($xeTable, evnt,
|
|
5487
|
+
handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
|
|
5249
5488
|
}
|
|
5250
5489
|
},
|
|
5251
5490
|
openTooltip(target, content) {
|
|
@@ -5302,11 +5541,15 @@ const Methods = {
|
|
|
5302
5541
|
* 获取复选框半选状态的行数据
|
|
5303
5542
|
*/
|
|
5304
5543
|
getCheckboxIndeterminateRecords(isFull) {
|
|
5305
|
-
const
|
|
5544
|
+
const $xeTable = this;
|
|
5545
|
+
const props = $xeTable;
|
|
5546
|
+
const internalData = $xeTable;
|
|
5547
|
+
const { treeConfig } = props;
|
|
5548
|
+
const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData;
|
|
5306
5549
|
if (treeConfig) {
|
|
5307
5550
|
const fullRest = [];
|
|
5308
5551
|
const defRest = [];
|
|
5309
|
-
XEUtils.each(
|
|
5552
|
+
XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
|
|
5310
5553
|
if (item) {
|
|
5311
5554
|
fullRest.push(item);
|
|
5312
5555
|
if (fullDataRowIdData[rowid]) {
|
|
@@ -5376,20 +5619,22 @@ const Methods = {
|
|
|
5376
5619
|
isCheckedByCheckboxRow(row) {
|
|
5377
5620
|
const $xeTable = this;
|
|
5378
5621
|
const reactData = $xeTable;
|
|
5379
|
-
const
|
|
5622
|
+
const internalData = $xeTable;
|
|
5623
|
+
const { updateCheckboxFlag } = reactData;
|
|
5624
|
+
const { selectCheckboxMaps } = internalData;
|
|
5380
5625
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5381
5626
|
const { checkField } = checkboxOpts;
|
|
5382
5627
|
if (checkField) {
|
|
5383
5628
|
return XEUtils.get(row, checkField);
|
|
5384
5629
|
}
|
|
5385
|
-
return !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5630
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5386
5631
|
},
|
|
5387
5632
|
isCheckedByCheckboxRowKey(rowid) {
|
|
5388
5633
|
const $xeTable = this;
|
|
5389
5634
|
const reactData = $xeTable;
|
|
5390
5635
|
const internalData = $xeTable;
|
|
5391
|
-
const {
|
|
5392
|
-
const { fullAllDataRowIdData } = internalData;
|
|
5636
|
+
const { updateCheckboxFlag } = reactData;
|
|
5637
|
+
const { fullAllDataRowIdData, selectCheckboxMaps } = internalData;
|
|
5393
5638
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5394
5639
|
const { checkField } = checkboxOpts;
|
|
5395
5640
|
if (checkField) {
|
|
@@ -5399,19 +5644,19 @@ const Methods = {
|
|
|
5399
5644
|
}
|
|
5400
5645
|
return false;
|
|
5401
5646
|
}
|
|
5402
|
-
return !!selectCheckboxMaps[rowid];
|
|
5647
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid];
|
|
5403
5648
|
},
|
|
5404
5649
|
isIndeterminateByCheckboxRow(row) {
|
|
5405
5650
|
const $xeTable = this;
|
|
5406
|
-
const
|
|
5407
|
-
const {
|
|
5408
|
-
return !!
|
|
5651
|
+
const internalData = $xeTable;
|
|
5652
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5653
|
+
return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
|
|
5409
5654
|
},
|
|
5410
5655
|
isIndeterminateByCheckboxRowKey(rowid) {
|
|
5411
5656
|
const $xeTable = this;
|
|
5412
|
-
const
|
|
5413
|
-
const {
|
|
5414
|
-
return !!
|
|
5657
|
+
const internalData = $xeTable;
|
|
5658
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5659
|
+
return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
|
|
5415
5660
|
},
|
|
5416
5661
|
/**
|
|
5417
5662
|
* 切换选中
|
|
@@ -5421,14 +5666,16 @@ const Methods = {
|
|
|
5421
5666
|
const $xeTable = this;
|
|
5422
5667
|
const props = $xeTable;
|
|
5423
5668
|
const reactData = $xeTable;
|
|
5669
|
+
const internalData = $xeTable;
|
|
5424
5670
|
const { treeConfig } = props;
|
|
5425
|
-
const { selectCheckboxMaps } =
|
|
5426
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5671
|
+
const { selectCheckboxMaps } = internalData;
|
|
5427
5672
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5428
5673
|
const { transform, mapChildrenField } = treeOpts;
|
|
5429
5674
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
5430
5675
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5431
5676
|
const { checkField, checkStrictly, checkMethod } = checkboxOpts;
|
|
5677
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5678
|
+
// indeterminateField 仅支持读取
|
|
5432
5679
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
5433
5680
|
if (checkField) {
|
|
5434
5681
|
// 树结构
|
|
@@ -5443,59 +5690,57 @@ const Methods = {
|
|
|
5443
5690
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5444
5691
|
}
|
|
5445
5692
|
}, { children: transform ? mapChildrenField : childrenField });
|
|
5446
|
-
reactData.
|
|
5693
|
+
reactData.updateCheckboxFlag++;
|
|
5447
5694
|
return;
|
|
5448
5695
|
}
|
|
5449
|
-
|
|
5450
|
-
|
|
5451
|
-
|
|
5452
|
-
|
|
5453
|
-
|
|
5454
|
-
|
|
5455
|
-
|
|
5456
|
-
|
|
5457
|
-
}
|
|
5458
|
-
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++;
|
|
5459
5704
|
return;
|
|
5460
5705
|
}
|
|
5461
5706
|
// 树结构
|
|
5462
5707
|
if (treeConfig && !checkStrictly) {
|
|
5463
5708
|
// 更新子节点状态
|
|
5464
5709
|
XEUtils.eachTree(rows, (row) => {
|
|
5465
|
-
const rowid =
|
|
5710
|
+
const rowid = handleGetRowId(row);
|
|
5466
5711
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5467
5712
|
if (checked) {
|
|
5468
|
-
|
|
5713
|
+
selectCheckboxMaps[rowid] = row;
|
|
5469
5714
|
}
|
|
5470
5715
|
else {
|
|
5471
|
-
if (
|
|
5472
|
-
delete
|
|
5716
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5717
|
+
delete selectCheckboxMaps[rowid];
|
|
5473
5718
|
}
|
|
5474
5719
|
}
|
|
5475
5720
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5476
5721
|
}
|
|
5477
5722
|
}, { children: transform ? mapChildrenField : childrenField });
|
|
5478
|
-
reactData.
|
|
5723
|
+
reactData.updateCheckboxFlag++;
|
|
5479
5724
|
return;
|
|
5480
5725
|
}
|
|
5481
5726
|
// 列表
|
|
5482
5727
|
rows.forEach(row => {
|
|
5483
|
-
const rowid =
|
|
5728
|
+
const rowid = handleGetRowId(row);
|
|
5484
5729
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5485
5730
|
if (checked) {
|
|
5486
|
-
if (!
|
|
5487
|
-
|
|
5731
|
+
if (!selectCheckboxMaps[rowid]) {
|
|
5732
|
+
selectCheckboxMaps[rowid] = row;
|
|
5488
5733
|
}
|
|
5489
5734
|
}
|
|
5490
5735
|
else {
|
|
5491
|
-
if (
|
|
5492
|
-
delete
|
|
5736
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5737
|
+
delete selectCheckboxMaps[rowid];
|
|
5493
5738
|
}
|
|
5494
5739
|
}
|
|
5495
5740
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5741
|
+
reactData.updateCheckboxFlag++;
|
|
5496
5742
|
}
|
|
5497
5743
|
});
|
|
5498
|
-
reactData.selectCheckboxMaps = selectRowMaps;
|
|
5499
5744
|
},
|
|
5500
5745
|
/**
|
|
5501
5746
|
* 即将移除
|
|
@@ -5506,7 +5751,10 @@ const Methods = {
|
|
|
5506
5751
|
$xeTable.handleBatchSelectRows([row], checked, isForce);
|
|
5507
5752
|
},
|
|
5508
5753
|
handleToggleCheckRowEvent(evnt, params) {
|
|
5509
|
-
const
|
|
5754
|
+
const $xeTable = this;
|
|
5755
|
+
const internalData = $xeTable;
|
|
5756
|
+
const { selectCheckboxMaps } = internalData;
|
|
5757
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5510
5758
|
const { checkField, trigger } = checkboxOpts;
|
|
5511
5759
|
const { row } = params;
|
|
5512
5760
|
if (trigger === 'manual') {
|
|
@@ -5517,47 +5765,52 @@ const Methods = {
|
|
|
5517
5765
|
checked = !XEUtils.get(row, checkField);
|
|
5518
5766
|
}
|
|
5519
5767
|
else {
|
|
5520
|
-
checked = !selectCheckboxMaps[getRowid(
|
|
5768
|
+
checked = !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5521
5769
|
}
|
|
5522
5770
|
if (evnt) {
|
|
5523
|
-
|
|
5771
|
+
$xeTable.triggerCheckRowEvent(evnt, params, checked);
|
|
5524
5772
|
}
|
|
5525
5773
|
else {
|
|
5526
|
-
|
|
5527
|
-
|
|
5774
|
+
$xeTable.handleBatchSelectRows([row], checked);
|
|
5775
|
+
$xeTable.checkSelectionStatus();
|
|
5528
5776
|
}
|
|
5529
5777
|
},
|
|
5530
5778
|
triggerCheckRowEvent(evnt, params, checked) {
|
|
5531
5779
|
const $xeTable = this;
|
|
5532
|
-
const
|
|
5533
|
-
const
|
|
5780
|
+
const props = $xeTable;
|
|
5781
|
+
const internalData = $xeTable;
|
|
5534
5782
|
const { row } = params;
|
|
5783
|
+
const { afterFullData } = internalData;
|
|
5784
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5785
|
+
const { checkMethod, trigger } = checkboxOpts;
|
|
5535
5786
|
if (trigger === 'manual') {
|
|
5536
5787
|
return;
|
|
5537
5788
|
}
|
|
5538
5789
|
evnt.stopPropagation();
|
|
5539
|
-
if (checkboxOpts.isShiftKey && evnt.shiftKey && !
|
|
5540
|
-
const checkboxRecords =
|
|
5790
|
+
if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
|
|
5791
|
+
const checkboxRecords = $xeTable.getCheckboxRecords();
|
|
5541
5792
|
if (checkboxRecords.length) {
|
|
5542
5793
|
const firstRow = checkboxRecords[0];
|
|
5543
|
-
const _rowIndex =
|
|
5544
|
-
const _firstRowIndex =
|
|
5794
|
+
const _rowIndex = $xeTable.getVTRowIndex(row);
|
|
5795
|
+
const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
|
|
5545
5796
|
if (_rowIndex !== _firstRowIndex) {
|
|
5546
|
-
|
|
5797
|
+
$xeTable.setAllCheckboxRow(false);
|
|
5547
5798
|
const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
|
|
5548
|
-
|
|
5549
|
-
|
|
5799
|
+
$xeTable.$nextTick(() => {
|
|
5800
|
+
handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
|
|
5801
|
+
});
|
|
5802
|
+
$xeTable.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
|
|
5550
5803
|
return;
|
|
5551
5804
|
}
|
|
5552
5805
|
}
|
|
5553
5806
|
}
|
|
5554
5807
|
if (!checkMethod || checkMethod({ row })) {
|
|
5555
|
-
|
|
5556
|
-
|
|
5557
|
-
|
|
5558
|
-
records:
|
|
5559
|
-
reserves:
|
|
5560
|
-
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(),
|
|
5561
5814
|
checked
|
|
5562
5815
|
}, params), evnt);
|
|
5563
5816
|
}
|
|
@@ -5567,7 +5820,9 @@ const Methods = {
|
|
|
5567
5820
|
*/
|
|
5568
5821
|
toggleCheckboxRow(row) {
|
|
5569
5822
|
const $xeTable = this;
|
|
5570
|
-
const
|
|
5823
|
+
const internalData = $xeTable;
|
|
5824
|
+
const { selectCheckboxMaps } = internalData;
|
|
5825
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5571
5826
|
const { checkField } = checkboxOpts;
|
|
5572
5827
|
const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5573
5828
|
$xeTable.handleBatchSelectRows([row], checked, true);
|
|
@@ -5588,9 +5843,7 @@ const Methods = {
|
|
|
5588
5843
|
const reactData = $xeTable;
|
|
5589
5844
|
const internalData = $xeTable;
|
|
5590
5845
|
const { treeConfig } = props;
|
|
5591
|
-
const { selectCheckboxMaps,
|
|
5592
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5593
|
-
const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
|
|
5846
|
+
const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5594
5847
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5595
5848
|
const { transform, mapChildrenField } = treeOpts;
|
|
5596
5849
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
@@ -5602,10 +5855,11 @@ const Methods = {
|
|
|
5602
5855
|
}
|
|
5603
5856
|
// 树结构
|
|
5604
5857
|
if (treeConfig) {
|
|
5858
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5605
5859
|
const childRowMaps = {};
|
|
5606
5860
|
const childRowList = [];
|
|
5607
5861
|
XEUtils.eachTree(afterTreeFullData, (row) => {
|
|
5608
|
-
const rowid =
|
|
5862
|
+
const rowid = handleGetRowId(row);
|
|
5609
5863
|
const childList = row[transform ? mapChildrenField : childrenField];
|
|
5610
5864
|
if (childList && childList.length && !childRowMaps[rowid]) {
|
|
5611
5865
|
childRowMaps[rowid] = 1;
|
|
@@ -5621,13 +5875,13 @@ const Methods = {
|
|
|
5621
5875
|
let vLen = 0; // 有效行
|
|
5622
5876
|
childList.forEach(checkMethod
|
|
5623
5877
|
? (item) => {
|
|
5624
|
-
const childRowid =
|
|
5625
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5878
|
+
const childRowid = handleGetRowId(item);
|
|
5879
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5626
5880
|
if (checkMethod({ row: item })) {
|
|
5627
5881
|
if (isSelect) {
|
|
5628
5882
|
sLen++;
|
|
5629
5883
|
}
|
|
5630
|
-
else if (
|
|
5884
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5631
5885
|
hLen++;
|
|
5632
5886
|
}
|
|
5633
5887
|
vLen++;
|
|
@@ -5636,18 +5890,18 @@ const Methods = {
|
|
|
5636
5890
|
if (isSelect) {
|
|
5637
5891
|
sLen++;
|
|
5638
5892
|
}
|
|
5639
|
-
else if (
|
|
5893
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5640
5894
|
hLen++;
|
|
5641
5895
|
}
|
|
5642
5896
|
}
|
|
5643
5897
|
}
|
|
5644
5898
|
: item => {
|
|
5645
|
-
const childRowid =
|
|
5646
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5899
|
+
const childRowid = handleGetRowId(item);
|
|
5900
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5647
5901
|
if (isSelect) {
|
|
5648
5902
|
sLen++;
|
|
5649
5903
|
}
|
|
5650
|
-
else if (
|
|
5904
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5651
5905
|
hLen++;
|
|
5652
5906
|
}
|
|
5653
5907
|
vLen++;
|
|
@@ -5659,31 +5913,30 @@ const Methods = {
|
|
|
5659
5913
|
}
|
|
5660
5914
|
if (isSelected) {
|
|
5661
5915
|
if (!checkField) {
|
|
5662
|
-
|
|
5916
|
+
selectCheckboxMaps[rowid] = row;
|
|
5663
5917
|
}
|
|
5664
|
-
if (
|
|
5665
|
-
delete
|
|
5918
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
5919
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5666
5920
|
}
|
|
5667
5921
|
}
|
|
5668
5922
|
else {
|
|
5669
5923
|
if (!checkField) {
|
|
5670
|
-
if (
|
|
5671
|
-
delete
|
|
5924
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5925
|
+
delete selectCheckboxMaps[rowid];
|
|
5672
5926
|
}
|
|
5673
5927
|
}
|
|
5674
5928
|
if (halfSelect) {
|
|
5675
|
-
|
|
5929
|
+
treeIndeterminateRowMaps[rowid] = row;
|
|
5676
5930
|
}
|
|
5677
5931
|
else {
|
|
5678
|
-
if (
|
|
5679
|
-
delete
|
|
5932
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
5933
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5680
5934
|
}
|
|
5681
5935
|
}
|
|
5682
5936
|
}
|
|
5683
5937
|
});
|
|
5684
5938
|
}
|
|
5685
|
-
reactData.
|
|
5686
|
-
reactData.treeIndeterminateMaps = halfRowMaps;
|
|
5939
|
+
reactData.updateCheckboxFlag++;
|
|
5687
5940
|
},
|
|
5688
5941
|
updateAllCheckboxStatus() {
|
|
5689
5942
|
const $xeTable = this;
|
|
@@ -5691,23 +5944,23 @@ const Methods = {
|
|
|
5691
5944
|
const reactData = $xeTable;
|
|
5692
5945
|
const internalData = $xeTable;
|
|
5693
5946
|
const { treeConfig } = props;
|
|
5694
|
-
const { selectCheckboxMaps,
|
|
5947
|
+
const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5695
5948
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5696
5949
|
const { checkField, checkMethod, showReserveStatus } = checkboxOpts;
|
|
5697
|
-
const {
|
|
5950
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5698
5951
|
let sLen = 0; // 已选
|
|
5699
5952
|
let hLen = 0; // 半选
|
|
5700
5953
|
let vLen = 0; // 有效行
|
|
5701
5954
|
const rootList = (treeConfig ? afterTreeFullData : afterFullData);
|
|
5702
5955
|
rootList.forEach(checkMethod
|
|
5703
5956
|
? row => {
|
|
5704
|
-
const childRowid =
|
|
5957
|
+
const childRowid = handleGetRowId(row);
|
|
5705
5958
|
const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
5706
5959
|
if (checkMethod({ row })) {
|
|
5707
5960
|
if (selected) {
|
|
5708
5961
|
sLen++;
|
|
5709
5962
|
}
|
|
5710
|
-
else if (
|
|
5963
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5711
5964
|
hLen++;
|
|
5712
5965
|
}
|
|
5713
5966
|
vLen++;
|
|
@@ -5716,18 +5969,18 @@ const Methods = {
|
|
|
5716
5969
|
if (selected) {
|
|
5717
5970
|
sLen++;
|
|
5718
5971
|
}
|
|
5719
|
-
else if (
|
|
5972
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5720
5973
|
hLen++;
|
|
5721
5974
|
}
|
|
5722
5975
|
}
|
|
5723
5976
|
}
|
|
5724
5977
|
: row => {
|
|
5725
|
-
const childRowid =
|
|
5978
|
+
const childRowid = handleGetRowId(row);
|
|
5726
5979
|
const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
5727
5980
|
if (selected) {
|
|
5728
5981
|
sLen++;
|
|
5729
5982
|
}
|
|
5730
|
-
else if (
|
|
5983
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5731
5984
|
hLen++;
|
|
5732
5985
|
}
|
|
5733
5986
|
vLen++;
|
|
@@ -5784,19 +6037,26 @@ const Methods = {
|
|
|
5784
6037
|
* 获取复选框保留选中的行
|
|
5785
6038
|
*/
|
|
5786
6039
|
getCheckboxReserveRecords(isFull) {
|
|
5787
|
-
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;
|
|
5788
6047
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
5789
6048
|
const reserveSelection = [];
|
|
5790
6049
|
if (checkboxOpts.reserve) {
|
|
6050
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5791
6051
|
const afterFullIdMaps = {};
|
|
5792
6052
|
if (treeConfig) {
|
|
5793
6053
|
XEUtils.eachTree(afterFullData, row => {
|
|
5794
|
-
afterFullIdMaps[
|
|
6054
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5795
6055
|
}, { children: childrenField });
|
|
5796
6056
|
}
|
|
5797
6057
|
else {
|
|
5798
6058
|
afterFullData.forEach((row) => {
|
|
5799
|
-
afterFullIdMaps[
|
|
6059
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5800
6060
|
});
|
|
5801
6061
|
}
|
|
5802
6062
|
XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
|
|
@@ -5837,9 +6097,9 @@ const Methods = {
|
|
|
5837
6097
|
handleCheckedAllCheckboxRow($xeTable, value);
|
|
5838
6098
|
if (evnt) {
|
|
5839
6099
|
$xeTable.dispatchEvent('checkbox-all', {
|
|
5840
|
-
records: $xeTable.getCheckboxRecords(),
|
|
5841
|
-
reserves: $xeTable.getCheckboxReserveRecords(),
|
|
5842
|
-
indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
|
|
6100
|
+
records: () => $xeTable.getCheckboxRecords(),
|
|
6101
|
+
reserves: () => $xeTable.getCheckboxReserveRecords(),
|
|
6102
|
+
indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
|
|
5843
6103
|
checked: value
|
|
5844
6104
|
}, evnt);
|
|
5845
6105
|
}
|
|
@@ -5871,9 +6131,17 @@ const Methods = {
|
|
|
5871
6131
|
* 清空行为不管是否被禁用还是保留记录,都将彻底清空选中状态
|
|
5872
6132
|
*/
|
|
5873
6133
|
clearCheckboxRow() {
|
|
5874
|
-
const
|
|
5875
|
-
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;
|
|
5876
6141
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6142
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6143
|
+
const { checkField, reserve } = checkboxOpts;
|
|
6144
|
+
// indeterminateField 仅支持读取
|
|
5877
6145
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
5878
6146
|
if (checkField) {
|
|
5879
6147
|
const handleClearChecked = (item) => {
|
|
@@ -5892,10 +6160,11 @@ const Methods = {
|
|
|
5892
6160
|
if (reserve) {
|
|
5893
6161
|
tableFullData.forEach((row) => this.handleCheckboxReserveRow(row, false));
|
|
5894
6162
|
}
|
|
5895
|
-
|
|
5896
|
-
|
|
5897
|
-
|
|
5898
|
-
|
|
6163
|
+
reactData.isAllSelected = false;
|
|
6164
|
+
reactData.isIndeterminate = false;
|
|
6165
|
+
internalData.selectCheckboxMaps = {};
|
|
6166
|
+
internalData.treeIndeterminateRowMaps = {};
|
|
6167
|
+
reactData.updateCheckboxFlag++;
|
|
5899
6168
|
return this.$nextTick();
|
|
5900
6169
|
},
|
|
5901
6170
|
/**
|
|
@@ -6092,10 +6361,12 @@ const Methods = {
|
|
|
6092
6361
|
},
|
|
6093
6362
|
triggerHeaderCellClickEvent(evnt, params) {
|
|
6094
6363
|
const $xeTable = this;
|
|
6364
|
+
const props = $xeTable;
|
|
6095
6365
|
const internalData = $xeTable;
|
|
6096
6366
|
const { _lastResizeTime } = internalData;
|
|
6097
6367
|
const sortOpts = $xeTable.computeSortOpts;
|
|
6098
6368
|
const columnOpts = $xeTable.computeColumnOpts;
|
|
6369
|
+
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
6099
6370
|
const { column } = params;
|
|
6100
6371
|
const cell = evnt.currentTarget;
|
|
6101
6372
|
const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
|
|
@@ -6105,7 +6376,7 @@ const Methods = {
|
|
|
6105
6376
|
$xeTable.triggerSortEvent(evnt, column, getNextSortOrder($xeTable, column));
|
|
6106
6377
|
}
|
|
6107
6378
|
$xeTable.dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
|
|
6108
|
-
if (columnOpts.isCurrent ||
|
|
6379
|
+
if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
|
|
6109
6380
|
$xeTable.triggerCurrentColumnEvent(evnt, params);
|
|
6110
6381
|
}
|
|
6111
6382
|
return $xeTable.$nextTick();
|
|
@@ -6121,13 +6392,23 @@ const Methods = {
|
|
|
6121
6392
|
* @param {ColumnInfo} fieldOrColumn 列配置
|
|
6122
6393
|
*/
|
|
6123
6394
|
setCurrentColumn(fieldOrColumn) {
|
|
6124
|
-
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);
|
|
6125
6402
|
if (column) {
|
|
6126
|
-
|
|
6127
|
-
|
|
6128
|
-
this.currentColumn = column;
|
|
6403
|
+
$xeTable.clearCurrentColumn();
|
|
6404
|
+
reactData.currentColumn = column;
|
|
6129
6405
|
}
|
|
6130
|
-
return
|
|
6406
|
+
return $xeTable.$nextTick().then(() => {
|
|
6407
|
+
// 更新状选中态
|
|
6408
|
+
if (isMouseSelected) {
|
|
6409
|
+
$xeTable.addCellSelectedClass();
|
|
6410
|
+
}
|
|
6411
|
+
});
|
|
6131
6412
|
},
|
|
6132
6413
|
/**
|
|
6133
6414
|
* 用于当前列,手动清空当前高亮的状态
|
|
@@ -6136,25 +6417,6 @@ const Methods = {
|
|
|
6136
6417
|
this.currentColumn = null;
|
|
6137
6418
|
return this.$nextTick();
|
|
6138
6419
|
},
|
|
6139
|
-
checkValidate(type) {
|
|
6140
|
-
if (this.triggerValidate) {
|
|
6141
|
-
return this.triggerValidate(type);
|
|
6142
|
-
}
|
|
6143
|
-
return this.$nextTick();
|
|
6144
|
-
},
|
|
6145
|
-
/**
|
|
6146
|
-
* 当单元格发生改变时
|
|
6147
|
-
* 如果存在规则,则校验
|
|
6148
|
-
*/
|
|
6149
|
-
handleChangeCell(evnt, params) {
|
|
6150
|
-
this.checkValidate('blur')
|
|
6151
|
-
.catch((e) => e)
|
|
6152
|
-
.then(() => {
|
|
6153
|
-
this.handleEdit(params, evnt)
|
|
6154
|
-
.then(() => this.checkValidate('change'))
|
|
6155
|
-
.catch((e) => e);
|
|
6156
|
-
});
|
|
6157
|
-
},
|
|
6158
6420
|
/**
|
|
6159
6421
|
* 列点击事件
|
|
6160
6422
|
* 如果是单击模式,则激活为编辑状态
|
|
@@ -6164,7 +6426,7 @@ const Methods = {
|
|
|
6164
6426
|
const $xeTable = this;
|
|
6165
6427
|
const props = $xeTable;
|
|
6166
6428
|
const reactData = $xeTable;
|
|
6167
|
-
const { highlightCurrentRow, editConfig } = props;
|
|
6429
|
+
const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props;
|
|
6168
6430
|
const { editStore, isDragResize } = reactData;
|
|
6169
6431
|
if (isDragResize) {
|
|
6170
6432
|
return;
|
|
@@ -6176,6 +6438,8 @@ const Methods = {
|
|
|
6176
6438
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6177
6439
|
const keyboardOpts = $xeTable.computeKeyboardOpts;
|
|
6178
6440
|
const rowOpts = $xeTable.computeRowOpts;
|
|
6441
|
+
const columnOpts = $xeTable.computeColumnOpts;
|
|
6442
|
+
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
6179
6443
|
const { actived, focused } = editStore;
|
|
6180
6444
|
const { row, column } = params;
|
|
6181
6445
|
const { type, treeNode } = column;
|
|
@@ -6191,11 +6455,11 @@ const Methods = {
|
|
|
6191
6455
|
if (!triggerCheckbox && !triggerRadio) {
|
|
6192
6456
|
// 如果是展开行
|
|
6193
6457
|
if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
|
|
6194
|
-
|
|
6458
|
+
$xeTable.triggerRowExpandEvent(evnt, params);
|
|
6195
6459
|
}
|
|
6196
6460
|
// 如果是树形表格
|
|
6197
6461
|
if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
|
|
6198
|
-
|
|
6462
|
+
$xeTable.triggerTreeExpandEvent(evnt, params);
|
|
6199
6463
|
}
|
|
6200
6464
|
}
|
|
6201
6465
|
// 如果点击了树节点
|
|
@@ -6204,16 +6468,22 @@ const Methods = {
|
|
|
6204
6468
|
// 如果是高亮行
|
|
6205
6469
|
if (rowOpts.isCurrent || highlightCurrentRow) {
|
|
6206
6470
|
if (!triggerCheckbox && !triggerRadio) {
|
|
6207
|
-
|
|
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);
|
|
6208
6478
|
}
|
|
6209
6479
|
}
|
|
6210
6480
|
// 如果是单选框
|
|
6211
6481
|
if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
|
|
6212
|
-
|
|
6482
|
+
$xeTable.triggerRadioRowEvent(evnt, params);
|
|
6213
6483
|
}
|
|
6214
6484
|
// 如果是复选框
|
|
6215
6485
|
if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
|
|
6216
|
-
|
|
6486
|
+
$xeTable.handleToggleCheckRowEvent(evnt, params);
|
|
6217
6487
|
}
|
|
6218
6488
|
}
|
|
6219
6489
|
// 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
|
|
@@ -6225,16 +6495,16 @@ const Methods = {
|
|
|
6225
6495
|
}
|
|
6226
6496
|
if (editOpts.trigger === 'manual') {
|
|
6227
6497
|
if (actived.args && actived.row === row && column !== actived.column) {
|
|
6228
|
-
|
|
6498
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6229
6499
|
}
|
|
6230
6500
|
}
|
|
6231
6501
|
else if (!actived.args || row !== actived.row || column !== actived.column) {
|
|
6232
6502
|
if (editOpts.trigger === 'click') {
|
|
6233
|
-
|
|
6503
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6234
6504
|
}
|
|
6235
6505
|
else if (editOpts.trigger === 'dblclick') {
|
|
6236
6506
|
if (editOpts.mode === 'row' && actived.row === row) {
|
|
6237
|
-
|
|
6507
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6238
6508
|
}
|
|
6239
6509
|
}
|
|
6240
6510
|
}
|
|
@@ -6255,7 +6525,7 @@ const Methods = {
|
|
|
6255
6525
|
}
|
|
6256
6526
|
}
|
|
6257
6527
|
}
|
|
6258
|
-
|
|
6528
|
+
$xeTable.dispatchEvent('cell-click', params, evnt);
|
|
6259
6529
|
},
|
|
6260
6530
|
/**
|
|
6261
6531
|
* 列双击点击事件
|
|
@@ -6277,17 +6547,17 @@ const Methods = {
|
|
|
6277
6547
|
if (isEnableConf(editConfig) && editOpts.trigger === 'dblclick') {
|
|
6278
6548
|
if (!actived.args || evnt.currentTarget !== actived.args.cell) {
|
|
6279
6549
|
if (editOpts.mode === 'row') {
|
|
6280
|
-
|
|
6550
|
+
checkValidate($xeTable, 'blur')
|
|
6281
6551
|
.catch((e) => e)
|
|
6282
6552
|
.then(() => {
|
|
6283
6553
|
this.handleEdit(params, evnt)
|
|
6284
|
-
.then(() =>
|
|
6554
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
6285
6555
|
.catch((e) => e);
|
|
6286
6556
|
});
|
|
6287
6557
|
}
|
|
6288
6558
|
else if (editOpts.mode === 'cell') {
|
|
6289
6559
|
this.handleEdit(params, evnt)
|
|
6290
|
-
.then(() =>
|
|
6560
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
6291
6561
|
.catch((e) => e);
|
|
6292
6562
|
}
|
|
6293
6563
|
}
|
|
@@ -6473,14 +6743,16 @@ const Methods = {
|
|
|
6473
6743
|
const internalData = $xeTable;
|
|
6474
6744
|
const { treeConfig, dragConfig } = props;
|
|
6475
6745
|
const rowDragOpts = $xeTable.computeRowDragOpts;
|
|
6476
|
-
const { fullAllDataRowIdData } = internalData;
|
|
6746
|
+
const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData;
|
|
6477
6747
|
const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
|
|
6478
6748
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
6479
6749
|
const { transform, rowField, mapChildrenField, parentField } = treeOpts;
|
|
6480
6750
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6481
|
-
const { afterFullData, tableFullData } = internalData;
|
|
6482
6751
|
const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
|
|
6483
6752
|
const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
|
|
6753
|
+
const errRest = {
|
|
6754
|
+
status: false
|
|
6755
|
+
};
|
|
6484
6756
|
if (prevDragRow && dragRow) {
|
|
6485
6757
|
// 判断是否有拖动
|
|
6486
6758
|
if (prevDragRow !== dragRow) {
|
|
@@ -6495,7 +6767,7 @@ const Methods = {
|
|
|
6495
6767
|
const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
|
|
6496
6768
|
return Promise.resolve(dEndMethod ? dEndMethod(dragParams) : true).then((status) => {
|
|
6497
6769
|
if (!status) {
|
|
6498
|
-
return;
|
|
6770
|
+
return errRest;
|
|
6499
6771
|
}
|
|
6500
6772
|
let oafIndex = -1;
|
|
6501
6773
|
let nafIndex = -1;
|
|
@@ -6520,12 +6792,12 @@ const Methods = {
|
|
|
6520
6792
|
if (isPeerDrag && !isCrossDrag) {
|
|
6521
6793
|
if (oldRest.row[parentField] !== newRest.row[parentField]) {
|
|
6522
6794
|
// 非同级
|
|
6523
|
-
return;
|
|
6795
|
+
return errRest;
|
|
6524
6796
|
}
|
|
6525
6797
|
}
|
|
6526
6798
|
else {
|
|
6527
6799
|
if (!isCrossDrag) {
|
|
6528
|
-
return;
|
|
6800
|
+
return errRest;
|
|
6529
6801
|
}
|
|
6530
6802
|
if (oldAllMaps[newRowid]) {
|
|
6531
6803
|
isSelfToChildStatus = true;
|
|
@@ -6536,7 +6808,7 @@ const Methods = {
|
|
|
6536
6808
|
content: getI18n('vxe.error.treeDragChild')
|
|
6537
6809
|
});
|
|
6538
6810
|
}
|
|
6539
|
-
return;
|
|
6811
|
+
return errRest;
|
|
6540
6812
|
}
|
|
6541
6813
|
}
|
|
6542
6814
|
}
|
|
@@ -6544,13 +6816,13 @@ const Methods = {
|
|
|
6544
6816
|
else if (oldLevel) {
|
|
6545
6817
|
// 子到根
|
|
6546
6818
|
if (!isCrossDrag) {
|
|
6547
|
-
return;
|
|
6819
|
+
return errRest;
|
|
6548
6820
|
}
|
|
6549
6821
|
}
|
|
6550
6822
|
else if (newLevel) {
|
|
6551
6823
|
// 根到子
|
|
6552
6824
|
if (!isCrossDrag) {
|
|
6553
|
-
return;
|
|
6825
|
+
return errRest;
|
|
6554
6826
|
}
|
|
6555
6827
|
if (oldAllMaps[newRowid]) {
|
|
6556
6828
|
isSelfToChildStatus = true;
|
|
@@ -6561,7 +6833,7 @@ const Methods = {
|
|
|
6561
6833
|
content: getI18n('vxe.error.treeDragChild')
|
|
6562
6834
|
});
|
|
6563
6835
|
}
|
|
6564
|
-
return;
|
|
6836
|
+
return errRest;
|
|
6565
6837
|
}
|
|
6566
6838
|
}
|
|
6567
6839
|
}
|
|
@@ -6621,27 +6893,34 @@ const Methods = {
|
|
|
6621
6893
|
if (reactData.scrollYLoad) {
|
|
6622
6894
|
$xeTable.updateScrollYSpace();
|
|
6623
6895
|
}
|
|
6624
|
-
|
|
6896
|
+
if (evnt) {
|
|
6897
|
+
$xeTable.dispatchEvent('row-dragend', {
|
|
6898
|
+
oldRow: dragRow,
|
|
6899
|
+
newRow: prevDragRow,
|
|
6900
|
+
dragRow,
|
|
6901
|
+
dragPos: prevDragPos,
|
|
6902
|
+
dragToChild: isDragToChildFlag,
|
|
6903
|
+
offsetIndex: dragOffsetIndex,
|
|
6904
|
+
_index: {
|
|
6905
|
+
newIndex: nafIndex,
|
|
6906
|
+
oldIndex: oafIndex
|
|
6907
|
+
}
|
|
6908
|
+
}, evnt);
|
|
6909
|
+
}
|
|
6910
|
+
return $xeTable.$nextTick().then(() => {
|
|
6625
6911
|
$xeTable.updateCellAreas();
|
|
6626
6912
|
$xeTable.recalculate();
|
|
6913
|
+
}).then(() => {
|
|
6914
|
+
return {
|
|
6915
|
+
status: true
|
|
6916
|
+
};
|
|
6627
6917
|
});
|
|
6628
|
-
$xeTable.dispatchEvent('row-dragend', {
|
|
6629
|
-
oldRow: dragRow,
|
|
6630
|
-
newRow: prevDragRow,
|
|
6631
|
-
dragRow,
|
|
6632
|
-
dragPos: prevDragPos,
|
|
6633
|
-
dragToChild: isDragToChildFlag,
|
|
6634
|
-
offsetIndex: dragOffsetIndex,
|
|
6635
|
-
_index: {
|
|
6636
|
-
newIndex: nafIndex,
|
|
6637
|
-
oldIndex: oafIndex
|
|
6638
|
-
}
|
|
6639
|
-
}, evnt);
|
|
6640
6918
|
}).catch(() => {
|
|
6919
|
+
return errRest;
|
|
6641
6920
|
});
|
|
6642
6921
|
}
|
|
6643
6922
|
}
|
|
6644
|
-
return Promise.resolve();
|
|
6923
|
+
return Promise.resolve(errRest);
|
|
6645
6924
|
},
|
|
6646
6925
|
handleRowDragDragendEvent(evnt) {
|
|
6647
6926
|
const $xeTable = this;
|
|
@@ -6786,6 +7065,9 @@ const Methods = {
|
|
|
6786
7065
|
const { isPeerDrag, isCrossDrag, isSelfToChildDrag, isToChildDrag, dragEndMethod, dragToChildMethod } = columnDragOpts;
|
|
6787
7066
|
const { collectColumn } = internalData;
|
|
6788
7067
|
const dragOffsetIndex = prevDragPos === 'right' ? 1 : 0;
|
|
7068
|
+
const errRest = {
|
|
7069
|
+
status: false
|
|
7070
|
+
};
|
|
6789
7071
|
if (prevDragCol && dragCol) {
|
|
6790
7072
|
// 判断是否有拖动
|
|
6791
7073
|
if (prevDragCol !== dragCol) {
|
|
@@ -6802,7 +7084,7 @@ const Methods = {
|
|
|
6802
7084
|
const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
|
|
6803
7085
|
return Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then((status) => {
|
|
6804
7086
|
if (!status) {
|
|
6805
|
-
return;
|
|
7087
|
+
return errRest;
|
|
6806
7088
|
}
|
|
6807
7089
|
let oafIndex = -1;
|
|
6808
7090
|
let nafIndex = -1;
|
|
@@ -6816,12 +7098,12 @@ const Methods = {
|
|
|
6816
7098
|
if (isPeerDrag && !isCrossDrag) {
|
|
6817
7099
|
if (dragColumn.parentId !== newColumn.parentId) {
|
|
6818
7100
|
// 非同级
|
|
6819
|
-
return;
|
|
7101
|
+
return errRest;
|
|
6820
7102
|
}
|
|
6821
7103
|
}
|
|
6822
7104
|
else {
|
|
6823
7105
|
if (!isCrossDrag) {
|
|
6824
|
-
return;
|
|
7106
|
+
return errRest;
|
|
6825
7107
|
}
|
|
6826
7108
|
if (oldAllMaps[newColumn.id]) {
|
|
6827
7109
|
isSelfToChildStatus = true;
|
|
@@ -6832,7 +7114,7 @@ const Methods = {
|
|
|
6832
7114
|
content: getI18n('vxe.error.treeDragChild')
|
|
6833
7115
|
});
|
|
6834
7116
|
}
|
|
6835
|
-
return;
|
|
7117
|
+
return errRest;
|
|
6836
7118
|
}
|
|
6837
7119
|
}
|
|
6838
7120
|
}
|
|
@@ -6840,13 +7122,13 @@ const Methods = {
|
|
|
6840
7122
|
else if (dragColumn.parentId) {
|
|
6841
7123
|
// 子到根
|
|
6842
7124
|
if (!isCrossDrag) {
|
|
6843
|
-
return;
|
|
7125
|
+
return errRest;
|
|
6844
7126
|
}
|
|
6845
7127
|
}
|
|
6846
7128
|
else if (newColumn.parentId) {
|
|
6847
7129
|
// 根到子
|
|
6848
7130
|
if (!isCrossDrag) {
|
|
6849
|
-
return;
|
|
7131
|
+
return errRest;
|
|
6850
7132
|
}
|
|
6851
7133
|
if (oldAllMaps[newColumn.id]) {
|
|
6852
7134
|
isSelfToChildStatus = true;
|
|
@@ -6857,7 +7139,7 @@ const Methods = {
|
|
|
6857
7139
|
content: getI18n('vxe.error.treeDragChild')
|
|
6858
7140
|
});
|
|
6859
7141
|
}
|
|
6860
|
-
return;
|
|
7142
|
+
return errRest;
|
|
6861
7143
|
}
|
|
6862
7144
|
}
|
|
6863
7145
|
}
|
|
@@ -6918,26 +7200,32 @@ const Methods = {
|
|
|
6918
7200
|
$xeTable.clearCopyCellArea();
|
|
6919
7201
|
}
|
|
6920
7202
|
}
|
|
6921
|
-
|
|
6922
|
-
|
|
6923
|
-
|
|
6924
|
-
|
|
6925
|
-
|
|
6926
|
-
|
|
6927
|
-
|
|
6928
|
-
|
|
6929
|
-
|
|
6930
|
-
|
|
6931
|
-
|
|
6932
|
-
|
|
7203
|
+
if (evnt) {
|
|
7204
|
+
$xeTable.dispatchEvent('column-dragend', {
|
|
7205
|
+
oldColumn: dragColumn,
|
|
7206
|
+
newColumn,
|
|
7207
|
+
dragColumn,
|
|
7208
|
+
dragPos: prevDragPos,
|
|
7209
|
+
dragToChild: isDragToChildFlag,
|
|
7210
|
+
offsetIndex: dragOffsetIndex,
|
|
7211
|
+
_index: {
|
|
7212
|
+
newIndex: nafIndex,
|
|
7213
|
+
oldIndex: oafIndex
|
|
7214
|
+
}
|
|
7215
|
+
}, evnt);
|
|
7216
|
+
}
|
|
6933
7217
|
if (isSyncColumn) {
|
|
6934
7218
|
$xeTable.handleColDragSwapColumn();
|
|
6935
7219
|
}
|
|
7220
|
+
return {
|
|
7221
|
+
status: true
|
|
7222
|
+
};
|
|
6936
7223
|
}).catch(() => {
|
|
7224
|
+
return errRest;
|
|
6937
7225
|
});
|
|
6938
7226
|
}
|
|
6939
7227
|
}
|
|
6940
|
-
return Promise.resolve();
|
|
7228
|
+
return Promise.resolve(errRest);
|
|
6941
7229
|
},
|
|
6942
7230
|
handleHeaderCellDragDragendEvent(evnt) {
|
|
6943
7231
|
const $xeTable = this;
|
|
@@ -7063,48 +7351,52 @@ const Methods = {
|
|
|
7063
7351
|
setPendingRow(rows, status) {
|
|
7064
7352
|
const $xeTable = this;
|
|
7065
7353
|
const reactData = $xeTable;
|
|
7066
|
-
const
|
|
7354
|
+
const internalData = $xeTable;
|
|
7355
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7356
|
+
const { pendingRowMaps } = internalData;
|
|
7067
7357
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7068
7358
|
rows = [rows];
|
|
7069
7359
|
}
|
|
7070
7360
|
if (status) {
|
|
7071
7361
|
rows.forEach((row) => {
|
|
7072
|
-
const rowid =
|
|
7073
|
-
if (rowid && !
|
|
7074
|
-
|
|
7362
|
+
const rowid = handleGetRowId(row);
|
|
7363
|
+
if (rowid && !pendingRowMaps[rowid]) {
|
|
7364
|
+
pendingRowMaps[rowid] = row;
|
|
7075
7365
|
}
|
|
7076
7366
|
});
|
|
7077
7367
|
}
|
|
7078
7368
|
else {
|
|
7079
7369
|
rows.forEach((row) => {
|
|
7080
|
-
const rowid =
|
|
7081
|
-
if (rowid &&
|
|
7082
|
-
delete
|
|
7370
|
+
const rowid = handleGetRowId(row);
|
|
7371
|
+
if (rowid && pendingRowMaps[rowid]) {
|
|
7372
|
+
delete pendingRowMaps[rowid];
|
|
7083
7373
|
}
|
|
7084
7374
|
});
|
|
7085
7375
|
}
|
|
7086
|
-
reactData.
|
|
7376
|
+
reactData.pendingRowFlag++;
|
|
7087
7377
|
return $xeTable.$nextTick();
|
|
7088
7378
|
},
|
|
7089
7379
|
togglePendingRow(rows) {
|
|
7090
7380
|
const $xeTable = this;
|
|
7091
7381
|
const reactData = $xeTable;
|
|
7092
|
-
const
|
|
7382
|
+
const internalData = $xeTable;
|
|
7383
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7384
|
+
const { pendingRowMaps } = internalData;
|
|
7093
7385
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7094
7386
|
rows = [rows];
|
|
7095
7387
|
}
|
|
7096
7388
|
rows.forEach((row) => {
|
|
7097
|
-
const rowid =
|
|
7389
|
+
const rowid = handleGetRowId(row);
|
|
7098
7390
|
if (rowid) {
|
|
7099
|
-
if (
|
|
7100
|
-
delete
|
|
7391
|
+
if (pendingRowMaps[rowid]) {
|
|
7392
|
+
delete pendingRowMaps[rowid];
|
|
7101
7393
|
}
|
|
7102
7394
|
else {
|
|
7103
|
-
|
|
7395
|
+
pendingRowMaps[rowid] = row;
|
|
7104
7396
|
}
|
|
7105
7397
|
}
|
|
7106
7398
|
});
|
|
7107
|
-
reactData.
|
|
7399
|
+
reactData.pendingRowFlag++;
|
|
7108
7400
|
return $xeTable.$nextTick();
|
|
7109
7401
|
},
|
|
7110
7402
|
hasPendingByRow(row) {
|
|
@@ -7120,10 +7412,8 @@ const Methods = {
|
|
|
7120
7412
|
},
|
|
7121
7413
|
getPendingRecords() {
|
|
7122
7414
|
const $xeTable = this;
|
|
7123
|
-
const reactData = $xeTable;
|
|
7124
7415
|
const internalData = $xeTable;
|
|
7125
|
-
const { pendingRowMaps } =
|
|
7126
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7416
|
+
const { fullAllDataRowIdData, pendingRowMaps } = internalData;
|
|
7127
7417
|
const insertRecords = [];
|
|
7128
7418
|
XEUtils.each(pendingRowMaps, (row, rowid) => {
|
|
7129
7419
|
if (fullAllDataRowIdData[rowid]) {
|
|
@@ -7133,8 +7423,12 @@ const Methods = {
|
|
|
7133
7423
|
return insertRecords;
|
|
7134
7424
|
},
|
|
7135
7425
|
clearPendingRow() {
|
|
7136
|
-
|
|
7137
|
-
|
|
7426
|
+
const $xeTable = this;
|
|
7427
|
+
const reactData = $xeTable;
|
|
7428
|
+
const internalData = $xeTable;
|
|
7429
|
+
internalData.pendingRowMaps = {};
|
|
7430
|
+
reactData.pendingRowFlag++;
|
|
7431
|
+
return $xeTable.$nextTick();
|
|
7138
7432
|
},
|
|
7139
7433
|
sort(sortConfs, sortOrder) {
|
|
7140
7434
|
const $xeTable = this;
|
|
@@ -7285,7 +7579,9 @@ const Methods = {
|
|
|
7285
7579
|
* @param {Event} evnt 事件
|
|
7286
7580
|
*/
|
|
7287
7581
|
closeFilter() {
|
|
7288
|
-
const
|
|
7582
|
+
const $xeTable = this;
|
|
7583
|
+
const reactData = $xeTable;
|
|
7584
|
+
const { filterStore } = reactData;
|
|
7289
7585
|
const { column, visible } = filterStore;
|
|
7290
7586
|
Object.assign(filterStore, {
|
|
7291
7587
|
isAllSelected: false,
|
|
@@ -7294,9 +7590,15 @@ const Methods = {
|
|
|
7294
7590
|
visible: false
|
|
7295
7591
|
});
|
|
7296
7592
|
if (visible) {
|
|
7297
|
-
|
|
7593
|
+
$xeTable.dispatchEvent('filter-visible', {
|
|
7594
|
+
column,
|
|
7595
|
+
field: column.field,
|
|
7596
|
+
property: column.field,
|
|
7597
|
+
filterList: () => $xeTable.getCheckedFilters(),
|
|
7598
|
+
visible: false
|
|
7599
|
+
}, null);
|
|
7298
7600
|
}
|
|
7299
|
-
return
|
|
7601
|
+
return $xeTable.$nextTick();
|
|
7300
7602
|
},
|
|
7301
7603
|
/**
|
|
7302
7604
|
* 判断指定列是否为筛选状态,如果为空则判断所有列
|
|
@@ -7327,17 +7629,16 @@ const Methods = {
|
|
|
7327
7629
|
const $xeTable = this;
|
|
7328
7630
|
const reactData = $xeTable;
|
|
7329
7631
|
const internalData = $xeTable;
|
|
7330
|
-
const
|
|
7331
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7632
|
+
const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
|
|
7332
7633
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7333
7634
|
const { lazy } = expandOpts;
|
|
7334
7635
|
const rowid = getRowid($xeTable, row);
|
|
7335
7636
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7336
7637
|
if (lazy && rowRest) {
|
|
7337
7638
|
rowRest.expandLoaded = false;
|
|
7338
|
-
delete
|
|
7639
|
+
delete rowExpandLazyLoadedMaps[rowid];
|
|
7339
7640
|
}
|
|
7340
|
-
reactData.
|
|
7641
|
+
reactData.rowExpandedFlag++;
|
|
7341
7642
|
return $xeTable.$nextTick();
|
|
7342
7643
|
},
|
|
7343
7644
|
/**
|
|
@@ -7345,14 +7646,17 @@ const Methods = {
|
|
|
7345
7646
|
* @param {Row} row 行对象
|
|
7346
7647
|
*/
|
|
7347
7648
|
reloadRowExpand(row) {
|
|
7348
|
-
const
|
|
7649
|
+
const $xeTable = this;
|
|
7650
|
+
const internalData = $xeTable;
|
|
7651
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
7652
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7349
7653
|
const { lazy } = expandOpts;
|
|
7350
7654
|
const rowid = getRowid(this, row);
|
|
7351
7655
|
if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
|
|
7352
|
-
|
|
7353
|
-
.then(() =>
|
|
7656
|
+
$xeTable.clearRowExpandLoaded(row)
|
|
7657
|
+
.then(() => handleAsyncRowExpand($xeTable, row));
|
|
7354
7658
|
}
|
|
7355
|
-
return
|
|
7659
|
+
return $xeTable.$nextTick();
|
|
7356
7660
|
},
|
|
7357
7661
|
reloadExpandContent(row) {
|
|
7358
7662
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7365,20 +7669,33 @@ const Methods = {
|
|
|
7365
7669
|
* 展开行事件
|
|
7366
7670
|
*/
|
|
7367
7671
|
triggerRowExpandEvent(evnt, params) {
|
|
7368
|
-
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;
|
|
7369
7678
|
const { row } = params;
|
|
7370
7679
|
const { lazy, trigger } = expandOpts;
|
|
7371
7680
|
if (trigger === 'manual') {
|
|
7372
7681
|
return;
|
|
7373
7682
|
}
|
|
7374
7683
|
evnt.stopPropagation();
|
|
7375
|
-
const rowid = getRowid(
|
|
7684
|
+
const rowid = getRowid($xeTable, row);
|
|
7376
7685
|
if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
|
|
7377
|
-
const expanded =
|
|
7378
|
-
const columnIndex =
|
|
7379
|
-
const $columnIndex =
|
|
7380
|
-
|
|
7381
|
-
|
|
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);
|
|
7382
7699
|
}
|
|
7383
7700
|
},
|
|
7384
7701
|
/**
|
|
@@ -7424,48 +7741,6 @@ const Methods = {
|
|
|
7424
7741
|
}
|
|
7425
7742
|
return this.setRowExpand(expandedRows, expanded);
|
|
7426
7743
|
},
|
|
7427
|
-
handleAsyncRowExpand(row) {
|
|
7428
|
-
const $xeTable = this;
|
|
7429
|
-
const reactData = $xeTable;
|
|
7430
|
-
const internalData = $xeTable;
|
|
7431
|
-
return new Promise(resolve => {
|
|
7432
|
-
const { expandOpts } = this;
|
|
7433
|
-
const { loadMethod } = expandOpts;
|
|
7434
|
-
if (loadMethod) {
|
|
7435
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7436
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7437
|
-
const rowid = getRowid($xeTable, row);
|
|
7438
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7439
|
-
rExpandLazyLoadedMaps[rowid] = row;
|
|
7440
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7441
|
-
loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
|
|
7442
|
-
const rExpandedMaps = Object.assign({}, reactData.rowExpandedMaps);
|
|
7443
|
-
if (rowRest) {
|
|
7444
|
-
rowRest.expandLoaded = true;
|
|
7445
|
-
}
|
|
7446
|
-
rExpandedMaps[rowid] = row;
|
|
7447
|
-
reactData.rowExpandedMaps = rExpandedMaps;
|
|
7448
|
-
}).catch(() => {
|
|
7449
|
-
if (rowRest) {
|
|
7450
|
-
rowRest.expandLoaded = false;
|
|
7451
|
-
}
|
|
7452
|
-
}).finally(() => {
|
|
7453
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7454
|
-
if (rExpandLazyLoadedMaps[rowid]) {
|
|
7455
|
-
delete rExpandLazyLoadedMaps[rowid];
|
|
7456
|
-
}
|
|
7457
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7458
|
-
$xeTable.$nextTick()
|
|
7459
|
-
.then(() => $xeTable.recalculate())
|
|
7460
|
-
.then(() => $xeTable.updateCellAreas())
|
|
7461
|
-
.then(() => resolve());
|
|
7462
|
-
});
|
|
7463
|
-
}
|
|
7464
|
-
else {
|
|
7465
|
-
resolve();
|
|
7466
|
-
}
|
|
7467
|
-
});
|
|
7468
|
-
},
|
|
7469
7744
|
/**
|
|
7470
7745
|
* 设置展开行,二个参数设置这一行展开与否
|
|
7471
7746
|
* 支持单行
|
|
@@ -7475,8 +7750,12 @@ const Methods = {
|
|
|
7475
7750
|
*/
|
|
7476
7751
|
setRowExpand(rows, expanded) {
|
|
7477
7752
|
const $xeTable = this;
|
|
7478
|
-
const
|
|
7479
|
-
|
|
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;
|
|
7480
7759
|
const { reserve, lazy, accordion, toggleMethod } = expandOpts;
|
|
7481
7760
|
const lazyRests = [];
|
|
7482
7761
|
const columnIndex = $xeTable.getColumnIndex(expandColumn);
|
|
@@ -7487,30 +7766,31 @@ const Methods = {
|
|
|
7487
7766
|
}
|
|
7488
7767
|
if (accordion) {
|
|
7489
7768
|
// 只能同时展开一个
|
|
7490
|
-
|
|
7769
|
+
rowExpandedMaps = {};
|
|
7770
|
+
internalData.rowExpandedMaps = rowExpandedMaps;
|
|
7491
7771
|
rows = rows.slice(rows.length - 1, rows.length);
|
|
7492
7772
|
}
|
|
7493
|
-
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;
|
|
7494
7774
|
if (expanded) {
|
|
7495
7775
|
validRows.forEach((row) => {
|
|
7496
|
-
const rowid =
|
|
7497
|
-
if (!
|
|
7776
|
+
const rowid = handleGetRowId(row);
|
|
7777
|
+
if (!rowExpandedMaps[rowid]) {
|
|
7498
7778
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7499
7779
|
const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid];
|
|
7500
7780
|
if (isLoad) {
|
|
7501
|
-
lazyRests.push(
|
|
7781
|
+
lazyRests.push(handleAsyncRowExpand($xeTable, row));
|
|
7502
7782
|
}
|
|
7503
7783
|
else {
|
|
7504
|
-
|
|
7784
|
+
rowExpandedMaps[rowid] = row;
|
|
7505
7785
|
}
|
|
7506
7786
|
}
|
|
7507
7787
|
});
|
|
7508
7788
|
}
|
|
7509
7789
|
else {
|
|
7510
7790
|
validRows.forEach((item) => {
|
|
7511
|
-
const rowid =
|
|
7512
|
-
if (
|
|
7513
|
-
delete
|
|
7791
|
+
const rowid = handleGetRowId(item);
|
|
7792
|
+
if (rowExpandedMaps[rowid]) {
|
|
7793
|
+
delete rowExpandedMaps[rowid];
|
|
7514
7794
|
}
|
|
7515
7795
|
});
|
|
7516
7796
|
}
|
|
@@ -7518,7 +7798,7 @@ const Methods = {
|
|
|
7518
7798
|
validRows.forEach((row) => handleRowExpandReserve($xeTable, row, expanded));
|
|
7519
7799
|
}
|
|
7520
7800
|
}
|
|
7521
|
-
|
|
7801
|
+
reactData.rowExpandedFlag++;
|
|
7522
7802
|
return Promise.all(lazyRests)
|
|
7523
7803
|
.then(() => $xeTable.$nextTick())
|
|
7524
7804
|
.then(() => $xeTable.recalculate(true))
|
|
@@ -7534,9 +7814,13 @@ const Methods = {
|
|
|
7534
7814
|
* @param {Row} row 行对象
|
|
7535
7815
|
*/
|
|
7536
7816
|
isRowExpandByRow(row) {
|
|
7537
|
-
const
|
|
7817
|
+
const $xeTable = this;
|
|
7818
|
+
const reactData = $xeTable;
|
|
7819
|
+
const internalData = $xeTable;
|
|
7820
|
+
const { rowExpandedFlag } = reactData;
|
|
7821
|
+
const { rowExpandedMaps } = internalData;
|
|
7538
7822
|
const rowid = getRowid(this, row);
|
|
7539
|
-
return !!rowExpandedMaps[rowid];
|
|
7823
|
+
return !!rowExpandedFlag && !!rowExpandedMaps[rowid];
|
|
7540
7824
|
},
|
|
7541
7825
|
isExpandByRow(row) {
|
|
7542
7826
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7556,7 +7840,8 @@ const Methods = {
|
|
|
7556
7840
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7557
7841
|
const { reserve } = expandOpts;
|
|
7558
7842
|
const expList = $xeTable.getRowExpandRecords();
|
|
7559
|
-
|
|
7843
|
+
internalData.rowExpandedMaps = {};
|
|
7844
|
+
reactData.rowExpandedFlag++;
|
|
7560
7845
|
if (reserve) {
|
|
7561
7846
|
tableFullData.forEach((row) => handleRowExpandReserve($xeTable, row, false));
|
|
7562
7847
|
}
|
|
@@ -7576,8 +7861,10 @@ const Methods = {
|
|
|
7576
7861
|
return this.$nextTick();
|
|
7577
7862
|
},
|
|
7578
7863
|
getRowExpandRecords() {
|
|
7864
|
+
const $xeTable = this;
|
|
7865
|
+
const internalData = $xeTable;
|
|
7579
7866
|
const rest = [];
|
|
7580
|
-
XEUtils.each(
|
|
7867
|
+
XEUtils.each(internalData.rowExpandedMaps, item => {
|
|
7581
7868
|
if (item) {
|
|
7582
7869
|
rest.push(item);
|
|
7583
7870
|
}
|
|
@@ -7585,8 +7872,10 @@ const Methods = {
|
|
|
7585
7872
|
return rest;
|
|
7586
7873
|
},
|
|
7587
7874
|
getTreeExpandRecords() {
|
|
7875
|
+
const $xeTable = this;
|
|
7876
|
+
const internalData = $xeTable;
|
|
7588
7877
|
const rest = [];
|
|
7589
|
-
XEUtils.each(
|
|
7878
|
+
XEUtils.each(internalData.treeExpandedMaps, item => {
|
|
7590
7879
|
if (item) {
|
|
7591
7880
|
rest.push(item);
|
|
7592
7881
|
}
|
|
@@ -7619,12 +7908,10 @@ const Methods = {
|
|
|
7619
7908
|
const $xeTable = this;
|
|
7620
7909
|
const reactData = $xeTable;
|
|
7621
7910
|
const internalData = $xeTable;
|
|
7622
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7911
|
+
const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
|
|
7623
7912
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
7624
7913
|
const { transform } = treeOpts;
|
|
7625
|
-
let tExpandedMaps = {};
|
|
7626
7914
|
if (rows) {
|
|
7627
|
-
tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
|
|
7628
7915
|
if (!XEUtils.isArray(rows)) {
|
|
7629
7916
|
rows = [rows];
|
|
7630
7917
|
}
|
|
@@ -7633,8 +7920,8 @@ const Methods = {
|
|
|
7633
7920
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7634
7921
|
if (rowRest) {
|
|
7635
7922
|
rowRest.treeLoaded = false;
|
|
7636
|
-
if (
|
|
7637
|
-
delete
|
|
7923
|
+
if (treeExpandedMaps[rowid]) {
|
|
7924
|
+
delete treeExpandedMaps[rowid];
|
|
7638
7925
|
}
|
|
7639
7926
|
}
|
|
7640
7927
|
});
|
|
@@ -7644,7 +7931,8 @@ const Methods = {
|
|
|
7644
7931
|
rowRest.treeLoaded = false;
|
|
7645
7932
|
});
|
|
7646
7933
|
}
|
|
7647
|
-
|
|
7934
|
+
internalData.treeExpandedMaps = {};
|
|
7935
|
+
reactData.treeExpandedFlag++;
|
|
7648
7936
|
if (transform) {
|
|
7649
7937
|
handleVirtualTreeToList($xeTable);
|
|
7650
7938
|
return $xeTable.handleTableData();
|
|
@@ -7657,36 +7945,42 @@ const Methods = {
|
|
|
7657
7945
|
*/
|
|
7658
7946
|
reloadTreeExpand(row) {
|
|
7659
7947
|
const $xeTable = this;
|
|
7660
|
-
const
|
|
7948
|
+
const internalData = $xeTable;
|
|
7949
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
7950
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7661
7951
|
const { transform, lazy } = treeOpts;
|
|
7662
7952
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
7663
|
-
const rowid = getRowid(
|
|
7953
|
+
const rowid = getRowid($xeTable, row);
|
|
7664
7954
|
if (lazy && row[hasChildField] && !treeExpandLazyLoadedMaps[rowid]) {
|
|
7665
|
-
return
|
|
7666
|
-
return
|
|
7955
|
+
return $xeTable.clearTreeExpandLoaded(row).then(() => {
|
|
7956
|
+
return handleAsyncTreeExpandChilds($xeTable, row);
|
|
7667
7957
|
}).then(() => {
|
|
7668
7958
|
if (transform) {
|
|
7669
7959
|
handleVirtualTreeToList($xeTable);
|
|
7670
|
-
return
|
|
7960
|
+
return $xeTable.handleTableData();
|
|
7671
7961
|
}
|
|
7672
7962
|
}).then(() => {
|
|
7673
|
-
return
|
|
7963
|
+
return $xeTable.recalculate();
|
|
7674
7964
|
});
|
|
7675
7965
|
}
|
|
7676
|
-
return
|
|
7966
|
+
return $xeTable.$nextTick();
|
|
7677
7967
|
},
|
|
7678
7968
|
reloadTreeChilds(row) {
|
|
7969
|
+
const $xeTable = this;
|
|
7679
7970
|
if (process.env.NODE_ENV === 'development') {
|
|
7680
7971
|
warnLog('vxe.error.delFunc', ['reloadTreeChilds', 'reloadTreeExpand']);
|
|
7681
7972
|
}
|
|
7682
7973
|
// 即将废弃
|
|
7683
|
-
return
|
|
7974
|
+
return $xeTable.reloadTreeExpand(row);
|
|
7684
7975
|
},
|
|
7685
7976
|
/**
|
|
7686
7977
|
* 展开树节点事件
|
|
7687
7978
|
*/
|
|
7688
7979
|
triggerTreeExpandEvent(evnt, params) {
|
|
7689
|
-
const
|
|
7980
|
+
const $xeTable = this;
|
|
7981
|
+
const internalData = $xeTable;
|
|
7982
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
7983
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7690
7984
|
const { row, column } = params;
|
|
7691
7985
|
const { lazy, trigger } = treeOpts;
|
|
7692
7986
|
if (trigger === 'manual') {
|
|
@@ -7695,11 +7989,11 @@ const Methods = {
|
|
|
7695
7989
|
evnt.stopPropagation();
|
|
7696
7990
|
const rowid = getRowid(this, row);
|
|
7697
7991
|
if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
|
|
7698
|
-
const expanded =
|
|
7699
|
-
const columnIndex =
|
|
7700
|
-
const $columnIndex =
|
|
7701
|
-
|
|
7702
|
-
|
|
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);
|
|
7703
7997
|
}
|
|
7704
7998
|
},
|
|
7705
7999
|
/**
|
|
@@ -7708,87 +8002,6 @@ const Methods = {
|
|
|
7708
8002
|
toggleTreeExpand(row) {
|
|
7709
8003
|
return this.setTreeExpand(row, !this.isTreeExpandByRow(row));
|
|
7710
8004
|
},
|
|
7711
|
-
/**
|
|
7712
|
-
* 处理默认展开树节点
|
|
7713
|
-
*/
|
|
7714
|
-
handleDefaultTreeExpand() {
|
|
7715
|
-
const { treeConfig, treeOpts, tableFullData } = this;
|
|
7716
|
-
if (treeConfig) {
|
|
7717
|
-
const { expandAll, expandRowKeys } = treeOpts;
|
|
7718
|
-
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7719
|
-
if (expandAll) {
|
|
7720
|
-
this.setAllTreeExpand(true);
|
|
7721
|
-
}
|
|
7722
|
-
else if (expandRowKeys) {
|
|
7723
|
-
const defExpandeds = [];
|
|
7724
|
-
const rowkey = getRowkey(this);
|
|
7725
|
-
expandRowKeys.forEach((rowid) => {
|
|
7726
|
-
const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
|
|
7727
|
-
if (matchObj) {
|
|
7728
|
-
defExpandeds.push(matchObj.item);
|
|
7729
|
-
}
|
|
7730
|
-
});
|
|
7731
|
-
this.setTreeExpand(defExpandeds, true);
|
|
7732
|
-
}
|
|
7733
|
-
}
|
|
7734
|
-
},
|
|
7735
|
-
handleAsyncTreeExpandChilds(row) {
|
|
7736
|
-
const $xeTable = this;
|
|
7737
|
-
const { treeOpts, checkboxOpts } = this;
|
|
7738
|
-
const { transform, loadMethod } = treeOpts;
|
|
7739
|
-
const { checkStrictly } = checkboxOpts;
|
|
7740
|
-
return new Promise(resolve => {
|
|
7741
|
-
if (loadMethod) {
|
|
7742
|
-
const { treeExpandLazyLoadedMaps, fullAllDataRowIdData } = this;
|
|
7743
|
-
const rowid = getRowid($xeTable, row);
|
|
7744
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7745
|
-
treeExpandLazyLoadedMaps[rowid] = row;
|
|
7746
|
-
Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
|
|
7747
|
-
if (rowRest) {
|
|
7748
|
-
rowRest.treeLoaded = true;
|
|
7749
|
-
}
|
|
7750
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7751
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7752
|
-
}
|
|
7753
|
-
if (!XEUtils.isArray(childRecords)) {
|
|
7754
|
-
childRecords = [];
|
|
7755
|
-
}
|
|
7756
|
-
if (childRecords) {
|
|
7757
|
-
return this.loadTreeChildren(row, childRecords).then((childRows) => {
|
|
7758
|
-
const { treeExpandedMaps } = this;
|
|
7759
|
-
if (childRows.length && !treeExpandedMaps[rowid]) {
|
|
7760
|
-
treeExpandedMaps[rowid] = row;
|
|
7761
|
-
}
|
|
7762
|
-
// 如果当前节点已选中,则展开后子节点也被选中
|
|
7763
|
-
if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
|
|
7764
|
-
handleCheckedCheckboxRow($xeTable, childRows, true);
|
|
7765
|
-
}
|
|
7766
|
-
return this.$nextTick().then(() => {
|
|
7767
|
-
if (transform) {
|
|
7768
|
-
this.handleTableData();
|
|
7769
|
-
updateAfterDataIndex($xeTable);
|
|
7770
|
-
return this.$nextTick();
|
|
7771
|
-
}
|
|
7772
|
-
});
|
|
7773
|
-
});
|
|
7774
|
-
}
|
|
7775
|
-
}).catch(() => {
|
|
7776
|
-
const { treeExpandLazyLoadedMaps } = this;
|
|
7777
|
-
if (rowRest) {
|
|
7778
|
-
rowRest.treeLoaded = false;
|
|
7779
|
-
}
|
|
7780
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7781
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7782
|
-
}
|
|
7783
|
-
}).finally(() => {
|
|
7784
|
-
this.$nextTick().then(() => this.recalculate()).then(() => resolve());
|
|
7785
|
-
});
|
|
7786
|
-
}
|
|
7787
|
-
else {
|
|
7788
|
-
resolve();
|
|
7789
|
-
}
|
|
7790
|
-
});
|
|
7791
|
-
},
|
|
7792
8005
|
/**
|
|
7793
8006
|
* 设置所有树节点的展开与否
|
|
7794
8007
|
* @param {Boolean} expanded 是否展开
|
|
@@ -7813,42 +8026,47 @@ const Methods = {
|
|
|
7813
8026
|
* @returns
|
|
7814
8027
|
*/
|
|
7815
8028
|
handleBaseTreeExpand(rows, expanded) {
|
|
7816
|
-
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;
|
|
7817
8035
|
const { reserve, lazy, accordion, toggleMethod } = treeOpts;
|
|
7818
|
-
const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
|
|
7819
8036
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7820
8037
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
7821
8038
|
const result = [];
|
|
7822
|
-
const columnIndex =
|
|
7823
|
-
const $columnIndex =
|
|
7824
|
-
|
|
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;
|
|
7825
8043
|
if (accordion) {
|
|
7826
8044
|
validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
|
|
7827
8045
|
// 同一级只能展开一个
|
|
7828
8046
|
const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField });
|
|
7829
8047
|
if (matchObj) {
|
|
7830
8048
|
matchObj.items.forEach(item => {
|
|
7831
|
-
const rowid =
|
|
7832
|
-
if (
|
|
7833
|
-
delete
|
|
8049
|
+
const rowid = handleGetRowId(item);
|
|
8050
|
+
if (treeExpandedMaps[rowid]) {
|
|
8051
|
+
delete treeExpandedMaps[rowid];
|
|
7834
8052
|
}
|
|
7835
8053
|
});
|
|
7836
8054
|
}
|
|
7837
8055
|
}
|
|
7838
8056
|
if (expanded) {
|
|
7839
8057
|
validRows.forEach((row) => {
|
|
7840
|
-
const rowid =
|
|
7841
|
-
if (!
|
|
8058
|
+
const rowid = handleGetRowId(row);
|
|
8059
|
+
if (!treeExpandedMaps[rowid]) {
|
|
7842
8060
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7843
8061
|
if (rowRest) {
|
|
7844
8062
|
const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
|
|
7845
8063
|
// 是否使用懒加载
|
|
7846
8064
|
if (isLoad) {
|
|
7847
|
-
result.push(
|
|
8065
|
+
result.push(handleAsyncTreeExpandChilds($xeTable, row));
|
|
7848
8066
|
}
|
|
7849
8067
|
else {
|
|
7850
8068
|
if (row[childrenField] && row[childrenField].length) {
|
|
7851
|
-
|
|
8069
|
+
treeExpandedMaps[rowid] = row;
|
|
7852
8070
|
}
|
|
7853
8071
|
}
|
|
7854
8072
|
}
|
|
@@ -7857,18 +8075,18 @@ const Methods = {
|
|
|
7857
8075
|
}
|
|
7858
8076
|
else {
|
|
7859
8077
|
validRows.forEach((item) => {
|
|
7860
|
-
const rowid =
|
|
7861
|
-
if (
|
|
7862
|
-
delete
|
|
8078
|
+
const rowid = handleGetRowId(item);
|
|
8079
|
+
if (treeExpandedMaps[rowid]) {
|
|
8080
|
+
delete treeExpandedMaps[rowid];
|
|
7863
8081
|
}
|
|
7864
8082
|
});
|
|
7865
8083
|
}
|
|
7866
8084
|
if (reserve) {
|
|
7867
|
-
validRows.forEach((row) =>
|
|
8085
|
+
validRows.forEach((row) => handleTreeExpandReserve($xeTable, row, expanded));
|
|
7868
8086
|
}
|
|
7869
|
-
|
|
8087
|
+
reactData.treeExpandedFlag++;
|
|
7870
8088
|
return Promise.all(result).then(() => {
|
|
7871
|
-
return
|
|
8089
|
+
return $xeTable.recalculate();
|
|
7872
8090
|
});
|
|
7873
8091
|
},
|
|
7874
8092
|
/**
|
|
@@ -7922,30 +8140,38 @@ const Methods = {
|
|
|
7922
8140
|
* @param {Row} row 行对象
|
|
7923
8141
|
*/
|
|
7924
8142
|
isTreeExpandByRow(row) {
|
|
7925
|
-
const
|
|
7926
|
-
|
|
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)];
|
|
7927
8149
|
},
|
|
7928
8150
|
/**
|
|
7929
8151
|
* 手动清空树形节点的展开状态,数据会恢复成未展开的状态
|
|
7930
8152
|
*/
|
|
7931
8153
|
clearTreeExpand() {
|
|
7932
8154
|
const $xeTable = this;
|
|
7933
|
-
const
|
|
7934
|
-
const
|
|
8155
|
+
const reactData = $xeTable;
|
|
8156
|
+
const internalData = $xeTable;
|
|
8157
|
+
const { tableFullTreeData } = internalData;
|
|
8158
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7935
8159
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7936
|
-
const
|
|
7937
|
-
|
|
8160
|
+
const { transform, reserve } = treeOpts;
|
|
8161
|
+
const expList = $xeTable.getTreeExpandRecords();
|
|
8162
|
+
internalData.treeExpandedMaps = {};
|
|
8163
|
+
reactData.treeExpandedFlag++;
|
|
7938
8164
|
if (reserve) {
|
|
7939
|
-
XEUtils.eachTree(
|
|
8165
|
+
XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), { children: childrenField });
|
|
7940
8166
|
}
|
|
7941
|
-
return
|
|
8167
|
+
return $xeTable.handleTableData().then(() => {
|
|
7942
8168
|
if (transform) {
|
|
7943
8169
|
handleVirtualTreeToList($xeTable);
|
|
7944
|
-
return
|
|
8170
|
+
return $xeTable.handleTableData();
|
|
7945
8171
|
}
|
|
7946
8172
|
}).then(() => {
|
|
7947
8173
|
if (expList.length) {
|
|
7948
|
-
|
|
8174
|
+
$xeTable.recalculate();
|
|
7949
8175
|
}
|
|
7950
8176
|
});
|
|
7951
8177
|
},
|
|
@@ -7953,18 +8179,6 @@ const Methods = {
|
|
|
7953
8179
|
this.treeExpandedReserveRowMap = {};
|
|
7954
8180
|
return this.$nextTick();
|
|
7955
8181
|
},
|
|
7956
|
-
handleTreeExpandReserve(row, expanded) {
|
|
7957
|
-
const { treeExpandedReserveRowMap, treeOpts } = this;
|
|
7958
|
-
if (treeOpts.reserve) {
|
|
7959
|
-
const rowid = getRowid(this, row);
|
|
7960
|
-
if (expanded) {
|
|
7961
|
-
treeExpandedReserveRowMap[rowid] = row;
|
|
7962
|
-
}
|
|
7963
|
-
else if (treeExpandedReserveRowMap[rowid]) {
|
|
7964
|
-
delete treeExpandedReserveRowMap[rowid];
|
|
7965
|
-
}
|
|
7966
|
-
}
|
|
7967
|
-
},
|
|
7968
8182
|
/**
|
|
7969
8183
|
* 获取表格的滚动状态
|
|
7970
8184
|
*/
|
|
@@ -8282,10 +8496,10 @@ const Methods = {
|
|
|
8282
8496
|
return;
|
|
8283
8497
|
}
|
|
8284
8498
|
const { highlightHoverRow } = tableProps;
|
|
8285
|
-
const { scrollXLoad, scrollYLoad } = reactData;
|
|
8499
|
+
const { scrollXLoad, scrollYLoad, expandColumn } = reactData;
|
|
8286
8500
|
const leftFixedWidth = $xeTable.computeLeftFixedWidth;
|
|
8287
8501
|
const rightFixedWidth = $xeTable.computeRightFixedWidth;
|
|
8288
|
-
if (!(
|
|
8502
|
+
if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
|
|
8289
8503
|
return;
|
|
8290
8504
|
}
|
|
8291
8505
|
const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
|
|
@@ -8537,8 +8751,8 @@ const Methods = {
|
|
|
8537
8751
|
const $xeTable = this;
|
|
8538
8752
|
const reactData = $xeTable;
|
|
8539
8753
|
const internalData = $xeTable;
|
|
8540
|
-
const { isAllOverflow, scrollYLoad, expandColumn
|
|
8541
|
-
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData;
|
|
8754
|
+
const { isAllOverflow, scrollYLoad, expandColumn } = reactData;
|
|
8755
|
+
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
8542
8756
|
const { startIndex } = scrollYStore;
|
|
8543
8757
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
8544
8758
|
const rowOpts = $xeTable.computeRowOpts;
|
|
@@ -8781,13 +8995,15 @@ const Methods = {
|
|
|
8781
8995
|
* 更新表尾合计
|
|
8782
8996
|
*/
|
|
8783
8997
|
updateFooter() {
|
|
8998
|
+
const $xeTable = this;
|
|
8999
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
8784
9000
|
const { showFooter, visibleColumn, footerData, footerMethod } = this;
|
|
8785
9001
|
let footData = [];
|
|
8786
9002
|
if (showFooter && footerData && footerData.length) {
|
|
8787
9003
|
footData = footerData.slice(0);
|
|
8788
9004
|
}
|
|
8789
9005
|
else if (showFooter && footerMethod) {
|
|
8790
|
-
footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table:
|
|
9006
|
+
footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table: $xeTable, $grid: $xeGrid }) : [];
|
|
8791
9007
|
}
|
|
8792
9008
|
this.footerTableData = footData;
|
|
8793
9009
|
return this.$nextTick();
|
|
@@ -8865,7 +9081,7 @@ const Methods = {
|
|
|
8865
9081
|
if (this.footerSpanMethod) {
|
|
8866
9082
|
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
8867
9083
|
}
|
|
8868
|
-
setMerges(this, merges, this.mergeFooterList
|
|
9084
|
+
setMerges(this, merges, this.mergeFooterList);
|
|
8869
9085
|
return this.$nextTick().then(() => {
|
|
8870
9086
|
this.updateCellAreas();
|
|
8871
9087
|
return updateStyle($xeTable);
|
|
@@ -8919,11 +9135,14 @@ const Methods = {
|
|
|
8919
9135
|
},
|
|
8920
9136
|
dispatchEvent(type, params, evnt) {
|
|
8921
9137
|
const $xeTable = this;
|
|
8922
|
-
|
|
9138
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
9139
|
+
$xeTable.$emit(type, createEvent(evnt, { $table: $xeTable, $grid: $xeGrid }, params));
|
|
8923
9140
|
},
|
|
8924
9141
|
// 已废弃,使用 dispatchEvent
|
|
8925
9142
|
emitEvent(type, params, evnt) {
|
|
8926
|
-
|
|
9143
|
+
const $xeTable = this;
|
|
9144
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
9145
|
+
this.$emit(type, Object.assign({ $table: $xeTable, $grid: $xeGrid, $event: evnt }, params));
|
|
8927
9146
|
},
|
|
8928
9147
|
focus() {
|
|
8929
9148
|
this.isActivated = true;
|