vxe-table 3.14.0-beta.9 → 3.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/es/grid/src/grid.js +62 -42
- package/es/locale/lang/ar-EG.js +7 -1
- package/es/locale/lang/de-DE.js +7 -1
- package/es/locale/lang/en-US.js +7 -1
- package/es/locale/lang/es-ES.js +7 -1
- package/es/locale/lang/fr-FR.js +7 -1
- package/es/locale/lang/hu-HU.js +7 -1
- package/es/locale/lang/hy-AM.js +7 -1
- package/es/locale/lang/id-ID.js +7 -1
- package/es/locale/lang/it-IT.js +7 -1
- package/es/locale/lang/ja-JP.js +7 -1
- package/es/locale/lang/ko-KR.js +7 -1
- package/es/locale/lang/nb-NO.js +7 -1
- package/es/locale/lang/pt-BR.js +7 -1
- package/es/locale/lang/ru-RU.js +7 -1
- package/es/locale/lang/th-TH.js +7 -1
- package/es/locale/lang/ug-CN.js +7 -1
- package/es/locale/lang/uk-UA.js +7 -1
- package/es/locale/lang/vi-VN.js +7 -1
- package/es/locale/lang/zh-CHT.js +7 -1
- package/es/locale/lang/zh-CN.js +7 -1
- package/es/style.css +1 -1
- package/es/table/module/custom/mixin.js +4 -2
- package/es/table/module/custom/panel.js +24 -23
- package/es/table/module/edit/mixin.js +103 -68
- 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 -5
- package/es/table/render/index.js +2 -2
- package/es/table/src/body.js +43 -25
- package/es/table/src/cell.js +27 -22
- package/es/table/src/column.js +11 -9
- package/es/table/src/columnInfo.js +6 -6
- package/es/table/src/footer.js +12 -7
- package/es/table/src/group.js +6 -5
- package/es/table/src/header.js +15 -9
- package/es/table/src/methods.js +1047 -971
- package/es/table/src/props.js +4 -0
- package/es/table/src/table.js +100 -64
- package/es/table/src/util.js +55 -20
- package/es/toolbar/src/toolbar.js +3 -3
- package/es/ui/index.js +2 -1
- package/es/ui/src/log.js +1 -1
- package/helper/vetur/attributes.json +1 -1
- package/helper/vetur/tags.json +1 -1
- package/lib/grid/src/grid.js +69 -59
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.umd.js +2006 -1686
- 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 +119 -105
- 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 +4 -10
- package/lib/table/module/validator/mixin.min.js +1 -1
- package/lib/table/render/index.js +3 -2
- package/lib/table/render/index.min.js +1 -1
- package/lib/table/src/body.js +51 -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 +12 -5
- package/lib/table/src/footer.min.js +1 -1
- package/lib/table/src/group.js +6 -5
- package/lib/table/src/group.min.js +1 -1
- package/lib/table/src/header.js +16 -8
- package/lib/table/src/header.min.js +1 -1
- package/lib/table/src/methods.js +1219 -1151
- 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 +108 -67
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +62 -21
- package/lib/table/src/util.min.js +1 -1
- package/lib/toolbar/src/toolbar.js +3 -3
- package/lib/ui/index.js +2 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/package.json +2 -2
- package/packages/grid/src/grid.ts +75 -51
- package/packages/locale/lang/ar-EG.ts +7 -1
- package/packages/locale/lang/de-DE.ts +7 -1
- package/packages/locale/lang/en-US.ts +7 -1
- package/packages/locale/lang/es-ES.ts +7 -1
- package/packages/locale/lang/fr-FR.ts +7 -1
- package/packages/locale/lang/hu-HU.ts +7 -1
- package/packages/locale/lang/hy-AM.ts +7 -1
- package/packages/locale/lang/id-ID.ts +7 -1
- package/packages/locale/lang/it-IT.ts +7 -1
- package/packages/locale/lang/ja-JP.ts +7 -1
- package/packages/locale/lang/ko-KR.ts +7 -1
- package/packages/locale/lang/nb-NO.ts +7 -1
- package/packages/locale/lang/pt-BR.ts +7 -1
- package/packages/locale/lang/ru-RU.ts +7 -1
- package/packages/locale/lang/th-TH.ts +7 -1
- package/packages/locale/lang/ug-CN.ts +7 -1
- package/packages/locale/lang/uk-UA.ts +7 -1
- package/packages/locale/lang/vi-VN.ts +7 -1
- package/packages/locale/lang/zh-CHT.ts +7 -1
- package/packages/locale/lang/zh-CN.ts +7 -1
- package/packages/table/module/custom/mixin.ts +6 -3
- package/packages/table/module/custom/panel.ts +42 -37
- package/packages/table/module/edit/mixin.ts +139 -95
- 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 +3 -6
- package/packages/table/render/index.ts +2 -2
- package/packages/table/src/body.ts +43 -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 +12 -7
- package/packages/table/src/group.ts +9 -5
- package/packages/table/src/header.ts +16 -9
- package/packages/table/src/methods.ts +1174 -1027
- package/packages/table/src/props.ts +16 -12
- package/packages/table/src/table.ts +117 -70
- package/packages/table/src/util.ts +65 -23
- package/packages/toolbar/src/toolbar.ts +3 -3
- package/packages/ui/index.ts +1 -0
- /package/es/{iconfont.1741336976538.ttf → iconfont.1743045564244.ttf} +0 -0
- /package/es/{iconfont.1741336976538.woff → iconfont.1743045564244.woff} +0 -0
- /package/es/{iconfont.1741336976538.woff2 → iconfont.1743045564244.woff2} +0 -0
- /package/lib/{iconfont.1741336976538.ttf → iconfont.1743045564244.ttf} +0 -0
- /package/lib/{iconfont.1741336976538.woff → iconfont.1743045564244.woff} +0 -0
- /package/lib/{iconfont.1741336976538.woff2 → iconfont.1743045564244.woff2} +0 -0
package/es/table/src/methods.js
CHANGED
|
@@ -3,10 +3,11 @@ import { browse, getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEv
|
|
|
3
3
|
import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../ui/src/utils';
|
|
4
4
|
import { VxeUI } from '../../ui';
|
|
5
5
|
import Cell from './cell';
|
|
6
|
-
import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth,
|
|
6
|
+
import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId, getRefElem } from './util';
|
|
7
7
|
import { getSlotVNs } from '../../ui/src/vn';
|
|
8
8
|
import { warnLog, errLog } from '../../ui/src/log';
|
|
9
9
|
const { getConfig, getI18n, renderer, formats, interceptor, createEvent } = VxeUI;
|
|
10
|
+
const supportMaxRow = 5e6;
|
|
10
11
|
const customStorageKey = 'VXE_CUSTOM_STORE';
|
|
11
12
|
const maxYHeight = 5e6;
|
|
12
13
|
const maxXWidth = 5e6;
|
|
@@ -218,7 +219,7 @@ function cacheColumnMap($xeTable) {
|
|
|
218
219
|
}
|
|
219
220
|
else {
|
|
220
221
|
if ((storage && !type) || (columnOpts.drag && (isCrossDrag || isSelfToChildDrag))) {
|
|
221
|
-
errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field
|
|
222
|
+
errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field=?`]);
|
|
222
223
|
}
|
|
223
224
|
}
|
|
224
225
|
if (!hasFixed && fixed) {
|
|
@@ -303,12 +304,12 @@ const updateScrollYStatus = ($xeTable, fullData) => {
|
|
|
303
304
|
const reactData = $xeTable;
|
|
304
305
|
const internalData = $xeTable;
|
|
305
306
|
const { treeConfig } = props;
|
|
306
|
-
const
|
|
307
|
+
const virtualYOpts = $xeTable.computeVirtualYOpts;
|
|
307
308
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
308
309
|
const { transform } = treeOpts;
|
|
309
310
|
const allList = fullData || internalData.tableFullData;
|
|
310
311
|
// 如果gt为0,则总是启用
|
|
311
|
-
const scrollYLoad = (transform || !treeConfig) && !!
|
|
312
|
+
const scrollYLoad = (transform || !treeConfig) && !!virtualYOpts.enabled && virtualYOpts.gt > -1 && (virtualYOpts.gt === 0 || virtualYOpts.gt < allList.length);
|
|
312
313
|
reactData.scrollYLoad = scrollYLoad;
|
|
313
314
|
return scrollYLoad;
|
|
314
315
|
};
|
|
@@ -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) {
|
|
@@ -411,9 +413,9 @@ function updateStyle($xeTable) {
|
|
|
411
413
|
const props = $xeTable;
|
|
412
414
|
const reactData = $xeTable;
|
|
413
415
|
const internalData = $xeTable;
|
|
414
|
-
const {
|
|
416
|
+
const { 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']);
|
|
@@ -565,32 +566,6 @@ function updateStyle($xeTable) {
|
|
|
565
566
|
if (tableElem) {
|
|
566
567
|
tableElem.style.width = tWidth ? `${tWidth}px` : '';
|
|
567
568
|
}
|
|
568
|
-
const listElem = getRefElem(elemStore[`${name}-${layout}-list`]);
|
|
569
|
-
if (isGroup && listElem) {
|
|
570
|
-
XEUtils.arrayEach(listElem.querySelectorAll('.col--group'), (thElem) => {
|
|
571
|
-
const colNode = $xeTable.getColumnNode(thElem);
|
|
572
|
-
if (colNode) {
|
|
573
|
-
const column = colNode.item;
|
|
574
|
-
const { showHeaderOverflow } = column;
|
|
575
|
-
const cellOverflow = XEUtils.isBoolean(showHeaderOverflow) ? showHeaderOverflow : allColumnHeaderOverflow;
|
|
576
|
-
const showEllipsis = cellOverflow === 'ellipsis';
|
|
577
|
-
const showTitle = cellOverflow === 'title';
|
|
578
|
-
const showTooltip = cellOverflow === true || cellOverflow === 'tooltip';
|
|
579
|
-
const hasEllipsis = showTitle || showTooltip || showEllipsis;
|
|
580
|
-
let childWidth = 0;
|
|
581
|
-
let countChild = 0;
|
|
582
|
-
if (hasEllipsis) {
|
|
583
|
-
XEUtils.eachTree(column.children, (item) => {
|
|
584
|
-
if (!item.children || !column.children.length) {
|
|
585
|
-
countChild++;
|
|
586
|
-
}
|
|
587
|
-
childWidth += item.renderWidth;
|
|
588
|
-
}, { children: 'children' });
|
|
589
|
-
}
|
|
590
|
-
thElem.style.width = hasEllipsis ? `${childWidth - countChild - (border ? 2 : 0)}px` : '';
|
|
591
|
-
}
|
|
592
|
-
});
|
|
593
|
-
}
|
|
594
569
|
}
|
|
595
570
|
else if (layout === 'body') {
|
|
596
571
|
if (currScrollElem) {
|
|
@@ -690,56 +665,6 @@ function updateStyle($xeTable) {
|
|
|
690
665
|
tableElem.style.width = tWidth ? `${tWidth}px` : '';
|
|
691
666
|
}
|
|
692
667
|
}
|
|
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
668
|
});
|
|
744
669
|
});
|
|
745
670
|
if (currentRow) {
|
|
@@ -750,6 +675,125 @@ function updateStyle($xeTable) {
|
|
|
750
675
|
}
|
|
751
676
|
return $xeTable.$nextTick();
|
|
752
677
|
}
|
|
678
|
+
function checkValidate($xeTable, type) {
|
|
679
|
+
if ($xeTable.triggerValidate) {
|
|
680
|
+
return $xeTable.triggerValidate(type);
|
|
681
|
+
}
|
|
682
|
+
return $xeTable.$nextTick();
|
|
683
|
+
}
|
|
684
|
+
/**
|
|
685
|
+
* 当单元格发生改变时
|
|
686
|
+
* 如果存在规则,则校验
|
|
687
|
+
*/
|
|
688
|
+
function handleChangeCell($xeTable, evnt, params) {
|
|
689
|
+
checkValidate($xeTable, 'blur')
|
|
690
|
+
.catch((e) => e)
|
|
691
|
+
.then(() => {
|
|
692
|
+
$xeTable.handleEdit(params, evnt)
|
|
693
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
694
|
+
.catch((e) => e);
|
|
695
|
+
});
|
|
696
|
+
}
|
|
697
|
+
function handleDefaultSort($xeTable) {
|
|
698
|
+
const props = $xeTable;
|
|
699
|
+
const { sortConfig } = props;
|
|
700
|
+
if (sortConfig) {
|
|
701
|
+
const sortOpts = $xeTable.computeSortOpts;
|
|
702
|
+
let { defaultSort } = sortOpts;
|
|
703
|
+
if (defaultSort) {
|
|
704
|
+
if (!XEUtils.isArray(defaultSort)) {
|
|
705
|
+
defaultSort = [defaultSort];
|
|
706
|
+
}
|
|
707
|
+
if (defaultSort.length) {
|
|
708
|
+
(sortConfig.multiple ? defaultSort : defaultSort.slice(0, 1)).forEach((item, index) => {
|
|
709
|
+
const { field, order } = item;
|
|
710
|
+
if (field && order) {
|
|
711
|
+
const column = $xeTable.getColumnByField(field);
|
|
712
|
+
if (column && column.sortable) {
|
|
713
|
+
column.order = order;
|
|
714
|
+
column.sortTime = Date.now() + index;
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
});
|
|
718
|
+
if (!sortOpts.remote) {
|
|
719
|
+
$xeTable.handleTableData(true).then(updateStyle);
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
/**
|
|
726
|
+
* 处理默认勾选
|
|
727
|
+
*/
|
|
728
|
+
function handleDefaultSelectionChecked($xeTable) {
|
|
729
|
+
const props = $xeTable;
|
|
730
|
+
const internalData = $xeTable;
|
|
731
|
+
const { checkboxConfig } = props;
|
|
732
|
+
if (checkboxConfig) {
|
|
733
|
+
const { fullDataRowIdData } = internalData;
|
|
734
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
735
|
+
const { checkAll, checkRowKeys } = checkboxOpts;
|
|
736
|
+
if (checkAll) {
|
|
737
|
+
handleCheckedAllCheckboxRow($xeTable, true, true);
|
|
738
|
+
}
|
|
739
|
+
else if (checkRowKeys) {
|
|
740
|
+
const defSelection = [];
|
|
741
|
+
checkRowKeys.forEach((rowid) => {
|
|
742
|
+
if (fullDataRowIdData[rowid]) {
|
|
743
|
+
defSelection.push(fullDataRowIdData[rowid].row);
|
|
744
|
+
}
|
|
745
|
+
});
|
|
746
|
+
handleCheckedCheckboxRow($xeTable, defSelection, true, true);
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
}
|
|
750
|
+
/**
|
|
751
|
+
* 处理单选框默认勾选
|
|
752
|
+
*/
|
|
753
|
+
function handleDefaultRadioChecked($xeTable) {
|
|
754
|
+
const props = $xeTable;
|
|
755
|
+
const internalData = $xeTable;
|
|
756
|
+
const { radioConfig } = props;
|
|
757
|
+
if (radioConfig) {
|
|
758
|
+
const { fullDataRowIdData } = internalData;
|
|
759
|
+
const radioOpts = $xeTable.computeRadioOpts;
|
|
760
|
+
const { checkRowKey: rowid, reserve } = radioOpts;
|
|
761
|
+
if (rowid) {
|
|
762
|
+
if (fullDataRowIdData[rowid]) {
|
|
763
|
+
handleCheckedRadioRow(fullDataRowIdData[rowid].row, true);
|
|
764
|
+
}
|
|
765
|
+
if (reserve) {
|
|
766
|
+
const rowkey = getRowkey($xeTable);
|
|
767
|
+
internalData.radioReserveRow = { [rowkey]: rowid };
|
|
768
|
+
}
|
|
769
|
+
}
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
/**
|
|
773
|
+
* 处理默认展开行
|
|
774
|
+
*/
|
|
775
|
+
function handleDefaultRowExpand($xeTable) {
|
|
776
|
+
const props = $xeTable;
|
|
777
|
+
const internalData = $xeTable;
|
|
778
|
+
const { expandConfig } = props;
|
|
779
|
+
if (expandConfig) {
|
|
780
|
+
const { fullDataRowIdData } = internalData;
|
|
781
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
782
|
+
const { expandAll, expandRowKeys } = expandOpts;
|
|
783
|
+
if (expandAll) {
|
|
784
|
+
$xeTable.setAllRowExpand(true);
|
|
785
|
+
}
|
|
786
|
+
else if (expandRowKeys) {
|
|
787
|
+
const defExpandeds = [];
|
|
788
|
+
expandRowKeys.forEach((rowid) => {
|
|
789
|
+
if (fullDataRowIdData[rowid]) {
|
|
790
|
+
defExpandeds.push(fullDataRowIdData[rowid].row);
|
|
791
|
+
}
|
|
792
|
+
});
|
|
793
|
+
$xeTable.setRowExpand(defExpandeds, true);
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
}
|
|
753
797
|
function handleRadioReserveRow($xeTable, row) {
|
|
754
798
|
const internalData = $xeTable;
|
|
755
799
|
const radioOpts = $xeTable.computeRadioOpts;
|
|
@@ -794,12 +838,12 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
794
838
|
const reactData = $xeTable;
|
|
795
839
|
const internalData = $xeTable;
|
|
796
840
|
const { treeConfig } = props;
|
|
797
|
-
const { selectCheckboxMaps } =
|
|
798
|
-
const { afterFullData, checkboxReserveRowMap } = internalData;
|
|
841
|
+
const { afterFullData, checkboxReserveRowMap, selectCheckboxMaps } = internalData;
|
|
799
842
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
800
843
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
801
844
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
802
845
|
const { checkField, reserve, checkMethod } = checkboxOpts;
|
|
846
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
803
847
|
// indeterminateField 仅支持读取
|
|
804
848
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
805
849
|
const selectRowMaps = {};
|
|
@@ -811,7 +855,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
811
855
|
const checkValFn = (row) => {
|
|
812
856
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
813
857
|
if (checked) {
|
|
814
|
-
selectRowMaps[
|
|
858
|
+
selectRowMaps[handleGetRowId(row)] = row;
|
|
815
859
|
}
|
|
816
860
|
XEUtils.set(row, checkField, checked);
|
|
817
861
|
}
|
|
@@ -841,7 +885,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
841
885
|
*/
|
|
842
886
|
XEUtils.eachTree(afterFullData, (row) => {
|
|
843
887
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
844
|
-
|
|
888
|
+
const rowid = handleGetRowId(row);
|
|
889
|
+
selectRowMaps[rowid] = row;
|
|
845
890
|
}
|
|
846
891
|
}, { children: childrenField });
|
|
847
892
|
}
|
|
@@ -852,7 +897,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
852
897
|
*/
|
|
853
898
|
if (!isForce && checkMethod) {
|
|
854
899
|
XEUtils.eachTree(afterFullData, (row) => {
|
|
855
|
-
const rowid =
|
|
900
|
+
const rowid = handleGetRowId(row);
|
|
856
901
|
if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
|
|
857
902
|
selectRowMaps[rowid] = row;
|
|
858
903
|
}
|
|
@@ -869,7 +914,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
869
914
|
*/
|
|
870
915
|
if (!isForce && checkMethod) {
|
|
871
916
|
afterFullData.forEach((row) => {
|
|
872
|
-
const rowid =
|
|
917
|
+
const rowid = handleGetRowId(row);
|
|
873
918
|
if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
|
|
874
919
|
selectRowMaps[rowid] = row;
|
|
875
920
|
}
|
|
@@ -877,7 +922,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
877
922
|
}
|
|
878
923
|
else {
|
|
879
924
|
afterFullData.forEach(row => {
|
|
880
|
-
|
|
925
|
+
const rowid = handleGetRowId(row);
|
|
926
|
+
selectRowMaps[rowid] = row;
|
|
881
927
|
});
|
|
882
928
|
}
|
|
883
929
|
}
|
|
@@ -889,7 +935,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
889
935
|
*/
|
|
890
936
|
if (!isForce && checkMethod) {
|
|
891
937
|
afterFullData.forEach((row) => {
|
|
892
|
-
const rowid =
|
|
938
|
+
const rowid = handleGetRowId(row);
|
|
893
939
|
if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
|
|
894
940
|
selectRowMaps[rowid] = row;
|
|
895
941
|
}
|
|
@@ -908,10 +954,10 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
908
954
|
afterFullData.forEach((row) => handleCheckboxReserveRow($xeTable, row, false));
|
|
909
955
|
}
|
|
910
956
|
}
|
|
911
|
-
reactData.
|
|
957
|
+
reactData.updateCheckboxFlag++;
|
|
958
|
+
internalData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
|
|
912
959
|
reactData.isAllSelected = checked;
|
|
913
960
|
reactData.isIndeterminate = false;
|
|
914
|
-
reactData.treeIndeterminateMaps = {};
|
|
915
961
|
internalData.treeIndeterminateRowMaps = {};
|
|
916
962
|
$xeTable.checkSelectionStatus();
|
|
917
963
|
return $xeTable.$nextTick();
|
|
@@ -922,8 +968,8 @@ function handleReserveStatus($xeTable) {
|
|
|
922
968
|
const reactData = $xeTable;
|
|
923
969
|
const internalData = $xeTable;
|
|
924
970
|
const { treeConfig } = props;
|
|
925
|
-
const { expandColumn, currentRow,
|
|
926
|
-
const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData;
|
|
971
|
+
const { expandColumn, currentRow, selectRadioRow } = reactData;
|
|
972
|
+
const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow, selectCheckboxMaps, treeExpandedMaps, rowExpandedMaps } = internalData;
|
|
927
973
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
928
974
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
929
975
|
const radioOpts = $xeTable.computeRadioOpts;
|
|
@@ -940,7 +986,8 @@ function handleReserveStatus($xeTable) {
|
|
|
940
986
|
}
|
|
941
987
|
}
|
|
942
988
|
// 复选框
|
|
943
|
-
|
|
989
|
+
internalData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
|
|
990
|
+
reactData.updateCheckboxFlag++;
|
|
944
991
|
// 还原保留选中状态
|
|
945
992
|
if (checkboxOpts.reserve) {
|
|
946
993
|
handleCheckedCheckboxRow($xeTable, handleReserveRow($xeTable, internalData.checkboxReserveRowMap), true, true);
|
|
@@ -949,17 +996,161 @@ function handleReserveStatus($xeTable) {
|
|
|
949
996
|
reactData.currentRow = null; // 刷新当前行状态
|
|
950
997
|
}
|
|
951
998
|
// 行展开
|
|
952
|
-
|
|
999
|
+
internalData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
|
|
1000
|
+
reactData.rowExpandedFlag++;
|
|
953
1001
|
// 还原保留状态
|
|
954
1002
|
if (expandColumn && expandOpts.reserve) {
|
|
955
1003
|
$xeTable.setRowExpand(handleReserveRow($xeTable, internalData.rowExpandedReserveRowMap), true);
|
|
956
1004
|
}
|
|
957
1005
|
// 树展开
|
|
958
|
-
|
|
1006
|
+
internalData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
|
|
1007
|
+
reactData.treeExpandedFlag++;
|
|
959
1008
|
if (treeConfig && treeOpts.reserve) {
|
|
960
1009
|
$xeTable.setTreeExpand(handleReserveRow($xeTable, internalData.treeExpandedReserveRowMap), true);
|
|
961
1010
|
}
|
|
962
1011
|
}
|
|
1012
|
+
/**
|
|
1013
|
+
* 处理默认展开树节点
|
|
1014
|
+
*/
|
|
1015
|
+
const handleDefaultTreeExpand = ($xeTable) => {
|
|
1016
|
+
const props = $xeTable;
|
|
1017
|
+
const internalData = $xeTable;
|
|
1018
|
+
const { treeConfig } = props;
|
|
1019
|
+
if (treeConfig) {
|
|
1020
|
+
const { tableFullData } = internalData;
|
|
1021
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
1022
|
+
const { expandAll, expandRowKeys } = treeOpts;
|
|
1023
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
1024
|
+
if (expandAll) {
|
|
1025
|
+
$xeTable.setAllTreeExpand(true);
|
|
1026
|
+
}
|
|
1027
|
+
else if (expandRowKeys) {
|
|
1028
|
+
const defExpandeds = [];
|
|
1029
|
+
const rowkey = getRowkey($xeTable);
|
|
1030
|
+
expandRowKeys.forEach((rowid) => {
|
|
1031
|
+
const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
|
|
1032
|
+
if (matchObj) {
|
|
1033
|
+
defExpandeds.push(matchObj.item);
|
|
1034
|
+
}
|
|
1035
|
+
});
|
|
1036
|
+
$xeTable.setTreeExpand(defExpandeds, true);
|
|
1037
|
+
}
|
|
1038
|
+
}
|
|
1039
|
+
};
|
|
1040
|
+
const handleAsyncTreeExpandChilds = ($xeTable, row) => {
|
|
1041
|
+
const reactData = $xeTable;
|
|
1042
|
+
const internalData = $xeTable;
|
|
1043
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
1044
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
1045
|
+
const { transform, loadMethod } = treeOpts;
|
|
1046
|
+
const { checkStrictly } = checkboxOpts;
|
|
1047
|
+
return new Promise(resolve => {
|
|
1048
|
+
if (loadMethod) {
|
|
1049
|
+
const { fullAllDataRowIdData, treeExpandLazyLoadedMaps } = internalData;
|
|
1050
|
+
const rowid = getRowid($xeTable, row);
|
|
1051
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
1052
|
+
treeExpandLazyLoadedMaps[rowid] = row;
|
|
1053
|
+
Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
|
|
1054
|
+
if (rowRest) {
|
|
1055
|
+
rowRest.treeLoaded = true;
|
|
1056
|
+
}
|
|
1057
|
+
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
1058
|
+
delete treeExpandLazyLoadedMaps[rowid];
|
|
1059
|
+
}
|
|
1060
|
+
if (!XEUtils.isArray(childRecords)) {
|
|
1061
|
+
childRecords = [];
|
|
1062
|
+
}
|
|
1063
|
+
if (childRecords) {
|
|
1064
|
+
return $xeTable.loadTreeChildren(row, childRecords).then(childRows => {
|
|
1065
|
+
const { treeExpandedMaps } = internalData;
|
|
1066
|
+
if (childRows.length && !treeExpandedMaps[rowid]) {
|
|
1067
|
+
treeExpandedMaps[rowid] = row;
|
|
1068
|
+
}
|
|
1069
|
+
reactData.treeExpandedFlag++;
|
|
1070
|
+
// 如果当前节点已选中,则展开后子节点也被选中
|
|
1071
|
+
if (!checkStrictly && $xeTable.isCheckedByCheckboxRow(row)) {
|
|
1072
|
+
handleCheckedCheckboxRow($xeTable, childRows, true);
|
|
1073
|
+
}
|
|
1074
|
+
return $xeTable.$nextTick().then(() => {
|
|
1075
|
+
if (transform) {
|
|
1076
|
+
$xeTable.handleTableData();
|
|
1077
|
+
updateAfterDataIndex($xeTable);
|
|
1078
|
+
return $xeTable.$nextTick();
|
|
1079
|
+
}
|
|
1080
|
+
});
|
|
1081
|
+
});
|
|
1082
|
+
}
|
|
1083
|
+
}).catch(() => {
|
|
1084
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
1085
|
+
if (rowRest) {
|
|
1086
|
+
rowRest.treeLoaded = false;
|
|
1087
|
+
}
|
|
1088
|
+
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
1089
|
+
delete treeExpandLazyLoadedMaps[rowid];
|
|
1090
|
+
}
|
|
1091
|
+
}).finally(() => {
|
|
1092
|
+
reactData.treeExpandedFlag++;
|
|
1093
|
+
$xeTable.$nextTick().then(() => $xeTable.recalculate()).then(() => resolve());
|
|
1094
|
+
});
|
|
1095
|
+
}
|
|
1096
|
+
else {
|
|
1097
|
+
resolve();
|
|
1098
|
+
}
|
|
1099
|
+
});
|
|
1100
|
+
};
|
|
1101
|
+
const handleTreeExpandReserve = ($xeTable, row, expanded) => {
|
|
1102
|
+
const internalData = $xeTable;
|
|
1103
|
+
const { treeExpandedReserveRowMap } = internalData;
|
|
1104
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
1105
|
+
if (treeOpts.reserve) {
|
|
1106
|
+
const rowid = getRowid($xeTable, row);
|
|
1107
|
+
if (expanded) {
|
|
1108
|
+
treeExpandedReserveRowMap[rowid] = row;
|
|
1109
|
+
}
|
|
1110
|
+
else if (treeExpandedReserveRowMap[rowid]) {
|
|
1111
|
+
delete treeExpandedReserveRowMap[rowid];
|
|
1112
|
+
}
|
|
1113
|
+
}
|
|
1114
|
+
};
|
|
1115
|
+
const handleAsyncRowExpand = ($xeTable, row) => {
|
|
1116
|
+
const reactData = $xeTable;
|
|
1117
|
+
const internalData = $xeTable;
|
|
1118
|
+
return new Promise(resolve => {
|
|
1119
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
1120
|
+
const { loadMethod } = expandOpts;
|
|
1121
|
+
if (loadMethod) {
|
|
1122
|
+
const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
|
|
1123
|
+
const rowid = getRowid($xeTable, row);
|
|
1124
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
1125
|
+
rowExpandLazyLoadedMaps[rowid] = row;
|
|
1126
|
+
loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
|
|
1127
|
+
const { rowExpandedMaps } = internalData;
|
|
1128
|
+
if (rowRest) {
|
|
1129
|
+
rowRest.expandLoaded = true;
|
|
1130
|
+
}
|
|
1131
|
+
rowExpandedMaps[rowid] = row;
|
|
1132
|
+
reactData.rowExpandedFlag++;
|
|
1133
|
+
}).catch(() => {
|
|
1134
|
+
if (rowRest) {
|
|
1135
|
+
rowRest.expandLoaded = false;
|
|
1136
|
+
}
|
|
1137
|
+
}).finally(() => {
|
|
1138
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
1139
|
+
if (rowExpandLazyLoadedMaps[rowid]) {
|
|
1140
|
+
delete rowExpandLazyLoadedMaps[rowid];
|
|
1141
|
+
}
|
|
1142
|
+
reactData.rowExpandedFlag++;
|
|
1143
|
+
$xeTable.$nextTick()
|
|
1144
|
+
.then(() => $xeTable.recalculate())
|
|
1145
|
+
.then(() => $xeTable.updateCellAreas())
|
|
1146
|
+
.then(() => resolve());
|
|
1147
|
+
});
|
|
1148
|
+
}
|
|
1149
|
+
else {
|
|
1150
|
+
resolve();
|
|
1151
|
+
}
|
|
1152
|
+
});
|
|
1153
|
+
};
|
|
963
1154
|
function calcVarRowHeightConfig($xeTable, sizeKey, sizeEl) {
|
|
964
1155
|
const reactData = $xeTable;
|
|
965
1156
|
const { rowHeightStore } = reactData;
|
|
@@ -1022,12 +1213,13 @@ function handleVirtualYVisible($xeTable) {
|
|
|
1022
1213
|
visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1;
|
|
1023
1214
|
}
|
|
1024
1215
|
else {
|
|
1216
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1025
1217
|
let leftIndex = 0;
|
|
1026
1218
|
let rightIndex = afterFullData.length;
|
|
1027
1219
|
while (leftIndex < rightIndex) {
|
|
1028
1220
|
const rIndex = Math.floor((leftIndex + rightIndex) / 2);
|
|
1029
1221
|
const row = afterFullData[rIndex];
|
|
1030
|
-
const rowid =
|
|
1222
|
+
const rowid = handleGetRowId(row);
|
|
1031
1223
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
1032
1224
|
if (rowRest.oTop <= startTop) {
|
|
1033
1225
|
leftIndex = rIndex + 1;
|
|
@@ -1039,7 +1231,7 @@ function handleVirtualYVisible($xeTable) {
|
|
|
1039
1231
|
toVisibleIndex = Math.max(0, leftIndex < afterFullData.length ? leftIndex - 2 : 0);
|
|
1040
1232
|
for (let rIndex = toVisibleIndex, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
1041
1233
|
const row = afterFullData[rIndex];
|
|
1042
|
-
const rowid =
|
|
1234
|
+
const rowid = handleGetRowId(row);
|
|
1043
1235
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
1044
1236
|
visibleSize++;
|
|
1045
1237
|
if (rowRest.oTop > endTop || visibleSize >= 100) {
|
|
@@ -1069,15 +1261,18 @@ function calculateMergerOffsetIndex(list, offsetItem, type) {
|
|
|
1069
1261
|
}
|
|
1070
1262
|
}
|
|
1071
1263
|
}
|
|
1072
|
-
function setMerges(
|
|
1264
|
+
function setMerges($xeTable, merges, mList, rowList) {
|
|
1265
|
+
// const props = $xeTable
|
|
1266
|
+
const internalData = $xeTable;
|
|
1073
1267
|
if (merges) {
|
|
1074
|
-
const { treeConfig
|
|
1268
|
+
// const { treeConfig } = props
|
|
1269
|
+
const { visibleColumn } = internalData;
|
|
1075
1270
|
if (!XEUtils.isArray(merges)) {
|
|
1076
1271
|
merges = [merges];
|
|
1077
1272
|
}
|
|
1078
|
-
if (treeConfig && merges.length) {
|
|
1079
|
-
|
|
1080
|
-
}
|
|
1273
|
+
// if (treeConfig && merges.length) {
|
|
1274
|
+
// errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
|
|
1275
|
+
// }
|
|
1081
1276
|
merges.forEach((item) => {
|
|
1082
1277
|
let { row, col, rowspan, colspan } = item;
|
|
1083
1278
|
if (rowList && XEUtils.isNumber(row)) {
|
|
@@ -1117,16 +1312,19 @@ function setMerges(_vm, merges, mList, rowList) {
|
|
|
1117
1312
|
});
|
|
1118
1313
|
}
|
|
1119
1314
|
}
|
|
1120
|
-
function removeMerges(
|
|
1315
|
+
function removeMerges($xeTable, merges, mList, rowList) {
|
|
1316
|
+
// const props = $xeTable
|
|
1317
|
+
const internalData = $xeTable;
|
|
1121
1318
|
const rest = [];
|
|
1122
1319
|
if (merges) {
|
|
1123
|
-
const { treeConfig
|
|
1320
|
+
// const { treeConfig } = props
|
|
1321
|
+
const { visibleColumn } = internalData;
|
|
1124
1322
|
if (!XEUtils.isArray(merges)) {
|
|
1125
1323
|
merges = [merges];
|
|
1126
1324
|
}
|
|
1127
|
-
if (treeConfig && merges.length) {
|
|
1128
|
-
|
|
1129
|
-
}
|
|
1325
|
+
// if (treeConfig && merges.length) {
|
|
1326
|
+
// errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
|
|
1327
|
+
// }
|
|
1130
1328
|
merges.forEach((item) => {
|
|
1131
1329
|
let { row, col } = item;
|
|
1132
1330
|
if (rowList && XEUtils.isNumber(row)) {
|
|
@@ -1300,6 +1498,7 @@ function autoCellWidth($xeTable) {
|
|
|
1300
1498
|
internalData.headerHeight = headerHeight;
|
|
1301
1499
|
internalData.footerHeight = footerHeight;
|
|
1302
1500
|
reactData.overflowX = overflowX;
|
|
1501
|
+
reactData.resizeWidthFlag++;
|
|
1303
1502
|
updateColumnOffsetLeft($xeTable);
|
|
1304
1503
|
updateHeight($xeTable);
|
|
1305
1504
|
reactData.parentHeight = Math.max(internalData.headerHeight + footerHeight + 20, $xeTable.getParentHeight());
|
|
@@ -1327,8 +1526,9 @@ const calcCellHeight = ($xeTable) => {
|
|
|
1327
1526
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
1328
1527
|
const el = $xeTable.$refs.refElem;
|
|
1329
1528
|
if (!isAllOverflow && scrollYLoad && el) {
|
|
1529
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1330
1530
|
tableData.forEach(row => {
|
|
1331
|
-
const rowid =
|
|
1531
|
+
const rowid = handleGetRowId(row);
|
|
1332
1532
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
1333
1533
|
if (rowRest) {
|
|
1334
1534
|
const height = calcCellAutoHeight(rowRest, el);
|
|
@@ -1569,9 +1769,10 @@ function hideDropTip($xeTable) {
|
|
|
1569
1769
|
* @param {Event} evnt 事件
|
|
1570
1770
|
* @param {Row} row 行对象
|
|
1571
1771
|
*/
|
|
1572
|
-
function handleTooltip($xeTable, evnt, tdEl, overflowElem,
|
|
1772
|
+
function handleTooltip($xeTable, evnt, tdEl, overflowElem, params) {
|
|
1573
1773
|
const reactData = $xeTable;
|
|
1574
|
-
|
|
1774
|
+
const tipOverEl = overflowElem || tdEl;
|
|
1775
|
+
if (!tipOverEl) {
|
|
1575
1776
|
return $xeTable.$nextTick();
|
|
1576
1777
|
}
|
|
1577
1778
|
params.cell = tdEl;
|
|
@@ -1581,9 +1782,8 @@ function handleTooltip($xeTable, evnt, tdEl, overflowElem, tipElem, params) {
|
|
|
1581
1782
|
const { showAll, contentMethod } = tooltipOpts;
|
|
1582
1783
|
const customContent = contentMethod ? contentMethod(params) : null;
|
|
1583
1784
|
const useCustom = contentMethod && !XEUtils.eqNull(customContent);
|
|
1584
|
-
const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ?
|
|
1585
|
-
|
|
1586
|
-
if (content && (showAll || useCustom || isCellOverflow)) {
|
|
1785
|
+
const content = useCustom ? customContent : XEUtils.toString(column.type === 'html' ? tipOverEl.innerText : tipOverEl.textContent).trim();
|
|
1786
|
+
if (content && (showAll || useCustom || (tipOverEl.scrollWidth > tipOverEl.clientWidth))) {
|
|
1587
1787
|
Object.assign(tooltipStore, {
|
|
1588
1788
|
row,
|
|
1589
1789
|
column,
|
|
@@ -1593,7 +1793,7 @@ function handleTooltip($xeTable, evnt, tdEl, overflowElem, tipElem, params) {
|
|
|
1593
1793
|
$xeTable.$nextTick(() => {
|
|
1594
1794
|
const $tooltip = $xeTable.$refs.refTooltip;
|
|
1595
1795
|
if ($tooltip && $tooltip.open) {
|
|
1596
|
-
$tooltip.open(
|
|
1796
|
+
$tooltip.open(tipOverEl, formatText(content));
|
|
1597
1797
|
}
|
|
1598
1798
|
});
|
|
1599
1799
|
}
|
|
@@ -1608,7 +1808,7 @@ function handleScrollToRowColumn($xeTable, fieldOrColumn, row) {
|
|
|
1608
1808
|
}
|
|
1609
1809
|
return $xeTable.$nextTick();
|
|
1610
1810
|
}
|
|
1611
|
-
|
|
1811
|
+
function handleRowExpandReserve($xeTable, row, expanded) {
|
|
1612
1812
|
const internalData = $xeTable;
|
|
1613
1813
|
const { rowExpandedReserveRowMap } = internalData;
|
|
1614
1814
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
@@ -1621,7 +1821,21 @@ const handleRowExpandReserve = ($xeTable, row, expanded) => {
|
|
|
1621
1821
|
delete rowExpandedReserveRowMap[rowid];
|
|
1622
1822
|
}
|
|
1623
1823
|
}
|
|
1624
|
-
}
|
|
1824
|
+
}
|
|
1825
|
+
function handleDefaultMergeCells($xeTable) {
|
|
1826
|
+
const props = $xeTable;
|
|
1827
|
+
const { mergeCells } = props;
|
|
1828
|
+
if (mergeCells) {
|
|
1829
|
+
$xeTable.setMergeCells(mergeCells);
|
|
1830
|
+
}
|
|
1831
|
+
}
|
|
1832
|
+
function handleDefaultMergeFooterItems($xeTable) {
|
|
1833
|
+
const props = $xeTable;
|
|
1834
|
+
const { mergeFooterItems } = props;
|
|
1835
|
+
if (mergeFooterItems) {
|
|
1836
|
+
$xeTable.setMergeFooterItems(mergeFooterItems);
|
|
1837
|
+
}
|
|
1838
|
+
}
|
|
1625
1839
|
// 计算可视渲染相关数据
|
|
1626
1840
|
function computeScrollLoad($xeTable) {
|
|
1627
1841
|
const reactData = $xeTable;
|
|
@@ -1709,6 +1923,26 @@ function handleRecalculateLayout($xeTable, reFull) {
|
|
|
1709
1923
|
}
|
|
1710
1924
|
});
|
|
1711
1925
|
}
|
|
1926
|
+
/**
|
|
1927
|
+
* 处理数据加载默认行为
|
|
1928
|
+
* 默认执行一次,除非被重置
|
|
1929
|
+
*/
|
|
1930
|
+
function handleLoadDefaults($xeTable) {
|
|
1931
|
+
handleDefaultSelectionChecked($xeTable);
|
|
1932
|
+
handleDefaultRadioChecked($xeTable);
|
|
1933
|
+
handleDefaultRowExpand($xeTable);
|
|
1934
|
+
handleDefaultTreeExpand($xeTable);
|
|
1935
|
+
handleDefaultMergeCells($xeTable);
|
|
1936
|
+
handleDefaultMergeFooterItems($xeTable);
|
|
1937
|
+
$xeTable.$nextTick(() => setTimeout(() => $xeTable.recalculate()));
|
|
1938
|
+
}
|
|
1939
|
+
/**
|
|
1940
|
+
* 处理初始化的默认行为
|
|
1941
|
+
* 只会执行一次
|
|
1942
|
+
*/
|
|
1943
|
+
function handleInitDefaults($xeTable) {
|
|
1944
|
+
handleDefaultSort($xeTable);
|
|
1945
|
+
}
|
|
1712
1946
|
function handleTableColumn($xeTable) {
|
|
1713
1947
|
const reactData = $xeTable;
|
|
1714
1948
|
const internalData = $xeTable;
|
|
@@ -1768,13 +2002,13 @@ function parseColumns($xeTable, isReset) {
|
|
|
1768
2002
|
const props = $xeTable;
|
|
1769
2003
|
const reactData = $xeTable;
|
|
1770
2004
|
const internalData = $xeTable;
|
|
1771
|
-
const { showOverflow } = props
|
|
1772
|
-
const rowOpts = $xeTable.computeRowOpts
|
|
2005
|
+
// const { showOverflow } = props
|
|
2006
|
+
// const rowOpts = $xeTable.computeRowOpts
|
|
1773
2007
|
const leftList = [];
|
|
1774
2008
|
const centerList = [];
|
|
1775
2009
|
const rightList = [];
|
|
1776
2010
|
const { isGroup, columnStore } = reactData;
|
|
1777
|
-
const
|
|
2011
|
+
const virtualXOpts = $xeTable.computeVirtualXOpts;
|
|
1778
2012
|
const { collectColumn, tableFullColumn, scrollXStore, fullColumnIdData } = internalData;
|
|
1779
2013
|
// 如果是分组表头,如果子列全部被隐藏,则根列也隐藏
|
|
1780
2014
|
if (isGroup) {
|
|
@@ -1838,32 +2072,32 @@ function parseColumns($xeTable, isReset) {
|
|
|
1838
2072
|
}
|
|
1839
2073
|
const visibleColumn = leftList.concat(centerList).concat(rightList);
|
|
1840
2074
|
// 如果gt为0,则总是启用
|
|
1841
|
-
const scrollXLoad = !!
|
|
2075
|
+
const scrollXLoad = !!virtualXOpts.enabled && virtualXOpts.gt > -1 && (virtualXOpts.gt === 0 || virtualXOpts.gt < tableFullColumn.length);
|
|
1842
2076
|
reactData.hasFixedColumn = leftList.length > 0 || rightList.length > 0;
|
|
1843
2077
|
Object.assign(columnStore, { leftList, centerList, rightList });
|
|
1844
2078
|
if (scrollXLoad) {
|
|
1845
|
-
if (showOverflow) {
|
|
1846
|
-
|
|
1847
|
-
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
}
|
|
1853
|
-
if (process.env.NODE_ENV === 'development') {
|
|
1854
|
-
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
|
|
1864
|
-
|
|
1865
|
-
|
|
1866
|
-
}
|
|
2079
|
+
// if (showOverflow) {
|
|
2080
|
+
// if (!rowOpts.height) {
|
|
2081
|
+
// const errColumn = internalData.tableFullColumn.find(column => column.showOverflow === false)
|
|
2082
|
+
// if (errColumn) {
|
|
2083
|
+
// errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true'])
|
|
2084
|
+
// }
|
|
2085
|
+
// }
|
|
2086
|
+
// }
|
|
2087
|
+
// if (process.env.NODE_ENV === 'development') {
|
|
2088
|
+
// if (props.showHeader && !props.showHeaderOverflow) {
|
|
2089
|
+
// warnLog('vxe.error.reqProp', ['show-header-overflow'])
|
|
2090
|
+
// }
|
|
2091
|
+
// if (props.showFooter && !props.showFooterOverflow) {
|
|
2092
|
+
// warnLog('vxe.error.reqProp', ['show-footer-overflow'])
|
|
2093
|
+
// }
|
|
2094
|
+
if (props.spanMethod) {
|
|
2095
|
+
warnLog('vxe.error.scrollErrProp', ['span-method']);
|
|
2096
|
+
}
|
|
2097
|
+
if (props.footerSpanMethod) {
|
|
2098
|
+
warnLog('vxe.error.scrollErrProp', ['footer-span-method']);
|
|
2099
|
+
}
|
|
2100
|
+
// }
|
|
1867
2101
|
if (isReset) {
|
|
1868
2102
|
const { visibleSize } = handleVirtualXVisible($xeTable);
|
|
1869
2103
|
scrollXStore.startIndex = 0;
|
|
@@ -1975,6 +2209,35 @@ function loadScrollYData($xeTable) {
|
|
|
1975
2209
|
}
|
|
1976
2210
|
}
|
|
1977
2211
|
}
|
|
2212
|
+
const createGetRowCacheProp = (prop) => {
|
|
2213
|
+
return function (row) {
|
|
2214
|
+
const $xeTable = this;
|
|
2215
|
+
const internalData = $xeTable;
|
|
2216
|
+
const { fullAllDataRowIdData } = internalData;
|
|
2217
|
+
if (row) {
|
|
2218
|
+
const rowid = getRowid($xeTable, row);
|
|
2219
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
2220
|
+
if (rowRest) {
|
|
2221
|
+
return rowRest[prop];
|
|
2222
|
+
}
|
|
2223
|
+
}
|
|
2224
|
+
return -1;
|
|
2225
|
+
};
|
|
2226
|
+
};
|
|
2227
|
+
const createGetColumnCacheProp = (prop) => {
|
|
2228
|
+
return function (column) {
|
|
2229
|
+
const $xeTable = this;
|
|
2230
|
+
const internalData = $xeTable;
|
|
2231
|
+
const { fullColumnIdData } = internalData;
|
|
2232
|
+
if (column) {
|
|
2233
|
+
const colRest = fullColumnIdData[column.id];
|
|
2234
|
+
if (colRest) {
|
|
2235
|
+
return colRest[prop];
|
|
2236
|
+
}
|
|
2237
|
+
}
|
|
2238
|
+
return -1;
|
|
2239
|
+
};
|
|
2240
|
+
};
|
|
1978
2241
|
function lazyScrollXData($xeTable) {
|
|
1979
2242
|
const internalData = $xeTable;
|
|
1980
2243
|
const { lxTimeout, lxRunTime, scrollXStore } = internalData;
|
|
@@ -2132,7 +2395,7 @@ function calcCellWidth($xeTable) {
|
|
|
2132
2395
|
}
|
|
2133
2396
|
function handleUpdateColResize($xeTable, evnt, params) {
|
|
2134
2397
|
$xeTable.analyColumnWidth();
|
|
2135
|
-
$xeTable.recalculate(
|
|
2398
|
+
$xeTable.recalculate().then(() => {
|
|
2136
2399
|
$xeTable.saveCustomStore('update:width');
|
|
2137
2400
|
$xeTable.updateCellAreas();
|
|
2138
2401
|
$xeTable.dispatchEvent('column-resizable-change', params, evnt);
|
|
@@ -2144,7 +2407,7 @@ function handleUpdateColResize($xeTable, evnt, params) {
|
|
|
2144
2407
|
function handleUpdateRowResize($xeTable, evnt, params) {
|
|
2145
2408
|
const reactData = $xeTable;
|
|
2146
2409
|
reactData.resizeHeightFlag++;
|
|
2147
|
-
$xeTable.recalculate(
|
|
2410
|
+
$xeTable.recalculate().then(() => {
|
|
2148
2411
|
$xeTable.updateCellAreas();
|
|
2149
2412
|
$xeTable.dispatchEvent('row-resizable-change', params, evnt);
|
|
2150
2413
|
setTimeout(() => $xeTable.recalculate(true), 300);
|
|
@@ -2165,16 +2428,17 @@ function updateColumnOffsetLeft($xeTable) {
|
|
|
2165
2428
|
function updateRowOffsetTop($xeTable) {
|
|
2166
2429
|
const reactData = $xeTable;
|
|
2167
2430
|
const internalData = $xeTable;
|
|
2168
|
-
const { expandColumn
|
|
2169
|
-
const { afterFullData, fullAllDataRowIdData } = internalData;
|
|
2431
|
+
const { expandColumn } = reactData;
|
|
2432
|
+
const { afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
2170
2433
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
2171
2434
|
const rowOpts = $xeTable.computeRowOpts;
|
|
2172
2435
|
const cellOpts = $xeTable.computeCellOpts;
|
|
2173
2436
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
2437
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
2174
2438
|
let offsetTop = 0;
|
|
2175
2439
|
for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
2176
2440
|
const row = afterFullData[rIndex];
|
|
2177
|
-
const rowid =
|
|
2441
|
+
const rowid = handleGetRowId(row);
|
|
2178
2442
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
2179
2443
|
rowRest.oTop = offsetTop;
|
|
2180
2444
|
offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
|
|
@@ -2187,47 +2451,43 @@ function updateRowOffsetTop($xeTable) {
|
|
|
2187
2451
|
function updateRowExpandStyle($xeTable) {
|
|
2188
2452
|
const reactData = $xeTable;
|
|
2189
2453
|
const internalData = $xeTable;
|
|
2190
|
-
const { expandColumn, scrollYLoad,
|
|
2454
|
+
const { expandColumn, scrollYLoad, scrollYTop, isScrollYBig } = reactData;
|
|
2191
2455
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
2192
2456
|
const rowOpts = $xeTable.computeRowOpts;
|
|
2193
2457
|
const cellOpts = $xeTable.computeCellOpts;
|
|
2194
2458
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
2195
2459
|
const { mode } = expandOpts;
|
|
2196
2460
|
if (expandColumn && mode === 'fixed') {
|
|
2197
|
-
const { elemStore,
|
|
2461
|
+
const { elemStore, fullAllDataRowIdData } = internalData;
|
|
2198
2462
|
const rowExpandEl = $xeTable.$refs.refRowExpandElem;
|
|
2199
2463
|
const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
|
|
2200
2464
|
if (rowExpandEl && bodyScrollElem) {
|
|
2201
2465
|
let isUpdateHeight = false;
|
|
2202
|
-
if (scrollYLoad) {
|
|
2203
|
-
let offsetTop = 0;
|
|
2204
|
-
for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
2205
|
-
const row = afterFullData[rIndex];
|
|
2206
|
-
const rowid = getRowid($xeTable, row);
|
|
2207
|
-
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
2208
|
-
rowRest.oTop = offsetTop;
|
|
2209
|
-
offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
|
|
2210
|
-
// 是否展开行
|
|
2211
|
-
if (expandColumn && rowExpandedMaps[rowid]) {
|
|
2212
|
-
offsetTop += rowRest.expandHeight || expandOpts.height || 0;
|
|
2213
|
-
}
|
|
2214
|
-
}
|
|
2215
|
-
}
|
|
2216
2466
|
XEUtils.arrayEach(rowExpandEl.children, reEl => {
|
|
2217
2467
|
const expandEl = reEl;
|
|
2218
2468
|
const rowid = expandEl.getAttribute('rowid') || '';
|
|
2219
2469
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
2220
2470
|
if (rowRest) {
|
|
2221
2471
|
const expandHeight = expandEl.offsetHeight + 1;
|
|
2472
|
+
const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
|
|
2473
|
+
let offsetTop = 0;
|
|
2222
2474
|
if (scrollYLoad) {
|
|
2223
|
-
|
|
2475
|
+
if (isScrollYBig && trEl) {
|
|
2476
|
+
offsetTop = trEl.offsetTop + trEl.offsetHeight;
|
|
2477
|
+
}
|
|
2478
|
+
else {
|
|
2479
|
+
offsetTop = rowRest.oTop + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight);
|
|
2480
|
+
}
|
|
2224
2481
|
}
|
|
2225
2482
|
else {
|
|
2226
|
-
const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
|
|
2227
2483
|
if (trEl) {
|
|
2228
|
-
|
|
2484
|
+
offsetTop = trEl.offsetTop + trEl.offsetHeight;
|
|
2229
2485
|
}
|
|
2230
2486
|
}
|
|
2487
|
+
if (isScrollYBig) {
|
|
2488
|
+
offsetTop += scrollYTop;
|
|
2489
|
+
}
|
|
2490
|
+
expandEl.style.top = toCssUnit(offsetTop);
|
|
2231
2491
|
if (!isUpdateHeight) {
|
|
2232
2492
|
if (rowRest.expandHeight !== expandHeight) {
|
|
2233
2493
|
isUpdateHeight = true;
|
|
@@ -2238,6 +2498,9 @@ function updateRowExpandStyle($xeTable) {
|
|
|
2238
2498
|
});
|
|
2239
2499
|
if (isUpdateHeight) {
|
|
2240
2500
|
reactData.rowExpandHeightFlag++;
|
|
2501
|
+
$xeTable.$nextTick(() => {
|
|
2502
|
+
updateRowOffsetTop($xeTable);
|
|
2503
|
+
});
|
|
2241
2504
|
}
|
|
2242
2505
|
}
|
|
2243
2506
|
}
|
|
@@ -2253,10 +2516,11 @@ function handleRowExpandScroll($xeTable) {
|
|
|
2253
2516
|
}
|
|
2254
2517
|
const Methods = {
|
|
2255
2518
|
callSlot(slotFunc, params, h, vNodes) {
|
|
2519
|
+
const $xeTable = this;
|
|
2520
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
2256
2521
|
if (slotFunc) {
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
return $xegrid.callSlot(slotFunc, params, h, vNodes);
|
|
2522
|
+
if ($xeGrid) {
|
|
2523
|
+
return $xeGrid.callSlot(slotFunc, params, h, vNodes);
|
|
2260
2524
|
}
|
|
2261
2525
|
if (XEUtils.isFunction(slotFunc)) {
|
|
2262
2526
|
return getSlotVNs(slotFunc.call(this, params, h, vNodes));
|
|
@@ -2272,8 +2536,10 @@ const Methods = {
|
|
|
2272
2536
|
* 获取父容器元素
|
|
2273
2537
|
*/
|
|
2274
2538
|
getParentElem() {
|
|
2275
|
-
const
|
|
2276
|
-
|
|
2539
|
+
const $xeTable = this;
|
|
2540
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
2541
|
+
const { $el } = this;
|
|
2542
|
+
return $xeGrid ? $xeGrid.$el.parentNode : $el.parentNode;
|
|
2277
2543
|
},
|
|
2278
2544
|
/**
|
|
2279
2545
|
* 获取父容器的高度
|
|
@@ -2306,8 +2572,9 @@ const Methods = {
|
|
|
2306
2572
|
* 如果存在表尾合计滚动条,则需要排除滚动条高度
|
|
2307
2573
|
*/
|
|
2308
2574
|
getExcludeHeight() {
|
|
2309
|
-
const
|
|
2310
|
-
|
|
2575
|
+
const $xeTable = this;
|
|
2576
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
2577
|
+
return $xeGrid ? $xeGrid.getExcludeHeight() : 0;
|
|
2311
2578
|
},
|
|
2312
2579
|
/**
|
|
2313
2580
|
* 重置表格的一切数据状态
|
|
@@ -2380,15 +2647,23 @@ const Methods = {
|
|
|
2380
2647
|
*/
|
|
2381
2648
|
loadTableData(datas, isReset) {
|
|
2382
2649
|
const $xeTable = this;
|
|
2650
|
+
const props = $xeTable;
|
|
2383
2651
|
const reactData = $xeTable;
|
|
2384
2652
|
const internalData = $xeTable;
|
|
2385
|
-
const { keepSource, treeConfig
|
|
2653
|
+
const { keepSource, treeConfig } = props;
|
|
2654
|
+
const { scrollYLoad: oldScrollYLoad } = reactData;
|
|
2655
|
+
const { scrollYStore, scrollXStore, lastScrollLeft, lastScrollTop } = internalData;
|
|
2656
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
2657
|
+
const { transform } = treeOpts;
|
|
2386
2658
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2387
2659
|
let treeData = [];
|
|
2388
2660
|
let fullData = datas ? datas.slice(0) : [];
|
|
2661
|
+
if (fullData.length > supportMaxRow) {
|
|
2662
|
+
errLog('vxe.error.errMaxRow', [supportMaxRow]);
|
|
2663
|
+
}
|
|
2389
2664
|
if (treeConfig) {
|
|
2390
2665
|
// 树结构自动转换
|
|
2391
|
-
if (
|
|
2666
|
+
if (transform) {
|
|
2392
2667
|
if (!treeOpts.rowField) {
|
|
2393
2668
|
errLog('vxe.error.reqProp', ['table.tree-config.rowField']);
|
|
2394
2669
|
}
|
|
@@ -2427,8 +2702,8 @@ const Methods = {
|
|
|
2427
2702
|
scrollXStore.endIndex = 1;
|
|
2428
2703
|
reactData.isRowLoading = true;
|
|
2429
2704
|
reactData.scrollVMLoading = false;
|
|
2430
|
-
|
|
2431
|
-
|
|
2705
|
+
internalData.insertRowMaps = {};
|
|
2706
|
+
internalData.removeRowMaps = {};
|
|
2432
2707
|
const sYLoad = updateScrollYStatus($xeTable, fullData);
|
|
2433
2708
|
reactData.isDragColMove = false;
|
|
2434
2709
|
reactData.isDragRowMove = false;
|
|
@@ -2446,15 +2721,15 @@ const Methods = {
|
|
|
2446
2721
|
if (keepSource) {
|
|
2447
2722
|
$xeTable.cacheSourceMap(fullData);
|
|
2448
2723
|
}
|
|
2449
|
-
if (
|
|
2450
|
-
|
|
2451
|
-
|
|
2724
|
+
if ($xeTable.clearCellAreas && props.mouseConfig) {
|
|
2725
|
+
$xeTable.clearCellAreas();
|
|
2726
|
+
$xeTable.clearCopyCellArea();
|
|
2452
2727
|
}
|
|
2453
|
-
|
|
2454
|
-
|
|
2455
|
-
|
|
2456
|
-
|
|
2457
|
-
return
|
|
2728
|
+
$xeTable.clearMergeCells();
|
|
2729
|
+
$xeTable.clearMergeFooterItems();
|
|
2730
|
+
$xeTable.handleTableData(true);
|
|
2731
|
+
$xeTable.updateFooter();
|
|
2732
|
+
return $xeTable.$nextTick().then(() => {
|
|
2458
2733
|
updateHeight($xeTable);
|
|
2459
2734
|
updateStyle($xeTable);
|
|
2460
2735
|
}).then(() => {
|
|
@@ -2467,49 +2742,51 @@ const Methods = {
|
|
|
2467
2742
|
if (sYLoad) {
|
|
2468
2743
|
// if (showOverflow) {
|
|
2469
2744
|
// if (!rowOpts.height) {
|
|
2470
|
-
// const errColumn =
|
|
2745
|
+
// const errColumn = internalData.tableFullColumn.find((column: any) => column.showOverflow === false)
|
|
2471
2746
|
// if (errColumn) {
|
|
2472
2747
|
// errLog('vxe.error.errProp', [`column[field="${errColumn.field}"].show-overflow=false`, 'show-overflow=true'])
|
|
2473
2748
|
// }
|
|
2474
2749
|
// }
|
|
2475
2750
|
// }
|
|
2476
|
-
if (!(
|
|
2751
|
+
if (!(props.height || props.maxHeight)) {
|
|
2477
2752
|
errLog('vxe.error.reqProp', ['table.height | table.max-height | table.scroll-y={enabled: false}']);
|
|
2478
2753
|
}
|
|
2479
|
-
// if (!
|
|
2754
|
+
// if (!props.showOverflow) {
|
|
2480
2755
|
// warnLog('vxe.error.reqProp', ['table.show-overflow'])
|
|
2481
2756
|
// }
|
|
2482
|
-
if (
|
|
2757
|
+
if (props.spanMethod) {
|
|
2483
2758
|
errLog('vxe.error.scrollErrProp', ['table.span-method']);
|
|
2484
2759
|
}
|
|
2485
2760
|
}
|
|
2486
2761
|
handleReserveStatus($xeTable);
|
|
2487
|
-
|
|
2762
|
+
$xeTable.checkSelectionStatus();
|
|
2488
2763
|
return new Promise(resolve => {
|
|
2489
2764
|
this.$nextTick()
|
|
2490
|
-
.then(() =>
|
|
2765
|
+
.then(() => $xeTable.recalculate())
|
|
2491
2766
|
.then(() => {
|
|
2492
2767
|
let targetScrollLeft = lastScrollLeft;
|
|
2493
2768
|
let targetScrollTop = lastScrollTop;
|
|
2769
|
+
const virtualXOpts = $xeTable.computeVirtualXOpts;
|
|
2770
|
+
const virtualYOpts = $xeTable.computeVirtualYOpts;
|
|
2494
2771
|
// 是否在更新数据之后自动滚动重置滚动条
|
|
2495
|
-
if (
|
|
2772
|
+
if (virtualXOpts.scrollToLeftOnChange) {
|
|
2496
2773
|
targetScrollLeft = 0;
|
|
2497
2774
|
}
|
|
2498
|
-
if (
|
|
2775
|
+
if (virtualYOpts.scrollToTopOnChange) {
|
|
2499
2776
|
targetScrollTop = 0;
|
|
2500
2777
|
}
|
|
2501
2778
|
reactData.isRowLoading = false;
|
|
2502
2779
|
calcCellHeight($xeTable);
|
|
2503
2780
|
// 是否变更虚拟滚动
|
|
2504
2781
|
if (oldScrollYLoad === sYLoad) {
|
|
2505
|
-
restoreScrollLocation(
|
|
2782
|
+
restoreScrollLocation($xeTable, targetScrollLeft, targetScrollTop)
|
|
2506
2783
|
.then(() => {
|
|
2507
2784
|
resolve();
|
|
2508
2785
|
});
|
|
2509
2786
|
}
|
|
2510
2787
|
else {
|
|
2511
2788
|
setTimeout(() => {
|
|
2512
|
-
restoreScrollLocation(
|
|
2789
|
+
restoreScrollLocation($xeTable, targetScrollLeft, targetScrollTop)
|
|
2513
2790
|
.then(() => {
|
|
2514
2791
|
resolve();
|
|
2515
2792
|
});
|
|
@@ -2524,12 +2801,13 @@ const Methods = {
|
|
|
2524
2801
|
* @param {Array} datas 数据
|
|
2525
2802
|
*/
|
|
2526
2803
|
loadData(datas) {
|
|
2804
|
+
const $xeTable = this;
|
|
2527
2805
|
const { initStatus } = this;
|
|
2528
2806
|
return this.loadTableData(datas, false).then(() => {
|
|
2529
2807
|
this.inited = true;
|
|
2530
2808
|
this.initStatus = true;
|
|
2531
2809
|
if (!initStatus) {
|
|
2532
|
-
|
|
2810
|
+
handleLoadDefaults($xeTable);
|
|
2533
2811
|
}
|
|
2534
2812
|
return this.recalculate();
|
|
2535
2813
|
});
|
|
@@ -2539,6 +2817,7 @@ const Methods = {
|
|
|
2539
2817
|
* @param {Array} datas 数据
|
|
2540
2818
|
*/
|
|
2541
2819
|
reloadData(datas) {
|
|
2820
|
+
const $xeTable = this;
|
|
2542
2821
|
return this.clearAll()
|
|
2543
2822
|
.then(() => {
|
|
2544
2823
|
this.inited = true;
|
|
@@ -2546,7 +2825,7 @@ const Methods = {
|
|
|
2546
2825
|
return this.loadTableData(datas, true);
|
|
2547
2826
|
})
|
|
2548
2827
|
.then(() => {
|
|
2549
|
-
|
|
2828
|
+
handleLoadDefaults($xeTable);
|
|
2550
2829
|
return this.recalculate();
|
|
2551
2830
|
});
|
|
2552
2831
|
},
|
|
@@ -2628,18 +2907,14 @@ const Methods = {
|
|
|
2628
2907
|
const reactData = $xeTable;
|
|
2629
2908
|
const internalData = $xeTable;
|
|
2630
2909
|
const { treeConfig } = props;
|
|
2631
|
-
const { treeExpandedMaps } =
|
|
2632
|
-
const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData;
|
|
2910
|
+
const { fullAllDataRowIdData, tableFullData, tableFullTreeData, treeExpandedMaps } = internalData;
|
|
2633
2911
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
2634
2912
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2635
2913
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
2636
2914
|
const { lazy } = treeOpts;
|
|
2637
|
-
const rowkey = getRowkey($xeTable);
|
|
2638
|
-
const isDeepKey = rowkey.indexOf('.') > -1;
|
|
2639
2915
|
const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
|
|
2640
2916
|
const fullDataRowIdMaps = {};
|
|
2641
|
-
const
|
|
2642
|
-
const handleRowId = isDeepKey ? updateDeepRowKey : updateFastRowKey;
|
|
2917
|
+
const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
|
|
2643
2918
|
const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
|
|
2644
2919
|
let rowRest = fullAllDataRowIdMaps[rowid];
|
|
2645
2920
|
if (!rowRest) {
|
|
@@ -2658,15 +2933,14 @@ const Methods = {
|
|
|
2658
2933
|
};
|
|
2659
2934
|
if (treeConfig) {
|
|
2660
2935
|
XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
|
|
2661
|
-
const rowid =
|
|
2936
|
+
const rowid = handleUpdateRowId(row);
|
|
2662
2937
|
if (treeConfig && lazy) {
|
|
2663
|
-
const treeExpRest = treeTempExpandedMaps[rowid];
|
|
2664
2938
|
if (row[hasChildField] && row[childrenField] === undefined) {
|
|
2665
2939
|
row[childrenField] = null;
|
|
2666
2940
|
}
|
|
2667
|
-
if (
|
|
2941
|
+
if (treeExpandedMaps[rowid]) {
|
|
2668
2942
|
if (!row[childrenField] || !row[childrenField].length) {
|
|
2669
|
-
delete
|
|
2943
|
+
delete treeExpandedMaps[rowid];
|
|
2670
2944
|
}
|
|
2671
2945
|
}
|
|
2672
2946
|
}
|
|
@@ -2675,12 +2949,12 @@ const Methods = {
|
|
|
2675
2949
|
}
|
|
2676
2950
|
else {
|
|
2677
2951
|
tableFullData.forEach((row, index, items) => {
|
|
2678
|
-
handleRowCache(row, index, items, index, null,
|
|
2952
|
+
handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1);
|
|
2679
2953
|
});
|
|
2680
2954
|
}
|
|
2681
2955
|
internalData.fullDataRowIdData = fullDataRowIdMaps;
|
|
2682
2956
|
internalData.fullAllDataRowIdData = fullAllDataRowIdMaps;
|
|
2683
|
-
reactData.
|
|
2957
|
+
reactData.treeExpandedFlag++;
|
|
2684
2958
|
},
|
|
2685
2959
|
cacheSourceMap(fullData) {
|
|
2686
2960
|
const $xeTable = this;
|
|
@@ -2688,17 +2962,12 @@ const Methods = {
|
|
|
2688
2962
|
const internalData = $xeTable;
|
|
2689
2963
|
const { treeConfig } = props;
|
|
2690
2964
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
2691
|
-
let { sourceDataRowIdData } = internalData;
|
|
2692
2965
|
const sourceData = XEUtils.clone(fullData, true);
|
|
2693
|
-
const
|
|
2694
|
-
|
|
2966
|
+
const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
|
|
2967
|
+
const sourceRowIdData = {};
|
|
2695
2968
|
const handleSourceRow = (row) => {
|
|
2696
|
-
|
|
2697
|
-
|
|
2698
|
-
rowid = getRowUniqueId();
|
|
2699
|
-
XEUtils.set(row, rowkey, rowid);
|
|
2700
|
-
}
|
|
2701
|
-
sourceDataRowIdData[rowid] = row;
|
|
2969
|
+
const rowid = handleUpdateRowId(row);
|
|
2970
|
+
sourceRowIdData[rowid] = row;
|
|
2702
2971
|
};
|
|
2703
2972
|
// 源数据缓存
|
|
2704
2973
|
if (treeConfig) {
|
|
@@ -2708,14 +2977,21 @@ const Methods = {
|
|
|
2708
2977
|
else {
|
|
2709
2978
|
sourceData.forEach(handleSourceRow);
|
|
2710
2979
|
}
|
|
2980
|
+
internalData.sourceDataRowIdData = sourceRowIdData;
|
|
2711
2981
|
internalData.tableSourceData = sourceData;
|
|
2712
2982
|
},
|
|
2713
2983
|
getParams() {
|
|
2714
|
-
|
|
2984
|
+
const $xeTable = this;
|
|
2985
|
+
const props = $xeTable;
|
|
2986
|
+
return props.params;
|
|
2715
2987
|
},
|
|
2716
2988
|
loadTreeChildren(row, childRecords) {
|
|
2717
2989
|
const $xeTable = this;
|
|
2718
|
-
const
|
|
2990
|
+
const props = $xeTable;
|
|
2991
|
+
const internalData = $xeTable;
|
|
2992
|
+
const { keepSource } = props;
|
|
2993
|
+
const { tableSourceData, fullDataRowIdData, fullAllDataRowIdData, sourceDataRowIdData } = internalData;
|
|
2994
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
2719
2995
|
const { transform, mapChildrenField } = treeOpts;
|
|
2720
2996
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2721
2997
|
const parentRest = fullAllDataRowIdData[getRowid($xeTable, row)];
|
|
@@ -2752,18 +3028,22 @@ const Methods = {
|
|
|
2752
3028
|
* @param {Element} tr 元素
|
|
2753
3029
|
*/
|
|
2754
3030
|
getRowNode(tr) {
|
|
3031
|
+
const $xeTable = this;
|
|
3032
|
+
const internalData = $xeTable;
|
|
2755
3033
|
if (tr) {
|
|
2756
|
-
const { fullAllDataRowIdData } =
|
|
3034
|
+
const { fullAllDataRowIdData } = internalData;
|
|
2757
3035
|
const rowid = tr.getAttribute('rowid');
|
|
2758
|
-
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
|
|
2764
|
-
|
|
2765
|
-
|
|
2766
|
-
|
|
3036
|
+
if (rowid) {
|
|
3037
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
3038
|
+
if (rowRest) {
|
|
3039
|
+
return {
|
|
3040
|
+
rowid: rowRest.rowid,
|
|
3041
|
+
item: rowRest.row,
|
|
3042
|
+
index: rowRest.index,
|
|
3043
|
+
items: rowRest.items,
|
|
3044
|
+
parent: rowRest.parent
|
|
3045
|
+
};
|
|
3046
|
+
}
|
|
2767
3047
|
}
|
|
2768
3048
|
}
|
|
2769
3049
|
return null;
|
|
@@ -2773,8 +3053,10 @@ const Methods = {
|
|
|
2773
3053
|
* @param {Element} cell 元素
|
|
2774
3054
|
*/
|
|
2775
3055
|
getColumnNode(cell) {
|
|
3056
|
+
const $xeTable = this;
|
|
3057
|
+
const internalData = $xeTable;
|
|
2776
3058
|
if (cell) {
|
|
2777
|
-
const { fullColumnIdData } =
|
|
3059
|
+
const { fullColumnIdData } = internalData;
|
|
2778
3060
|
const colid = cell.getAttribute('colid');
|
|
2779
3061
|
if (colid) {
|
|
2780
3062
|
const colRest = fullColumnIdData[colid];
|
|
@@ -2795,47 +3077,22 @@ const Methods = {
|
|
|
2795
3077
|
* 根据 row 获取序号
|
|
2796
3078
|
* @param {Row} row 行对象
|
|
2797
3079
|
*/
|
|
2798
|
-
getRowSeq(
|
|
2799
|
-
const { fullAllDataRowIdData } = this;
|
|
2800
|
-
if (row) {
|
|
2801
|
-
const rowid = getRowid(this, row);
|
|
2802
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2803
|
-
if (rest) {
|
|
2804
|
-
return rest.seq;
|
|
2805
|
-
}
|
|
2806
|
-
}
|
|
2807
|
-
return -1;
|
|
2808
|
-
},
|
|
3080
|
+
getRowSeq: createGetRowCacheProp('seq'),
|
|
2809
3081
|
/**
|
|
2810
3082
|
* 根据 row 获取相对于 data 中的索引
|
|
2811
3083
|
* @param {Row} row 行对象
|
|
2812
3084
|
*/
|
|
2813
|
-
getRowIndex(
|
|
2814
|
-
const { fullAllDataRowIdData } = this;
|
|
2815
|
-
if (row) {
|
|
2816
|
-
const rowid = getRowid(this, row);
|
|
2817
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2818
|
-
if (rest) {
|
|
2819
|
-
return rest.index;
|
|
2820
|
-
}
|
|
2821
|
-
}
|
|
2822
|
-
return -1;
|
|
2823
|
-
},
|
|
3085
|
+
getRowIndex: createGetRowCacheProp('index'),
|
|
2824
3086
|
/**
|
|
2825
3087
|
* 根据 row 获取相对于当前数据中的索引
|
|
2826
3088
|
* @param {Row} row 行对象
|
|
2827
3089
|
*/
|
|
2828
|
-
getVTRowIndex(
|
|
2829
|
-
|
|
2830
|
-
|
|
2831
|
-
|
|
2832
|
-
|
|
2833
|
-
|
|
2834
|
-
return rest._index;
|
|
2835
|
-
}
|
|
2836
|
-
}
|
|
2837
|
-
return -1;
|
|
2838
|
-
},
|
|
3090
|
+
getVTRowIndex: createGetRowCacheProp('_index'),
|
|
3091
|
+
/**
|
|
3092
|
+
* 根据 row 获取渲染中的虚拟索引
|
|
3093
|
+
* @param {Row} row 行对象
|
|
3094
|
+
*/
|
|
3095
|
+
getVMRowIndex: createGetRowCacheProp('$index'),
|
|
2839
3096
|
// 在 v3 中废弃
|
|
2840
3097
|
_getRowIndex(row) {
|
|
2841
3098
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2843,21 +3100,6 @@ const Methods = {
|
|
|
2843
3100
|
}
|
|
2844
3101
|
return this.getVTRowIndex(row);
|
|
2845
3102
|
},
|
|
2846
|
-
/**
|
|
2847
|
-
* 根据 row 获取渲染中的虚拟索引
|
|
2848
|
-
* @param {Row} row 行对象
|
|
2849
|
-
*/
|
|
2850
|
-
getVMRowIndex(row) {
|
|
2851
|
-
const { fullAllDataRowIdData } = this;
|
|
2852
|
-
if (row) {
|
|
2853
|
-
const rowid = getRowid(this, row);
|
|
2854
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2855
|
-
if (rest) {
|
|
2856
|
-
return rest.$index;
|
|
2857
|
-
}
|
|
2858
|
-
}
|
|
2859
|
-
return -1;
|
|
2860
|
-
},
|
|
2861
3103
|
// 在 v3 中废弃
|
|
2862
3104
|
$getRowIndex(row) {
|
|
2863
3105
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2869,30 +3111,17 @@ const Methods = {
|
|
|
2869
3111
|
* 根据 column 获取相对于 columns 中的索引
|
|
2870
3112
|
* @param {ColumnInfo} column 列配置
|
|
2871
3113
|
*/
|
|
2872
|
-
getColumnIndex(
|
|
2873
|
-
const { fullColumnIdData } = this;
|
|
2874
|
-
if (column) {
|
|
2875
|
-
const rest = fullColumnIdData[column.id];
|
|
2876
|
-
if (rest) {
|
|
2877
|
-
return rest.index;
|
|
2878
|
-
}
|
|
2879
|
-
}
|
|
2880
|
-
return -1;
|
|
2881
|
-
},
|
|
3114
|
+
getColumnIndex: createGetColumnCacheProp('index'),
|
|
2882
3115
|
/**
|
|
2883
3116
|
* 根据 column 获取相对于当前表格列中的索引
|
|
2884
3117
|
* @param {ColumnInfo} column 列配置
|
|
2885
3118
|
*/
|
|
2886
|
-
getVTColumnIndex(
|
|
2887
|
-
|
|
2888
|
-
|
|
2889
|
-
|
|
2890
|
-
|
|
2891
|
-
|
|
2892
|
-
}
|
|
2893
|
-
}
|
|
2894
|
-
return -1;
|
|
2895
|
-
},
|
|
3119
|
+
getVTColumnIndex: createGetColumnCacheProp('_index'),
|
|
3120
|
+
/**
|
|
3121
|
+
* 根据 column 获取渲染中的虚拟索引
|
|
3122
|
+
* @param {ColumnInfo} column 列配置
|
|
3123
|
+
*/
|
|
3124
|
+
getVMColumnIndex: createGetColumnCacheProp('$index'),
|
|
2896
3125
|
// 在 v3 中废弃
|
|
2897
3126
|
_getColumnIndex(column) {
|
|
2898
3127
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2900,20 +3129,6 @@ const Methods = {
|
|
|
2900
3129
|
}
|
|
2901
3130
|
return this.getVTColumnIndex(column);
|
|
2902
3131
|
},
|
|
2903
|
-
/**
|
|
2904
|
-
* 根据 column 获取渲染中的虚拟索引
|
|
2905
|
-
* @param {ColumnInfo} column 列配置
|
|
2906
|
-
*/
|
|
2907
|
-
getVMColumnIndex(column) {
|
|
2908
|
-
const { fullColumnIdData } = this;
|
|
2909
|
-
if (column) {
|
|
2910
|
-
const rest = fullColumnIdData[column.id];
|
|
2911
|
-
if (rest) {
|
|
2912
|
-
return rest.$index;
|
|
2913
|
-
}
|
|
2914
|
-
}
|
|
2915
|
-
return -1;
|
|
2916
|
-
},
|
|
2917
3132
|
// 在 v3 中废弃
|
|
2918
3133
|
$getColumnIndex(column) {
|
|
2919
3134
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2933,14 +3148,21 @@ const Methods = {
|
|
|
2933
3148
|
* @param {Row} records 行数据
|
|
2934
3149
|
*/
|
|
2935
3150
|
defineField(records) {
|
|
2936
|
-
const
|
|
3151
|
+
const $xeTable = this;
|
|
3152
|
+
const props = $xeTable;
|
|
3153
|
+
const internalData = $xeTable;
|
|
3154
|
+
const { treeConfig } = props;
|
|
3155
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
3156
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
3157
|
+
const radioOpts = $xeTable.computeRadioOpts;
|
|
3158
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
2937
3159
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2938
|
-
const rowkey = getRowkey(
|
|
3160
|
+
const rowkey = getRowkey($xeTable);
|
|
2939
3161
|
if (!XEUtils.isArray(records)) {
|
|
2940
3162
|
records = [records || {}];
|
|
2941
3163
|
}
|
|
2942
3164
|
return records.map((record) => {
|
|
2943
|
-
|
|
3165
|
+
internalData.tableFullColumn.forEach(column => {
|
|
2944
3166
|
const { field, editRender } = column;
|
|
2945
3167
|
if (field && !XEUtils.has(record, field)) {
|
|
2946
3168
|
let cellValue = null;
|
|
@@ -2978,8 +3200,9 @@ const Methods = {
|
|
|
2978
3200
|
* @param {Array} records 新数据
|
|
2979
3201
|
*/
|
|
2980
3202
|
createData(records) {
|
|
2981
|
-
|
|
2982
|
-
|
|
3203
|
+
const $xeTable = this;
|
|
3204
|
+
return $xeTable.$nextTick().then(() => {
|
|
3205
|
+
return $xeTable.defineField(records);
|
|
2983
3206
|
});
|
|
2984
3207
|
},
|
|
2985
3208
|
/**
|
|
@@ -2988,11 +3211,12 @@ const Methods = {
|
|
|
2988
3211
|
* @param {Array/Object} records 新数据
|
|
2989
3212
|
*/
|
|
2990
3213
|
createRow(records) {
|
|
3214
|
+
const $xeTable = this;
|
|
2991
3215
|
const isArr = XEUtils.isArray(records);
|
|
2992
3216
|
if (!isArr) {
|
|
2993
3217
|
records = [records];
|
|
2994
3218
|
}
|
|
2995
|
-
return
|
|
3219
|
+
return $xeTable.createData(records).then((rows) => isArr ? rows : rows[0]);
|
|
2996
3220
|
},
|
|
2997
3221
|
/**
|
|
2998
3222
|
* 还原数据
|
|
@@ -3007,11 +3231,10 @@ const Methods = {
|
|
|
3007
3231
|
const reactData = $xeTable;
|
|
3008
3232
|
const internalData = $xeTable;
|
|
3009
3233
|
const { keepSource, treeConfig } = props;
|
|
3010
|
-
const {
|
|
3011
|
-
const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
|
|
3012
|
-
const removeTempMaps = Object.assign({}, editStore.removeMaps);
|
|
3234
|
+
const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData, removeRowMaps } = internalData;
|
|
3013
3235
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3014
3236
|
const { transform } = treeOpts;
|
|
3237
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
3015
3238
|
if (!keepSource) {
|
|
3016
3239
|
if (process.env.NODE_ENV === 'development') {
|
|
3017
3240
|
errLog('vxe.error.reqProp', ['keep-source']);
|
|
@@ -3030,7 +3253,7 @@ const Methods = {
|
|
|
3030
3253
|
let reDelFlag = false;
|
|
3031
3254
|
if (targetRows.length) {
|
|
3032
3255
|
targetRows.forEach((item) => {
|
|
3033
|
-
const rowid =
|
|
3256
|
+
const rowid = handleGetRowId(item);
|
|
3034
3257
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
3035
3258
|
if (rowRest) {
|
|
3036
3259
|
const row = rowRest.row;
|
|
@@ -3044,7 +3267,9 @@ const Methods = {
|
|
|
3044
3267
|
XEUtils.destructuring(row, XEUtils.clone(oRow, true));
|
|
3045
3268
|
}
|
|
3046
3269
|
if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
|
|
3047
|
-
|
|
3270
|
+
if (removeRowMaps[rowid]) {
|
|
3271
|
+
delete removeRowMaps[rowid];
|
|
3272
|
+
}
|
|
3048
3273
|
tableFullData.unshift(row);
|
|
3049
3274
|
afterFullData.unshift(row);
|
|
3050
3275
|
reDelFlag = true;
|
|
@@ -3056,7 +3281,7 @@ const Methods = {
|
|
|
3056
3281
|
}
|
|
3057
3282
|
if (rows) {
|
|
3058
3283
|
if (reDelFlag) {
|
|
3059
|
-
|
|
3284
|
+
reactData.removeRowFlag++;
|
|
3060
3285
|
$xeTable.updateFooter();
|
|
3061
3286
|
$xeTable.cacheRowMap(false);
|
|
3062
3287
|
$xeTable.handleTableData(treeConfig && transform);
|
|
@@ -3085,7 +3310,9 @@ const Methods = {
|
|
|
3085
3310
|
* @param {String} field 字段名
|
|
3086
3311
|
*/
|
|
3087
3312
|
clearData(rows, field) {
|
|
3088
|
-
const
|
|
3313
|
+
const $xeTable = this;
|
|
3314
|
+
const internalData = $xeTable;
|
|
3315
|
+
const { tableFullData, visibleColumn } = internalData;
|
|
3089
3316
|
if (!arguments.length) {
|
|
3090
3317
|
rows = tableFullData;
|
|
3091
3318
|
}
|
|
@@ -3104,7 +3331,7 @@ const Methods = {
|
|
|
3104
3331
|
});
|
|
3105
3332
|
});
|
|
3106
3333
|
}
|
|
3107
|
-
return
|
|
3334
|
+
return $xeTable.$nextTick();
|
|
3108
3335
|
},
|
|
3109
3336
|
getCellElement(row, fieldOrColumn) {
|
|
3110
3337
|
const $xeTable = this;
|
|
@@ -3195,16 +3422,16 @@ const Methods = {
|
|
|
3195
3422
|
isInsertByRow(row) {
|
|
3196
3423
|
const $xeTable = this;
|
|
3197
3424
|
const reactData = $xeTable;
|
|
3198
|
-
const
|
|
3425
|
+
const internalData = $xeTable;
|
|
3199
3426
|
const rowid = getRowid($xeTable, row);
|
|
3200
|
-
return !!
|
|
3427
|
+
return !!reactData.insertRowFlag && !!internalData.insertRowMaps[rowid];
|
|
3201
3428
|
},
|
|
3202
3429
|
isRemoveByRow(row) {
|
|
3203
3430
|
const $xeTable = this;
|
|
3204
3431
|
const reactData = $xeTable;
|
|
3205
|
-
const
|
|
3432
|
+
const internalData = $xeTable;
|
|
3206
3433
|
const rowid = getRowid($xeTable, row);
|
|
3207
|
-
return !!
|
|
3434
|
+
return !!reactData.removeRowFlag && !!internalData.removeRowMaps[rowid];
|
|
3208
3435
|
},
|
|
3209
3436
|
/**
|
|
3210
3437
|
* 删除所有新增的临时数据
|
|
@@ -3212,9 +3439,8 @@ const Methods = {
|
|
|
3212
3439
|
*/
|
|
3213
3440
|
removeInsertRow() {
|
|
3214
3441
|
const $xeTable = this;
|
|
3215
|
-
const
|
|
3216
|
-
|
|
3217
|
-
editStore.insertMaps = {};
|
|
3442
|
+
const internalData = $xeTable;
|
|
3443
|
+
internalData.insertRowMaps = {};
|
|
3218
3444
|
return $xeTable.remove($xeTable.getInsertRecords());
|
|
3219
3445
|
},
|
|
3220
3446
|
/**
|
|
@@ -3256,14 +3482,17 @@ const Methods = {
|
|
|
3256
3482
|
* @param {Number} columnIndex 索引
|
|
3257
3483
|
*/
|
|
3258
3484
|
getColumns(columnIndex) {
|
|
3259
|
-
const
|
|
3260
|
-
|
|
3485
|
+
const $xeTable = this;
|
|
3486
|
+
const internalData = $xeTable;
|
|
3487
|
+
const { visibleColumn } = internalData;
|
|
3488
|
+
return XEUtils.isUndefined(columnIndex) ? visibleColumn.slice(0) : visibleColumn[columnIndex];
|
|
3261
3489
|
},
|
|
3262
3490
|
/**
|
|
3263
3491
|
* 根据列获取列的唯一主键
|
|
3264
3492
|
*/
|
|
3265
3493
|
getColid(fieldOrColumn) {
|
|
3266
|
-
const
|
|
3494
|
+
const $xeTable = this;
|
|
3495
|
+
const column = handleFieldOrColumn($xeTable, fieldOrColumn);
|
|
3267
3496
|
return column ? column.id : null;
|
|
3268
3497
|
},
|
|
3269
3498
|
/**
|
|
@@ -3271,7 +3500,9 @@ const Methods = {
|
|
|
3271
3500
|
* @param {String} colid 列主键
|
|
3272
3501
|
*/
|
|
3273
3502
|
getColumnById(colid) {
|
|
3274
|
-
const
|
|
3503
|
+
const $xeTable = this;
|
|
3504
|
+
const internalData = $xeTable;
|
|
3505
|
+
const { fullColumnIdData } = internalData;
|
|
3275
3506
|
return fullColumnIdData[colid] ? fullColumnIdData[colid].column : null;
|
|
3276
3507
|
},
|
|
3277
3508
|
/**
|
|
@@ -3279,7 +3510,9 @@ const Methods = {
|
|
|
3279
3510
|
* @param {String} field 字段名
|
|
3280
3511
|
*/
|
|
3281
3512
|
getColumnByField(field) {
|
|
3282
|
-
const
|
|
3513
|
+
const $xeTable = this;
|
|
3514
|
+
const internalData = $xeTable;
|
|
3515
|
+
const { fullColumnFieldData } = internalData;
|
|
3283
3516
|
return fullColumnFieldData[field] ? fullColumnFieldData[field].column : null;
|
|
3284
3517
|
},
|
|
3285
3518
|
getParentColumn(fieldOrColumn) {
|
|
@@ -3292,11 +3525,14 @@ const Methods = {
|
|
|
3292
3525
|
* 收集到的全量列、全量表头列、处理条件之后的全量表头列、当前渲染中的表头列
|
|
3293
3526
|
*/
|
|
3294
3527
|
getTableColumn() {
|
|
3528
|
+
const $xeTable = this;
|
|
3529
|
+
const reactData = $xeTable;
|
|
3530
|
+
const internalData = $xeTable;
|
|
3295
3531
|
return {
|
|
3296
|
-
collectColumn:
|
|
3297
|
-
fullColumn:
|
|
3298
|
-
visibleColumn:
|
|
3299
|
-
tableColumn:
|
|
3532
|
+
collectColumn: internalData.collectColumn.slice(0),
|
|
3533
|
+
fullColumn: internalData.tableFullColumn.slice(0),
|
|
3534
|
+
visibleColumn: internalData.visibleColumn.slice(0),
|
|
3535
|
+
tableColumn: reactData.tableColumn.slice(0)
|
|
3300
3536
|
};
|
|
3301
3537
|
},
|
|
3302
3538
|
/**
|
|
@@ -3414,11 +3650,9 @@ const Methods = {
|
|
|
3414
3650
|
getCheckboxRecords(isFull) {
|
|
3415
3651
|
const $xeTable = this;
|
|
3416
3652
|
const props = $xeTable;
|
|
3417
|
-
const reactData = $xeTable;
|
|
3418
3653
|
const internalData = $xeTable;
|
|
3419
3654
|
const { treeConfig } = props;
|
|
3420
|
-
const { selectCheckboxMaps } =
|
|
3421
|
-
const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps } = internalData;
|
|
3655
|
+
const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData;
|
|
3422
3656
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3423
3657
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
3424
3658
|
const { transform, mapChildrenField } = treeOpts;
|
|
@@ -3466,7 +3700,7 @@ const Methods = {
|
|
|
3466
3700
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
3467
3701
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
3468
3702
|
const { transform, rowField, parentField, mapChildrenField } = treeOpts;
|
|
3469
|
-
const { remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
|
|
3703
|
+
const { isEvery, remote: allRemoteFilter, filterMethod: allFilterMethod } = filterOpts;
|
|
3470
3704
|
const { remote: allRemoteSort, sortMethod: allSortMethod, multiple: sortMultiple, chronological } = sortOpts;
|
|
3471
3705
|
let tableData = [];
|
|
3472
3706
|
let tableTree = [];
|
|
@@ -3525,7 +3759,7 @@ const Methods = {
|
|
|
3525
3759
|
// 筛选虚拟树
|
|
3526
3760
|
tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, {
|
|
3527
3761
|
original: true,
|
|
3528
|
-
isEvery
|
|
3762
|
+
isEvery,
|
|
3529
3763
|
children: mapChildrenField,
|
|
3530
3764
|
mapChildren: childrenField
|
|
3531
3765
|
});
|
|
@@ -3541,7 +3775,7 @@ const Methods = {
|
|
|
3541
3775
|
// 还原虚拟树
|
|
3542
3776
|
tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
|
|
3543
3777
|
original: true,
|
|
3544
|
-
isEvery
|
|
3778
|
+
isEvery,
|
|
3545
3779
|
children: mapChildrenField,
|
|
3546
3780
|
mapChildren: childrenField
|
|
3547
3781
|
});
|
|
@@ -3604,7 +3838,7 @@ const Methods = {
|
|
|
3604
3838
|
// 还原虚拟树
|
|
3605
3839
|
tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
|
|
3606
3840
|
original: true,
|
|
3607
|
-
isEvery
|
|
3841
|
+
isEvery,
|
|
3608
3842
|
children: treeOpts.mapChildrenField,
|
|
3609
3843
|
mapChildren: childrenField
|
|
3610
3844
|
});
|
|
@@ -3711,9 +3945,14 @@ const Methods = {
|
|
|
3711
3945
|
* 如果存在排序,继续处理
|
|
3712
3946
|
*/
|
|
3713
3947
|
getTableData() {
|
|
3714
|
-
const
|
|
3948
|
+
const $xeTable = this;
|
|
3949
|
+
const props = $xeTable;
|
|
3950
|
+
const reactData = $xeTable;
|
|
3951
|
+
const internalData = $xeTable;
|
|
3952
|
+
const { tableData, footerTableData } = reactData;
|
|
3953
|
+
const { tableFullData, afterFullData, tableFullTreeData } = internalData;
|
|
3715
3954
|
return {
|
|
3716
|
-
fullData: treeConfig ? tableFullTreeData.slice(0) : tableFullData.slice(0),
|
|
3955
|
+
fullData: props.treeConfig ? tableFullTreeData.slice(0) : tableFullData.slice(0),
|
|
3717
3956
|
visibleData: afterFullData.slice(0),
|
|
3718
3957
|
tableData: tableData.slice(0),
|
|
3719
3958
|
footerData: footerTableData.slice(0)
|
|
@@ -3751,35 +3990,16 @@ const Methods = {
|
|
|
3751
3990
|
* 默认执行一次,除非被重置
|
|
3752
3991
|
*/
|
|
3753
3992
|
handleLoadDefaults() {
|
|
3754
|
-
|
|
3755
|
-
|
|
3756
|
-
}
|
|
3757
|
-
if (this.radioConfig) {
|
|
3758
|
-
this.handleDefaultRadioChecked();
|
|
3759
|
-
}
|
|
3760
|
-
if (this.expandConfig) {
|
|
3761
|
-
this.handleDefaultRowExpand();
|
|
3762
|
-
}
|
|
3763
|
-
if (this.treeConfig) {
|
|
3764
|
-
this.handleDefaultTreeExpand();
|
|
3765
|
-
}
|
|
3766
|
-
if (this.mergeCells) {
|
|
3767
|
-
this.handleDefaultMergeCells();
|
|
3768
|
-
}
|
|
3769
|
-
if (this.mergeFooterItems) {
|
|
3770
|
-
this.handleDefaultMergeFooterItems();
|
|
3771
|
-
}
|
|
3772
|
-
this.$nextTick(() => setTimeout(this.recalculate));
|
|
3993
|
+
const $xeTable = this;
|
|
3994
|
+
handleLoadDefaults($xeTable);
|
|
3773
3995
|
},
|
|
3774
3996
|
/**
|
|
3775
3997
|
* 处理初始化的默认行为
|
|
3776
3998
|
* 只会执行一次
|
|
3777
3999
|
*/
|
|
3778
4000
|
handleInitDefaults() {
|
|
3779
|
-
const
|
|
3780
|
-
|
|
3781
|
-
this.handleDefaultSort();
|
|
3782
|
-
}
|
|
4001
|
+
const $xeTable = this;
|
|
4002
|
+
handleInitDefaults($xeTable);
|
|
3783
4003
|
},
|
|
3784
4004
|
/**
|
|
3785
4005
|
* 设置为固定列
|
|
@@ -3935,64 +4155,30 @@ const Methods = {
|
|
|
3935
4155
|
return this.resetCustom(options);
|
|
3936
4156
|
},
|
|
3937
4157
|
handleCustom() {
|
|
3938
|
-
const
|
|
4158
|
+
const $xeTable = this;
|
|
4159
|
+
const props = $xeTable;
|
|
4160
|
+
const { mouseConfig } = props;
|
|
3939
4161
|
if (mouseConfig) {
|
|
3940
|
-
if (
|
|
3941
|
-
|
|
3942
|
-
}
|
|
3943
|
-
if (
|
|
3944
|
-
|
|
3945
|
-
|
|
3946
|
-
}
|
|
3947
|
-
}
|
|
3948
|
-
this.analyColumnWidth();
|
|
3949
|
-
return this.refreshColumn(true);
|
|
3950
|
-
},
|
|
3951
|
-
handleCustomRestore(storeData) {
|
|
3952
|
-
const $xetable = this;
|
|
3953
|
-
const reactData = $xetable;
|
|
3954
|
-
const internalData = $xetable;
|
|
3955
|
-
let { collectColumn } = internalData;
|
|
3956
|
-
const { resizableData, sortData, visibleData, fixedData } = storeData;
|
|
3957
|
-
let hasCustomSort = false;
|
|
3958
|
-
// 处理还原
|
|
3959
|
-
if (resizableData || sortData || visibleData || fixedData) {
|
|
3960
|
-
XEUtils.eachTree(collectColumn, (column, index, items, path, parentRow) => {
|
|
3961
|
-
const colKey = column.getKey();
|
|
3962
|
-
// 支持一级
|
|
3963
|
-
if (!parentRow) {
|
|
3964
|
-
if (fixedData && fixedData[colKey] !== undefined) {
|
|
3965
|
-
column.fixed = fixedData[colKey];
|
|
3966
|
-
}
|
|
3967
|
-
if (sortData && XEUtils.isNumber(sortData[colKey])) {
|
|
3968
|
-
hasCustomSort = true;
|
|
3969
|
-
column.renderSortNumber = sortData[colKey];
|
|
3970
|
-
}
|
|
3971
|
-
}
|
|
3972
|
-
if (resizableData && XEUtils.isNumber(resizableData[colKey])) {
|
|
3973
|
-
column.resizeWidth = resizableData[colKey];
|
|
3974
|
-
}
|
|
3975
|
-
if (visibleData && XEUtils.isBoolean(visibleData[colKey])) {
|
|
3976
|
-
column.visible = visibleData[colKey];
|
|
3977
|
-
}
|
|
3978
|
-
});
|
|
3979
|
-
// 如果自定义了顺序
|
|
3980
|
-
if (hasCustomSort) {
|
|
3981
|
-
collectColumn = XEUtils.orderBy(collectColumn, 'renderSortNumber');
|
|
3982
|
-
internalData.collectColumn = collectColumn;
|
|
3983
|
-
internalData.tableFullColumn = getColumnList(collectColumn);
|
|
4162
|
+
if ($xeTable.clearSelected) {
|
|
4163
|
+
$xeTable.clearSelected();
|
|
4164
|
+
}
|
|
4165
|
+
if ($xeTable.clearCellAreas) {
|
|
4166
|
+
$xeTable.clearCellAreas();
|
|
4167
|
+
$xeTable.clearCopyCellArea();
|
|
3984
4168
|
}
|
|
3985
|
-
reactData.isCustomStatus = true;
|
|
3986
|
-
}
|
|
3987
|
-
else {
|
|
3988
|
-
reactData.isCustomStatus = false;
|
|
3989
4169
|
}
|
|
4170
|
+
$xeTable.analyColumnWidth();
|
|
4171
|
+
return $xeTable.refreshColumn(true);
|
|
3990
4172
|
},
|
|
3991
4173
|
/**
|
|
3992
4174
|
* 还原自定义列操作状态
|
|
3993
4175
|
*/
|
|
3994
4176
|
restoreCustomStorage() {
|
|
3995
|
-
const
|
|
4177
|
+
const $xeTable = this;
|
|
4178
|
+
const props = $xeTable;
|
|
4179
|
+
const { customConfig } = props;
|
|
4180
|
+
const tableId = $xeTable.computeTableId;
|
|
4181
|
+
const customOpts = $xeTable.computeCustomOpts;
|
|
3996
4182
|
const { storage, restoreStore } = customOpts;
|
|
3997
4183
|
const isAllCustom = storage === true;
|
|
3998
4184
|
const storageOpts = isAllCustom ? {} : Object.assign({}, storage || {});
|
|
@@ -4011,17 +4197,28 @@ const Methods = {
|
|
|
4011
4197
|
if (!storeData) {
|
|
4012
4198
|
return;
|
|
4013
4199
|
}
|
|
4014
|
-
return
|
|
4200
|
+
return handleCustomRestore($xeTable, storeData);
|
|
4015
4201
|
}).catch(e => e);
|
|
4016
4202
|
}
|
|
4017
4203
|
else {
|
|
4018
|
-
return
|
|
4204
|
+
return handleCustomRestore($xeTable, storeData);
|
|
4019
4205
|
}
|
|
4020
4206
|
}
|
|
4021
4207
|
},
|
|
4022
4208
|
getCustomStoreData() {
|
|
4023
|
-
const
|
|
4024
|
-
const
|
|
4209
|
+
const $xeTable = this;
|
|
4210
|
+
const props = $xeTable;
|
|
4211
|
+
const internalData = $xeTable;
|
|
4212
|
+
const { id } = props;
|
|
4213
|
+
const customOpts = $xeTable.computeCustomOpts;
|
|
4214
|
+
const { collectColumn } = internalData;
|
|
4215
|
+
const { storage, checkMethod } = customOpts;
|
|
4216
|
+
const isAllCustom = storage === true;
|
|
4217
|
+
const storageOpts = isAllCustom ? {} : Object.assign({}, storage || {});
|
|
4218
|
+
const isCustomResizable = isAllCustom || storageOpts.resizable;
|
|
4219
|
+
const isCustomVisible = isAllCustom || storageOpts.visible;
|
|
4220
|
+
const isCustomFixed = isAllCustom || storageOpts.fixed;
|
|
4221
|
+
const isCustomSort = isAllCustom || storageOpts.sort;
|
|
4025
4222
|
const resizableData = {};
|
|
4026
4223
|
const sortData = {};
|
|
4027
4224
|
const visibleData = {};
|
|
@@ -4038,47 +4235,37 @@ const Methods = {
|
|
|
4038
4235
|
}
|
|
4039
4236
|
let hasResizable = 0;
|
|
4040
4237
|
let hasSort = 0;
|
|
4041
|
-
let
|
|
4238
|
+
let hasFixed = 0;
|
|
4042
4239
|
let hasVisible = 0;
|
|
4043
4240
|
XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => {
|
|
4241
|
+
const colKey = column.getKey();
|
|
4242
|
+
if (!colKey) {
|
|
4243
|
+
errLog('vxe.error.reqProp', [`${column.getTitle() || column.type || ''} -> column.field=?`]);
|
|
4244
|
+
return;
|
|
4245
|
+
}
|
|
4044
4246
|
// 只支持一级
|
|
4045
4247
|
if (!parentColumn) {
|
|
4046
|
-
|
|
4047
|
-
|
|
4048
|
-
|
|
4049
|
-
hasSort = 1;
|
|
4050
|
-
sortData[colKey] = column.renderSortNumber;
|
|
4051
|
-
}
|
|
4052
|
-
});
|
|
4053
|
-
if (column.fixed !== column.defaultFixed) {
|
|
4054
|
-
const colKey = column.getKey();
|
|
4055
|
-
if (colKey) {
|
|
4056
|
-
hasFixedt = 1;
|
|
4057
|
-
fixedData[colKey] = column.fixed;
|
|
4058
|
-
}
|
|
4248
|
+
if (isCustomSort) {
|
|
4249
|
+
hasSort = 1;
|
|
4250
|
+
sortData[colKey] = column.renderSortNumber;
|
|
4059
4251
|
}
|
|
4060
|
-
|
|
4061
|
-
|
|
4062
|
-
|
|
4063
|
-
if (colKey) {
|
|
4064
|
-
hasResizable = 1;
|
|
4065
|
-
resizableData[colKey] = column.renderWidth;
|
|
4252
|
+
if (isCustomFixed && column.fixed !== column.defaultFixed) {
|
|
4253
|
+
hasFixed = 1;
|
|
4254
|
+
fixedData[colKey] = column.fixed;
|
|
4066
4255
|
}
|
|
4067
4256
|
}
|
|
4068
|
-
if (
|
|
4257
|
+
if (isCustomResizable && column.resizeWidth) {
|
|
4258
|
+
hasResizable = 1;
|
|
4259
|
+
resizableData[colKey] = column.renderWidth;
|
|
4260
|
+
}
|
|
4261
|
+
if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
|
|
4069
4262
|
if (!column.visible && column.defaultVisible) {
|
|
4070
|
-
|
|
4071
|
-
|
|
4072
|
-
hasVisible = 1;
|
|
4073
|
-
visibleData[colKey] = false;
|
|
4074
|
-
}
|
|
4263
|
+
hasVisible = 1;
|
|
4264
|
+
visibleData[colKey] = false;
|
|
4075
4265
|
}
|
|
4076
4266
|
else if (column.visible && !column.defaultVisible) {
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
hasVisible = 1;
|
|
4080
|
-
visibleData[colKey] = true;
|
|
4081
|
-
}
|
|
4267
|
+
hasVisible = 1;
|
|
4268
|
+
visibleData[colKey] = true;
|
|
4082
4269
|
}
|
|
4083
4270
|
}
|
|
4084
4271
|
});
|
|
@@ -4088,7 +4275,7 @@ const Methods = {
|
|
|
4088
4275
|
if (hasSort) {
|
|
4089
4276
|
storeData.sortData = sortData;
|
|
4090
4277
|
}
|
|
4091
|
-
if (
|
|
4278
|
+
if (hasFixed) {
|
|
4092
4279
|
storeData.fixedData = fixedData;
|
|
4093
4280
|
}
|
|
4094
4281
|
if (hasVisible) {
|
|
@@ -4576,12 +4763,13 @@ const Methods = {
|
|
|
4576
4763
|
const $xeTable = this;
|
|
4577
4764
|
const internalData = $xeTable;
|
|
4578
4765
|
const { fullAllDataRowIdData, afterFullData } = internalData;
|
|
4766
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4579
4767
|
const rowOpts = $xeTable.computeRowOpts;
|
|
4580
4768
|
const cellOpts = $xeTable.computeCellOpts;
|
|
4581
4769
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
4582
4770
|
const rest = {};
|
|
4583
4771
|
afterFullData.forEach(row => {
|
|
4584
|
-
const rowid =
|
|
4772
|
+
const rowid = handleGetRowId(row);
|
|
4585
4773
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4586
4774
|
if (rowRest) {
|
|
4587
4775
|
const resizeHeight = rowRest.resizeHeight;
|
|
@@ -4608,8 +4796,9 @@ const Methods = {
|
|
|
4608
4796
|
rHeight = Math.floor(rHeight * bodyHeight);
|
|
4609
4797
|
}
|
|
4610
4798
|
if (rHeight) {
|
|
4799
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4611
4800
|
rows.forEach(row => {
|
|
4612
|
-
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row :
|
|
4801
|
+
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row);
|
|
4613
4802
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4614
4803
|
if (rowRest) {
|
|
4615
4804
|
rowRest.resizeHeight = rHeight;
|
|
@@ -4750,6 +4939,8 @@ const Methods = {
|
|
|
4750
4939
|
}
|
|
4751
4940
|
},
|
|
4752
4941
|
preventEvent(evnt, type, args, next, end) {
|
|
4942
|
+
const $xeTable = this;
|
|
4943
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
4753
4944
|
let evntList = interceptor.get(type);
|
|
4754
4945
|
// 兼容老版本
|
|
4755
4946
|
if (!evntList.length && type === 'event.clearEdit') {
|
|
@@ -4761,8 +4952,22 @@ const Methods = {
|
|
|
4761
4952
|
}
|
|
4762
4953
|
}
|
|
4763
4954
|
// 兼容老版本
|
|
4764
|
-
let rest;
|
|
4765
|
-
|
|
4955
|
+
let rest = null;
|
|
4956
|
+
let isStop = false;
|
|
4957
|
+
for (let i = 0; i < evntList.length; i++) {
|
|
4958
|
+
const func = evntList[i];
|
|
4959
|
+
const fnRest = func(Object.assign({ $grid: $xeGrid, $table: $xeTable, $event: evnt }, args));
|
|
4960
|
+
if (fnRest === false) {
|
|
4961
|
+
isStop = true;
|
|
4962
|
+
break;
|
|
4963
|
+
}
|
|
4964
|
+
else if (fnRest && fnRest.status === false) {
|
|
4965
|
+
rest = fnRest.result;
|
|
4966
|
+
isStop = true;
|
|
4967
|
+
break;
|
|
4968
|
+
}
|
|
4969
|
+
}
|
|
4970
|
+
if (!isStop) {
|
|
4766
4971
|
if (next) {
|
|
4767
4972
|
rest = next();
|
|
4768
4973
|
}
|
|
@@ -4776,7 +4981,9 @@ const Methods = {
|
|
|
4776
4981
|
* 全局按下事件处理
|
|
4777
4982
|
*/
|
|
4778
4983
|
handleGlobalMousedownEvent(evnt) {
|
|
4779
|
-
const
|
|
4984
|
+
const $xeTable = this;
|
|
4985
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
4986
|
+
const { $el, $refs, $toolbar, mouseConfig, editStore, ctxMenuStore, editRules, editOpts, validOpts, areaOpts, filterStore, customStore, getRowNode } = this;
|
|
4780
4987
|
const { actived } = editStore;
|
|
4781
4988
|
const { customWrapper, refValidTooltip } = $refs;
|
|
4782
4989
|
const tableFilter = $refs.refTableFilter;
|
|
@@ -4866,7 +5073,7 @@ const Methods = {
|
|
|
4866
5073
|
}
|
|
4867
5074
|
}
|
|
4868
5075
|
else if (mouseConfig) {
|
|
4869
|
-
if (!getEventTargetNode(evnt, $el).flag && !($
|
|
5076
|
+
if (!getEventTargetNode(evnt, $el).flag && !($xeGrid && getEventTargetNode(evnt, $xeGrid.$el).flag) && !(tableMenu && getEventTargetNode(evnt, tableMenu.$el).flag) && !($toolbar && getEventTargetNode(evnt, $toolbar.$el).flag)) {
|
|
4870
5077
|
if (this.clearSelected) {
|
|
4871
5078
|
this.clearSelected();
|
|
4872
5079
|
}
|
|
@@ -4888,7 +5095,7 @@ const Methods = {
|
|
|
4888
5095
|
if (ctxMenuStore.visible && tableMenu && !getEventTargetNode(evnt, tableMenu.$el).flag) {
|
|
4889
5096
|
this.closeMenu();
|
|
4890
5097
|
}
|
|
4891
|
-
const isActivated = getEventTargetNode(evnt, ($
|
|
5098
|
+
const isActivated = getEventTargetNode(evnt, ($xeGrid || this).$el).flag;
|
|
4892
5099
|
// 如果存在校验,点击了表格之外则清除
|
|
4893
5100
|
if (!isActivated && editRules && validOpts.autoClear) {
|
|
4894
5101
|
this.validErrorMaps = {};
|
|
@@ -4952,6 +5159,7 @@ const Methods = {
|
|
|
4952
5159
|
handleGlobalKeydownEvent(evnt) {
|
|
4953
5160
|
const $xeTable = this;
|
|
4954
5161
|
const internalData = $xeTable;
|
|
5162
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
4955
5163
|
// 该行为只对当前激活的表格有效
|
|
4956
5164
|
if (this.isActivated) {
|
|
4957
5165
|
this.preventEvent(evnt, 'event.keydown', null, () => {
|
|
@@ -5050,7 +5258,7 @@ const Methods = {
|
|
|
5050
5258
|
this.moveTabSelected(activeParams, hasShiftKey, evnt);
|
|
5051
5259
|
}
|
|
5052
5260
|
else {
|
|
5053
|
-
this.
|
|
5261
|
+
this.moveEnterSelected(activeParams, isLeftArrow, true, isRightArrow, false, evnt);
|
|
5054
5262
|
}
|
|
5055
5263
|
}
|
|
5056
5264
|
else {
|
|
@@ -5084,7 +5292,7 @@ const Methods = {
|
|
|
5084
5292
|
return;
|
|
5085
5293
|
}
|
|
5086
5294
|
}
|
|
5087
|
-
this.
|
|
5295
|
+
this.moveEnterSelected(activeParams, isLeftArrow, false, isRightArrow, true, evnt);
|
|
5088
5296
|
if (enterMethod) {
|
|
5089
5297
|
enterMethod(etrParams);
|
|
5090
5298
|
}
|
|
@@ -5110,11 +5318,7 @@ const Methods = {
|
|
|
5110
5318
|
if (!isEditStatus) {
|
|
5111
5319
|
// 如果按下了方向键
|
|
5112
5320
|
if (selected.row && selected.column) {
|
|
5113
|
-
|
|
5114
|
-
}
|
|
5115
|
-
else if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
|
|
5116
|
-
// 当前行按键上下移动
|
|
5117
|
-
this.moveCurrentRow(isUpArrow, isDwArrow, evnt);
|
|
5321
|
+
$xeTable.moveArrowSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
|
|
5118
5322
|
}
|
|
5119
5323
|
}
|
|
5120
5324
|
}
|
|
@@ -5137,7 +5341,7 @@ const Methods = {
|
|
|
5137
5341
|
column: selected.column,
|
|
5138
5342
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5139
5343
|
$table: this,
|
|
5140
|
-
$grid:
|
|
5344
|
+
$grid: $xeGrid
|
|
5141
5345
|
};
|
|
5142
5346
|
// 是否被禁用
|
|
5143
5347
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
@@ -5164,7 +5368,7 @@ const Methods = {
|
|
|
5164
5368
|
column: selected.column,
|
|
5165
5369
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5166
5370
|
$table: this,
|
|
5167
|
-
$grid:
|
|
5371
|
+
$grid: $xeGrid
|
|
5168
5372
|
};
|
|
5169
5373
|
// 是否被禁用
|
|
5170
5374
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
@@ -5193,7 +5397,7 @@ const Methods = {
|
|
|
5193
5397
|
rowIndex: this.getRowIndex(parentRow),
|
|
5194
5398
|
$rowIndex: this.getVMRowIndex(parentRow),
|
|
5195
5399
|
$table: this,
|
|
5196
|
-
$grid:
|
|
5400
|
+
$grid: $xeGrid
|
|
5197
5401
|
};
|
|
5198
5402
|
this.setTreeExpand(parentRow, false)
|
|
5199
5403
|
.then(() => this.scrollToRow(parentRow))
|
|
@@ -5215,7 +5419,7 @@ const Methods = {
|
|
|
5215
5419
|
column: selected.column,
|
|
5216
5420
|
columnIndex: this.getColumnIndex(selected.column),
|
|
5217
5421
|
$table: this,
|
|
5218
|
-
$grid:
|
|
5422
|
+
$grid: $xeGrid
|
|
5219
5423
|
};
|
|
5220
5424
|
if (!beforeEditMethod || beforeEditMethod(params)) {
|
|
5221
5425
|
if (editMethod) {
|
|
@@ -5336,7 +5540,7 @@ const Methods = {
|
|
|
5336
5540
|
return;
|
|
5337
5541
|
}
|
|
5338
5542
|
if (tooltipStore.column !== column || !tooltipStore.visible) {
|
|
5339
|
-
handleTooltip($xeTable, evnt, thEl, cellEl,
|
|
5543
|
+
handleTooltip($xeTable, evnt, thEl, thEl.querySelector('.vxe-cell--title') || cellEl, params);
|
|
5340
5544
|
}
|
|
5341
5545
|
},
|
|
5342
5546
|
/**
|
|
@@ -5366,7 +5570,7 @@ const Methods = {
|
|
|
5366
5570
|
}
|
|
5367
5571
|
}
|
|
5368
5572
|
if (tooltipStore.column !== column || tooltipStore.row !== row || !tooltipStore.visible) {
|
|
5369
|
-
handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--wrapper'),
|
|
5573
|
+
handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
|
|
5370
5574
|
}
|
|
5371
5575
|
},
|
|
5372
5576
|
/**
|
|
@@ -5377,10 +5581,10 @@ const Methods = {
|
|
|
5377
5581
|
const reactData = $xeTable;
|
|
5378
5582
|
const { column } = params;
|
|
5379
5583
|
const { tooltipStore } = reactData;
|
|
5380
|
-
const
|
|
5584
|
+
const tdEl = evnt.currentTarget;
|
|
5381
5585
|
handleTargetEnterEvent($xeTable, tooltipStore.column !== column || !!tooltipStore.row);
|
|
5382
5586
|
if (tooltipStore.column !== column || !tooltipStore.visible) {
|
|
5383
|
-
handleTooltip($xeTable, evnt,
|
|
5587
|
+
handleTooltip($xeTable, evnt, tdEl, tdEl.querySelector('.vxe-cell--label') || tdEl.querySelector('.vxe-cell--wrapper'), params);
|
|
5384
5588
|
}
|
|
5385
5589
|
},
|
|
5386
5590
|
openTooltip(target, content) {
|
|
@@ -5437,11 +5641,15 @@ const Methods = {
|
|
|
5437
5641
|
* 获取复选框半选状态的行数据
|
|
5438
5642
|
*/
|
|
5439
5643
|
getCheckboxIndeterminateRecords(isFull) {
|
|
5440
|
-
const
|
|
5644
|
+
const $xeTable = this;
|
|
5645
|
+
const props = $xeTable;
|
|
5646
|
+
const internalData = $xeTable;
|
|
5647
|
+
const { treeConfig } = props;
|
|
5648
|
+
const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData;
|
|
5441
5649
|
if (treeConfig) {
|
|
5442
5650
|
const fullRest = [];
|
|
5443
5651
|
const defRest = [];
|
|
5444
|
-
XEUtils.each(
|
|
5652
|
+
XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
|
|
5445
5653
|
if (item) {
|
|
5446
5654
|
fullRest.push(item);
|
|
5447
5655
|
if (fullDataRowIdData[rowid]) {
|
|
@@ -5456,26 +5664,6 @@ const Methods = {
|
|
|
5456
5664
|
}
|
|
5457
5665
|
return [];
|
|
5458
5666
|
},
|
|
5459
|
-
/**
|
|
5460
|
-
* 处理默认勾选
|
|
5461
|
-
*/
|
|
5462
|
-
handleDefaultSelectionChecked() {
|
|
5463
|
-
const $xeTable = this;
|
|
5464
|
-
const { fullDataRowIdData, checkboxOpts } = this;
|
|
5465
|
-
const { checkAll, checkRowKeys } = checkboxOpts;
|
|
5466
|
-
if (checkAll) {
|
|
5467
|
-
handleCheckedAllCheckboxRow($xeTable, true, true);
|
|
5468
|
-
}
|
|
5469
|
-
else if (checkRowKeys) {
|
|
5470
|
-
const defSelection = [];
|
|
5471
|
-
checkRowKeys.forEach((rowid) => {
|
|
5472
|
-
if (fullDataRowIdData[rowid]) {
|
|
5473
|
-
defSelection.push(fullDataRowIdData[rowid].row);
|
|
5474
|
-
}
|
|
5475
|
-
});
|
|
5476
|
-
handleCheckedCheckboxRow($xeTable, defSelection, true, true);
|
|
5477
|
-
}
|
|
5478
|
-
},
|
|
5479
5667
|
handleCheckedCheckboxRow(rows, value, isForce) {
|
|
5480
5668
|
const $xeTable = this;
|
|
5481
5669
|
return handleCheckedCheckboxRow($xeTable, rows, value, isForce);
|
|
@@ -5511,20 +5699,22 @@ const Methods = {
|
|
|
5511
5699
|
isCheckedByCheckboxRow(row) {
|
|
5512
5700
|
const $xeTable = this;
|
|
5513
5701
|
const reactData = $xeTable;
|
|
5514
|
-
const
|
|
5702
|
+
const internalData = $xeTable;
|
|
5703
|
+
const { updateCheckboxFlag } = reactData;
|
|
5704
|
+
const { selectCheckboxMaps } = internalData;
|
|
5515
5705
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5516
5706
|
const { checkField } = checkboxOpts;
|
|
5517
5707
|
if (checkField) {
|
|
5518
5708
|
return XEUtils.get(row, checkField);
|
|
5519
5709
|
}
|
|
5520
|
-
return !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5710
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5521
5711
|
},
|
|
5522
5712
|
isCheckedByCheckboxRowKey(rowid) {
|
|
5523
5713
|
const $xeTable = this;
|
|
5524
5714
|
const reactData = $xeTable;
|
|
5525
5715
|
const internalData = $xeTable;
|
|
5526
|
-
const {
|
|
5527
|
-
const { fullAllDataRowIdData } = internalData;
|
|
5716
|
+
const { updateCheckboxFlag } = reactData;
|
|
5717
|
+
const { fullAllDataRowIdData, selectCheckboxMaps } = internalData;
|
|
5528
5718
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5529
5719
|
const { checkField } = checkboxOpts;
|
|
5530
5720
|
if (checkField) {
|
|
@@ -5534,19 +5724,19 @@ const Methods = {
|
|
|
5534
5724
|
}
|
|
5535
5725
|
return false;
|
|
5536
5726
|
}
|
|
5537
|
-
return !!selectCheckboxMaps[rowid];
|
|
5727
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid];
|
|
5538
5728
|
},
|
|
5539
5729
|
isIndeterminateByCheckboxRow(row) {
|
|
5540
5730
|
const $xeTable = this;
|
|
5541
|
-
const
|
|
5542
|
-
const {
|
|
5543
|
-
return !!
|
|
5731
|
+
const internalData = $xeTable;
|
|
5732
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5733
|
+
return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
|
|
5544
5734
|
},
|
|
5545
5735
|
isIndeterminateByCheckboxRowKey(rowid) {
|
|
5546
5736
|
const $xeTable = this;
|
|
5547
|
-
const
|
|
5548
|
-
const {
|
|
5549
|
-
return !!
|
|
5737
|
+
const internalData = $xeTable;
|
|
5738
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5739
|
+
return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
|
|
5550
5740
|
},
|
|
5551
5741
|
/**
|
|
5552
5742
|
* 切换选中
|
|
@@ -5556,14 +5746,15 @@ const Methods = {
|
|
|
5556
5746
|
const $xeTable = this;
|
|
5557
5747
|
const props = $xeTable;
|
|
5558
5748
|
const reactData = $xeTable;
|
|
5749
|
+
const internalData = $xeTable;
|
|
5559
5750
|
const { treeConfig } = props;
|
|
5560
|
-
const { selectCheckboxMaps } =
|
|
5561
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5751
|
+
const { selectCheckboxMaps } = internalData;
|
|
5562
5752
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5563
5753
|
const { transform, mapChildrenField } = treeOpts;
|
|
5564
5754
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
5565
5755
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5566
5756
|
const { checkField, checkStrictly, checkMethod } = checkboxOpts;
|
|
5757
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5567
5758
|
// indeterminateField 仅支持读取
|
|
5568
5759
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
5569
5760
|
if (checkField) {
|
|
@@ -5578,60 +5769,58 @@ const Methods = {
|
|
|
5578
5769
|
}
|
|
5579
5770
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5580
5771
|
}
|
|
5581
|
-
}, { children: transform ? mapChildrenField : childrenField });
|
|
5582
|
-
reactData.
|
|
5583
|
-
return;
|
|
5584
|
-
}
|
|
5585
|
-
else {
|
|
5586
|
-
// 列表
|
|
5587
|
-
rows.forEach(row => {
|
|
5588
|
-
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5589
|
-
XEUtils.set(row, checkField, checked);
|
|
5590
|
-
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5591
|
-
}
|
|
5592
|
-
});
|
|
5772
|
+
}, { children: transform ? mapChildrenField : childrenField });
|
|
5773
|
+
reactData.updateCheckboxFlag++;
|
|
5774
|
+
return;
|
|
5593
5775
|
}
|
|
5594
|
-
|
|
5776
|
+
// 列表
|
|
5777
|
+
rows.forEach(row => {
|
|
5778
|
+
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5779
|
+
XEUtils.set(row, checkField, checked);
|
|
5780
|
+
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5781
|
+
}
|
|
5782
|
+
});
|
|
5783
|
+
reactData.updateCheckboxFlag++;
|
|
5595
5784
|
return;
|
|
5596
5785
|
}
|
|
5597
5786
|
// 树结构
|
|
5598
5787
|
if (treeConfig && !checkStrictly) {
|
|
5599
5788
|
// 更新子节点状态
|
|
5600
5789
|
XEUtils.eachTree(rows, (row) => {
|
|
5601
|
-
const rowid =
|
|
5790
|
+
const rowid = handleGetRowId(row);
|
|
5602
5791
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5603
5792
|
if (checked) {
|
|
5604
|
-
|
|
5793
|
+
selectCheckboxMaps[rowid] = row;
|
|
5605
5794
|
}
|
|
5606
5795
|
else {
|
|
5607
|
-
if (
|
|
5608
|
-
delete
|
|
5796
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5797
|
+
delete selectCheckboxMaps[rowid];
|
|
5609
5798
|
}
|
|
5610
5799
|
}
|
|
5611
5800
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5612
5801
|
}
|
|
5613
5802
|
}, { children: transform ? mapChildrenField : childrenField });
|
|
5614
|
-
reactData.
|
|
5803
|
+
reactData.updateCheckboxFlag++;
|
|
5615
5804
|
return;
|
|
5616
5805
|
}
|
|
5617
5806
|
// 列表
|
|
5618
5807
|
rows.forEach(row => {
|
|
5619
|
-
const rowid =
|
|
5808
|
+
const rowid = handleGetRowId(row);
|
|
5620
5809
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5621
5810
|
if (checked) {
|
|
5622
|
-
if (!
|
|
5623
|
-
|
|
5811
|
+
if (!selectCheckboxMaps[rowid]) {
|
|
5812
|
+
selectCheckboxMaps[rowid] = row;
|
|
5624
5813
|
}
|
|
5625
5814
|
}
|
|
5626
5815
|
else {
|
|
5627
|
-
if (
|
|
5628
|
-
delete
|
|
5816
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5817
|
+
delete selectCheckboxMaps[rowid];
|
|
5629
5818
|
}
|
|
5630
5819
|
}
|
|
5631
5820
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5821
|
+
reactData.updateCheckboxFlag++;
|
|
5632
5822
|
}
|
|
5633
5823
|
});
|
|
5634
|
-
reactData.selectCheckboxMaps = selectRowMaps;
|
|
5635
5824
|
},
|
|
5636
5825
|
/**
|
|
5637
5826
|
* 即将移除
|
|
@@ -5642,7 +5831,10 @@ const Methods = {
|
|
|
5642
5831
|
$xeTable.handleBatchSelectRows([row], checked, isForce);
|
|
5643
5832
|
},
|
|
5644
5833
|
handleToggleCheckRowEvent(evnt, params) {
|
|
5645
|
-
const
|
|
5834
|
+
const $xeTable = this;
|
|
5835
|
+
const internalData = $xeTable;
|
|
5836
|
+
const { selectCheckboxMaps } = internalData;
|
|
5837
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5646
5838
|
const { checkField, trigger } = checkboxOpts;
|
|
5647
5839
|
const { row } = params;
|
|
5648
5840
|
if (trigger === 'manual') {
|
|
@@ -5653,47 +5845,52 @@ const Methods = {
|
|
|
5653
5845
|
checked = !XEUtils.get(row, checkField);
|
|
5654
5846
|
}
|
|
5655
5847
|
else {
|
|
5656
|
-
checked = !selectCheckboxMaps[getRowid(
|
|
5848
|
+
checked = !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5657
5849
|
}
|
|
5658
5850
|
if (evnt) {
|
|
5659
|
-
|
|
5851
|
+
$xeTable.triggerCheckRowEvent(evnt, params, checked);
|
|
5660
5852
|
}
|
|
5661
5853
|
else {
|
|
5662
|
-
|
|
5663
|
-
|
|
5854
|
+
$xeTable.handleBatchSelectRows([row], checked);
|
|
5855
|
+
$xeTable.checkSelectionStatus();
|
|
5664
5856
|
}
|
|
5665
5857
|
},
|
|
5666
5858
|
triggerCheckRowEvent(evnt, params, checked) {
|
|
5667
5859
|
const $xeTable = this;
|
|
5668
|
-
const
|
|
5669
|
-
const
|
|
5860
|
+
const props = $xeTable;
|
|
5861
|
+
const internalData = $xeTable;
|
|
5670
5862
|
const { row } = params;
|
|
5863
|
+
const { afterFullData } = internalData;
|
|
5864
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5865
|
+
const { checkMethod, trigger } = checkboxOpts;
|
|
5671
5866
|
if (trigger === 'manual') {
|
|
5672
5867
|
return;
|
|
5673
5868
|
}
|
|
5674
5869
|
evnt.stopPropagation();
|
|
5675
|
-
if (checkboxOpts.isShiftKey && evnt.shiftKey && !
|
|
5676
|
-
const checkboxRecords =
|
|
5870
|
+
if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
|
|
5871
|
+
const checkboxRecords = $xeTable.getCheckboxRecords();
|
|
5677
5872
|
if (checkboxRecords.length) {
|
|
5678
5873
|
const firstRow = checkboxRecords[0];
|
|
5679
|
-
const _rowIndex =
|
|
5680
|
-
const _firstRowIndex =
|
|
5874
|
+
const _rowIndex = $xeTable.getVTRowIndex(row);
|
|
5875
|
+
const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
|
|
5681
5876
|
if (_rowIndex !== _firstRowIndex) {
|
|
5682
|
-
|
|
5877
|
+
$xeTable.setAllCheckboxRow(false);
|
|
5683
5878
|
const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
|
|
5684
|
-
|
|
5685
|
-
|
|
5879
|
+
$xeTable.$nextTick(() => {
|
|
5880
|
+
handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
|
|
5881
|
+
});
|
|
5882
|
+
$xeTable.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
|
|
5686
5883
|
return;
|
|
5687
5884
|
}
|
|
5688
5885
|
}
|
|
5689
5886
|
}
|
|
5690
5887
|
if (!checkMethod || checkMethod({ row })) {
|
|
5691
|
-
|
|
5692
|
-
|
|
5693
|
-
|
|
5694
|
-
records:
|
|
5695
|
-
reserves:
|
|
5696
|
-
indeterminates:
|
|
5888
|
+
$xeTable.handleBatchSelectRows([row], checked);
|
|
5889
|
+
$xeTable.checkSelectionStatus();
|
|
5890
|
+
$xeTable.dispatchEvent('checkbox-change', Object.assign({
|
|
5891
|
+
records: () => $xeTable.getCheckboxRecords(),
|
|
5892
|
+
reserves: () => $xeTable.getCheckboxReserveRecords(),
|
|
5893
|
+
indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
|
|
5697
5894
|
checked
|
|
5698
5895
|
}, params), evnt);
|
|
5699
5896
|
}
|
|
@@ -5703,7 +5900,9 @@ const Methods = {
|
|
|
5703
5900
|
*/
|
|
5704
5901
|
toggleCheckboxRow(row) {
|
|
5705
5902
|
const $xeTable = this;
|
|
5706
|
-
const
|
|
5903
|
+
const internalData = $xeTable;
|
|
5904
|
+
const { selectCheckboxMaps } = internalData;
|
|
5905
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5707
5906
|
const { checkField } = checkboxOpts;
|
|
5708
5907
|
const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5709
5908
|
$xeTable.handleBatchSelectRows([row], checked, true);
|
|
@@ -5724,9 +5923,7 @@ const Methods = {
|
|
|
5724
5923
|
const reactData = $xeTable;
|
|
5725
5924
|
const internalData = $xeTable;
|
|
5726
5925
|
const { treeConfig } = props;
|
|
5727
|
-
const { selectCheckboxMaps,
|
|
5728
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5729
|
-
const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
|
|
5926
|
+
const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5730
5927
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5731
5928
|
const { transform, mapChildrenField } = treeOpts;
|
|
5732
5929
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
@@ -5738,10 +5935,11 @@ const Methods = {
|
|
|
5738
5935
|
}
|
|
5739
5936
|
// 树结构
|
|
5740
5937
|
if (treeConfig) {
|
|
5938
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5741
5939
|
const childRowMaps = {};
|
|
5742
5940
|
const childRowList = [];
|
|
5743
5941
|
XEUtils.eachTree(afterTreeFullData, (row) => {
|
|
5744
|
-
const rowid =
|
|
5942
|
+
const rowid = handleGetRowId(row);
|
|
5745
5943
|
const childList = row[transform ? mapChildrenField : childrenField];
|
|
5746
5944
|
if (childList && childList.length && !childRowMaps[rowid]) {
|
|
5747
5945
|
childRowMaps[rowid] = 1;
|
|
@@ -5757,13 +5955,13 @@ const Methods = {
|
|
|
5757
5955
|
let vLen = 0; // 有效行
|
|
5758
5956
|
childList.forEach(checkMethod
|
|
5759
5957
|
? (item) => {
|
|
5760
|
-
const childRowid =
|
|
5761
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5958
|
+
const childRowid = handleGetRowId(item);
|
|
5959
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5762
5960
|
if (checkMethod({ row: item })) {
|
|
5763
5961
|
if (isSelect) {
|
|
5764
5962
|
sLen++;
|
|
5765
5963
|
}
|
|
5766
|
-
else if (
|
|
5964
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5767
5965
|
hLen++;
|
|
5768
5966
|
}
|
|
5769
5967
|
vLen++;
|
|
@@ -5772,18 +5970,18 @@ const Methods = {
|
|
|
5772
5970
|
if (isSelect) {
|
|
5773
5971
|
sLen++;
|
|
5774
5972
|
}
|
|
5775
|
-
else if (
|
|
5973
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5776
5974
|
hLen++;
|
|
5777
5975
|
}
|
|
5778
5976
|
}
|
|
5779
5977
|
}
|
|
5780
5978
|
: item => {
|
|
5781
|
-
const childRowid =
|
|
5782
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5979
|
+
const childRowid = handleGetRowId(item);
|
|
5980
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5783
5981
|
if (isSelect) {
|
|
5784
5982
|
sLen++;
|
|
5785
5983
|
}
|
|
5786
|
-
else if (
|
|
5984
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5787
5985
|
hLen++;
|
|
5788
5986
|
}
|
|
5789
5987
|
vLen++;
|
|
@@ -5795,31 +5993,30 @@ const Methods = {
|
|
|
5795
5993
|
}
|
|
5796
5994
|
if (isSelected) {
|
|
5797
5995
|
if (!checkField) {
|
|
5798
|
-
|
|
5996
|
+
selectCheckboxMaps[rowid] = row;
|
|
5799
5997
|
}
|
|
5800
|
-
if (
|
|
5801
|
-
delete
|
|
5998
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
5999
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5802
6000
|
}
|
|
5803
6001
|
}
|
|
5804
6002
|
else {
|
|
5805
6003
|
if (!checkField) {
|
|
5806
|
-
if (
|
|
5807
|
-
delete
|
|
6004
|
+
if (selectCheckboxMaps[rowid]) {
|
|
6005
|
+
delete selectCheckboxMaps[rowid];
|
|
5808
6006
|
}
|
|
5809
6007
|
}
|
|
5810
6008
|
if (halfSelect) {
|
|
5811
|
-
|
|
6009
|
+
treeIndeterminateRowMaps[rowid] = row;
|
|
5812
6010
|
}
|
|
5813
6011
|
else {
|
|
5814
|
-
if (
|
|
5815
|
-
delete
|
|
6012
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
6013
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5816
6014
|
}
|
|
5817
6015
|
}
|
|
5818
6016
|
}
|
|
5819
6017
|
});
|
|
5820
6018
|
}
|
|
5821
|
-
reactData.
|
|
5822
|
-
reactData.treeIndeterminateMaps = halfRowMaps;
|
|
6019
|
+
reactData.updateCheckboxFlag++;
|
|
5823
6020
|
},
|
|
5824
6021
|
updateAllCheckboxStatus() {
|
|
5825
6022
|
const $xeTable = this;
|
|
@@ -5827,23 +6024,23 @@ const Methods = {
|
|
|
5827
6024
|
const reactData = $xeTable;
|
|
5828
6025
|
const internalData = $xeTable;
|
|
5829
6026
|
const { treeConfig } = props;
|
|
5830
|
-
const { selectCheckboxMaps,
|
|
6027
|
+
const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5831
6028
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5832
6029
|
const { checkField, checkMethod, showReserveStatus } = checkboxOpts;
|
|
5833
|
-
const {
|
|
6030
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5834
6031
|
let sLen = 0; // 已选
|
|
5835
6032
|
let hLen = 0; // 半选
|
|
5836
6033
|
let vLen = 0; // 有效行
|
|
5837
6034
|
const rootList = (treeConfig ? afterTreeFullData : afterFullData);
|
|
5838
6035
|
rootList.forEach(checkMethod
|
|
5839
6036
|
? row => {
|
|
5840
|
-
const childRowid =
|
|
6037
|
+
const childRowid = handleGetRowId(row);
|
|
5841
6038
|
const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
5842
6039
|
if (checkMethod({ row })) {
|
|
5843
6040
|
if (selected) {
|
|
5844
6041
|
sLen++;
|
|
5845
6042
|
}
|
|
5846
|
-
else if (
|
|
6043
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5847
6044
|
hLen++;
|
|
5848
6045
|
}
|
|
5849
6046
|
vLen++;
|
|
@@ -5852,18 +6049,18 @@ const Methods = {
|
|
|
5852
6049
|
if (selected) {
|
|
5853
6050
|
sLen++;
|
|
5854
6051
|
}
|
|
5855
|
-
else if (
|
|
6052
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5856
6053
|
hLen++;
|
|
5857
6054
|
}
|
|
5858
6055
|
}
|
|
5859
6056
|
}
|
|
5860
6057
|
: row => {
|
|
5861
|
-
const childRowid =
|
|
6058
|
+
const childRowid = handleGetRowId(row);
|
|
5862
6059
|
const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
5863
6060
|
if (selected) {
|
|
5864
6061
|
sLen++;
|
|
5865
6062
|
}
|
|
5866
|
-
else if (
|
|
6063
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5867
6064
|
hLen++;
|
|
5868
6065
|
}
|
|
5869
6066
|
vLen++;
|
|
@@ -5920,19 +6117,26 @@ const Methods = {
|
|
|
5920
6117
|
* 获取复选框保留选中的行
|
|
5921
6118
|
*/
|
|
5922
6119
|
getCheckboxReserveRecords(isFull) {
|
|
5923
|
-
const
|
|
6120
|
+
const $xeTable = this;
|
|
6121
|
+
const props = $xeTable;
|
|
6122
|
+
const internalData = $xeTable;
|
|
6123
|
+
const { treeConfig } = props;
|
|
6124
|
+
const { afterFullData, fullDataRowIdData, checkboxReserveRowMap } = internalData;
|
|
6125
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6126
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
5924
6127
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
5925
6128
|
const reserveSelection = [];
|
|
5926
6129
|
if (checkboxOpts.reserve) {
|
|
6130
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5927
6131
|
const afterFullIdMaps = {};
|
|
5928
6132
|
if (treeConfig) {
|
|
5929
6133
|
XEUtils.eachTree(afterFullData, row => {
|
|
5930
|
-
afterFullIdMaps[
|
|
6134
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5931
6135
|
}, { children: childrenField });
|
|
5932
6136
|
}
|
|
5933
6137
|
else {
|
|
5934
6138
|
afterFullData.forEach((row) => {
|
|
5935
|
-
afterFullIdMaps[
|
|
6139
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5936
6140
|
});
|
|
5937
6141
|
}
|
|
5938
6142
|
XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
|
|
@@ -5973,9 +6177,9 @@ const Methods = {
|
|
|
5973
6177
|
handleCheckedAllCheckboxRow($xeTable, value);
|
|
5974
6178
|
if (evnt) {
|
|
5975
6179
|
$xeTable.dispatchEvent('checkbox-all', {
|
|
5976
|
-
records: $xeTable.getCheckboxRecords(),
|
|
5977
|
-
reserves: $xeTable.getCheckboxReserveRecords(),
|
|
5978
|
-
indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
|
|
6180
|
+
records: () => $xeTable.getCheckboxRecords(),
|
|
6181
|
+
reserves: () => $xeTable.getCheckboxReserveRecords(),
|
|
6182
|
+
indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
|
|
5979
6183
|
checked: value
|
|
5980
6184
|
}, evnt);
|
|
5981
6185
|
}
|
|
@@ -6007,9 +6211,16 @@ const Methods = {
|
|
|
6007
6211
|
* 清空行为不管是否被禁用还是保留记录,都将彻底清空选中状态
|
|
6008
6212
|
*/
|
|
6009
6213
|
clearCheckboxRow() {
|
|
6010
|
-
const
|
|
6011
|
-
const
|
|
6214
|
+
const $xeTable = this;
|
|
6215
|
+
const props = $xeTable;
|
|
6216
|
+
const reactData = $xeTable;
|
|
6217
|
+
const internalData = $xeTable;
|
|
6218
|
+
const { treeConfig } = props;
|
|
6219
|
+
const { tableFullData } = internalData;
|
|
6220
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
6012
6221
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6222
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6223
|
+
const { checkField, reserve } = checkboxOpts;
|
|
6013
6224
|
// indeterminateField 仅支持读取
|
|
6014
6225
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
6015
6226
|
if (checkField) {
|
|
@@ -6029,29 +6240,13 @@ const Methods = {
|
|
|
6029
6240
|
if (reserve) {
|
|
6030
6241
|
tableFullData.forEach((row) => this.handleCheckboxReserveRow(row, false));
|
|
6031
6242
|
}
|
|
6032
|
-
|
|
6033
|
-
|
|
6034
|
-
|
|
6035
|
-
|
|
6243
|
+
reactData.isAllSelected = false;
|
|
6244
|
+
reactData.isIndeterminate = false;
|
|
6245
|
+
internalData.selectCheckboxMaps = {};
|
|
6246
|
+
internalData.treeIndeterminateRowMaps = {};
|
|
6247
|
+
reactData.updateCheckboxFlag++;
|
|
6036
6248
|
return this.$nextTick();
|
|
6037
6249
|
},
|
|
6038
|
-
/**
|
|
6039
|
-
* 处理单选框默认勾选
|
|
6040
|
-
*/
|
|
6041
|
-
handleDefaultRadioChecked() {
|
|
6042
|
-
const $xeTable = this;
|
|
6043
|
-
const { radioOpts, fullDataRowIdData } = this;
|
|
6044
|
-
const { checkRowKey: rowid, reserve } = radioOpts;
|
|
6045
|
-
if (rowid) {
|
|
6046
|
-
if (fullDataRowIdData[rowid]) {
|
|
6047
|
-
handleCheckedRadioRow($xeTable, fullDataRowIdData[rowid].row, true);
|
|
6048
|
-
}
|
|
6049
|
-
if (reserve) {
|
|
6050
|
-
const rowkey = getRowkey(this);
|
|
6051
|
-
this.radioReserveRow = { [rowkey]: rowid };
|
|
6052
|
-
}
|
|
6053
|
-
}
|
|
6054
|
-
},
|
|
6055
6250
|
/**
|
|
6056
6251
|
* 单选,行选中事件
|
|
6057
6252
|
*/
|
|
@@ -6229,10 +6424,12 @@ const Methods = {
|
|
|
6229
6424
|
},
|
|
6230
6425
|
triggerHeaderCellClickEvent(evnt, params) {
|
|
6231
6426
|
const $xeTable = this;
|
|
6427
|
+
const props = $xeTable;
|
|
6232
6428
|
const internalData = $xeTable;
|
|
6233
6429
|
const { _lastResizeTime } = internalData;
|
|
6234
6430
|
const sortOpts = $xeTable.computeSortOpts;
|
|
6235
6431
|
const columnOpts = $xeTable.computeColumnOpts;
|
|
6432
|
+
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
6236
6433
|
const { column } = params;
|
|
6237
6434
|
const cell = evnt.currentTarget;
|
|
6238
6435
|
const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
|
|
@@ -6242,7 +6439,7 @@ const Methods = {
|
|
|
6242
6439
|
$xeTable.triggerSortEvent(evnt, column, getNextSortOrder($xeTable, column));
|
|
6243
6440
|
}
|
|
6244
6441
|
$xeTable.dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
|
|
6245
|
-
if (columnOpts.isCurrent ||
|
|
6442
|
+
if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
|
|
6246
6443
|
$xeTable.triggerCurrentColumnEvent(evnt, params);
|
|
6247
6444
|
}
|
|
6248
6445
|
return $xeTable.$nextTick();
|
|
@@ -6258,13 +6455,23 @@ const Methods = {
|
|
|
6258
6455
|
* @param {ColumnInfo} fieldOrColumn 列配置
|
|
6259
6456
|
*/
|
|
6260
6457
|
setCurrentColumn(fieldOrColumn) {
|
|
6261
|
-
const
|
|
6458
|
+
const $xeTable = this;
|
|
6459
|
+
const props = $xeTable;
|
|
6460
|
+
const reactData = $xeTable;
|
|
6461
|
+
const { mouseConfig } = props;
|
|
6462
|
+
const mouseOpts = $xeTable.computeMouseOpts;
|
|
6463
|
+
const isMouseSelected = mouseConfig && mouseOpts.selected;
|
|
6464
|
+
const column = handleFieldOrColumn($xeTable, fieldOrColumn);
|
|
6262
6465
|
if (column) {
|
|
6263
|
-
|
|
6264
|
-
|
|
6265
|
-
this.currentColumn = column;
|
|
6466
|
+
$xeTable.clearCurrentColumn();
|
|
6467
|
+
reactData.currentColumn = column;
|
|
6266
6468
|
}
|
|
6267
|
-
return
|
|
6469
|
+
return $xeTable.$nextTick().then(() => {
|
|
6470
|
+
// 更新状选中态
|
|
6471
|
+
if (isMouseSelected) {
|
|
6472
|
+
$xeTable.addCellSelectedClass();
|
|
6473
|
+
}
|
|
6474
|
+
});
|
|
6268
6475
|
},
|
|
6269
6476
|
/**
|
|
6270
6477
|
* 用于当前列,手动清空当前高亮的状态
|
|
@@ -6273,25 +6480,6 @@ const Methods = {
|
|
|
6273
6480
|
this.currentColumn = null;
|
|
6274
6481
|
return this.$nextTick();
|
|
6275
6482
|
},
|
|
6276
|
-
checkValidate(type) {
|
|
6277
|
-
if (this.triggerValidate) {
|
|
6278
|
-
return this.triggerValidate(type);
|
|
6279
|
-
}
|
|
6280
|
-
return this.$nextTick();
|
|
6281
|
-
},
|
|
6282
|
-
/**
|
|
6283
|
-
* 当单元格发生改变时
|
|
6284
|
-
* 如果存在规则,则校验
|
|
6285
|
-
*/
|
|
6286
|
-
handleChangeCell(evnt, params) {
|
|
6287
|
-
this.checkValidate('blur')
|
|
6288
|
-
.catch((e) => e)
|
|
6289
|
-
.then(() => {
|
|
6290
|
-
this.handleEdit(params, evnt)
|
|
6291
|
-
.then(() => this.checkValidate('change'))
|
|
6292
|
-
.catch((e) => e);
|
|
6293
|
-
});
|
|
6294
|
-
},
|
|
6295
6483
|
/**
|
|
6296
6484
|
* 列点击事件
|
|
6297
6485
|
* 如果是单击模式,则激活为编辑状态
|
|
@@ -6301,7 +6489,7 @@ const Methods = {
|
|
|
6301
6489
|
const $xeTable = this;
|
|
6302
6490
|
const props = $xeTable;
|
|
6303
6491
|
const reactData = $xeTable;
|
|
6304
|
-
const { highlightCurrentRow, editConfig } = props;
|
|
6492
|
+
const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props;
|
|
6305
6493
|
const { editStore, isDragResize } = reactData;
|
|
6306
6494
|
if (isDragResize) {
|
|
6307
6495
|
return;
|
|
@@ -6313,6 +6501,8 @@ const Methods = {
|
|
|
6313
6501
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6314
6502
|
const keyboardOpts = $xeTable.computeKeyboardOpts;
|
|
6315
6503
|
const rowOpts = $xeTable.computeRowOpts;
|
|
6504
|
+
const columnOpts = $xeTable.computeColumnOpts;
|
|
6505
|
+
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
6316
6506
|
const { actived, focused } = editStore;
|
|
6317
6507
|
const { row, column } = params;
|
|
6318
6508
|
const { type, treeNode } = column;
|
|
@@ -6328,11 +6518,11 @@ const Methods = {
|
|
|
6328
6518
|
if (!triggerCheckbox && !triggerRadio) {
|
|
6329
6519
|
// 如果是展开行
|
|
6330
6520
|
if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
|
|
6331
|
-
|
|
6521
|
+
$xeTable.triggerRowExpandEvent(evnt, params);
|
|
6332
6522
|
}
|
|
6333
6523
|
// 如果是树形表格
|
|
6334
6524
|
if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
|
|
6335
|
-
|
|
6525
|
+
$xeTable.triggerTreeExpandEvent(evnt, params);
|
|
6336
6526
|
}
|
|
6337
6527
|
}
|
|
6338
6528
|
// 如果点击了树节点
|
|
@@ -6341,16 +6531,22 @@ const Methods = {
|
|
|
6341
6531
|
// 如果是高亮行
|
|
6342
6532
|
if (rowOpts.isCurrent || highlightCurrentRow) {
|
|
6343
6533
|
if (!triggerCheckbox && !triggerRadio) {
|
|
6344
|
-
|
|
6534
|
+
$xeTable.triggerCurrentRowEvent(evnt, params);
|
|
6535
|
+
}
|
|
6536
|
+
}
|
|
6537
|
+
// 如果是当前列
|
|
6538
|
+
if ((columnOpts.isCurrent || highlightCurrentColumn) && (!currentColumnOpts.trigger || ['cell', 'default'].includes(currentColumnOpts.trigger))) {
|
|
6539
|
+
if (!triggerCheckbox && !triggerRadio) {
|
|
6540
|
+
$xeTable.triggerCurrentColumnEvent(evnt, params);
|
|
6345
6541
|
}
|
|
6346
6542
|
}
|
|
6347
6543
|
// 如果是单选框
|
|
6348
6544
|
if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
|
|
6349
|
-
|
|
6545
|
+
$xeTable.triggerRadioRowEvent(evnt, params);
|
|
6350
6546
|
}
|
|
6351
6547
|
// 如果是复选框
|
|
6352
6548
|
if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
|
|
6353
|
-
|
|
6549
|
+
$xeTable.handleToggleCheckRowEvent(evnt, params);
|
|
6354
6550
|
}
|
|
6355
6551
|
}
|
|
6356
6552
|
// 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
|
|
@@ -6362,16 +6558,16 @@ const Methods = {
|
|
|
6362
6558
|
}
|
|
6363
6559
|
if (editOpts.trigger === 'manual') {
|
|
6364
6560
|
if (actived.args && actived.row === row && column !== actived.column) {
|
|
6365
|
-
|
|
6561
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6366
6562
|
}
|
|
6367
6563
|
}
|
|
6368
6564
|
else if (!actived.args || row !== actived.row || column !== actived.column) {
|
|
6369
6565
|
if (editOpts.trigger === 'click') {
|
|
6370
|
-
|
|
6566
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6371
6567
|
}
|
|
6372
6568
|
else if (editOpts.trigger === 'dblclick') {
|
|
6373
6569
|
if (editOpts.mode === 'row' && actived.row === row) {
|
|
6374
|
-
|
|
6570
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6375
6571
|
}
|
|
6376
6572
|
}
|
|
6377
6573
|
}
|
|
@@ -6392,7 +6588,7 @@ const Methods = {
|
|
|
6392
6588
|
}
|
|
6393
6589
|
}
|
|
6394
6590
|
}
|
|
6395
|
-
|
|
6591
|
+
$xeTable.dispatchEvent('cell-click', params, evnt);
|
|
6396
6592
|
},
|
|
6397
6593
|
/**
|
|
6398
6594
|
* 列双击点击事件
|
|
@@ -6414,48 +6610,23 @@ const Methods = {
|
|
|
6414
6610
|
if (isEnableConf(editConfig) && editOpts.trigger === 'dblclick') {
|
|
6415
6611
|
if (!actived.args || evnt.currentTarget !== actived.args.cell) {
|
|
6416
6612
|
if (editOpts.mode === 'row') {
|
|
6417
|
-
|
|
6613
|
+
checkValidate($xeTable, 'blur')
|
|
6418
6614
|
.catch((e) => e)
|
|
6419
6615
|
.then(() => {
|
|
6420
6616
|
this.handleEdit(params, evnt)
|
|
6421
|
-
.then(() =>
|
|
6617
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
6422
6618
|
.catch((e) => e);
|
|
6423
6619
|
});
|
|
6424
6620
|
}
|
|
6425
6621
|
else if (editOpts.mode === 'cell') {
|
|
6426
6622
|
this.handleEdit(params, evnt)
|
|
6427
|
-
.then(() =>
|
|
6623
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
6428
6624
|
.catch((e) => e);
|
|
6429
6625
|
}
|
|
6430
6626
|
}
|
|
6431
6627
|
}
|
|
6432
6628
|
this.emitEvent('cell-dblclick', params, evnt);
|
|
6433
6629
|
},
|
|
6434
|
-
handleDefaultSort() {
|
|
6435
|
-
const $xeTable = this;
|
|
6436
|
-
const { sortConfig, sortOpts } = this;
|
|
6437
|
-
let { defaultSort } = sortOpts;
|
|
6438
|
-
if (defaultSort) {
|
|
6439
|
-
if (!XEUtils.isArray(defaultSort)) {
|
|
6440
|
-
defaultSort = [defaultSort];
|
|
6441
|
-
}
|
|
6442
|
-
if (defaultSort.length) {
|
|
6443
|
-
(sortConfig.multiple ? defaultSort : defaultSort.slice(0, 1)).forEach((item, index) => {
|
|
6444
|
-
const { field, order } = item;
|
|
6445
|
-
if (field && order) {
|
|
6446
|
-
const column = this.getColumnByField(field);
|
|
6447
|
-
if (column && column.sortable) {
|
|
6448
|
-
column.order = order;
|
|
6449
|
-
column.sortTime = Date.now() + index;
|
|
6450
|
-
}
|
|
6451
|
-
}
|
|
6452
|
-
});
|
|
6453
|
-
if (!sortOpts.remote) {
|
|
6454
|
-
this.handleTableData(true).then(() => updateStyle($xeTable));
|
|
6455
|
-
}
|
|
6456
|
-
}
|
|
6457
|
-
}
|
|
6458
|
-
},
|
|
6459
6630
|
handleColumnSortEvent(evnt, column) {
|
|
6460
6631
|
const $xeTable = this;
|
|
6461
6632
|
const props = $xeTable;
|
|
@@ -6610,12 +6781,11 @@ const Methods = {
|
|
|
6610
6781
|
const internalData = $xeTable;
|
|
6611
6782
|
const { treeConfig, dragConfig } = props;
|
|
6612
6783
|
const rowDragOpts = $xeTable.computeRowDragOpts;
|
|
6613
|
-
const { fullAllDataRowIdData } = internalData;
|
|
6784
|
+
const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData;
|
|
6614
6785
|
const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
|
|
6615
6786
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
6616
6787
|
const { transform, rowField, mapChildrenField, parentField } = treeOpts;
|
|
6617
6788
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6618
|
-
const { afterFullData, tableFullData } = internalData;
|
|
6619
6789
|
const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
|
|
6620
6790
|
const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
|
|
6621
6791
|
const errRest = {
|
|
@@ -7219,48 +7389,52 @@ const Methods = {
|
|
|
7219
7389
|
setPendingRow(rows, status) {
|
|
7220
7390
|
const $xeTable = this;
|
|
7221
7391
|
const reactData = $xeTable;
|
|
7222
|
-
const
|
|
7392
|
+
const internalData = $xeTable;
|
|
7393
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7394
|
+
const { pendingRowMaps } = internalData;
|
|
7223
7395
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7224
7396
|
rows = [rows];
|
|
7225
7397
|
}
|
|
7226
7398
|
if (status) {
|
|
7227
7399
|
rows.forEach((row) => {
|
|
7228
|
-
const rowid =
|
|
7229
|
-
if (rowid && !
|
|
7230
|
-
|
|
7400
|
+
const rowid = handleGetRowId(row);
|
|
7401
|
+
if (rowid && !pendingRowMaps[rowid]) {
|
|
7402
|
+
pendingRowMaps[rowid] = row;
|
|
7231
7403
|
}
|
|
7232
7404
|
});
|
|
7233
7405
|
}
|
|
7234
7406
|
else {
|
|
7235
7407
|
rows.forEach((row) => {
|
|
7236
|
-
const rowid =
|
|
7237
|
-
if (rowid &&
|
|
7238
|
-
delete
|
|
7408
|
+
const rowid = handleGetRowId(row);
|
|
7409
|
+
if (rowid && pendingRowMaps[rowid]) {
|
|
7410
|
+
delete pendingRowMaps[rowid];
|
|
7239
7411
|
}
|
|
7240
7412
|
});
|
|
7241
7413
|
}
|
|
7242
|
-
reactData.
|
|
7414
|
+
reactData.pendingRowFlag++;
|
|
7243
7415
|
return $xeTable.$nextTick();
|
|
7244
7416
|
},
|
|
7245
7417
|
togglePendingRow(rows) {
|
|
7246
7418
|
const $xeTable = this;
|
|
7247
7419
|
const reactData = $xeTable;
|
|
7248
|
-
const
|
|
7420
|
+
const internalData = $xeTable;
|
|
7421
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7422
|
+
const { pendingRowMaps } = internalData;
|
|
7249
7423
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7250
7424
|
rows = [rows];
|
|
7251
7425
|
}
|
|
7252
7426
|
rows.forEach((row) => {
|
|
7253
|
-
const rowid =
|
|
7427
|
+
const rowid = handleGetRowId(row);
|
|
7254
7428
|
if (rowid) {
|
|
7255
|
-
if (
|
|
7256
|
-
delete
|
|
7429
|
+
if (pendingRowMaps[rowid]) {
|
|
7430
|
+
delete pendingRowMaps[rowid];
|
|
7257
7431
|
}
|
|
7258
7432
|
else {
|
|
7259
|
-
|
|
7433
|
+
pendingRowMaps[rowid] = row;
|
|
7260
7434
|
}
|
|
7261
7435
|
}
|
|
7262
7436
|
});
|
|
7263
|
-
reactData.
|
|
7437
|
+
reactData.pendingRowFlag++;
|
|
7264
7438
|
return $xeTable.$nextTick();
|
|
7265
7439
|
},
|
|
7266
7440
|
hasPendingByRow(row) {
|
|
@@ -7276,10 +7450,8 @@ const Methods = {
|
|
|
7276
7450
|
},
|
|
7277
7451
|
getPendingRecords() {
|
|
7278
7452
|
const $xeTable = this;
|
|
7279
|
-
const reactData = $xeTable;
|
|
7280
7453
|
const internalData = $xeTable;
|
|
7281
|
-
const { pendingRowMaps } =
|
|
7282
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7454
|
+
const { fullAllDataRowIdData, pendingRowMaps } = internalData;
|
|
7283
7455
|
const insertRecords = [];
|
|
7284
7456
|
XEUtils.each(pendingRowMaps, (row, rowid) => {
|
|
7285
7457
|
if (fullAllDataRowIdData[rowid]) {
|
|
@@ -7289,8 +7461,12 @@ const Methods = {
|
|
|
7289
7461
|
return insertRecords;
|
|
7290
7462
|
},
|
|
7291
7463
|
clearPendingRow() {
|
|
7292
|
-
|
|
7293
|
-
|
|
7464
|
+
const $xeTable = this;
|
|
7465
|
+
const reactData = $xeTable;
|
|
7466
|
+
const internalData = $xeTable;
|
|
7467
|
+
internalData.pendingRowMaps = {};
|
|
7468
|
+
reactData.pendingRowFlag++;
|
|
7469
|
+
return $xeTable.$nextTick();
|
|
7294
7470
|
},
|
|
7295
7471
|
sort(sortConfs, sortOrder) {
|
|
7296
7472
|
const $xeTable = this;
|
|
@@ -7441,7 +7617,9 @@ const Methods = {
|
|
|
7441
7617
|
* @param {Event} evnt 事件
|
|
7442
7618
|
*/
|
|
7443
7619
|
closeFilter() {
|
|
7444
|
-
const
|
|
7620
|
+
const $xeTable = this;
|
|
7621
|
+
const reactData = $xeTable;
|
|
7622
|
+
const { filterStore } = reactData;
|
|
7445
7623
|
const { column, visible } = filterStore;
|
|
7446
7624
|
Object.assign(filterStore, {
|
|
7447
7625
|
isAllSelected: false,
|
|
@@ -7450,9 +7628,15 @@ const Methods = {
|
|
|
7450
7628
|
visible: false
|
|
7451
7629
|
});
|
|
7452
7630
|
if (visible) {
|
|
7453
|
-
|
|
7631
|
+
$xeTable.dispatchEvent('filter-visible', {
|
|
7632
|
+
column,
|
|
7633
|
+
field: column.field,
|
|
7634
|
+
property: column.field,
|
|
7635
|
+
filterList: () => $xeTable.getCheckedFilters(),
|
|
7636
|
+
visible: false
|
|
7637
|
+
}, null);
|
|
7454
7638
|
}
|
|
7455
|
-
return
|
|
7639
|
+
return $xeTable.$nextTick();
|
|
7456
7640
|
},
|
|
7457
7641
|
/**
|
|
7458
7642
|
* 判断指定列是否为筛选状态,如果为空则判断所有列
|
|
@@ -7483,17 +7667,16 @@ const Methods = {
|
|
|
7483
7667
|
const $xeTable = this;
|
|
7484
7668
|
const reactData = $xeTable;
|
|
7485
7669
|
const internalData = $xeTable;
|
|
7486
|
-
const
|
|
7487
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7670
|
+
const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
|
|
7488
7671
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7489
7672
|
const { lazy } = expandOpts;
|
|
7490
7673
|
const rowid = getRowid($xeTable, row);
|
|
7491
7674
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7492
7675
|
if (lazy && rowRest) {
|
|
7493
7676
|
rowRest.expandLoaded = false;
|
|
7494
|
-
delete
|
|
7677
|
+
delete rowExpandLazyLoadedMaps[rowid];
|
|
7495
7678
|
}
|
|
7496
|
-
reactData.
|
|
7679
|
+
reactData.rowExpandedFlag++;
|
|
7497
7680
|
return $xeTable.$nextTick();
|
|
7498
7681
|
},
|
|
7499
7682
|
/**
|
|
@@ -7501,14 +7684,17 @@ const Methods = {
|
|
|
7501
7684
|
* @param {Row} row 行对象
|
|
7502
7685
|
*/
|
|
7503
7686
|
reloadRowExpand(row) {
|
|
7504
|
-
const
|
|
7687
|
+
const $xeTable = this;
|
|
7688
|
+
const internalData = $xeTable;
|
|
7689
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
7690
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7505
7691
|
const { lazy } = expandOpts;
|
|
7506
7692
|
const rowid = getRowid(this, row);
|
|
7507
7693
|
if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
|
|
7508
|
-
|
|
7509
|
-
.then(() =>
|
|
7694
|
+
$xeTable.clearRowExpandLoaded(row)
|
|
7695
|
+
.then(() => handleAsyncRowExpand($xeTable, row));
|
|
7510
7696
|
}
|
|
7511
|
-
return
|
|
7697
|
+
return $xeTable.$nextTick();
|
|
7512
7698
|
},
|
|
7513
7699
|
reloadExpandContent(row) {
|
|
7514
7700
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7521,20 +7707,33 @@ const Methods = {
|
|
|
7521
7707
|
* 展开行事件
|
|
7522
7708
|
*/
|
|
7523
7709
|
triggerRowExpandEvent(evnt, params) {
|
|
7524
|
-
const
|
|
7710
|
+
const $xeTable = this;
|
|
7711
|
+
const reactData = $xeTable;
|
|
7712
|
+
const internalData = $xeTable;
|
|
7713
|
+
const { expandColumn: column } = reactData;
|
|
7714
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
7715
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7525
7716
|
const { row } = params;
|
|
7526
7717
|
const { lazy, trigger } = expandOpts;
|
|
7527
7718
|
if (trigger === 'manual') {
|
|
7528
7719
|
return;
|
|
7529
7720
|
}
|
|
7530
7721
|
evnt.stopPropagation();
|
|
7531
|
-
const rowid = getRowid(
|
|
7722
|
+
const rowid = getRowid($xeTable, row);
|
|
7532
7723
|
if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
|
|
7533
|
-
const expanded =
|
|
7534
|
-
const columnIndex =
|
|
7535
|
-
const $columnIndex =
|
|
7536
|
-
|
|
7537
|
-
|
|
7724
|
+
const expanded = !$xeTable.isRowExpandByRow(row);
|
|
7725
|
+
const columnIndex = $xeTable.getColumnIndex(column);
|
|
7726
|
+
const $columnIndex = $xeTable.getVMColumnIndex(column);
|
|
7727
|
+
$xeTable.setRowExpand(row, expanded);
|
|
7728
|
+
$xeTable.dispatchEvent('toggle-row-expand', {
|
|
7729
|
+
expanded,
|
|
7730
|
+
column,
|
|
7731
|
+
columnIndex,
|
|
7732
|
+
$columnIndex,
|
|
7733
|
+
row,
|
|
7734
|
+
rowIndex: $xeTable.getRowIndex(row),
|
|
7735
|
+
$rowIndex: $xeTable.getVMRowIndex(row)
|
|
7736
|
+
}, evnt);
|
|
7538
7737
|
}
|
|
7539
7738
|
},
|
|
7540
7739
|
/**
|
|
@@ -7543,25 +7742,6 @@ const Methods = {
|
|
|
7543
7742
|
toggleRowExpand(row) {
|
|
7544
7743
|
return this.setRowExpand(row, !this.isRowExpandByRow(row));
|
|
7545
7744
|
},
|
|
7546
|
-
/**
|
|
7547
|
-
* 处理默认展开行
|
|
7548
|
-
*/
|
|
7549
|
-
handleDefaultRowExpand() {
|
|
7550
|
-
const { expandOpts, fullDataRowIdData } = this;
|
|
7551
|
-
const { expandAll, expandRowKeys } = expandOpts;
|
|
7552
|
-
if (expandAll) {
|
|
7553
|
-
this.setAllRowExpand(true);
|
|
7554
|
-
}
|
|
7555
|
-
else if (expandRowKeys) {
|
|
7556
|
-
const defExpandeds = [];
|
|
7557
|
-
expandRowKeys.forEach((rowid) => {
|
|
7558
|
-
if (fullDataRowIdData[rowid]) {
|
|
7559
|
-
defExpandeds.push(fullDataRowIdData[rowid].row);
|
|
7560
|
-
}
|
|
7561
|
-
});
|
|
7562
|
-
this.setRowExpand(defExpandeds, true);
|
|
7563
|
-
}
|
|
7564
|
-
},
|
|
7565
7745
|
/**
|
|
7566
7746
|
* 设置所有行的展开与否
|
|
7567
7747
|
* @param {Boolean} expanded 是否展开
|
|
@@ -7580,48 +7760,6 @@ const Methods = {
|
|
|
7580
7760
|
}
|
|
7581
7761
|
return this.setRowExpand(expandedRows, expanded);
|
|
7582
7762
|
},
|
|
7583
|
-
handleAsyncRowExpand(row) {
|
|
7584
|
-
const $xeTable = this;
|
|
7585
|
-
const reactData = $xeTable;
|
|
7586
|
-
const internalData = $xeTable;
|
|
7587
|
-
return new Promise(resolve => {
|
|
7588
|
-
const { expandOpts } = this;
|
|
7589
|
-
const { loadMethod } = expandOpts;
|
|
7590
|
-
if (loadMethod) {
|
|
7591
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7592
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7593
|
-
const rowid = getRowid($xeTable, row);
|
|
7594
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7595
|
-
rExpandLazyLoadedMaps[rowid] = row;
|
|
7596
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7597
|
-
loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
|
|
7598
|
-
const rExpandedMaps = Object.assign({}, reactData.rowExpandedMaps);
|
|
7599
|
-
if (rowRest) {
|
|
7600
|
-
rowRest.expandLoaded = true;
|
|
7601
|
-
}
|
|
7602
|
-
rExpandedMaps[rowid] = row;
|
|
7603
|
-
reactData.rowExpandedMaps = rExpandedMaps;
|
|
7604
|
-
}).catch(() => {
|
|
7605
|
-
if (rowRest) {
|
|
7606
|
-
rowRest.expandLoaded = false;
|
|
7607
|
-
}
|
|
7608
|
-
}).finally(() => {
|
|
7609
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7610
|
-
if (rExpandLazyLoadedMaps[rowid]) {
|
|
7611
|
-
delete rExpandLazyLoadedMaps[rowid];
|
|
7612
|
-
}
|
|
7613
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7614
|
-
$xeTable.$nextTick()
|
|
7615
|
-
.then(() => $xeTable.recalculate())
|
|
7616
|
-
.then(() => $xeTable.updateCellAreas())
|
|
7617
|
-
.then(() => resolve());
|
|
7618
|
-
});
|
|
7619
|
-
}
|
|
7620
|
-
else {
|
|
7621
|
-
resolve();
|
|
7622
|
-
}
|
|
7623
|
-
});
|
|
7624
|
-
},
|
|
7625
7763
|
/**
|
|
7626
7764
|
* 设置展开行,二个参数设置这一行展开与否
|
|
7627
7765
|
* 支持单行
|
|
@@ -7631,8 +7769,12 @@ const Methods = {
|
|
|
7631
7769
|
*/
|
|
7632
7770
|
setRowExpand(rows, expanded) {
|
|
7633
7771
|
const $xeTable = this;
|
|
7634
|
-
const
|
|
7635
|
-
|
|
7772
|
+
const reactData = $xeTable;
|
|
7773
|
+
const internalData = $xeTable;
|
|
7774
|
+
const { expandColumn } = reactData;
|
|
7775
|
+
let { fullAllDataRowIdData, rowExpandedMaps, rowExpandLazyLoadedMaps } = internalData;
|
|
7776
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7777
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7636
7778
|
const { reserve, lazy, accordion, toggleMethod } = expandOpts;
|
|
7637
7779
|
const lazyRests = [];
|
|
7638
7780
|
const columnIndex = $xeTable.getColumnIndex(expandColumn);
|
|
@@ -7643,30 +7785,31 @@ const Methods = {
|
|
|
7643
7785
|
}
|
|
7644
7786
|
if (accordion) {
|
|
7645
7787
|
// 只能同时展开一个
|
|
7646
|
-
|
|
7788
|
+
rowExpandedMaps = {};
|
|
7789
|
+
internalData.rowExpandedMaps = rowExpandedMaps;
|
|
7647
7790
|
rows = rows.slice(rows.length - 1, rows.length);
|
|
7648
7791
|
}
|
|
7649
|
-
const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) })) : rows;
|
|
7792
|
+
const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) })) : rows;
|
|
7650
7793
|
if (expanded) {
|
|
7651
7794
|
validRows.forEach((row) => {
|
|
7652
|
-
const rowid =
|
|
7653
|
-
if (!
|
|
7795
|
+
const rowid = handleGetRowId(row);
|
|
7796
|
+
if (!rowExpandedMaps[rowid]) {
|
|
7654
7797
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7655
7798
|
const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid];
|
|
7656
7799
|
if (isLoad) {
|
|
7657
|
-
lazyRests.push(
|
|
7800
|
+
lazyRests.push(handleAsyncRowExpand($xeTable, row));
|
|
7658
7801
|
}
|
|
7659
7802
|
else {
|
|
7660
|
-
|
|
7803
|
+
rowExpandedMaps[rowid] = row;
|
|
7661
7804
|
}
|
|
7662
7805
|
}
|
|
7663
7806
|
});
|
|
7664
7807
|
}
|
|
7665
7808
|
else {
|
|
7666
7809
|
validRows.forEach((item) => {
|
|
7667
|
-
const rowid =
|
|
7668
|
-
if (
|
|
7669
|
-
delete
|
|
7810
|
+
const rowid = handleGetRowId(item);
|
|
7811
|
+
if (rowExpandedMaps[rowid]) {
|
|
7812
|
+
delete rowExpandedMaps[rowid];
|
|
7670
7813
|
}
|
|
7671
7814
|
});
|
|
7672
7815
|
}
|
|
@@ -7674,7 +7817,7 @@ const Methods = {
|
|
|
7674
7817
|
validRows.forEach((row) => handleRowExpandReserve($xeTable, row, expanded));
|
|
7675
7818
|
}
|
|
7676
7819
|
}
|
|
7677
|
-
|
|
7820
|
+
reactData.rowExpandedFlag++;
|
|
7678
7821
|
return Promise.all(lazyRests)
|
|
7679
7822
|
.then(() => $xeTable.$nextTick())
|
|
7680
7823
|
.then(() => $xeTable.recalculate(true))
|
|
@@ -7690,9 +7833,13 @@ const Methods = {
|
|
|
7690
7833
|
* @param {Row} row 行对象
|
|
7691
7834
|
*/
|
|
7692
7835
|
isRowExpandByRow(row) {
|
|
7693
|
-
const
|
|
7836
|
+
const $xeTable = this;
|
|
7837
|
+
const reactData = $xeTable;
|
|
7838
|
+
const internalData = $xeTable;
|
|
7839
|
+
const { rowExpandedFlag } = reactData;
|
|
7840
|
+
const { rowExpandedMaps } = internalData;
|
|
7694
7841
|
const rowid = getRowid(this, row);
|
|
7695
|
-
return !!rowExpandedMaps[rowid];
|
|
7842
|
+
return !!rowExpandedFlag && !!rowExpandedMaps[rowid];
|
|
7696
7843
|
},
|
|
7697
7844
|
isExpandByRow(row) {
|
|
7698
7845
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7712,7 +7859,8 @@ const Methods = {
|
|
|
7712
7859
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7713
7860
|
const { reserve } = expandOpts;
|
|
7714
7861
|
const expList = $xeTable.getRowExpandRecords();
|
|
7715
|
-
|
|
7862
|
+
internalData.rowExpandedMaps = {};
|
|
7863
|
+
reactData.rowExpandedFlag++;
|
|
7716
7864
|
if (reserve) {
|
|
7717
7865
|
tableFullData.forEach((row) => handleRowExpandReserve($xeTable, row, false));
|
|
7718
7866
|
}
|
|
@@ -7732,8 +7880,10 @@ const Methods = {
|
|
|
7732
7880
|
return this.$nextTick();
|
|
7733
7881
|
},
|
|
7734
7882
|
getRowExpandRecords() {
|
|
7883
|
+
const $xeTable = this;
|
|
7884
|
+
const internalData = $xeTable;
|
|
7735
7885
|
const rest = [];
|
|
7736
|
-
XEUtils.each(
|
|
7886
|
+
XEUtils.each(internalData.rowExpandedMaps, item => {
|
|
7737
7887
|
if (item) {
|
|
7738
7888
|
rest.push(item);
|
|
7739
7889
|
}
|
|
@@ -7741,8 +7891,10 @@ const Methods = {
|
|
|
7741
7891
|
return rest;
|
|
7742
7892
|
},
|
|
7743
7893
|
getTreeExpandRecords() {
|
|
7894
|
+
const $xeTable = this;
|
|
7895
|
+
const internalData = $xeTable;
|
|
7744
7896
|
const rest = [];
|
|
7745
|
-
XEUtils.each(
|
|
7897
|
+
XEUtils.each(internalData.treeExpandedMaps, item => {
|
|
7746
7898
|
if (item) {
|
|
7747
7899
|
rest.push(item);
|
|
7748
7900
|
}
|
|
@@ -7775,12 +7927,10 @@ const Methods = {
|
|
|
7775
7927
|
const $xeTable = this;
|
|
7776
7928
|
const reactData = $xeTable;
|
|
7777
7929
|
const internalData = $xeTable;
|
|
7778
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7930
|
+
const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
|
|
7779
7931
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
7780
7932
|
const { transform } = treeOpts;
|
|
7781
|
-
let tExpandedMaps = {};
|
|
7782
7933
|
if (rows) {
|
|
7783
|
-
tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
|
|
7784
7934
|
if (!XEUtils.isArray(rows)) {
|
|
7785
7935
|
rows = [rows];
|
|
7786
7936
|
}
|
|
@@ -7789,8 +7939,8 @@ const Methods = {
|
|
|
7789
7939
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7790
7940
|
if (rowRest) {
|
|
7791
7941
|
rowRest.treeLoaded = false;
|
|
7792
|
-
if (
|
|
7793
|
-
delete
|
|
7942
|
+
if (treeExpandedMaps[rowid]) {
|
|
7943
|
+
delete treeExpandedMaps[rowid];
|
|
7794
7944
|
}
|
|
7795
7945
|
}
|
|
7796
7946
|
});
|
|
@@ -7800,7 +7950,8 @@ const Methods = {
|
|
|
7800
7950
|
rowRest.treeLoaded = false;
|
|
7801
7951
|
});
|
|
7802
7952
|
}
|
|
7803
|
-
|
|
7953
|
+
internalData.treeExpandedMaps = {};
|
|
7954
|
+
reactData.treeExpandedFlag++;
|
|
7804
7955
|
if (transform) {
|
|
7805
7956
|
handleVirtualTreeToList($xeTable);
|
|
7806
7957
|
return $xeTable.handleTableData();
|
|
@@ -7813,36 +7964,42 @@ const Methods = {
|
|
|
7813
7964
|
*/
|
|
7814
7965
|
reloadTreeExpand(row) {
|
|
7815
7966
|
const $xeTable = this;
|
|
7816
|
-
const
|
|
7967
|
+
const internalData = $xeTable;
|
|
7968
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
7969
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7817
7970
|
const { transform, lazy } = treeOpts;
|
|
7818
7971
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
7819
|
-
const rowid = getRowid(
|
|
7972
|
+
const rowid = getRowid($xeTable, row);
|
|
7820
7973
|
if (lazy && row[hasChildField] && !treeExpandLazyLoadedMaps[rowid]) {
|
|
7821
|
-
return
|
|
7822
|
-
return
|
|
7974
|
+
return $xeTable.clearTreeExpandLoaded(row).then(() => {
|
|
7975
|
+
return handleAsyncTreeExpandChilds($xeTable, row);
|
|
7823
7976
|
}).then(() => {
|
|
7824
7977
|
if (transform) {
|
|
7825
7978
|
handleVirtualTreeToList($xeTable);
|
|
7826
|
-
return
|
|
7979
|
+
return $xeTable.handleTableData();
|
|
7827
7980
|
}
|
|
7828
7981
|
}).then(() => {
|
|
7829
|
-
return
|
|
7982
|
+
return $xeTable.recalculate();
|
|
7830
7983
|
});
|
|
7831
7984
|
}
|
|
7832
|
-
return
|
|
7985
|
+
return $xeTable.$nextTick();
|
|
7833
7986
|
},
|
|
7834
7987
|
reloadTreeChilds(row) {
|
|
7988
|
+
const $xeTable = this;
|
|
7835
7989
|
if (process.env.NODE_ENV === 'development') {
|
|
7836
7990
|
warnLog('vxe.error.delFunc', ['reloadTreeChilds', 'reloadTreeExpand']);
|
|
7837
7991
|
}
|
|
7838
7992
|
// 即将废弃
|
|
7839
|
-
return
|
|
7993
|
+
return $xeTable.reloadTreeExpand(row);
|
|
7840
7994
|
},
|
|
7841
7995
|
/**
|
|
7842
7996
|
* 展开树节点事件
|
|
7843
7997
|
*/
|
|
7844
7998
|
triggerTreeExpandEvent(evnt, params) {
|
|
7845
|
-
const
|
|
7999
|
+
const $xeTable = this;
|
|
8000
|
+
const internalData = $xeTable;
|
|
8001
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
8002
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7846
8003
|
const { row, column } = params;
|
|
7847
8004
|
const { lazy, trigger } = treeOpts;
|
|
7848
8005
|
if (trigger === 'manual') {
|
|
@@ -7851,11 +8008,11 @@ const Methods = {
|
|
|
7851
8008
|
evnt.stopPropagation();
|
|
7852
8009
|
const rowid = getRowid(this, row);
|
|
7853
8010
|
if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
|
|
7854
|
-
const expanded =
|
|
7855
|
-
const columnIndex =
|
|
7856
|
-
const $columnIndex =
|
|
7857
|
-
|
|
7858
|
-
|
|
8011
|
+
const expanded = !$xeTable.isTreeExpandByRow(row);
|
|
8012
|
+
const columnIndex = $xeTable.getColumnIndex(column);
|
|
8013
|
+
const $columnIndex = $xeTable.getVMColumnIndex(column);
|
|
8014
|
+
$xeTable.setTreeExpand(row, expanded);
|
|
8015
|
+
$xeTable.dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
|
|
7859
8016
|
}
|
|
7860
8017
|
},
|
|
7861
8018
|
/**
|
|
@@ -7864,87 +8021,6 @@ const Methods = {
|
|
|
7864
8021
|
toggleTreeExpand(row) {
|
|
7865
8022
|
return this.setTreeExpand(row, !this.isTreeExpandByRow(row));
|
|
7866
8023
|
},
|
|
7867
|
-
/**
|
|
7868
|
-
* 处理默认展开树节点
|
|
7869
|
-
*/
|
|
7870
|
-
handleDefaultTreeExpand() {
|
|
7871
|
-
const { treeConfig, treeOpts, tableFullData } = this;
|
|
7872
|
-
if (treeConfig) {
|
|
7873
|
-
const { expandAll, expandRowKeys } = treeOpts;
|
|
7874
|
-
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7875
|
-
if (expandAll) {
|
|
7876
|
-
this.setAllTreeExpand(true);
|
|
7877
|
-
}
|
|
7878
|
-
else if (expandRowKeys) {
|
|
7879
|
-
const defExpandeds = [];
|
|
7880
|
-
const rowkey = getRowkey(this);
|
|
7881
|
-
expandRowKeys.forEach((rowid) => {
|
|
7882
|
-
const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
|
|
7883
|
-
if (matchObj) {
|
|
7884
|
-
defExpandeds.push(matchObj.item);
|
|
7885
|
-
}
|
|
7886
|
-
});
|
|
7887
|
-
this.setTreeExpand(defExpandeds, true);
|
|
7888
|
-
}
|
|
7889
|
-
}
|
|
7890
|
-
},
|
|
7891
|
-
handleAsyncTreeExpandChilds(row) {
|
|
7892
|
-
const $xeTable = this;
|
|
7893
|
-
const { treeOpts, checkboxOpts } = this;
|
|
7894
|
-
const { transform, loadMethod } = treeOpts;
|
|
7895
|
-
const { checkStrictly } = checkboxOpts;
|
|
7896
|
-
return new Promise(resolve => {
|
|
7897
|
-
if (loadMethod) {
|
|
7898
|
-
const { treeExpandLazyLoadedMaps, fullAllDataRowIdData } = this;
|
|
7899
|
-
const rowid = getRowid($xeTable, row);
|
|
7900
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7901
|
-
treeExpandLazyLoadedMaps[rowid] = row;
|
|
7902
|
-
Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
|
|
7903
|
-
if (rowRest) {
|
|
7904
|
-
rowRest.treeLoaded = true;
|
|
7905
|
-
}
|
|
7906
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7907
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7908
|
-
}
|
|
7909
|
-
if (!XEUtils.isArray(childRecords)) {
|
|
7910
|
-
childRecords = [];
|
|
7911
|
-
}
|
|
7912
|
-
if (childRecords) {
|
|
7913
|
-
return this.loadTreeChildren(row, childRecords).then((childRows) => {
|
|
7914
|
-
const { treeExpandedMaps } = this;
|
|
7915
|
-
if (childRows.length && !treeExpandedMaps[rowid]) {
|
|
7916
|
-
treeExpandedMaps[rowid] = row;
|
|
7917
|
-
}
|
|
7918
|
-
// 如果当前节点已选中,则展开后子节点也被选中
|
|
7919
|
-
if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
|
|
7920
|
-
handleCheckedCheckboxRow($xeTable, childRows, true);
|
|
7921
|
-
}
|
|
7922
|
-
return this.$nextTick().then(() => {
|
|
7923
|
-
if (transform) {
|
|
7924
|
-
this.handleTableData();
|
|
7925
|
-
updateAfterDataIndex($xeTable);
|
|
7926
|
-
return this.$nextTick();
|
|
7927
|
-
}
|
|
7928
|
-
});
|
|
7929
|
-
});
|
|
7930
|
-
}
|
|
7931
|
-
}).catch(() => {
|
|
7932
|
-
const { treeExpandLazyLoadedMaps } = this;
|
|
7933
|
-
if (rowRest) {
|
|
7934
|
-
rowRest.treeLoaded = false;
|
|
7935
|
-
}
|
|
7936
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7937
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7938
|
-
}
|
|
7939
|
-
}).finally(() => {
|
|
7940
|
-
this.$nextTick().then(() => this.recalculate()).then(() => resolve());
|
|
7941
|
-
});
|
|
7942
|
-
}
|
|
7943
|
-
else {
|
|
7944
|
-
resolve();
|
|
7945
|
-
}
|
|
7946
|
-
});
|
|
7947
|
-
},
|
|
7948
8024
|
/**
|
|
7949
8025
|
* 设置所有树节点的展开与否
|
|
7950
8026
|
* @param {Boolean} expanded 是否展开
|
|
@@ -7969,42 +8045,47 @@ const Methods = {
|
|
|
7969
8045
|
* @returns
|
|
7970
8046
|
*/
|
|
7971
8047
|
handleBaseTreeExpand(rows, expanded) {
|
|
7972
|
-
const
|
|
8048
|
+
const $xeTable = this;
|
|
8049
|
+
const reactData = $xeTable;
|
|
8050
|
+
const internalData = $xeTable;
|
|
8051
|
+
const { treeNodeColumn } = reactData;
|
|
8052
|
+
const { fullAllDataRowIdData, tableFullData, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData;
|
|
8053
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7973
8054
|
const { reserve, lazy, accordion, toggleMethod } = treeOpts;
|
|
7974
|
-
const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
|
|
7975
8055
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7976
8056
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
7977
8057
|
const result = [];
|
|
7978
|
-
const columnIndex =
|
|
7979
|
-
const $columnIndex =
|
|
7980
|
-
|
|
8058
|
+
const columnIndex = $xeTable.getColumnIndex(treeNodeColumn);
|
|
8059
|
+
const $columnIndex = $xeTable.getVMColumnIndex(treeNodeColumn);
|
|
8060
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
8061
|
+
let validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: treeNodeColumn, columnIndex, $columnIndex, row })) : rows;
|
|
7981
8062
|
if (accordion) {
|
|
7982
8063
|
validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
|
|
7983
8064
|
// 同一级只能展开一个
|
|
7984
8065
|
const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField });
|
|
7985
8066
|
if (matchObj) {
|
|
7986
8067
|
matchObj.items.forEach(item => {
|
|
7987
|
-
const rowid =
|
|
7988
|
-
if (
|
|
7989
|
-
delete
|
|
8068
|
+
const rowid = handleGetRowId(item);
|
|
8069
|
+
if (treeExpandedMaps[rowid]) {
|
|
8070
|
+
delete treeExpandedMaps[rowid];
|
|
7990
8071
|
}
|
|
7991
8072
|
});
|
|
7992
8073
|
}
|
|
7993
8074
|
}
|
|
7994
8075
|
if (expanded) {
|
|
7995
8076
|
validRows.forEach((row) => {
|
|
7996
|
-
const rowid =
|
|
7997
|
-
if (!
|
|
8077
|
+
const rowid = handleGetRowId(row);
|
|
8078
|
+
if (!treeExpandedMaps[rowid]) {
|
|
7998
8079
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7999
8080
|
if (rowRest) {
|
|
8000
8081
|
const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
|
|
8001
8082
|
// 是否使用懒加载
|
|
8002
8083
|
if (isLoad) {
|
|
8003
|
-
result.push(
|
|
8084
|
+
result.push(handleAsyncTreeExpandChilds($xeTable, row));
|
|
8004
8085
|
}
|
|
8005
8086
|
else {
|
|
8006
8087
|
if (row[childrenField] && row[childrenField].length) {
|
|
8007
|
-
|
|
8088
|
+
treeExpandedMaps[rowid] = row;
|
|
8008
8089
|
}
|
|
8009
8090
|
}
|
|
8010
8091
|
}
|
|
@@ -8013,18 +8094,18 @@ const Methods = {
|
|
|
8013
8094
|
}
|
|
8014
8095
|
else {
|
|
8015
8096
|
validRows.forEach((item) => {
|
|
8016
|
-
const rowid =
|
|
8017
|
-
if (
|
|
8018
|
-
delete
|
|
8097
|
+
const rowid = handleGetRowId(item);
|
|
8098
|
+
if (treeExpandedMaps[rowid]) {
|
|
8099
|
+
delete treeExpandedMaps[rowid];
|
|
8019
8100
|
}
|
|
8020
8101
|
});
|
|
8021
8102
|
}
|
|
8022
8103
|
if (reserve) {
|
|
8023
|
-
validRows.forEach((row) =>
|
|
8104
|
+
validRows.forEach((row) => handleTreeExpandReserve($xeTable, row, expanded));
|
|
8024
8105
|
}
|
|
8025
|
-
|
|
8106
|
+
reactData.treeExpandedFlag++;
|
|
8026
8107
|
return Promise.all(result).then(() => {
|
|
8027
|
-
return
|
|
8108
|
+
return $xeTable.recalculate();
|
|
8028
8109
|
});
|
|
8029
8110
|
},
|
|
8030
8111
|
/**
|
|
@@ -8078,30 +8159,38 @@ const Methods = {
|
|
|
8078
8159
|
* @param {Row} row 行对象
|
|
8079
8160
|
*/
|
|
8080
8161
|
isTreeExpandByRow(row) {
|
|
8081
|
-
const
|
|
8082
|
-
|
|
8162
|
+
const $xeTable = this;
|
|
8163
|
+
const reactData = $xeTable;
|
|
8164
|
+
const internalData = $xeTable;
|
|
8165
|
+
const { treeExpandedFlag } = reactData;
|
|
8166
|
+
const { treeExpandedMaps } = internalData;
|
|
8167
|
+
return !!treeExpandedFlag && !!treeExpandedMaps[getRowid($xeTable, row)];
|
|
8083
8168
|
},
|
|
8084
8169
|
/**
|
|
8085
8170
|
* 手动清空树形节点的展开状态,数据会恢复成未展开的状态
|
|
8086
8171
|
*/
|
|
8087
8172
|
clearTreeExpand() {
|
|
8088
8173
|
const $xeTable = this;
|
|
8089
|
-
const
|
|
8090
|
-
const
|
|
8174
|
+
const reactData = $xeTable;
|
|
8175
|
+
const internalData = $xeTable;
|
|
8176
|
+
const { tableFullTreeData } = internalData;
|
|
8177
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
8091
8178
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
8092
|
-
const
|
|
8093
|
-
|
|
8179
|
+
const { transform, reserve } = treeOpts;
|
|
8180
|
+
const expList = $xeTable.getTreeExpandRecords();
|
|
8181
|
+
internalData.treeExpandedMaps = {};
|
|
8182
|
+
reactData.treeExpandedFlag++;
|
|
8094
8183
|
if (reserve) {
|
|
8095
|
-
XEUtils.eachTree(
|
|
8184
|
+
XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), { children: childrenField });
|
|
8096
8185
|
}
|
|
8097
|
-
return
|
|
8186
|
+
return $xeTable.handleTableData().then(() => {
|
|
8098
8187
|
if (transform) {
|
|
8099
8188
|
handleVirtualTreeToList($xeTable);
|
|
8100
|
-
return
|
|
8189
|
+
return $xeTable.handleTableData();
|
|
8101
8190
|
}
|
|
8102
8191
|
}).then(() => {
|
|
8103
8192
|
if (expList.length) {
|
|
8104
|
-
|
|
8193
|
+
$xeTable.recalculate();
|
|
8105
8194
|
}
|
|
8106
8195
|
});
|
|
8107
8196
|
},
|
|
@@ -8109,18 +8198,6 @@ const Methods = {
|
|
|
8109
8198
|
this.treeExpandedReserveRowMap = {};
|
|
8110
8199
|
return this.$nextTick();
|
|
8111
8200
|
},
|
|
8112
|
-
handleTreeExpandReserve(row, expanded) {
|
|
8113
|
-
const { treeExpandedReserveRowMap, treeOpts } = this;
|
|
8114
|
-
if (treeOpts.reserve) {
|
|
8115
|
-
const rowid = getRowid(this, row);
|
|
8116
|
-
if (expanded) {
|
|
8117
|
-
treeExpandedReserveRowMap[rowid] = row;
|
|
8118
|
-
}
|
|
8119
|
-
else if (treeExpandedReserveRowMap[rowid]) {
|
|
8120
|
-
delete treeExpandedReserveRowMap[rowid];
|
|
8121
|
-
}
|
|
8122
|
-
}
|
|
8123
|
-
},
|
|
8124
8201
|
/**
|
|
8125
8202
|
* 获取表格的滚动状态
|
|
8126
8203
|
*/
|
|
@@ -8241,8 +8318,8 @@ const Methods = {
|
|
|
8241
8318
|
*/
|
|
8242
8319
|
triggerScrollXEvent() {
|
|
8243
8320
|
const $xeTable = this;
|
|
8244
|
-
const
|
|
8245
|
-
if (
|
|
8321
|
+
const virtualXOpts = $xeTable.computeVirtualXOpts;
|
|
8322
|
+
if (virtualXOpts.immediate) {
|
|
8246
8323
|
loadScrollXData($xeTable);
|
|
8247
8324
|
}
|
|
8248
8325
|
else {
|
|
@@ -8254,8 +8331,8 @@ const Methods = {
|
|
|
8254
8331
|
*/
|
|
8255
8332
|
triggerScrollYEvent() {
|
|
8256
8333
|
const $xeTable = this;
|
|
8257
|
-
const
|
|
8258
|
-
if (
|
|
8334
|
+
const virtualYOpts = $xeTable.computeVirtualYOpts;
|
|
8335
|
+
if (virtualYOpts.immediate) {
|
|
8259
8336
|
loadScrollYData($xeTable);
|
|
8260
8337
|
}
|
|
8261
8338
|
else {
|
|
@@ -8438,10 +8515,10 @@ const Methods = {
|
|
|
8438
8515
|
return;
|
|
8439
8516
|
}
|
|
8440
8517
|
const { highlightHoverRow } = tableProps;
|
|
8441
|
-
const { scrollXLoad, scrollYLoad } = reactData;
|
|
8518
|
+
const { scrollXLoad, scrollYLoad, expandColumn } = reactData;
|
|
8442
8519
|
const leftFixedWidth = $xeTable.computeLeftFixedWidth;
|
|
8443
8520
|
const rightFixedWidth = $xeTable.computeRightFixedWidth;
|
|
8444
|
-
if (!(
|
|
8521
|
+
if (!(leftFixedWidth || rightFixedWidth || expandColumn)) {
|
|
8445
8522
|
return;
|
|
8446
8523
|
}
|
|
8447
8524
|
const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
|
|
@@ -8464,8 +8541,8 @@ const Methods = {
|
|
|
8464
8541
|
return;
|
|
8465
8542
|
}
|
|
8466
8543
|
const wheelSpeed = getWheelSpeed(reactData.lastScrollTime);
|
|
8467
|
-
const deltaTop =
|
|
8468
|
-
const deltaLeft = Math.ceil((shiftKey ? deltaY : deltaX) * wheelSpeed);
|
|
8544
|
+
const deltaTop = shiftKey ? 0 : Math.ceil(deltaY * wheelSpeed);
|
|
8545
|
+
const deltaLeft = Math.ceil((shiftKey ? (deltaY || deltaX) : deltaX) * wheelSpeed);
|
|
8469
8546
|
const isTopWheel = deltaTop < 0;
|
|
8470
8547
|
const currScrollTop = bodyScrollElem.scrollTop;
|
|
8471
8548
|
// 如果滚动位置已经是顶部或底部,则不需要触发
|
|
@@ -8693,8 +8770,8 @@ const Methods = {
|
|
|
8693
8770
|
const $xeTable = this;
|
|
8694
8771
|
const reactData = $xeTable;
|
|
8695
8772
|
const internalData = $xeTable;
|
|
8696
|
-
const { isAllOverflow, scrollYLoad, expandColumn
|
|
8697
|
-
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData;
|
|
8773
|
+
const { isAllOverflow, scrollYLoad, expandColumn } = reactData;
|
|
8774
|
+
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
8698
8775
|
const { startIndex } = scrollYStore;
|
|
8699
8776
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
8700
8777
|
const rowOpts = $xeTable.computeRowOpts;
|
|
@@ -8937,13 +9014,15 @@ const Methods = {
|
|
|
8937
9014
|
* 更新表尾合计
|
|
8938
9015
|
*/
|
|
8939
9016
|
updateFooter() {
|
|
9017
|
+
const $xeTable = this;
|
|
9018
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
8940
9019
|
const { showFooter, visibleColumn, footerData, footerMethod } = this;
|
|
8941
9020
|
let footData = [];
|
|
8942
9021
|
if (showFooter && footerData && footerData.length) {
|
|
8943
9022
|
footData = footerData.slice(0);
|
|
8944
9023
|
}
|
|
8945
9024
|
else if (showFooter && footerMethod) {
|
|
8946
|
-
footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table:
|
|
9025
|
+
footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: this.afterFullData, $table: $xeTable, $grid: $xeGrid }) : [];
|
|
8947
9026
|
}
|
|
8948
9027
|
this.footerTableData = footData;
|
|
8949
9028
|
return this.$nextTick();
|
|
@@ -8963,9 +9042,6 @@ const Methods = {
|
|
|
8963
9042
|
}
|
|
8964
9043
|
});
|
|
8965
9044
|
},
|
|
8966
|
-
handleDefaultMergeCells() {
|
|
8967
|
-
this.setMergeCells(this.mergeCells);
|
|
8968
|
-
},
|
|
8969
9045
|
/**
|
|
8970
9046
|
* 设置合并单元格
|
|
8971
9047
|
* @param {TableMergeConfig[]} merges { row: Row|number, column: ColumnInfo|number, rowspan: number, colspan: number }
|
|
@@ -9013,15 +9089,12 @@ const Methods = {
|
|
|
9013
9089
|
return updateStyle($xeTable);
|
|
9014
9090
|
});
|
|
9015
9091
|
},
|
|
9016
|
-
handleDefaultMergeFooterItems() {
|
|
9017
|
-
this.setMergeFooterItems(this.mergeFooterItems);
|
|
9018
|
-
},
|
|
9019
9092
|
setMergeFooterItems(merges) {
|
|
9020
9093
|
const $xeTable = this;
|
|
9021
9094
|
if (this.footerSpanMethod) {
|
|
9022
9095
|
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
9023
9096
|
}
|
|
9024
|
-
setMerges(this, merges, this.mergeFooterList
|
|
9097
|
+
setMerges(this, merges, this.mergeFooterList);
|
|
9025
9098
|
return this.$nextTick().then(() => {
|
|
9026
9099
|
this.updateCellAreas();
|
|
9027
9100
|
return updateStyle($xeTable);
|
|
@@ -9075,11 +9148,14 @@ const Methods = {
|
|
|
9075
9148
|
},
|
|
9076
9149
|
dispatchEvent(type, params, evnt) {
|
|
9077
9150
|
const $xeTable = this;
|
|
9078
|
-
|
|
9151
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
9152
|
+
$xeTable.$emit(type, createEvent(evnt, { $table: $xeTable, $grid: $xeGrid }, params));
|
|
9079
9153
|
},
|
|
9080
9154
|
// 已废弃,使用 dispatchEvent
|
|
9081
9155
|
emitEvent(type, params, evnt) {
|
|
9082
|
-
|
|
9156
|
+
const $xeTable = this;
|
|
9157
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
9158
|
+
this.$emit(type, Object.assign({ $table: $xeTable, $grid: $xeGrid, $event: evnt }, params));
|
|
9083
9159
|
},
|
|
9084
9160
|
focus() {
|
|
9085
9161
|
this.isActivated = true;
|