vxe-table 3.14.0-beta.2 → 3.14.0-beta.21
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 +78 -48
- 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/edit/mixin.js +14 -9
- package/es/table/module/filter/panel.js +12 -2
- package/es/table/module/keyboard/mixin.js +86 -21
- package/es/table/module/validator/mixin.js +2 -2
- package/es/table/render/index.js +90 -59
- package/es/table/src/body.js +22 -17
- package/es/table/src/cell.js +25 -20
- package/es/table/src/footer.js +9 -4
- package/es/table/src/header.js +2 -2
- package/es/table/src/methods.js +942 -678
- package/es/table/src/props.js +4 -0
- package/es/table/src/table.js +74 -32
- package/es/table/src/util.js +65 -7
- package/es/ui/index.js +1 -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 +85 -65
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.umd.js +1641 -1076
- 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/edit/mixin.js +16 -11
- package/lib/table/module/edit/mixin.min.js +1 -1
- package/lib/table/module/filter/panel.js +8 -2
- package/lib/table/module/filter/panel.min.js +1 -1
- package/lib/table/module/keyboard/mixin.js +89 -25
- package/lib/table/module/keyboard/mixin.min.js +1 -1
- package/lib/table/module/validator/mixin.js +3 -3
- package/lib/table/module/validator/mixin.min.js +1 -1
- package/lib/table/render/index.js +99 -64
- package/lib/table/render/index.min.js +1 -1
- package/lib/table/src/body.js +27 -17
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/cell.js +37 -21
- package/lib/table/src/cell.min.js +1 -1
- package/lib/table/src/footer.js +9 -3
- package/lib/table/src/footer.min.js +1 -1
- package/lib/table/src/header.js +2 -1
- package/lib/table/src/header.min.js +1 -1
- package/lib/table/src/methods.js +1101 -798
- 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 +79 -31
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +72 -7
- package/lib/table/src/util.min.js +1 -1
- package/lib/ui/index.js +1 -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 +92 -57
- 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/edit/mixin.ts +17 -12
- package/packages/table/module/filter/panel.ts +12 -2
- package/packages/table/module/keyboard/mixin.ts +94 -27
- package/packages/table/module/validator/mixin.ts +2 -2
- package/packages/table/render/index.ts +89 -57
- package/packages/table/src/body.ts +21 -16
- package/packages/table/src/cell.ts +25 -20
- package/packages/table/src/footer.ts +9 -4
- package/packages/table/src/header.ts +2 -2
- package/packages/table/src/methods.ts +1035 -720
- package/packages/table/src/props.ts +16 -12
- package/packages/table/src/table.ts +87 -35
- package/packages/table/src/util.ts +73 -7
- /package/es/{iconfont.1741079977180.ttf → iconfont.1742437924038.ttf} +0 -0
- /package/es/{iconfont.1741079977180.woff → iconfont.1742437924038.woff} +0 -0
- /package/es/{iconfont.1741079977180.woff2 → iconfont.1742437924038.woff2} +0 -0
- /package/lib/{iconfont.1741079977180.ttf → iconfont.1742437924038.ttf} +0 -0
- /package/lib/{iconfont.1741079977180.woff → iconfont.1742437924038.woff} +0 -0
- /package/lib/{iconfont.1741079977180.woff2 → iconfont.1742437924038.woff2} +0 -0
package/es/table/src/methods.js
CHANGED
|
@@ -3,10 +3,11 @@ import { browse, getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEv
|
|
|
3
3
|
import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../ui/src/utils';
|
|
4
4
|
import { VxeUI } from '../../ui';
|
|
5
5
|
import Cell from './cell';
|
|
6
|
-
import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth, getRefElem } from './util';
|
|
6
|
+
import { getRowUniqueId, clearTableAllStatus, getRowkey, getRowid, rowToVisible, colToVisible, getCellValue, setCellValue, handleRowidOrRow, handleFieldOrColumn, toTreePathSeq, restoreScrollLocation, getRootColumn, getColReMinWidth, createHandleUpdateRowId, createHandleGetRowId, getRefElem } from './util';
|
|
7
7
|
import { getSlotVNs } from '../../ui/src/vn';
|
|
8
8
|
import { warnLog, errLog } from '../../ui/src/log';
|
|
9
9
|
const { getConfig, getI18n, renderer, formats, interceptor, createEvent } = VxeUI;
|
|
10
|
+
const supportMaxRow = 5e6;
|
|
10
11
|
const customStorageKey = 'VXE_CUSTOM_STORE';
|
|
11
12
|
const maxYHeight = 5e6;
|
|
12
13
|
const maxXWidth = 5e6;
|
|
@@ -218,7 +219,7 @@ function cacheColumnMap($xeTable) {
|
|
|
218
219
|
}
|
|
219
220
|
else {
|
|
220
221
|
if ((storage && !type) || (columnOpts.drag && (isCrossDrag || isSelfToChildDrag))) {
|
|
221
|
-
errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field
|
|
222
|
+
errLog('vxe.error.reqProp', [`${column.getTitle() || type || ''} -> column.field=?`]);
|
|
222
223
|
}
|
|
223
224
|
}
|
|
224
225
|
if (!hasFixed && fixed) {
|
|
@@ -317,9 +318,10 @@ function updateAfterListIndex($xeTable) {
|
|
|
317
318
|
const internalData = $xeTable;
|
|
318
319
|
const { treeConfig } = props;
|
|
319
320
|
const { afterFullData, fullDataRowIdData, fullAllDataRowIdData } = internalData;
|
|
321
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
320
322
|
const fullMaps = {};
|
|
321
323
|
afterFullData.forEach((row, index) => {
|
|
322
|
-
const rowid =
|
|
324
|
+
const rowid = handleGetRowId(row);
|
|
323
325
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
324
326
|
const seq = index + 1;
|
|
325
327
|
if (rowRest) {
|
|
@@ -351,8 +353,9 @@ function updateAfterDataIndex($xeTable) {
|
|
|
351
353
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
352
354
|
const fullMaps = {};
|
|
353
355
|
if (treeConfig) {
|
|
356
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
354
357
|
XEUtils.eachTree(afterTreeFullData, (row, index, items, path) => {
|
|
355
|
-
const rowid =
|
|
358
|
+
const rowid = handleGetRowId(row);
|
|
356
359
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
357
360
|
const seq = path.map((num, i) => i % 2 === 0 ? (Number(num) + 1) : '.').join('');
|
|
358
361
|
if (rowRest) {
|
|
@@ -379,19 +382,18 @@ function updateAfterDataIndex($xeTable) {
|
|
|
379
382
|
*/
|
|
380
383
|
function handleVirtualTreeToList($xeTable) {
|
|
381
384
|
const props = $xeTable;
|
|
382
|
-
const reactData = $xeTable;
|
|
383
385
|
const internalData = $xeTable;
|
|
384
386
|
const { treeConfig } = props;
|
|
385
|
-
const { treeExpandedMaps } =
|
|
386
|
-
const { fullAllDataRowIdData } = internalData;
|
|
387
|
+
const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
|
|
387
388
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
388
389
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
389
390
|
if (treeConfig && treeOpts.transform) {
|
|
391
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
390
392
|
const fullData = [];
|
|
391
393
|
const expandMaps = {};
|
|
392
394
|
XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => {
|
|
393
|
-
const rowid =
|
|
394
|
-
const parentRowid =
|
|
395
|
+
const rowid = handleGetRowId(row);
|
|
396
|
+
const parentRowid = handleGetRowId(parentRow);
|
|
395
397
|
if (!parentRow || (expandMaps[parentRowid] && treeExpandedMaps[parentRowid])) {
|
|
396
398
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
397
399
|
if (rowRest) {
|
|
@@ -750,6 +752,25 @@ function updateStyle($xeTable) {
|
|
|
750
752
|
}
|
|
751
753
|
return $xeTable.$nextTick();
|
|
752
754
|
}
|
|
755
|
+
function checkValidate($xeTable, type) {
|
|
756
|
+
if ($xeTable.triggerValidate) {
|
|
757
|
+
return $xeTable.triggerValidate(type);
|
|
758
|
+
}
|
|
759
|
+
return $xeTable.$nextTick();
|
|
760
|
+
}
|
|
761
|
+
/**
|
|
762
|
+
* 当单元格发生改变时
|
|
763
|
+
* 如果存在规则,则校验
|
|
764
|
+
*/
|
|
765
|
+
function handleChangeCell($xeTable, evnt, params) {
|
|
766
|
+
checkValidate($xeTable, 'blur')
|
|
767
|
+
.catch((e) => e)
|
|
768
|
+
.then(() => {
|
|
769
|
+
$xeTable.handleEdit(params, evnt)
|
|
770
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
771
|
+
.catch((e) => e);
|
|
772
|
+
});
|
|
773
|
+
}
|
|
753
774
|
function handleRadioReserveRow($xeTable, row) {
|
|
754
775
|
const internalData = $xeTable;
|
|
755
776
|
const radioOpts = $xeTable.computeRadioOpts;
|
|
@@ -794,12 +815,13 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
794
815
|
const reactData = $xeTable;
|
|
795
816
|
const internalData = $xeTable;
|
|
796
817
|
const { treeConfig } = props;
|
|
797
|
-
const { selectCheckboxMaps } =
|
|
798
|
-
const { afterFullData, checkboxReserveRowMap } = internalData;
|
|
818
|
+
const { afterFullData, checkboxReserveRowMap, selectCheckboxMaps } = internalData;
|
|
799
819
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
800
820
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
801
821
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
802
822
|
const { checkField, reserve, checkMethod } = checkboxOpts;
|
|
823
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
824
|
+
// indeterminateField 仅支持读取
|
|
803
825
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
804
826
|
const selectRowMaps = {};
|
|
805
827
|
/**
|
|
@@ -810,7 +832,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
810
832
|
const checkValFn = (row) => {
|
|
811
833
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
812
834
|
if (checked) {
|
|
813
|
-
selectRowMaps[
|
|
835
|
+
selectRowMaps[handleGetRowId(row)] = row;
|
|
814
836
|
}
|
|
815
837
|
XEUtils.set(row, checkField, checked);
|
|
816
838
|
}
|
|
@@ -840,7 +862,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
840
862
|
*/
|
|
841
863
|
XEUtils.eachTree(afterFullData, (row) => {
|
|
842
864
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
843
|
-
|
|
865
|
+
const rowid = handleGetRowId(row);
|
|
866
|
+
selectRowMaps[rowid] = row;
|
|
844
867
|
}
|
|
845
868
|
}, { children: childrenField });
|
|
846
869
|
}
|
|
@@ -851,7 +874,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
851
874
|
*/
|
|
852
875
|
if (!isForce && checkMethod) {
|
|
853
876
|
XEUtils.eachTree(afterFullData, (row) => {
|
|
854
|
-
const rowid =
|
|
877
|
+
const rowid = handleGetRowId(row);
|
|
855
878
|
if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
|
|
856
879
|
selectRowMaps[rowid] = row;
|
|
857
880
|
}
|
|
@@ -868,7 +891,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
868
891
|
*/
|
|
869
892
|
if (!isForce && checkMethod) {
|
|
870
893
|
afterFullData.forEach((row) => {
|
|
871
|
-
const rowid =
|
|
894
|
+
const rowid = handleGetRowId(row);
|
|
872
895
|
if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
|
|
873
896
|
selectRowMaps[rowid] = row;
|
|
874
897
|
}
|
|
@@ -876,7 +899,8 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
876
899
|
}
|
|
877
900
|
else {
|
|
878
901
|
afterFullData.forEach(row => {
|
|
879
|
-
|
|
902
|
+
const rowid = handleGetRowId(row);
|
|
903
|
+
selectRowMaps[rowid] = row;
|
|
880
904
|
});
|
|
881
905
|
}
|
|
882
906
|
}
|
|
@@ -888,7 +912,7 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
888
912
|
*/
|
|
889
913
|
if (!isForce && checkMethod) {
|
|
890
914
|
afterFullData.forEach((row) => {
|
|
891
|
-
const rowid =
|
|
915
|
+
const rowid = handleGetRowId(row);
|
|
892
916
|
if (checkMethod({ row }) ? 0 : selectCheckboxMaps[rowid]) {
|
|
893
917
|
selectRowMaps[rowid] = row;
|
|
894
918
|
}
|
|
@@ -907,10 +931,10 @@ function handleCheckedAllCheckboxRow($xeTable, checked, isForce) {
|
|
|
907
931
|
afterFullData.forEach((row) => handleCheckboxReserveRow($xeTable, row, false));
|
|
908
932
|
}
|
|
909
933
|
}
|
|
910
|
-
reactData.
|
|
934
|
+
reactData.updateCheckboxFlag++;
|
|
935
|
+
internalData.selectCheckboxMaps = checkField ? {} : selectRowMaps;
|
|
911
936
|
reactData.isAllSelected = checked;
|
|
912
937
|
reactData.isIndeterminate = false;
|
|
913
|
-
reactData.treeIndeterminateMaps = {};
|
|
914
938
|
internalData.treeIndeterminateRowMaps = {};
|
|
915
939
|
$xeTable.checkSelectionStatus();
|
|
916
940
|
return $xeTable.$nextTick();
|
|
@@ -921,8 +945,8 @@ function handleReserveStatus($xeTable) {
|
|
|
921
945
|
const reactData = $xeTable;
|
|
922
946
|
const internalData = $xeTable;
|
|
923
947
|
const { treeConfig } = props;
|
|
924
|
-
const { expandColumn, currentRow,
|
|
925
|
-
const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow } = internalData;
|
|
948
|
+
const { expandColumn, currentRow, selectRadioRow } = reactData;
|
|
949
|
+
const { fullDataRowIdData, fullAllDataRowIdData, radioReserveRow, selectCheckboxMaps, treeExpandedMaps, rowExpandedMaps } = internalData;
|
|
926
950
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
927
951
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
928
952
|
const radioOpts = $xeTable.computeRadioOpts;
|
|
@@ -939,7 +963,8 @@ function handleReserveStatus($xeTable) {
|
|
|
939
963
|
}
|
|
940
964
|
}
|
|
941
965
|
// 复选框
|
|
942
|
-
|
|
966
|
+
internalData.selectCheckboxMaps = getRecoverRowMaps($xeTable, selectCheckboxMaps); // 刷新多选行状态
|
|
967
|
+
reactData.updateCheckboxFlag++;
|
|
943
968
|
// 还原保留选中状态
|
|
944
969
|
if (checkboxOpts.reserve) {
|
|
945
970
|
handleCheckedCheckboxRow($xeTable, handleReserveRow($xeTable, internalData.checkboxReserveRowMap), true, true);
|
|
@@ -948,17 +973,161 @@ function handleReserveStatus($xeTable) {
|
|
|
948
973
|
reactData.currentRow = null; // 刷新当前行状态
|
|
949
974
|
}
|
|
950
975
|
// 行展开
|
|
951
|
-
|
|
976
|
+
internalData.rowExpandedMaps = expandColumn ? getRecoverRowMaps($xeTable, rowExpandedMaps) : {}; // 刷新行展开状态
|
|
977
|
+
reactData.rowExpandedFlag++;
|
|
952
978
|
// 还原保留状态
|
|
953
979
|
if (expandColumn && expandOpts.reserve) {
|
|
954
980
|
$xeTable.setRowExpand(handleReserveRow($xeTable, internalData.rowExpandedReserveRowMap), true);
|
|
955
981
|
}
|
|
956
982
|
// 树展开
|
|
957
|
-
|
|
983
|
+
internalData.treeExpandedMaps = treeConfig ? getRecoverRowMaps($xeTable, treeExpandedMaps) : {}; // 刷新树展开状态
|
|
984
|
+
reactData.treeExpandedFlag++;
|
|
958
985
|
if (treeConfig && treeOpts.reserve) {
|
|
959
986
|
$xeTable.setTreeExpand(handleReserveRow($xeTable, internalData.treeExpandedReserveRowMap), true);
|
|
960
987
|
}
|
|
961
988
|
}
|
|
989
|
+
/**
|
|
990
|
+
* 处理默认展开树节点
|
|
991
|
+
*/
|
|
992
|
+
const handleDefaultTreeExpand = ($xeTable) => {
|
|
993
|
+
const props = $xeTable;
|
|
994
|
+
const internalData = $xeTable;
|
|
995
|
+
const { treeConfig } = props;
|
|
996
|
+
if (treeConfig) {
|
|
997
|
+
const { tableFullData } = internalData;
|
|
998
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
999
|
+
const { expandAll, expandRowKeys } = treeOpts;
|
|
1000
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
1001
|
+
if (expandAll) {
|
|
1002
|
+
$xeTable.setAllTreeExpand(true);
|
|
1003
|
+
}
|
|
1004
|
+
else if (expandRowKeys) {
|
|
1005
|
+
const defExpandeds = [];
|
|
1006
|
+
const rowkey = getRowkey($xeTable);
|
|
1007
|
+
expandRowKeys.forEach((rowid) => {
|
|
1008
|
+
const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
|
|
1009
|
+
if (matchObj) {
|
|
1010
|
+
defExpandeds.push(matchObj.item);
|
|
1011
|
+
}
|
|
1012
|
+
});
|
|
1013
|
+
$xeTable.setTreeExpand(defExpandeds, true);
|
|
1014
|
+
}
|
|
1015
|
+
}
|
|
1016
|
+
};
|
|
1017
|
+
const handleAsyncTreeExpandChilds = ($xeTable, row) => {
|
|
1018
|
+
const reactData = $xeTable;
|
|
1019
|
+
const internalData = $xeTable;
|
|
1020
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
1021
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
1022
|
+
const { transform, loadMethod } = treeOpts;
|
|
1023
|
+
const { checkStrictly } = checkboxOpts;
|
|
1024
|
+
return new Promise(resolve => {
|
|
1025
|
+
if (loadMethod) {
|
|
1026
|
+
const { fullAllDataRowIdData, treeExpandLazyLoadedMaps } = internalData;
|
|
1027
|
+
const rowid = getRowid($xeTable, row);
|
|
1028
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
1029
|
+
treeExpandLazyLoadedMaps[rowid] = row;
|
|
1030
|
+
Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
|
|
1031
|
+
if (rowRest) {
|
|
1032
|
+
rowRest.treeLoaded = true;
|
|
1033
|
+
}
|
|
1034
|
+
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
1035
|
+
delete treeExpandLazyLoadedMaps[rowid];
|
|
1036
|
+
}
|
|
1037
|
+
if (!XEUtils.isArray(childRecords)) {
|
|
1038
|
+
childRecords = [];
|
|
1039
|
+
}
|
|
1040
|
+
if (childRecords) {
|
|
1041
|
+
return $xeTable.loadTreeChildren(row, childRecords).then(childRows => {
|
|
1042
|
+
const { treeExpandedMaps } = internalData;
|
|
1043
|
+
if (childRows.length && !treeExpandedMaps[rowid]) {
|
|
1044
|
+
treeExpandedMaps[rowid] = row;
|
|
1045
|
+
}
|
|
1046
|
+
reactData.treeExpandedFlag++;
|
|
1047
|
+
// 如果当前节点已选中,则展开后子节点也被选中
|
|
1048
|
+
if (!checkStrictly && $xeTable.isCheckedByCheckboxRow(row)) {
|
|
1049
|
+
handleCheckedCheckboxRow($xeTable, childRows, true);
|
|
1050
|
+
}
|
|
1051
|
+
return $xeTable.$nextTick().then(() => {
|
|
1052
|
+
if (transform) {
|
|
1053
|
+
$xeTable.handleTableData();
|
|
1054
|
+
updateAfterDataIndex($xeTable);
|
|
1055
|
+
return $xeTable.$nextTick();
|
|
1056
|
+
}
|
|
1057
|
+
});
|
|
1058
|
+
});
|
|
1059
|
+
}
|
|
1060
|
+
}).catch(() => {
|
|
1061
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
1062
|
+
if (rowRest) {
|
|
1063
|
+
rowRest.treeLoaded = false;
|
|
1064
|
+
}
|
|
1065
|
+
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
1066
|
+
delete treeExpandLazyLoadedMaps[rowid];
|
|
1067
|
+
}
|
|
1068
|
+
}).finally(() => {
|
|
1069
|
+
reactData.treeExpandedFlag++;
|
|
1070
|
+
$xeTable.$nextTick().then(() => $xeTable.recalculate()).then(() => resolve());
|
|
1071
|
+
});
|
|
1072
|
+
}
|
|
1073
|
+
else {
|
|
1074
|
+
resolve();
|
|
1075
|
+
}
|
|
1076
|
+
});
|
|
1077
|
+
};
|
|
1078
|
+
const handleTreeExpandReserve = ($xeTable, row, expanded) => {
|
|
1079
|
+
const internalData = $xeTable;
|
|
1080
|
+
const { treeExpandedReserveRowMap } = internalData;
|
|
1081
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
1082
|
+
if (treeOpts.reserve) {
|
|
1083
|
+
const rowid = getRowid($xeTable, row);
|
|
1084
|
+
if (expanded) {
|
|
1085
|
+
treeExpandedReserveRowMap[rowid] = row;
|
|
1086
|
+
}
|
|
1087
|
+
else if (treeExpandedReserveRowMap[rowid]) {
|
|
1088
|
+
delete treeExpandedReserveRowMap[rowid];
|
|
1089
|
+
}
|
|
1090
|
+
}
|
|
1091
|
+
};
|
|
1092
|
+
const handleAsyncRowExpand = ($xeTable, row) => {
|
|
1093
|
+
const reactData = $xeTable;
|
|
1094
|
+
const internalData = $xeTable;
|
|
1095
|
+
return new Promise(resolve => {
|
|
1096
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
1097
|
+
const { loadMethod } = expandOpts;
|
|
1098
|
+
if (loadMethod) {
|
|
1099
|
+
const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
|
|
1100
|
+
const rowid = getRowid($xeTable, row);
|
|
1101
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
1102
|
+
rowExpandLazyLoadedMaps[rowid] = row;
|
|
1103
|
+
loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
|
|
1104
|
+
const { rowExpandedMaps } = internalData;
|
|
1105
|
+
if (rowRest) {
|
|
1106
|
+
rowRest.expandLoaded = true;
|
|
1107
|
+
}
|
|
1108
|
+
rowExpandedMaps[rowid] = row;
|
|
1109
|
+
reactData.rowExpandedFlag++;
|
|
1110
|
+
}).catch(() => {
|
|
1111
|
+
if (rowRest) {
|
|
1112
|
+
rowRest.expandLoaded = false;
|
|
1113
|
+
}
|
|
1114
|
+
}).finally(() => {
|
|
1115
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
1116
|
+
if (rowExpandLazyLoadedMaps[rowid]) {
|
|
1117
|
+
delete rowExpandLazyLoadedMaps[rowid];
|
|
1118
|
+
}
|
|
1119
|
+
reactData.rowExpandedFlag++;
|
|
1120
|
+
$xeTable.$nextTick()
|
|
1121
|
+
.then(() => $xeTable.recalculate())
|
|
1122
|
+
.then(() => $xeTable.updateCellAreas())
|
|
1123
|
+
.then(() => resolve());
|
|
1124
|
+
});
|
|
1125
|
+
}
|
|
1126
|
+
else {
|
|
1127
|
+
resolve();
|
|
1128
|
+
}
|
|
1129
|
+
});
|
|
1130
|
+
};
|
|
962
1131
|
function calcVarRowHeightConfig($xeTable, sizeKey, sizeEl) {
|
|
963
1132
|
const reactData = $xeTable;
|
|
964
1133
|
const { rowHeightStore } = reactData;
|
|
@@ -1021,12 +1190,13 @@ function handleVirtualYVisible($xeTable) {
|
|
|
1021
1190
|
visibleSize = Math.ceil(clientHeight / defaultRowHeight) + 1;
|
|
1022
1191
|
}
|
|
1023
1192
|
else {
|
|
1193
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1024
1194
|
let leftIndex = 0;
|
|
1025
1195
|
let rightIndex = afterFullData.length;
|
|
1026
1196
|
while (leftIndex < rightIndex) {
|
|
1027
1197
|
const rIndex = Math.floor((leftIndex + rightIndex) / 2);
|
|
1028
1198
|
const row = afterFullData[rIndex];
|
|
1029
|
-
const rowid =
|
|
1199
|
+
const rowid = handleGetRowId(row);
|
|
1030
1200
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
1031
1201
|
if (rowRest.oTop <= startTop) {
|
|
1032
1202
|
leftIndex = rIndex + 1;
|
|
@@ -1038,7 +1208,7 @@ function handleVirtualYVisible($xeTable) {
|
|
|
1038
1208
|
toVisibleIndex = Math.max(0, leftIndex < afterFullData.length ? leftIndex - 2 : 0);
|
|
1039
1209
|
for (let rIndex = toVisibleIndex, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
1040
1210
|
const row = afterFullData[rIndex];
|
|
1041
|
-
const rowid =
|
|
1211
|
+
const rowid = handleGetRowId(row);
|
|
1042
1212
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
1043
1213
|
visibleSize++;
|
|
1044
1214
|
if (rowRest.oTop > endTop || visibleSize >= 100) {
|
|
@@ -1068,9 +1238,12 @@ function calculateMergerOffsetIndex(list, offsetItem, type) {
|
|
|
1068
1238
|
}
|
|
1069
1239
|
}
|
|
1070
1240
|
}
|
|
1071
|
-
function setMerges(
|
|
1241
|
+
function setMerges($xeTable, merges, mList, rowList) {
|
|
1242
|
+
const props = $xeTable;
|
|
1243
|
+
const internalData = $xeTable;
|
|
1072
1244
|
if (merges) {
|
|
1073
|
-
const { treeConfig
|
|
1245
|
+
const { treeConfig } = props;
|
|
1246
|
+
const { visibleColumn } = internalData;
|
|
1074
1247
|
if (!XEUtils.isArray(merges)) {
|
|
1075
1248
|
merges = [merges];
|
|
1076
1249
|
}
|
|
@@ -1116,10 +1289,13 @@ function setMerges(_vm, merges, mList, rowList) {
|
|
|
1116
1289
|
});
|
|
1117
1290
|
}
|
|
1118
1291
|
}
|
|
1119
|
-
function removeMerges(
|
|
1292
|
+
function removeMerges($xeTable, merges, mList, rowList) {
|
|
1293
|
+
const props = $xeTable;
|
|
1294
|
+
const internalData = $xeTable;
|
|
1120
1295
|
const rest = [];
|
|
1121
1296
|
if (merges) {
|
|
1122
|
-
const { treeConfig
|
|
1297
|
+
const { treeConfig } = props;
|
|
1298
|
+
const { visibleColumn } = internalData;
|
|
1123
1299
|
if (!XEUtils.isArray(merges)) {
|
|
1124
1300
|
merges = [merges];
|
|
1125
1301
|
}
|
|
@@ -1326,8 +1502,9 @@ const calcCellHeight = ($xeTable) => {
|
|
|
1326
1502
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
1327
1503
|
const el = $xeTable.$refs.refElem;
|
|
1328
1504
|
if (!isAllOverflow && scrollYLoad && el) {
|
|
1505
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1329
1506
|
tableData.forEach(row => {
|
|
1330
|
-
const rowid =
|
|
1507
|
+
const rowid = handleGetRowId(row);
|
|
1331
1508
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
1332
1509
|
if (rowRest) {
|
|
1333
1510
|
const height = calcCellAutoHeight(rowRest, el);
|
|
@@ -1974,6 +2151,35 @@ function loadScrollYData($xeTable) {
|
|
|
1974
2151
|
}
|
|
1975
2152
|
}
|
|
1976
2153
|
}
|
|
2154
|
+
const createGetRowCacheProp = (prop) => {
|
|
2155
|
+
return function (row) {
|
|
2156
|
+
const $xeTable = this;
|
|
2157
|
+
const internalData = $xeTable;
|
|
2158
|
+
const { fullAllDataRowIdData } = internalData;
|
|
2159
|
+
if (row) {
|
|
2160
|
+
const rowid = getRowid($xeTable, row);
|
|
2161
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
2162
|
+
if (rowRest) {
|
|
2163
|
+
return rowRest[prop];
|
|
2164
|
+
}
|
|
2165
|
+
}
|
|
2166
|
+
return -1;
|
|
2167
|
+
};
|
|
2168
|
+
};
|
|
2169
|
+
const createGetColumnCacheProp = (prop) => {
|
|
2170
|
+
return function (column) {
|
|
2171
|
+
const $xeTable = this;
|
|
2172
|
+
const internalData = $xeTable;
|
|
2173
|
+
const { fullColumnIdData } = internalData;
|
|
2174
|
+
if (column) {
|
|
2175
|
+
const colRest = fullColumnIdData[column.id];
|
|
2176
|
+
if (colRest) {
|
|
2177
|
+
return colRest[prop];
|
|
2178
|
+
}
|
|
2179
|
+
}
|
|
2180
|
+
return -1;
|
|
2181
|
+
};
|
|
2182
|
+
};
|
|
1977
2183
|
function lazyScrollXData($xeTable) {
|
|
1978
2184
|
const internalData = $xeTable;
|
|
1979
2185
|
const { lxTimeout, lxRunTime, scrollXStore } = internalData;
|
|
@@ -2131,7 +2337,7 @@ function calcCellWidth($xeTable) {
|
|
|
2131
2337
|
}
|
|
2132
2338
|
function handleUpdateColResize($xeTable, evnt, params) {
|
|
2133
2339
|
$xeTable.analyColumnWidth();
|
|
2134
|
-
$xeTable.recalculate(
|
|
2340
|
+
$xeTable.recalculate().then(() => {
|
|
2135
2341
|
$xeTable.saveCustomStore('update:width');
|
|
2136
2342
|
$xeTable.updateCellAreas();
|
|
2137
2343
|
$xeTable.dispatchEvent('column-resizable-change', params, evnt);
|
|
@@ -2143,7 +2349,7 @@ function handleUpdateColResize($xeTable, evnt, params) {
|
|
|
2143
2349
|
function handleUpdateRowResize($xeTable, evnt, params) {
|
|
2144
2350
|
const reactData = $xeTable;
|
|
2145
2351
|
reactData.resizeHeightFlag++;
|
|
2146
|
-
$xeTable.recalculate(
|
|
2352
|
+
$xeTable.recalculate().then(() => {
|
|
2147
2353
|
$xeTable.updateCellAreas();
|
|
2148
2354
|
$xeTable.dispatchEvent('row-resizable-change', params, evnt);
|
|
2149
2355
|
setTimeout(() => $xeTable.recalculate(true), 300);
|
|
@@ -2164,16 +2370,17 @@ function updateColumnOffsetLeft($xeTable) {
|
|
|
2164
2370
|
function updateRowOffsetTop($xeTable) {
|
|
2165
2371
|
const reactData = $xeTable;
|
|
2166
2372
|
const internalData = $xeTable;
|
|
2167
|
-
const { expandColumn
|
|
2168
|
-
const { afterFullData, fullAllDataRowIdData } = internalData;
|
|
2373
|
+
const { expandColumn } = reactData;
|
|
2374
|
+
const { afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
2169
2375
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
2170
2376
|
const rowOpts = $xeTable.computeRowOpts;
|
|
2171
2377
|
const cellOpts = $xeTable.computeCellOpts;
|
|
2172
2378
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
2379
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
2173
2380
|
let offsetTop = 0;
|
|
2174
2381
|
for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
2175
2382
|
const row = afterFullData[rIndex];
|
|
2176
|
-
const rowid =
|
|
2383
|
+
const rowid = handleGetRowId(row);
|
|
2177
2384
|
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
2178
2385
|
rowRest.oTop = offsetTop;
|
|
2179
2386
|
offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
|
|
@@ -2186,47 +2393,43 @@ function updateRowOffsetTop($xeTable) {
|
|
|
2186
2393
|
function updateRowExpandStyle($xeTable) {
|
|
2187
2394
|
const reactData = $xeTable;
|
|
2188
2395
|
const internalData = $xeTable;
|
|
2189
|
-
const { expandColumn, scrollYLoad,
|
|
2396
|
+
const { expandColumn, scrollYLoad, scrollYTop, isScrollYBig } = reactData;
|
|
2190
2397
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
2191
2398
|
const rowOpts = $xeTable.computeRowOpts;
|
|
2192
2399
|
const cellOpts = $xeTable.computeCellOpts;
|
|
2193
2400
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
2194
2401
|
const { mode } = expandOpts;
|
|
2195
2402
|
if (expandColumn && mode === 'fixed') {
|
|
2196
|
-
const { elemStore,
|
|
2403
|
+
const { elemStore, fullAllDataRowIdData } = internalData;
|
|
2197
2404
|
const rowExpandEl = $xeTable.$refs.refRowExpandElem;
|
|
2198
2405
|
const bodyScrollElem = getRefElem(elemStore['main-body-scroll']);
|
|
2199
2406
|
if (rowExpandEl && bodyScrollElem) {
|
|
2200
2407
|
let isUpdateHeight = false;
|
|
2201
|
-
if (scrollYLoad) {
|
|
2202
|
-
let offsetTop = 0;
|
|
2203
|
-
for (let rIndex = 0, rLen = afterFullData.length; rIndex < rLen; rIndex++) {
|
|
2204
|
-
const row = afterFullData[rIndex];
|
|
2205
|
-
const rowid = getRowid($xeTable, row);
|
|
2206
|
-
const rowRest = fullAllDataRowIdData[rowid] || {};
|
|
2207
|
-
rowRest.oTop = offsetTop;
|
|
2208
|
-
offsetTop += rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight;
|
|
2209
|
-
// 是否展开行
|
|
2210
|
-
if (expandColumn && rowExpandedMaps[rowid]) {
|
|
2211
|
-
offsetTop += rowRest.expandHeight || expandOpts.height || 0;
|
|
2212
|
-
}
|
|
2213
|
-
}
|
|
2214
|
-
}
|
|
2215
2408
|
XEUtils.arrayEach(rowExpandEl.children, reEl => {
|
|
2216
2409
|
const expandEl = reEl;
|
|
2217
2410
|
const rowid = expandEl.getAttribute('rowid') || '';
|
|
2218
2411
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
2219
2412
|
if (rowRest) {
|
|
2220
2413
|
const expandHeight = expandEl.offsetHeight + 1;
|
|
2414
|
+
const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
|
|
2415
|
+
let offsetTop = 0;
|
|
2221
2416
|
if (scrollYLoad) {
|
|
2222
|
-
|
|
2417
|
+
if (isScrollYBig && trEl) {
|
|
2418
|
+
offsetTop = trEl.offsetTop + trEl.offsetHeight;
|
|
2419
|
+
}
|
|
2420
|
+
else {
|
|
2421
|
+
offsetTop = rowRest.oTop + (rowRest.resizeHeight || cellOpts.height || rowOpts.height || rowRest.height || defaultRowHeight);
|
|
2422
|
+
}
|
|
2223
2423
|
}
|
|
2224
2424
|
else {
|
|
2225
|
-
const trEl = bodyScrollElem.querySelector(`.vxe-body--row[rowid="${rowid}"]`);
|
|
2226
2425
|
if (trEl) {
|
|
2227
|
-
|
|
2426
|
+
offsetTop = trEl.offsetTop + trEl.offsetHeight;
|
|
2228
2427
|
}
|
|
2229
2428
|
}
|
|
2429
|
+
if (isScrollYBig) {
|
|
2430
|
+
offsetTop += scrollYTop;
|
|
2431
|
+
}
|
|
2432
|
+
expandEl.style.top = toCssUnit(offsetTop);
|
|
2230
2433
|
if (!isUpdateHeight) {
|
|
2231
2434
|
if (rowRest.expandHeight !== expandHeight) {
|
|
2232
2435
|
isUpdateHeight = true;
|
|
@@ -2237,6 +2440,9 @@ function updateRowExpandStyle($xeTable) {
|
|
|
2237
2440
|
});
|
|
2238
2441
|
if (isUpdateHeight) {
|
|
2239
2442
|
reactData.rowExpandHeightFlag++;
|
|
2443
|
+
$xeTable.$nextTick(() => {
|
|
2444
|
+
updateRowOffsetTop($xeTable);
|
|
2445
|
+
});
|
|
2240
2446
|
}
|
|
2241
2447
|
}
|
|
2242
2448
|
}
|
|
@@ -2263,6 +2469,10 @@ const Methods = {
|
|
|
2263
2469
|
}
|
|
2264
2470
|
return [];
|
|
2265
2471
|
},
|
|
2472
|
+
getEl() {
|
|
2473
|
+
const $xeTable = this;
|
|
2474
|
+
return $xeTable.$refs.refElem;
|
|
2475
|
+
},
|
|
2266
2476
|
/**
|
|
2267
2477
|
* 获取父容器元素
|
|
2268
2478
|
*/
|
|
@@ -2274,10 +2484,26 @@ const Methods = {
|
|
|
2274
2484
|
* 获取父容器的高度
|
|
2275
2485
|
*/
|
|
2276
2486
|
getParentHeight() {
|
|
2277
|
-
const
|
|
2278
|
-
const
|
|
2279
|
-
const
|
|
2280
|
-
|
|
2487
|
+
const $xeTable = this;
|
|
2488
|
+
const $xeGrid = $xeTable.$xeGrid;
|
|
2489
|
+
const props = $xeTable;
|
|
2490
|
+
const { height } = props;
|
|
2491
|
+
const el = $xeTable.$refs.refElem;
|
|
2492
|
+
if (el) {
|
|
2493
|
+
const parentElem = el.parentNode;
|
|
2494
|
+
const parentPaddingSize = height === '100%' || height === 'auto' ? getPaddingTopBottomSize(parentElem) : 0;
|
|
2495
|
+
let parentWrapperHeight = 0;
|
|
2496
|
+
if (parentElem) {
|
|
2497
|
+
if ($xeGrid && hasClass(parentElem, 'vxe-grid--table-wrapper')) {
|
|
2498
|
+
parentWrapperHeight = $xeGrid.getParentHeight();
|
|
2499
|
+
}
|
|
2500
|
+
else {
|
|
2501
|
+
parentWrapperHeight = parentElem.clientHeight;
|
|
2502
|
+
}
|
|
2503
|
+
}
|
|
2504
|
+
return Math.floor(parentWrapperHeight - parentPaddingSize);
|
|
2505
|
+
}
|
|
2506
|
+
return 0;
|
|
2281
2507
|
},
|
|
2282
2508
|
/**
|
|
2283
2509
|
* 获取需要排除的高度
|
|
@@ -2365,6 +2591,9 @@ const Methods = {
|
|
|
2365
2591
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2366
2592
|
let treeData = [];
|
|
2367
2593
|
let fullData = datas ? datas.slice(0) : [];
|
|
2594
|
+
if (fullData.length > supportMaxRow) {
|
|
2595
|
+
errLog('vxe.error.errMaxRow', [supportMaxRow]);
|
|
2596
|
+
}
|
|
2368
2597
|
if (treeConfig) {
|
|
2369
2598
|
// 树结构自动转换
|
|
2370
2599
|
if (treeOpts.transform) {
|
|
@@ -2459,7 +2688,7 @@ const Methods = {
|
|
|
2459
2688
|
// warnLog('vxe.error.reqProp', ['table.show-overflow'])
|
|
2460
2689
|
// }
|
|
2461
2690
|
if (this.spanMethod) {
|
|
2462
|
-
|
|
2691
|
+
errLog('vxe.error.scrollErrProp', ['table.span-method']);
|
|
2463
2692
|
}
|
|
2464
2693
|
}
|
|
2465
2694
|
handleReserveStatus($xeTable);
|
|
@@ -2607,35 +2836,16 @@ const Methods = {
|
|
|
2607
2836
|
const reactData = $xeTable;
|
|
2608
2837
|
const internalData = $xeTable;
|
|
2609
2838
|
const { treeConfig } = props;
|
|
2610
|
-
const { treeExpandedMaps } =
|
|
2611
|
-
const { fullAllDataRowIdData, tableFullData, tableFullTreeData } = internalData;
|
|
2839
|
+
const { fullAllDataRowIdData, tableFullData, tableFullTreeData, treeExpandedMaps } = internalData;
|
|
2612
2840
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
2613
2841
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2614
2842
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
2615
|
-
const
|
|
2843
|
+
const { lazy } = treeOpts;
|
|
2616
2844
|
const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
|
|
2617
2845
|
const fullDataRowIdMaps = {};
|
|
2618
|
-
const
|
|
2619
|
-
const
|
|
2620
|
-
let
|
|
2621
|
-
const seq = treeConfig && path ? toTreePathSeq(path) : index + 1;
|
|
2622
|
-
const level = nodes ? nodes.length - 1 : 0;
|
|
2623
|
-
if (eqEmptyValue(rowid)) {
|
|
2624
|
-
rowid = getRowUniqueId();
|
|
2625
|
-
XEUtils.set(row, rowkey, rowid);
|
|
2626
|
-
}
|
|
2627
|
-
if (treeConfig && treeOpts.lazy) {
|
|
2628
|
-
const treeExpRest = treeExpandedMaps[rowid];
|
|
2629
|
-
if (row[hasChildField] && XEUtils.isUndefined(row[childrenField])) {
|
|
2630
|
-
row[childrenField] = null;
|
|
2631
|
-
}
|
|
2632
|
-
if (treeExpRest) {
|
|
2633
|
-
if (!row[childrenField] || !row[childrenField].length) {
|
|
2634
|
-
delete treeTempExpandedMaps[rowid];
|
|
2635
|
-
}
|
|
2636
|
-
}
|
|
2637
|
-
}
|
|
2638
|
-
let rowRest = fullAllDataRowIdData[rowid];
|
|
2846
|
+
const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
|
|
2847
|
+
const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
|
|
2848
|
+
let rowRest = fullAllDataRowIdMaps[rowid];
|
|
2639
2849
|
if (!rowRest) {
|
|
2640
2850
|
rowRest = { row, rowid, seq, index: -1, _index: -1, $index: -1, treeIndex: index, items, parent: parentRow, level, height: 0, resizeHeight: 0, oTop: 0, expandHeight: 0 };
|
|
2641
2851
|
}
|
|
@@ -2645,35 +2855,48 @@ const Methods = {
|
|
|
2645
2855
|
rowRest.items = items;
|
|
2646
2856
|
rowRest.parent = parentRow;
|
|
2647
2857
|
rowRest.level = level;
|
|
2648
|
-
rowRest.index =
|
|
2858
|
+
rowRest.index = currIndex;
|
|
2859
|
+
rowRest.treeIndex = index;
|
|
2649
2860
|
fullDataRowIdMaps[rowid] = rowRest;
|
|
2650
2861
|
fullAllDataRowIdMaps[rowid] = rowRest;
|
|
2651
2862
|
};
|
|
2652
2863
|
if (treeConfig) {
|
|
2653
|
-
XEUtils.eachTree(tableFullTreeData,
|
|
2864
|
+
XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
|
|
2865
|
+
const rowid = handleUpdateRowId(row);
|
|
2866
|
+
if (treeConfig && lazy) {
|
|
2867
|
+
if (row[hasChildField] && row[childrenField] === undefined) {
|
|
2868
|
+
row[childrenField] = null;
|
|
2869
|
+
}
|
|
2870
|
+
if (treeExpandedMaps[rowid]) {
|
|
2871
|
+
if (!row[childrenField] || !row[childrenField].length) {
|
|
2872
|
+
delete treeExpandedMaps[rowid];
|
|
2873
|
+
}
|
|
2874
|
+
}
|
|
2875
|
+
}
|
|
2876
|
+
handleRowCache(row, index, items, parentRow ? -1 : index, parentRow, rowid, nodes.length - 1, toTreePathSeq(path));
|
|
2877
|
+
}, { children: childrenField });
|
|
2654
2878
|
}
|
|
2655
2879
|
else {
|
|
2656
|
-
tableFullData.forEach(
|
|
2880
|
+
tableFullData.forEach((row, index, items) => {
|
|
2881
|
+
handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1);
|
|
2882
|
+
});
|
|
2657
2883
|
}
|
|
2658
2884
|
internalData.fullDataRowIdData = fullDataRowIdMaps;
|
|
2659
2885
|
internalData.fullAllDataRowIdData = fullAllDataRowIdMaps;
|
|
2660
|
-
reactData.
|
|
2886
|
+
reactData.treeExpandedFlag++;
|
|
2661
2887
|
},
|
|
2662
2888
|
cacheSourceMap(fullData) {
|
|
2663
|
-
|
|
2889
|
+
const $xeTable = this;
|
|
2890
|
+
const props = $xeTable;
|
|
2891
|
+
const internalData = $xeTable;
|
|
2892
|
+
const { treeConfig } = props;
|
|
2893
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
2664
2894
|
const sourceData = XEUtils.clone(fullData, true);
|
|
2665
|
-
const
|
|
2666
|
-
|
|
2895
|
+
const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
|
|
2896
|
+
const sourceRowIdData = {};
|
|
2667
2897
|
const handleSourceRow = (row) => {
|
|
2668
|
-
|
|
2669
|
-
|
|
2670
|
-
rowid = getRowUniqueId();
|
|
2671
|
-
XEUtils.set(row, rowkey, rowid);
|
|
2672
|
-
}
|
|
2673
|
-
sourceDataRowIdData[rowid] = {
|
|
2674
|
-
row,
|
|
2675
|
-
rowid
|
|
2676
|
-
};
|
|
2898
|
+
const rowid = handleUpdateRowId(row);
|
|
2899
|
+
sourceRowIdData[rowid] = row;
|
|
2677
2900
|
};
|
|
2678
2901
|
// 源数据缓存
|
|
2679
2902
|
if (treeConfig) {
|
|
@@ -2683,7 +2906,8 @@ const Methods = {
|
|
|
2683
2906
|
else {
|
|
2684
2907
|
sourceData.forEach(handleSourceRow);
|
|
2685
2908
|
}
|
|
2686
|
-
|
|
2909
|
+
internalData.sourceDataRowIdData = sourceRowIdData;
|
|
2910
|
+
internalData.tableSourceData = sourceData;
|
|
2687
2911
|
},
|
|
2688
2912
|
getParams() {
|
|
2689
2913
|
return this.params;
|
|
@@ -2770,47 +2994,22 @@ const Methods = {
|
|
|
2770
2994
|
* 根据 row 获取序号
|
|
2771
2995
|
* @param {Row} row 行对象
|
|
2772
2996
|
*/
|
|
2773
|
-
getRowSeq(
|
|
2774
|
-
const { fullAllDataRowIdData } = this;
|
|
2775
|
-
if (row) {
|
|
2776
|
-
const rowid = getRowid(this, row);
|
|
2777
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2778
|
-
if (rest) {
|
|
2779
|
-
return rest.seq;
|
|
2780
|
-
}
|
|
2781
|
-
}
|
|
2782
|
-
return -1;
|
|
2783
|
-
},
|
|
2997
|
+
getRowSeq: createGetRowCacheProp('seq'),
|
|
2784
2998
|
/**
|
|
2785
2999
|
* 根据 row 获取相对于 data 中的索引
|
|
2786
3000
|
* @param {Row} row 行对象
|
|
2787
3001
|
*/
|
|
2788
|
-
getRowIndex(
|
|
2789
|
-
const { fullAllDataRowIdData } = this;
|
|
2790
|
-
if (row) {
|
|
2791
|
-
const rowid = getRowid(this, row);
|
|
2792
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2793
|
-
if (rest) {
|
|
2794
|
-
return rest.index;
|
|
2795
|
-
}
|
|
2796
|
-
}
|
|
2797
|
-
return -1;
|
|
2798
|
-
},
|
|
3002
|
+
getRowIndex: createGetRowCacheProp('index'),
|
|
2799
3003
|
/**
|
|
2800
3004
|
* 根据 row 获取相对于当前数据中的索引
|
|
2801
3005
|
* @param {Row} row 行对象
|
|
2802
3006
|
*/
|
|
2803
|
-
getVTRowIndex(
|
|
2804
|
-
|
|
2805
|
-
|
|
2806
|
-
|
|
2807
|
-
|
|
2808
|
-
|
|
2809
|
-
return rest._index;
|
|
2810
|
-
}
|
|
2811
|
-
}
|
|
2812
|
-
return -1;
|
|
2813
|
-
},
|
|
3007
|
+
getVTRowIndex: createGetRowCacheProp('_index'),
|
|
3008
|
+
/**
|
|
3009
|
+
* 根据 row 获取渲染中的虚拟索引
|
|
3010
|
+
* @param {Row} row 行对象
|
|
3011
|
+
*/
|
|
3012
|
+
getVMRowIndex: createGetRowCacheProp('$index'),
|
|
2814
3013
|
// 在 v3 中废弃
|
|
2815
3014
|
_getRowIndex(row) {
|
|
2816
3015
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2818,21 +3017,6 @@ const Methods = {
|
|
|
2818
3017
|
}
|
|
2819
3018
|
return this.getVTRowIndex(row);
|
|
2820
3019
|
},
|
|
2821
|
-
/**
|
|
2822
|
-
* 根据 row 获取渲染中的虚拟索引
|
|
2823
|
-
* @param {Row} row 行对象
|
|
2824
|
-
*/
|
|
2825
|
-
getVMRowIndex(row) {
|
|
2826
|
-
const { fullAllDataRowIdData } = this;
|
|
2827
|
-
if (row) {
|
|
2828
|
-
const rowid = getRowid(this, row);
|
|
2829
|
-
const rest = fullAllDataRowIdData[rowid];
|
|
2830
|
-
if (rest) {
|
|
2831
|
-
return rest.$index;
|
|
2832
|
-
}
|
|
2833
|
-
}
|
|
2834
|
-
return -1;
|
|
2835
|
-
},
|
|
2836
3020
|
// 在 v3 中废弃
|
|
2837
3021
|
$getRowIndex(row) {
|
|
2838
3022
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2844,30 +3028,17 @@ const Methods = {
|
|
|
2844
3028
|
* 根据 column 获取相对于 columns 中的索引
|
|
2845
3029
|
* @param {ColumnInfo} column 列配置
|
|
2846
3030
|
*/
|
|
2847
|
-
getColumnIndex(
|
|
2848
|
-
const { fullColumnIdData } = this;
|
|
2849
|
-
if (column) {
|
|
2850
|
-
const rest = fullColumnIdData[column.id];
|
|
2851
|
-
if (rest) {
|
|
2852
|
-
return rest.index;
|
|
2853
|
-
}
|
|
2854
|
-
}
|
|
2855
|
-
return -1;
|
|
2856
|
-
},
|
|
3031
|
+
getColumnIndex: createGetColumnCacheProp('index'),
|
|
2857
3032
|
/**
|
|
2858
3033
|
* 根据 column 获取相对于当前表格列中的索引
|
|
2859
3034
|
* @param {ColumnInfo} column 列配置
|
|
2860
3035
|
*/
|
|
2861
|
-
getVTColumnIndex(
|
|
2862
|
-
|
|
2863
|
-
|
|
2864
|
-
|
|
2865
|
-
|
|
2866
|
-
|
|
2867
|
-
}
|
|
2868
|
-
}
|
|
2869
|
-
return -1;
|
|
2870
|
-
},
|
|
3036
|
+
getVTColumnIndex: createGetColumnCacheProp('_index'),
|
|
3037
|
+
/**
|
|
3038
|
+
* 根据 column 获取渲染中的虚拟索引
|
|
3039
|
+
* @param {ColumnInfo} column 列配置
|
|
3040
|
+
*/
|
|
3041
|
+
getVMColumnIndex: createGetColumnCacheProp('$index'),
|
|
2871
3042
|
// 在 v3 中废弃
|
|
2872
3043
|
_getColumnIndex(column) {
|
|
2873
3044
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2875,20 +3046,6 @@ const Methods = {
|
|
|
2875
3046
|
}
|
|
2876
3047
|
return this.getVTColumnIndex(column);
|
|
2877
3048
|
},
|
|
2878
|
-
/**
|
|
2879
|
-
* 根据 column 获取渲染中的虚拟索引
|
|
2880
|
-
* @param {ColumnInfo} column 列配置
|
|
2881
|
-
*/
|
|
2882
|
-
getVMColumnIndex(column) {
|
|
2883
|
-
const { fullColumnIdData } = this;
|
|
2884
|
-
if (column) {
|
|
2885
|
-
const rest = fullColumnIdData[column.id];
|
|
2886
|
-
if (rest) {
|
|
2887
|
-
return rest.$index;
|
|
2888
|
-
}
|
|
2889
|
-
}
|
|
2890
|
-
return -1;
|
|
2891
|
-
},
|
|
2892
3049
|
// 在 v3 中废弃
|
|
2893
3050
|
$getColumnIndex(column) {
|
|
2894
3051
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -2982,12 +3139,15 @@ const Methods = {
|
|
|
2982
3139
|
const reactData = $xeTable;
|
|
2983
3140
|
const internalData = $xeTable;
|
|
2984
3141
|
const { keepSource, treeConfig } = props;
|
|
2985
|
-
const {
|
|
3142
|
+
const { editStore } = reactData;
|
|
3143
|
+
const { fullAllDataRowIdData, fullDataRowIdData, tableSourceData, sourceDataRowIdData, tableFullData, afterFullData } = internalData;
|
|
3144
|
+
const removeTempMaps = Object.assign({}, editStore.removeMaps);
|
|
2986
3145
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
2987
3146
|
const { transform } = treeOpts;
|
|
3147
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
2988
3148
|
if (!keepSource) {
|
|
2989
3149
|
if (process.env.NODE_ENV === 'development') {
|
|
2990
|
-
|
|
3150
|
+
errLog('vxe.error.reqProp', ['keep-source']);
|
|
2991
3151
|
}
|
|
2992
3152
|
return $xeTable.$nextTick();
|
|
2993
3153
|
}
|
|
@@ -3002,23 +3162,24 @@ const Methods = {
|
|
|
3002
3162
|
}
|
|
3003
3163
|
let reDelFlag = false;
|
|
3004
3164
|
if (targetRows.length) {
|
|
3005
|
-
targetRows.forEach((
|
|
3006
|
-
|
|
3007
|
-
|
|
3008
|
-
|
|
3009
|
-
|
|
3010
|
-
|
|
3011
|
-
|
|
3012
|
-
|
|
3013
|
-
|
|
3014
|
-
|
|
3015
|
-
|
|
3016
|
-
|
|
3017
|
-
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3165
|
+
targetRows.forEach((item) => {
|
|
3166
|
+
const rowid = handleGetRowId(item);
|
|
3167
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
3168
|
+
if (rowRest) {
|
|
3169
|
+
const row = rowRest.row;
|
|
3170
|
+
if (!$xeTable.isInsertByRow(row)) {
|
|
3171
|
+
const oRow = sourceDataRowIdData[rowid];
|
|
3172
|
+
if (oRow && row) {
|
|
3173
|
+
if (field) {
|
|
3174
|
+
XEUtils.set(row, field, XEUtils.clone(XEUtils.get(oRow, field), true));
|
|
3175
|
+
}
|
|
3176
|
+
else {
|
|
3177
|
+
XEUtils.destructuring(row, XEUtils.clone(oRow, true));
|
|
3178
|
+
}
|
|
3179
|
+
if (!fullDataRowIdData[rowid] && $xeTable.isRemoveByRow(row)) {
|
|
3180
|
+
delete removeTempMaps[rowid];
|
|
3181
|
+
tableFullData.unshift(row);
|
|
3182
|
+
afterFullData.unshift(row);
|
|
3022
3183
|
reDelFlag = true;
|
|
3023
3184
|
}
|
|
3024
3185
|
}
|
|
@@ -3028,6 +3189,7 @@ const Methods = {
|
|
|
3028
3189
|
}
|
|
3029
3190
|
if (rows) {
|
|
3030
3191
|
if (reDelFlag) {
|
|
3192
|
+
editStore.removeMaps = removeTempMaps;
|
|
3031
3193
|
$xeTable.updateFooter();
|
|
3032
3194
|
$xeTable.cacheRowMap(false);
|
|
3033
3195
|
$xeTable.handleTableData(treeConfig && transform);
|
|
@@ -3190,20 +3352,25 @@ const Methods = {
|
|
|
3190
3352
|
},
|
|
3191
3353
|
/**
|
|
3192
3354
|
* 检查行或列数据是否发生改变
|
|
3193
|
-
* @param {Row}
|
|
3355
|
+
* @param {Row} rowOrId 行对象
|
|
3194
3356
|
* @param {String} field 字段名
|
|
3195
3357
|
*/
|
|
3196
|
-
isUpdateByRow(
|
|
3197
|
-
const
|
|
3358
|
+
isUpdateByRow(rowOrId, field) {
|
|
3359
|
+
const $xeTable = this;
|
|
3360
|
+
const props = $xeTable;
|
|
3361
|
+
const internalData = $xeTable;
|
|
3362
|
+
const { keepSource } = props;
|
|
3363
|
+
const { tableFullColumn, fullDataRowIdData, sourceDataRowIdData } = internalData;
|
|
3198
3364
|
if (keepSource) {
|
|
3199
|
-
const rowid = getRowid(
|
|
3365
|
+
const rowid = XEUtils.isString(rowOrId) || XEUtils.isNumber(rowOrId) ? rowOrId : getRowid($xeTable, rowOrId);
|
|
3366
|
+
const rowRest = fullDataRowIdData[rowid];
|
|
3200
3367
|
// 新增的数据不需要检测
|
|
3201
|
-
if (!
|
|
3368
|
+
if (!rowRest) {
|
|
3202
3369
|
return false;
|
|
3203
3370
|
}
|
|
3204
|
-
const
|
|
3205
|
-
|
|
3206
|
-
|
|
3371
|
+
const row = rowRest.row;
|
|
3372
|
+
const oRow = sourceDataRowIdData[rowid];
|
|
3373
|
+
if (oRow) {
|
|
3207
3374
|
if (arguments.length > 1) {
|
|
3208
3375
|
return !eqCellValue(oRow, row, field);
|
|
3209
3376
|
}
|
|
@@ -3265,6 +3432,99 @@ const Methods = {
|
|
|
3265
3432
|
tableColumn: this.tableColumn.slice(0)
|
|
3266
3433
|
};
|
|
3267
3434
|
},
|
|
3435
|
+
/**
|
|
3436
|
+
* 移动列到指定列的位置
|
|
3437
|
+
* @param fieldOrColumn
|
|
3438
|
+
* @param targetFieldOrColumn
|
|
3439
|
+
* @param options
|
|
3440
|
+
*/
|
|
3441
|
+
moveColumnTo(fieldOrColumn, targetFieldOrColumn, options) {
|
|
3442
|
+
const $xeTable = this;
|
|
3443
|
+
const internalData = $xeTable;
|
|
3444
|
+
const { fullColumnIdData, visibleColumn } = internalData;
|
|
3445
|
+
const { dragToChild, dragPos, isCrossDrag } = Object.assign({}, options);
|
|
3446
|
+
const dragCol = handleFieldOrColumn($xeTable, fieldOrColumn);
|
|
3447
|
+
let prevDragCol = null;
|
|
3448
|
+
const colRest = dragCol ? fullColumnIdData[dragCol.id] : null;
|
|
3449
|
+
let defPos = 'left';
|
|
3450
|
+
if (XEUtils.isNumber(targetFieldOrColumn)) {
|
|
3451
|
+
if (colRest && targetFieldOrColumn) {
|
|
3452
|
+
let currList = colRest.items;
|
|
3453
|
+
let offsetIndex = colRest._index + targetFieldOrColumn;
|
|
3454
|
+
if (isCrossDrag) {
|
|
3455
|
+
currList = visibleColumn;
|
|
3456
|
+
offsetIndex = colRest._index + targetFieldOrColumn;
|
|
3457
|
+
}
|
|
3458
|
+
if (offsetIndex > 0 && offsetIndex < currList.length - 1) {
|
|
3459
|
+
prevDragCol = currList[offsetIndex];
|
|
3460
|
+
}
|
|
3461
|
+
if (targetFieldOrColumn > 0) {
|
|
3462
|
+
defPos = 'right';
|
|
3463
|
+
}
|
|
3464
|
+
}
|
|
3465
|
+
}
|
|
3466
|
+
else {
|
|
3467
|
+
prevDragCol = handleFieldOrColumn($xeTable, targetFieldOrColumn);
|
|
3468
|
+
const targetColRest = prevDragCol ? fullColumnIdData[prevDragCol.id] : null;
|
|
3469
|
+
if (colRest && targetColRest) {
|
|
3470
|
+
if (targetColRest._index > colRest._index) {
|
|
3471
|
+
defPos = 'right';
|
|
3472
|
+
}
|
|
3473
|
+
}
|
|
3474
|
+
}
|
|
3475
|
+
return $xeTable.handleColDragSwapEvent(null, true, dragCol, prevDragCol, dragPos || defPos, dragToChild === true);
|
|
3476
|
+
},
|
|
3477
|
+
/**
|
|
3478
|
+
* 移动行到指定行的位置
|
|
3479
|
+
* @param rowidOrRow
|
|
3480
|
+
* @param targetRowidOrRow
|
|
3481
|
+
* @param options
|
|
3482
|
+
*/
|
|
3483
|
+
moveRowTo(rowidOrRow, targetRowidOrRow, options) {
|
|
3484
|
+
const $xeTable = this;
|
|
3485
|
+
const props = $xeTable;
|
|
3486
|
+
const internalData = $xeTable;
|
|
3487
|
+
const { treeConfig } = props;
|
|
3488
|
+
const { fullAllDataRowIdData, afterFullData } = internalData;
|
|
3489
|
+
const { dragToChild, dragPos, isCrossDrag } = Object.assign({}, options);
|
|
3490
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
3491
|
+
const dragRow = handleRowidOrRow($xeTable, rowidOrRow);
|
|
3492
|
+
let prevDragRow = null;
|
|
3493
|
+
let defPos = 'top';
|
|
3494
|
+
const rowRest = dragRow ? fullAllDataRowIdData[getRowid($xeTable, dragRow)] : null;
|
|
3495
|
+
if (XEUtils.isNumber(targetRowidOrRow)) {
|
|
3496
|
+
if (rowRest && targetRowidOrRow) {
|
|
3497
|
+
let currList = afterFullData;
|
|
3498
|
+
let offsetIndex = rowRest._index + targetRowidOrRow;
|
|
3499
|
+
if (treeConfig) {
|
|
3500
|
+
currList = rowRest.items;
|
|
3501
|
+
if (treeOpts.transform) {
|
|
3502
|
+
offsetIndex = rowRest.treeIndex + targetRowidOrRow;
|
|
3503
|
+
if (isCrossDrag) {
|
|
3504
|
+
currList = afterFullData;
|
|
3505
|
+
offsetIndex = rowRest._index + targetRowidOrRow;
|
|
3506
|
+
}
|
|
3507
|
+
}
|
|
3508
|
+
}
|
|
3509
|
+
if (offsetIndex >= 0 && offsetIndex <= currList.length - 1) {
|
|
3510
|
+
prevDragRow = currList[offsetIndex];
|
|
3511
|
+
}
|
|
3512
|
+
if (targetRowidOrRow > 0) {
|
|
3513
|
+
defPos = 'bottom';
|
|
3514
|
+
}
|
|
3515
|
+
}
|
|
3516
|
+
}
|
|
3517
|
+
else {
|
|
3518
|
+
prevDragRow = handleRowidOrRow($xeTable, targetRowidOrRow);
|
|
3519
|
+
const targetRowRest = prevDragRow ? fullAllDataRowIdData[getRowid($xeTable, prevDragRow)] : null;
|
|
3520
|
+
if (rowRest && targetRowRest) {
|
|
3521
|
+
if (targetRowRest._index > rowRest._index) {
|
|
3522
|
+
defPos = 'bottom';
|
|
3523
|
+
}
|
|
3524
|
+
}
|
|
3525
|
+
}
|
|
3526
|
+
return $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
|
|
3527
|
+
},
|
|
3268
3528
|
/**
|
|
3269
3529
|
* 获取表格的全量列
|
|
3270
3530
|
*/
|
|
@@ -3285,22 +3545,28 @@ const Methods = {
|
|
|
3285
3545
|
* 用于多选行,获取已选中的数据
|
|
3286
3546
|
*/
|
|
3287
3547
|
getCheckboxRecords(isFull) {
|
|
3288
|
-
const
|
|
3548
|
+
const $xeTable = this;
|
|
3549
|
+
const props = $xeTable;
|
|
3550
|
+
const internalData = $xeTable;
|
|
3551
|
+
const { treeConfig } = props;
|
|
3552
|
+
const { tableFullData, afterFullData, afterTreeFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData;
|
|
3553
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
3554
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
3289
3555
|
const { transform, mapChildrenField } = treeOpts;
|
|
3290
3556
|
const { checkField } = checkboxOpts;
|
|
3291
3557
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
3292
|
-
const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData);
|
|
3293
3558
|
let rowList = [];
|
|
3294
3559
|
if (checkField) {
|
|
3295
3560
|
if (treeConfig) {
|
|
3561
|
+
const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? afterTreeFullData : afterFullData);
|
|
3296
3562
|
rowList = XEUtils.filterTree(currTableData, row => XEUtils.get(row, checkField), { children: transform ? mapChildrenField : childrenField });
|
|
3297
3563
|
}
|
|
3298
3564
|
else {
|
|
3565
|
+
const currTableData = isFull ? tableFullData : afterFullData;
|
|
3299
3566
|
rowList = currTableData.filter((row) => XEUtils.get(row, checkField));
|
|
3300
3567
|
}
|
|
3301
3568
|
}
|
|
3302
3569
|
else {
|
|
3303
|
-
const { selectCheckboxMaps, fullDataRowIdData } = this;
|
|
3304
3570
|
XEUtils.each(selectCheckboxMaps, (row, rowid) => {
|
|
3305
3571
|
if (isFull) {
|
|
3306
3572
|
if (fullDataRowIdData[rowid]) {
|
|
@@ -3616,6 +3882,7 @@ const Methods = {
|
|
|
3616
3882
|
* 默认执行一次,除非被重置
|
|
3617
3883
|
*/
|
|
3618
3884
|
handleLoadDefaults() {
|
|
3885
|
+
const $xeTable = this;
|
|
3619
3886
|
if (this.checkboxConfig) {
|
|
3620
3887
|
this.handleDefaultSelectionChecked();
|
|
3621
3888
|
}
|
|
@@ -3626,7 +3893,7 @@ const Methods = {
|
|
|
3626
3893
|
this.handleDefaultRowExpand();
|
|
3627
3894
|
}
|
|
3628
3895
|
if (this.treeConfig) {
|
|
3629
|
-
|
|
3896
|
+
handleDefaultTreeExpand($xeTable);
|
|
3630
3897
|
}
|
|
3631
3898
|
if (this.mergeCells) {
|
|
3632
3899
|
this.handleDefaultMergeCells();
|
|
@@ -3885,8 +4152,19 @@ const Methods = {
|
|
|
3885
4152
|
}
|
|
3886
4153
|
},
|
|
3887
4154
|
getCustomStoreData() {
|
|
3888
|
-
const
|
|
3889
|
-
const
|
|
4155
|
+
const $xeTable = this;
|
|
4156
|
+
const props = $xeTable;
|
|
4157
|
+
const internalData = $xeTable;
|
|
4158
|
+
const { id } = props;
|
|
4159
|
+
const customOpts = $xeTable.computeCustomOpts;
|
|
4160
|
+
const { collectColumn } = internalData;
|
|
4161
|
+
const { storage, checkMethod } = customOpts;
|
|
4162
|
+
const isAllCustom = storage === true;
|
|
4163
|
+
const storageOpts = isAllCustom ? {} : Object.assign({}, storage || {});
|
|
4164
|
+
const isCustomResizable = isAllCustom || storageOpts.resizable;
|
|
4165
|
+
const isCustomVisible = isAllCustom || storageOpts.visible;
|
|
4166
|
+
const isCustomFixed = isAllCustom || storageOpts.fixed;
|
|
4167
|
+
const isCustomSort = isAllCustom || storageOpts.sort;
|
|
3890
4168
|
const resizableData = {};
|
|
3891
4169
|
const sortData = {};
|
|
3892
4170
|
const visibleData = {};
|
|
@@ -3903,47 +4181,37 @@ const Methods = {
|
|
|
3903
4181
|
}
|
|
3904
4182
|
let hasResizable = 0;
|
|
3905
4183
|
let hasSort = 0;
|
|
3906
|
-
let
|
|
4184
|
+
let hasFixed = 0;
|
|
3907
4185
|
let hasVisible = 0;
|
|
3908
4186
|
XEUtils.eachTree(collectColumn, (column, index, items, path, parentColumn) => {
|
|
4187
|
+
const colKey = column.getKey();
|
|
4188
|
+
if (!colKey) {
|
|
4189
|
+
errLog('vxe.error.reqProp', [`${column.getTitle() || column.type || ''} -> column.field=?`]);
|
|
4190
|
+
return;
|
|
4191
|
+
}
|
|
3909
4192
|
// 只支持一级
|
|
3910
4193
|
if (!parentColumn) {
|
|
3911
|
-
|
|
3912
|
-
|
|
3913
|
-
|
|
3914
|
-
hasSort = 1;
|
|
3915
|
-
sortData[colKey] = column.renderSortNumber;
|
|
3916
|
-
}
|
|
3917
|
-
});
|
|
3918
|
-
if (column.fixed !== column.defaultFixed) {
|
|
3919
|
-
const colKey = column.getKey();
|
|
3920
|
-
if (colKey) {
|
|
3921
|
-
hasFixedt = 1;
|
|
3922
|
-
fixedData[colKey] = column.fixed;
|
|
3923
|
-
}
|
|
4194
|
+
if (isCustomSort) {
|
|
4195
|
+
hasSort = 1;
|
|
4196
|
+
sortData[colKey] = column.renderSortNumber;
|
|
3924
4197
|
}
|
|
3925
|
-
|
|
3926
|
-
|
|
3927
|
-
|
|
3928
|
-
if (colKey) {
|
|
3929
|
-
hasResizable = 1;
|
|
3930
|
-
resizableData[colKey] = column.renderWidth;
|
|
4198
|
+
if (isCustomFixed && column.fixed !== column.defaultFixed) {
|
|
4199
|
+
hasFixed = 1;
|
|
4200
|
+
fixedData[colKey] = column.fixed;
|
|
3931
4201
|
}
|
|
3932
4202
|
}
|
|
3933
|
-
if (
|
|
4203
|
+
if (isCustomResizable && column.resizeWidth) {
|
|
4204
|
+
hasResizable = 1;
|
|
4205
|
+
resizableData[colKey] = column.renderWidth;
|
|
4206
|
+
}
|
|
4207
|
+
if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
|
|
3934
4208
|
if (!column.visible && column.defaultVisible) {
|
|
3935
|
-
|
|
3936
|
-
|
|
3937
|
-
hasVisible = 1;
|
|
3938
|
-
visibleData[colKey] = false;
|
|
3939
|
-
}
|
|
4209
|
+
hasVisible = 1;
|
|
4210
|
+
visibleData[colKey] = false;
|
|
3940
4211
|
}
|
|
3941
4212
|
else if (column.visible && !column.defaultVisible) {
|
|
3942
|
-
|
|
3943
|
-
|
|
3944
|
-
hasVisible = 1;
|
|
3945
|
-
visibleData[colKey] = true;
|
|
3946
|
-
}
|
|
4213
|
+
hasVisible = 1;
|
|
4214
|
+
visibleData[colKey] = true;
|
|
3947
4215
|
}
|
|
3948
4216
|
}
|
|
3949
4217
|
});
|
|
@@ -3953,7 +4221,7 @@ const Methods = {
|
|
|
3953
4221
|
if (hasSort) {
|
|
3954
4222
|
storeData.sortData = sortData;
|
|
3955
4223
|
}
|
|
3956
|
-
if (
|
|
4224
|
+
if (hasFixed) {
|
|
3957
4225
|
storeData.fixedData = fixedData;
|
|
3958
4226
|
}
|
|
3959
4227
|
if (hasVisible) {
|
|
@@ -4441,12 +4709,13 @@ const Methods = {
|
|
|
4441
4709
|
const $xeTable = this;
|
|
4442
4710
|
const internalData = $xeTable;
|
|
4443
4711
|
const { fullAllDataRowIdData, afterFullData } = internalData;
|
|
4712
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4444
4713
|
const rowOpts = $xeTable.computeRowOpts;
|
|
4445
4714
|
const cellOpts = $xeTable.computeCellOpts;
|
|
4446
4715
|
const defaultRowHeight = $xeTable.computeDefaultRowHeight;
|
|
4447
4716
|
const rest = {};
|
|
4448
4717
|
afterFullData.forEach(row => {
|
|
4449
|
-
const rowid =
|
|
4718
|
+
const rowid = handleGetRowId(row);
|
|
4450
4719
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4451
4720
|
if (rowRest) {
|
|
4452
4721
|
const resizeHeight = rowRest.resizeHeight;
|
|
@@ -4473,8 +4742,9 @@ const Methods = {
|
|
|
4473
4742
|
rHeight = Math.floor(rHeight * bodyHeight);
|
|
4474
4743
|
}
|
|
4475
4744
|
if (rHeight) {
|
|
4745
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
4476
4746
|
rows.forEach(row => {
|
|
4477
|
-
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row :
|
|
4747
|
+
const rowid = XEUtils.isString(row) || XEUtils.isNumber(row) ? row : handleGetRowId(row);
|
|
4478
4748
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
4479
4749
|
if (rowRest) {
|
|
4480
4750
|
rowRest.resizeHeight = rHeight;
|
|
@@ -4626,8 +4896,22 @@ const Methods = {
|
|
|
4626
4896
|
}
|
|
4627
4897
|
}
|
|
4628
4898
|
// 兼容老版本
|
|
4629
|
-
let rest;
|
|
4630
|
-
|
|
4899
|
+
let rest = null;
|
|
4900
|
+
let isStop = false;
|
|
4901
|
+
for (let i = 0; i < evntList.length; i++) {
|
|
4902
|
+
const func = evntList[i];
|
|
4903
|
+
const fnRest = func(Object.assign({ $grid: this.$xegrid, $table: this, $event: evnt }, args));
|
|
4904
|
+
if (fnRest === false) {
|
|
4905
|
+
isStop = true;
|
|
4906
|
+
break;
|
|
4907
|
+
}
|
|
4908
|
+
else if (fnRest && fnRest.status === false) {
|
|
4909
|
+
rest = fnRest.result;
|
|
4910
|
+
isStop = true;
|
|
4911
|
+
break;
|
|
4912
|
+
}
|
|
4913
|
+
}
|
|
4914
|
+
if (!isStop) {
|
|
4631
4915
|
if (next) {
|
|
4632
4916
|
rest = next();
|
|
4633
4917
|
}
|
|
@@ -4821,7 +5105,8 @@ const Methods = {
|
|
|
4821
5105
|
if (this.isActivated) {
|
|
4822
5106
|
this.preventEvent(evnt, 'event.keydown', null, () => {
|
|
4823
5107
|
const { afterFullData } = internalData;
|
|
4824
|
-
const { filterStore, isCtxMenu, ctxMenuStore, editStore, editOpts, editConfig, mouseConfig, mouseOpts, keyboardConfig, keyboardOpts, treeConfig, treeOpts, highlightCurrentRow, currentRow, bodyCtxMenu, rowOpts } = this;
|
|
5108
|
+
const { filterStore, isCtxMenu, ctxMenuStore, editStore, editOpts, editConfig, mouseConfig, mouseOpts, keyboardConfig, keyboardOpts, treeConfig, treeOpts, highlightCurrentRow, highlightCurrentColumn, currentRow, bodyCtxMenu, rowOpts } = this;
|
|
5109
|
+
const columnOpts = $xeTable.computeColumnOpts;
|
|
4825
5110
|
const { selected, actived } = editStore;
|
|
4826
5111
|
const { keyCode } = evnt;
|
|
4827
5112
|
const hasBackspaceKey = keyCode === 8;
|
|
@@ -4975,11 +5260,15 @@ const Methods = {
|
|
|
4975
5260
|
if (!isEditStatus) {
|
|
4976
5261
|
// 如果按下了方向键
|
|
4977
5262
|
if (selected.row && selected.column) {
|
|
4978
|
-
|
|
5263
|
+
$xeTable.moveSelected(selected.args, isLeftArrow, isUpArrow, isRightArrow, isDwArrow, evnt);
|
|
5264
|
+
}
|
|
5265
|
+
// 当前行按键上下移动
|
|
5266
|
+
if ((isUpArrow || isDwArrow) && (rowOpts.isCurrent || highlightCurrentRow)) {
|
|
5267
|
+
$xeTable.moveCurrentRow(isUpArrow, isDwArrow, evnt);
|
|
4979
5268
|
}
|
|
4980
|
-
|
|
4981
|
-
|
|
4982
|
-
|
|
5269
|
+
// 当前行按键左右移动
|
|
5270
|
+
if ((isLeftArrow || isRightArrow) && (columnOpts.isCurrent || highlightCurrentColumn)) {
|
|
5271
|
+
$xeTable.moveCurrentColumn(isLeftArrow, isRightArrow, evnt);
|
|
4983
5272
|
}
|
|
4984
5273
|
}
|
|
4985
5274
|
}
|
|
@@ -5302,11 +5591,15 @@ const Methods = {
|
|
|
5302
5591
|
* 获取复选框半选状态的行数据
|
|
5303
5592
|
*/
|
|
5304
5593
|
getCheckboxIndeterminateRecords(isFull) {
|
|
5305
|
-
const
|
|
5594
|
+
const $xeTable = this;
|
|
5595
|
+
const props = $xeTable;
|
|
5596
|
+
const internalData = $xeTable;
|
|
5597
|
+
const { treeConfig } = props;
|
|
5598
|
+
const { fullDataRowIdData, treeIndeterminateRowMaps } = internalData;
|
|
5306
5599
|
if (treeConfig) {
|
|
5307
5600
|
const fullRest = [];
|
|
5308
5601
|
const defRest = [];
|
|
5309
|
-
XEUtils.each(
|
|
5602
|
+
XEUtils.each(treeIndeterminateRowMaps, (item, rowid) => {
|
|
5310
5603
|
if (item) {
|
|
5311
5604
|
fullRest.push(item);
|
|
5312
5605
|
if (fullDataRowIdData[rowid]) {
|
|
@@ -5376,20 +5669,22 @@ const Methods = {
|
|
|
5376
5669
|
isCheckedByCheckboxRow(row) {
|
|
5377
5670
|
const $xeTable = this;
|
|
5378
5671
|
const reactData = $xeTable;
|
|
5379
|
-
const
|
|
5672
|
+
const internalData = $xeTable;
|
|
5673
|
+
const { updateCheckboxFlag } = reactData;
|
|
5674
|
+
const { selectCheckboxMaps } = internalData;
|
|
5380
5675
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5381
5676
|
const { checkField } = checkboxOpts;
|
|
5382
5677
|
if (checkField) {
|
|
5383
5678
|
return XEUtils.get(row, checkField);
|
|
5384
5679
|
}
|
|
5385
|
-
return !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5680
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5386
5681
|
},
|
|
5387
5682
|
isCheckedByCheckboxRowKey(rowid) {
|
|
5388
5683
|
const $xeTable = this;
|
|
5389
5684
|
const reactData = $xeTable;
|
|
5390
5685
|
const internalData = $xeTable;
|
|
5391
|
-
const {
|
|
5392
|
-
const { fullAllDataRowIdData } = internalData;
|
|
5686
|
+
const { updateCheckboxFlag } = reactData;
|
|
5687
|
+
const { fullAllDataRowIdData, selectCheckboxMaps } = internalData;
|
|
5393
5688
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5394
5689
|
const { checkField } = checkboxOpts;
|
|
5395
5690
|
if (checkField) {
|
|
@@ -5399,19 +5694,19 @@ const Methods = {
|
|
|
5399
5694
|
}
|
|
5400
5695
|
return false;
|
|
5401
5696
|
}
|
|
5402
|
-
return !!selectCheckboxMaps[rowid];
|
|
5697
|
+
return !!updateCheckboxFlag && !!selectCheckboxMaps[rowid];
|
|
5403
5698
|
},
|
|
5404
5699
|
isIndeterminateByCheckboxRow(row) {
|
|
5405
5700
|
const $xeTable = this;
|
|
5406
|
-
const
|
|
5407
|
-
const {
|
|
5408
|
-
return !!
|
|
5701
|
+
const internalData = $xeTable;
|
|
5702
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5703
|
+
return !!treeIndeterminateRowMaps[getRowid($xeTable, row)] && !$xeTable.isCheckedByCheckboxRow(row);
|
|
5409
5704
|
},
|
|
5410
5705
|
isIndeterminateByCheckboxRowKey(rowid) {
|
|
5411
5706
|
const $xeTable = this;
|
|
5412
|
-
const
|
|
5413
|
-
const {
|
|
5414
|
-
return !!
|
|
5707
|
+
const internalData = $xeTable;
|
|
5708
|
+
const { treeIndeterminateRowMaps } = internalData;
|
|
5709
|
+
return !!treeIndeterminateRowMaps[rowid] && !$xeTable.isCheckedByCheckboxRowKey(rowid);
|
|
5415
5710
|
},
|
|
5416
5711
|
/**
|
|
5417
5712
|
* 切换选中
|
|
@@ -5421,14 +5716,16 @@ const Methods = {
|
|
|
5421
5716
|
const $xeTable = this;
|
|
5422
5717
|
const props = $xeTable;
|
|
5423
5718
|
const reactData = $xeTable;
|
|
5719
|
+
const internalData = $xeTable;
|
|
5424
5720
|
const { treeConfig } = props;
|
|
5425
|
-
const { selectCheckboxMaps } =
|
|
5426
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5721
|
+
const { selectCheckboxMaps } = internalData;
|
|
5427
5722
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5428
5723
|
const { transform, mapChildrenField } = treeOpts;
|
|
5429
5724
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
5430
5725
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5431
5726
|
const { checkField, checkStrictly, checkMethod } = checkboxOpts;
|
|
5727
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5728
|
+
// indeterminateField 仅支持读取
|
|
5432
5729
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
5433
5730
|
if (checkField) {
|
|
5434
5731
|
// 树结构
|
|
@@ -5443,59 +5740,57 @@ const Methods = {
|
|
|
5443
5740
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5444
5741
|
}
|
|
5445
5742
|
}, { children: transform ? mapChildrenField : childrenField });
|
|
5446
|
-
reactData.
|
|
5743
|
+
reactData.updateCheckboxFlag++;
|
|
5447
5744
|
return;
|
|
5448
5745
|
}
|
|
5449
|
-
|
|
5450
|
-
|
|
5451
|
-
|
|
5452
|
-
|
|
5453
|
-
|
|
5454
|
-
|
|
5455
|
-
|
|
5456
|
-
|
|
5457
|
-
}
|
|
5458
|
-
reactData.selectCheckboxMaps = selectRowMaps;
|
|
5746
|
+
// 列表
|
|
5747
|
+
rows.forEach(row => {
|
|
5748
|
+
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5749
|
+
XEUtils.set(row, checkField, checked);
|
|
5750
|
+
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5751
|
+
}
|
|
5752
|
+
});
|
|
5753
|
+
reactData.updateCheckboxFlag++;
|
|
5459
5754
|
return;
|
|
5460
5755
|
}
|
|
5461
5756
|
// 树结构
|
|
5462
5757
|
if (treeConfig && !checkStrictly) {
|
|
5463
5758
|
// 更新子节点状态
|
|
5464
5759
|
XEUtils.eachTree(rows, (row) => {
|
|
5465
|
-
const rowid =
|
|
5760
|
+
const rowid = handleGetRowId(row);
|
|
5466
5761
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5467
5762
|
if (checked) {
|
|
5468
|
-
|
|
5763
|
+
selectCheckboxMaps[rowid] = row;
|
|
5469
5764
|
}
|
|
5470
5765
|
else {
|
|
5471
|
-
if (
|
|
5472
|
-
delete
|
|
5766
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5767
|
+
delete selectCheckboxMaps[rowid];
|
|
5473
5768
|
}
|
|
5474
5769
|
}
|
|
5475
5770
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5476
5771
|
}
|
|
5477
5772
|
}, { children: transform ? mapChildrenField : childrenField });
|
|
5478
|
-
reactData.
|
|
5773
|
+
reactData.updateCheckboxFlag++;
|
|
5479
5774
|
return;
|
|
5480
5775
|
}
|
|
5481
5776
|
// 列表
|
|
5482
5777
|
rows.forEach(row => {
|
|
5483
|
-
const rowid =
|
|
5778
|
+
const rowid = handleGetRowId(row);
|
|
5484
5779
|
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
5485
5780
|
if (checked) {
|
|
5486
|
-
if (!
|
|
5487
|
-
|
|
5781
|
+
if (!selectCheckboxMaps[rowid]) {
|
|
5782
|
+
selectCheckboxMaps[rowid] = row;
|
|
5488
5783
|
}
|
|
5489
5784
|
}
|
|
5490
5785
|
else {
|
|
5491
|
-
if (
|
|
5492
|
-
delete
|
|
5786
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5787
|
+
delete selectCheckboxMaps[rowid];
|
|
5493
5788
|
}
|
|
5494
5789
|
}
|
|
5495
5790
|
handleCheckboxReserveRow($xeTable, row, checked);
|
|
5791
|
+
reactData.updateCheckboxFlag++;
|
|
5496
5792
|
}
|
|
5497
5793
|
});
|
|
5498
|
-
reactData.selectCheckboxMaps = selectRowMaps;
|
|
5499
5794
|
},
|
|
5500
5795
|
/**
|
|
5501
5796
|
* 即将移除
|
|
@@ -5506,7 +5801,10 @@ const Methods = {
|
|
|
5506
5801
|
$xeTable.handleBatchSelectRows([row], checked, isForce);
|
|
5507
5802
|
},
|
|
5508
5803
|
handleToggleCheckRowEvent(evnt, params) {
|
|
5509
|
-
const
|
|
5804
|
+
const $xeTable = this;
|
|
5805
|
+
const internalData = $xeTable;
|
|
5806
|
+
const { selectCheckboxMaps } = internalData;
|
|
5807
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5510
5808
|
const { checkField, trigger } = checkboxOpts;
|
|
5511
5809
|
const { row } = params;
|
|
5512
5810
|
if (trigger === 'manual') {
|
|
@@ -5517,47 +5815,52 @@ const Methods = {
|
|
|
5517
5815
|
checked = !XEUtils.get(row, checkField);
|
|
5518
5816
|
}
|
|
5519
5817
|
else {
|
|
5520
|
-
checked = !selectCheckboxMaps[getRowid(
|
|
5818
|
+
checked = !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5521
5819
|
}
|
|
5522
5820
|
if (evnt) {
|
|
5523
|
-
|
|
5821
|
+
$xeTable.triggerCheckRowEvent(evnt, params, checked);
|
|
5524
5822
|
}
|
|
5525
5823
|
else {
|
|
5526
|
-
|
|
5527
|
-
|
|
5824
|
+
$xeTable.handleBatchSelectRows([row], checked);
|
|
5825
|
+
$xeTable.checkSelectionStatus();
|
|
5528
5826
|
}
|
|
5529
5827
|
},
|
|
5530
5828
|
triggerCheckRowEvent(evnt, params, checked) {
|
|
5531
5829
|
const $xeTable = this;
|
|
5532
|
-
const
|
|
5533
|
-
const
|
|
5830
|
+
const props = $xeTable;
|
|
5831
|
+
const internalData = $xeTable;
|
|
5534
5832
|
const { row } = params;
|
|
5833
|
+
const { afterFullData } = internalData;
|
|
5834
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5835
|
+
const { checkMethod, trigger } = checkboxOpts;
|
|
5535
5836
|
if (trigger === 'manual') {
|
|
5536
5837
|
return;
|
|
5537
5838
|
}
|
|
5538
5839
|
evnt.stopPropagation();
|
|
5539
|
-
if (checkboxOpts.isShiftKey && evnt.shiftKey && !
|
|
5540
|
-
const checkboxRecords =
|
|
5840
|
+
if (checkboxOpts.isShiftKey && evnt.shiftKey && !props.treeConfig) {
|
|
5841
|
+
const checkboxRecords = $xeTable.getCheckboxRecords();
|
|
5541
5842
|
if (checkboxRecords.length) {
|
|
5542
5843
|
const firstRow = checkboxRecords[0];
|
|
5543
|
-
const _rowIndex =
|
|
5544
|
-
const _firstRowIndex =
|
|
5844
|
+
const _rowIndex = $xeTable.getVTRowIndex(row);
|
|
5845
|
+
const _firstRowIndex = $xeTable.getVTRowIndex(firstRow);
|
|
5545
5846
|
if (_rowIndex !== _firstRowIndex) {
|
|
5546
|
-
|
|
5847
|
+
$xeTable.setAllCheckboxRow(false);
|
|
5547
5848
|
const rangeRows = _rowIndex < _firstRowIndex ? afterFullData.slice(_rowIndex, _firstRowIndex + 1) : afterFullData.slice(_firstRowIndex, _rowIndex + 1);
|
|
5548
|
-
|
|
5549
|
-
|
|
5849
|
+
$xeTable.$nextTick(() => {
|
|
5850
|
+
handleCheckedCheckboxRow($xeTable, rangeRows, true, false);
|
|
5851
|
+
});
|
|
5852
|
+
$xeTable.dispatchEvent('checkbox-range-select', Object.assign({ rangeRecords: rangeRows }, params), evnt);
|
|
5550
5853
|
return;
|
|
5551
5854
|
}
|
|
5552
5855
|
}
|
|
5553
5856
|
}
|
|
5554
5857
|
if (!checkMethod || checkMethod({ row })) {
|
|
5555
|
-
|
|
5556
|
-
|
|
5557
|
-
|
|
5558
|
-
records:
|
|
5559
|
-
reserves:
|
|
5560
|
-
indeterminates:
|
|
5858
|
+
$xeTable.handleBatchSelectRows([row], checked);
|
|
5859
|
+
$xeTable.checkSelectionStatus();
|
|
5860
|
+
$xeTable.dispatchEvent('checkbox-change', Object.assign({
|
|
5861
|
+
records: () => $xeTable.getCheckboxRecords(),
|
|
5862
|
+
reserves: () => $xeTable.getCheckboxReserveRecords(),
|
|
5863
|
+
indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
|
|
5561
5864
|
checked
|
|
5562
5865
|
}, params), evnt);
|
|
5563
5866
|
}
|
|
@@ -5567,7 +5870,9 @@ const Methods = {
|
|
|
5567
5870
|
*/
|
|
5568
5871
|
toggleCheckboxRow(row) {
|
|
5569
5872
|
const $xeTable = this;
|
|
5570
|
-
const
|
|
5873
|
+
const internalData = $xeTable;
|
|
5874
|
+
const { selectCheckboxMaps } = internalData;
|
|
5875
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5571
5876
|
const { checkField } = checkboxOpts;
|
|
5572
5877
|
const checked = checkField ? !XEUtils.get(row, checkField) : !selectCheckboxMaps[getRowid($xeTable, row)];
|
|
5573
5878
|
$xeTable.handleBatchSelectRows([row], checked, true);
|
|
@@ -5588,9 +5893,7 @@ const Methods = {
|
|
|
5588
5893
|
const reactData = $xeTable;
|
|
5589
5894
|
const internalData = $xeTable;
|
|
5590
5895
|
const { treeConfig } = props;
|
|
5591
|
-
const { selectCheckboxMaps,
|
|
5592
|
-
const selectRowMaps = Object.assign({}, selectCheckboxMaps);
|
|
5593
|
-
const halfRowMaps = Object.assign({}, treeIndeterminateMaps);
|
|
5896
|
+
const { selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5594
5897
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
5595
5898
|
const { transform, mapChildrenField } = treeOpts;
|
|
5596
5899
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
@@ -5602,10 +5905,11 @@ const Methods = {
|
|
|
5602
5905
|
}
|
|
5603
5906
|
// 树结构
|
|
5604
5907
|
if (treeConfig) {
|
|
5908
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5605
5909
|
const childRowMaps = {};
|
|
5606
5910
|
const childRowList = [];
|
|
5607
5911
|
XEUtils.eachTree(afterTreeFullData, (row) => {
|
|
5608
|
-
const rowid =
|
|
5912
|
+
const rowid = handleGetRowId(row);
|
|
5609
5913
|
const childList = row[transform ? mapChildrenField : childrenField];
|
|
5610
5914
|
if (childList && childList.length && !childRowMaps[rowid]) {
|
|
5611
5915
|
childRowMaps[rowid] = 1;
|
|
@@ -5621,13 +5925,13 @@ const Methods = {
|
|
|
5621
5925
|
let vLen = 0; // 有效行
|
|
5622
5926
|
childList.forEach(checkMethod
|
|
5623
5927
|
? (item) => {
|
|
5624
|
-
const childRowid =
|
|
5625
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5928
|
+
const childRowid = handleGetRowId(item);
|
|
5929
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5626
5930
|
if (checkMethod({ row: item })) {
|
|
5627
5931
|
if (isSelect) {
|
|
5628
5932
|
sLen++;
|
|
5629
5933
|
}
|
|
5630
|
-
else if (
|
|
5934
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5631
5935
|
hLen++;
|
|
5632
5936
|
}
|
|
5633
5937
|
vLen++;
|
|
@@ -5636,18 +5940,18 @@ const Methods = {
|
|
|
5636
5940
|
if (isSelect) {
|
|
5637
5941
|
sLen++;
|
|
5638
5942
|
}
|
|
5639
|
-
else if (
|
|
5943
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5640
5944
|
hLen++;
|
|
5641
5945
|
}
|
|
5642
5946
|
}
|
|
5643
5947
|
}
|
|
5644
5948
|
: item => {
|
|
5645
|
-
const childRowid =
|
|
5646
|
-
const isSelect = checkField ? XEUtils.get(item, checkField) :
|
|
5949
|
+
const childRowid = handleGetRowId(item);
|
|
5950
|
+
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid];
|
|
5647
5951
|
if (isSelect) {
|
|
5648
5952
|
sLen++;
|
|
5649
5953
|
}
|
|
5650
|
-
else if (
|
|
5954
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5651
5955
|
hLen++;
|
|
5652
5956
|
}
|
|
5653
5957
|
vLen++;
|
|
@@ -5659,31 +5963,30 @@ const Methods = {
|
|
|
5659
5963
|
}
|
|
5660
5964
|
if (isSelected) {
|
|
5661
5965
|
if (!checkField) {
|
|
5662
|
-
|
|
5966
|
+
selectCheckboxMaps[rowid] = row;
|
|
5663
5967
|
}
|
|
5664
|
-
if (
|
|
5665
|
-
delete
|
|
5968
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
5969
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5666
5970
|
}
|
|
5667
5971
|
}
|
|
5668
5972
|
else {
|
|
5669
5973
|
if (!checkField) {
|
|
5670
|
-
if (
|
|
5671
|
-
delete
|
|
5974
|
+
if (selectCheckboxMaps[rowid]) {
|
|
5975
|
+
delete selectCheckboxMaps[rowid];
|
|
5672
5976
|
}
|
|
5673
5977
|
}
|
|
5674
5978
|
if (halfSelect) {
|
|
5675
|
-
|
|
5979
|
+
treeIndeterminateRowMaps[rowid] = row;
|
|
5676
5980
|
}
|
|
5677
5981
|
else {
|
|
5678
|
-
if (
|
|
5679
|
-
delete
|
|
5982
|
+
if (treeIndeterminateRowMaps[rowid]) {
|
|
5983
|
+
delete treeIndeterminateRowMaps[rowid];
|
|
5680
5984
|
}
|
|
5681
5985
|
}
|
|
5682
5986
|
}
|
|
5683
5987
|
});
|
|
5684
5988
|
}
|
|
5685
|
-
reactData.
|
|
5686
|
-
reactData.treeIndeterminateMaps = halfRowMaps;
|
|
5989
|
+
reactData.updateCheckboxFlag++;
|
|
5687
5990
|
},
|
|
5688
5991
|
updateAllCheckboxStatus() {
|
|
5689
5992
|
const $xeTable = this;
|
|
@@ -5691,23 +5994,23 @@ const Methods = {
|
|
|
5691
5994
|
const reactData = $xeTable;
|
|
5692
5995
|
const internalData = $xeTable;
|
|
5693
5996
|
const { treeConfig } = props;
|
|
5694
|
-
const { selectCheckboxMaps,
|
|
5997
|
+
const { afterFullData, afterTreeFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData;
|
|
5695
5998
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
5696
5999
|
const { checkField, checkMethod, showReserveStatus } = checkboxOpts;
|
|
5697
|
-
const {
|
|
6000
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5698
6001
|
let sLen = 0; // 已选
|
|
5699
6002
|
let hLen = 0; // 半选
|
|
5700
6003
|
let vLen = 0; // 有效行
|
|
5701
6004
|
const rootList = (treeConfig ? afterTreeFullData : afterFullData);
|
|
5702
6005
|
rootList.forEach(checkMethod
|
|
5703
6006
|
? row => {
|
|
5704
|
-
const childRowid =
|
|
6007
|
+
const childRowid = handleGetRowId(row);
|
|
5705
6008
|
const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
5706
6009
|
if (checkMethod({ row })) {
|
|
5707
6010
|
if (selected) {
|
|
5708
6011
|
sLen++;
|
|
5709
6012
|
}
|
|
5710
|
-
else if (
|
|
6013
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5711
6014
|
hLen++;
|
|
5712
6015
|
}
|
|
5713
6016
|
vLen++;
|
|
@@ -5716,18 +6019,18 @@ const Methods = {
|
|
|
5716
6019
|
if (selected) {
|
|
5717
6020
|
sLen++;
|
|
5718
6021
|
}
|
|
5719
|
-
else if (
|
|
6022
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5720
6023
|
hLen++;
|
|
5721
6024
|
}
|
|
5722
6025
|
}
|
|
5723
6026
|
}
|
|
5724
6027
|
: row => {
|
|
5725
|
-
const childRowid =
|
|
6028
|
+
const childRowid = handleGetRowId(row);
|
|
5726
6029
|
const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid];
|
|
5727
6030
|
if (selected) {
|
|
5728
6031
|
sLen++;
|
|
5729
6032
|
}
|
|
5730
|
-
else if (
|
|
6033
|
+
else if (treeIndeterminateRowMaps[childRowid]) {
|
|
5731
6034
|
hLen++;
|
|
5732
6035
|
}
|
|
5733
6036
|
vLen++;
|
|
@@ -5784,19 +6087,26 @@ const Methods = {
|
|
|
5784
6087
|
* 获取复选框保留选中的行
|
|
5785
6088
|
*/
|
|
5786
6089
|
getCheckboxReserveRecords(isFull) {
|
|
5787
|
-
const
|
|
6090
|
+
const $xeTable = this;
|
|
6091
|
+
const props = $xeTable;
|
|
6092
|
+
const internalData = $xeTable;
|
|
6093
|
+
const { treeConfig } = props;
|
|
6094
|
+
const { afterFullData, fullDataRowIdData, checkboxReserveRowMap } = internalData;
|
|
6095
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6096
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
5788
6097
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
5789
6098
|
const reserveSelection = [];
|
|
5790
6099
|
if (checkboxOpts.reserve) {
|
|
6100
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
5791
6101
|
const afterFullIdMaps = {};
|
|
5792
6102
|
if (treeConfig) {
|
|
5793
6103
|
XEUtils.eachTree(afterFullData, row => {
|
|
5794
|
-
afterFullIdMaps[
|
|
6104
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5795
6105
|
}, { children: childrenField });
|
|
5796
6106
|
}
|
|
5797
6107
|
else {
|
|
5798
6108
|
afterFullData.forEach((row) => {
|
|
5799
|
-
afterFullIdMaps[
|
|
6109
|
+
afterFullIdMaps[handleGetRowId(row)] = 1;
|
|
5800
6110
|
});
|
|
5801
6111
|
}
|
|
5802
6112
|
XEUtils.each(checkboxReserveRowMap, (oldRow, oldRowid) => {
|
|
@@ -5837,9 +6147,9 @@ const Methods = {
|
|
|
5837
6147
|
handleCheckedAllCheckboxRow($xeTable, value);
|
|
5838
6148
|
if (evnt) {
|
|
5839
6149
|
$xeTable.dispatchEvent('checkbox-all', {
|
|
5840
|
-
records: $xeTable.getCheckboxRecords(),
|
|
5841
|
-
reserves: $xeTable.getCheckboxReserveRecords(),
|
|
5842
|
-
indeterminates: $xeTable.getCheckboxIndeterminateRecords(),
|
|
6150
|
+
records: () => $xeTable.getCheckboxRecords(),
|
|
6151
|
+
reserves: () => $xeTable.getCheckboxReserveRecords(),
|
|
6152
|
+
indeterminates: () => $xeTable.getCheckboxIndeterminateRecords(),
|
|
5843
6153
|
checked: value
|
|
5844
6154
|
}, evnt);
|
|
5845
6155
|
}
|
|
@@ -5871,9 +6181,17 @@ const Methods = {
|
|
|
5871
6181
|
* 清空行为不管是否被禁用还是保留记录,都将彻底清空选中状态
|
|
5872
6182
|
*/
|
|
5873
6183
|
clearCheckboxRow() {
|
|
5874
|
-
const
|
|
5875
|
-
const
|
|
6184
|
+
const $xeTable = this;
|
|
6185
|
+
const props = $xeTable;
|
|
6186
|
+
const reactData = $xeTable;
|
|
6187
|
+
const internalData = $xeTable;
|
|
6188
|
+
const { treeConfig } = props;
|
|
6189
|
+
const { tableFullData } = internalData;
|
|
6190
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
5876
6191
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6192
|
+
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6193
|
+
const { checkField, reserve } = checkboxOpts;
|
|
6194
|
+
// indeterminateField 仅支持读取
|
|
5877
6195
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField;
|
|
5878
6196
|
if (checkField) {
|
|
5879
6197
|
const handleClearChecked = (item) => {
|
|
@@ -5892,10 +6210,11 @@ const Methods = {
|
|
|
5892
6210
|
if (reserve) {
|
|
5893
6211
|
tableFullData.forEach((row) => this.handleCheckboxReserveRow(row, false));
|
|
5894
6212
|
}
|
|
5895
|
-
|
|
5896
|
-
|
|
5897
|
-
|
|
5898
|
-
|
|
6213
|
+
reactData.isAllSelected = false;
|
|
6214
|
+
reactData.isIndeterminate = false;
|
|
6215
|
+
internalData.selectCheckboxMaps = {};
|
|
6216
|
+
internalData.treeIndeterminateRowMaps = {};
|
|
6217
|
+
reactData.updateCheckboxFlag++;
|
|
5899
6218
|
return this.$nextTick();
|
|
5900
6219
|
},
|
|
5901
6220
|
/**
|
|
@@ -6092,10 +6411,12 @@ const Methods = {
|
|
|
6092
6411
|
},
|
|
6093
6412
|
triggerHeaderCellClickEvent(evnt, params) {
|
|
6094
6413
|
const $xeTable = this;
|
|
6414
|
+
const props = $xeTable;
|
|
6095
6415
|
const internalData = $xeTable;
|
|
6096
6416
|
const { _lastResizeTime } = internalData;
|
|
6097
6417
|
const sortOpts = $xeTable.computeSortOpts;
|
|
6098
6418
|
const columnOpts = $xeTable.computeColumnOpts;
|
|
6419
|
+
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
6099
6420
|
const { column } = params;
|
|
6100
6421
|
const cell = evnt.currentTarget;
|
|
6101
6422
|
const triggerResizable = _lastResizeTime && _lastResizeTime > Date.now() - 300;
|
|
@@ -6105,7 +6426,7 @@ const Methods = {
|
|
|
6105
6426
|
$xeTable.triggerSortEvent(evnt, column, getNextSortOrder($xeTable, column));
|
|
6106
6427
|
}
|
|
6107
6428
|
$xeTable.dispatchEvent('header-cell-click', Object.assign({ triggerResizable, triggerSort, triggerFilter, cell }, params), evnt);
|
|
6108
|
-
if (columnOpts.isCurrent ||
|
|
6429
|
+
if ((columnOpts.isCurrent || props.highlightCurrentColumn) && (!currentColumnOpts.trigger || ['header', 'default'].includes(currentColumnOpts.trigger))) {
|
|
6109
6430
|
$xeTable.triggerCurrentColumnEvent(evnt, params);
|
|
6110
6431
|
}
|
|
6111
6432
|
return $xeTable.$nextTick();
|
|
@@ -6121,13 +6442,23 @@ const Methods = {
|
|
|
6121
6442
|
* @param {ColumnInfo} fieldOrColumn 列配置
|
|
6122
6443
|
*/
|
|
6123
6444
|
setCurrentColumn(fieldOrColumn) {
|
|
6124
|
-
const
|
|
6445
|
+
const $xeTable = this;
|
|
6446
|
+
const props = $xeTable;
|
|
6447
|
+
const reactData = $xeTable;
|
|
6448
|
+
const { mouseConfig } = props;
|
|
6449
|
+
const mouseOpts = $xeTable.computeMouseOpts;
|
|
6450
|
+
const isMouseSelected = mouseConfig && mouseOpts.selected;
|
|
6451
|
+
const column = handleFieldOrColumn($xeTable, fieldOrColumn);
|
|
6125
6452
|
if (column) {
|
|
6126
|
-
|
|
6127
|
-
|
|
6128
|
-
this.currentColumn = column;
|
|
6453
|
+
$xeTable.clearCurrentColumn();
|
|
6454
|
+
reactData.currentColumn = column;
|
|
6129
6455
|
}
|
|
6130
|
-
return
|
|
6456
|
+
return $xeTable.$nextTick().then(() => {
|
|
6457
|
+
// 更新状选中态
|
|
6458
|
+
if (isMouseSelected) {
|
|
6459
|
+
$xeTable.addCellSelectedClass();
|
|
6460
|
+
}
|
|
6461
|
+
});
|
|
6131
6462
|
},
|
|
6132
6463
|
/**
|
|
6133
6464
|
* 用于当前列,手动清空当前高亮的状态
|
|
@@ -6136,25 +6467,6 @@ const Methods = {
|
|
|
6136
6467
|
this.currentColumn = null;
|
|
6137
6468
|
return this.$nextTick();
|
|
6138
6469
|
},
|
|
6139
|
-
checkValidate(type) {
|
|
6140
|
-
if (this.triggerValidate) {
|
|
6141
|
-
return this.triggerValidate(type);
|
|
6142
|
-
}
|
|
6143
|
-
return this.$nextTick();
|
|
6144
|
-
},
|
|
6145
|
-
/**
|
|
6146
|
-
* 当单元格发生改变时
|
|
6147
|
-
* 如果存在规则,则校验
|
|
6148
|
-
*/
|
|
6149
|
-
handleChangeCell(evnt, params) {
|
|
6150
|
-
this.checkValidate('blur')
|
|
6151
|
-
.catch((e) => e)
|
|
6152
|
-
.then(() => {
|
|
6153
|
-
this.handleEdit(params, evnt)
|
|
6154
|
-
.then(() => this.checkValidate('change'))
|
|
6155
|
-
.catch((e) => e);
|
|
6156
|
-
});
|
|
6157
|
-
},
|
|
6158
6470
|
/**
|
|
6159
6471
|
* 列点击事件
|
|
6160
6472
|
* 如果是单击模式,则激活为编辑状态
|
|
@@ -6164,7 +6476,7 @@ const Methods = {
|
|
|
6164
6476
|
const $xeTable = this;
|
|
6165
6477
|
const props = $xeTable;
|
|
6166
6478
|
const reactData = $xeTable;
|
|
6167
|
-
const { highlightCurrentRow, editConfig } = props;
|
|
6479
|
+
const { highlightCurrentRow, highlightCurrentColumn, editConfig } = props;
|
|
6168
6480
|
const { editStore, isDragResize } = reactData;
|
|
6169
6481
|
if (isDragResize) {
|
|
6170
6482
|
return;
|
|
@@ -6176,6 +6488,8 @@ const Methods = {
|
|
|
6176
6488
|
const checkboxOpts = $xeTable.computeCheckboxOpts;
|
|
6177
6489
|
const keyboardOpts = $xeTable.computeKeyboardOpts;
|
|
6178
6490
|
const rowOpts = $xeTable.computeRowOpts;
|
|
6491
|
+
const columnOpts = $xeTable.computeColumnOpts;
|
|
6492
|
+
const currentColumnOpts = $xeTable.computeCurrentColumnOpts;
|
|
6179
6493
|
const { actived, focused } = editStore;
|
|
6180
6494
|
const { row, column } = params;
|
|
6181
6495
|
const { type, treeNode } = column;
|
|
@@ -6191,11 +6505,11 @@ const Methods = {
|
|
|
6191
6505
|
if (!triggerCheckbox && !triggerRadio) {
|
|
6192
6506
|
// 如果是展开行
|
|
6193
6507
|
if (!triggerExpandNode && (expandOpts.trigger === 'row' || (isExpandType && expandOpts.trigger === 'cell'))) {
|
|
6194
|
-
|
|
6508
|
+
$xeTable.triggerRowExpandEvent(evnt, params);
|
|
6195
6509
|
}
|
|
6196
6510
|
// 如果是树形表格
|
|
6197
6511
|
if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
|
|
6198
|
-
|
|
6512
|
+
$xeTable.triggerTreeExpandEvent(evnt, params);
|
|
6199
6513
|
}
|
|
6200
6514
|
}
|
|
6201
6515
|
// 如果点击了树节点
|
|
@@ -6204,16 +6518,22 @@ const Methods = {
|
|
|
6204
6518
|
// 如果是高亮行
|
|
6205
6519
|
if (rowOpts.isCurrent || highlightCurrentRow) {
|
|
6206
6520
|
if (!triggerCheckbox && !triggerRadio) {
|
|
6207
|
-
|
|
6521
|
+
$xeTable.triggerCurrentRowEvent(evnt, params);
|
|
6522
|
+
}
|
|
6523
|
+
}
|
|
6524
|
+
// 如果是当前列
|
|
6525
|
+
if ((columnOpts.isCurrent || highlightCurrentColumn) && (!currentColumnOpts.trigger || ['cell', 'default'].includes(currentColumnOpts.trigger))) {
|
|
6526
|
+
if (!triggerCheckbox && !triggerRadio) {
|
|
6527
|
+
$xeTable.triggerCurrentColumnEvent(evnt, params);
|
|
6208
6528
|
}
|
|
6209
6529
|
}
|
|
6210
6530
|
// 如果是单选框
|
|
6211
6531
|
if (!triggerRadio && (radioOpts.trigger === 'row' || (isRadioType && radioOpts.trigger === 'cell'))) {
|
|
6212
|
-
|
|
6532
|
+
$xeTable.triggerRadioRowEvent(evnt, params);
|
|
6213
6533
|
}
|
|
6214
6534
|
// 如果是复选框
|
|
6215
6535
|
if (!triggerCheckbox && (checkboxOpts.trigger === 'row' || (isCheckboxType && checkboxOpts.trigger === 'cell'))) {
|
|
6216
|
-
|
|
6536
|
+
$xeTable.handleToggleCheckRowEvent(evnt, params);
|
|
6217
6537
|
}
|
|
6218
6538
|
}
|
|
6219
6539
|
// 如果设置了单元格选中功能,则不会使用点击事件去处理(只能支持双击模式)
|
|
@@ -6225,16 +6545,16 @@ const Methods = {
|
|
|
6225
6545
|
}
|
|
6226
6546
|
if (editOpts.trigger === 'manual') {
|
|
6227
6547
|
if (actived.args && actived.row === row && column !== actived.column) {
|
|
6228
|
-
|
|
6548
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6229
6549
|
}
|
|
6230
6550
|
}
|
|
6231
6551
|
else if (!actived.args || row !== actived.row || column !== actived.column) {
|
|
6232
6552
|
if (editOpts.trigger === 'click') {
|
|
6233
|
-
|
|
6553
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6234
6554
|
}
|
|
6235
6555
|
else if (editOpts.trigger === 'dblclick') {
|
|
6236
6556
|
if (editOpts.mode === 'row' && actived.row === row) {
|
|
6237
|
-
|
|
6557
|
+
handleChangeCell($xeTable, evnt, params);
|
|
6238
6558
|
}
|
|
6239
6559
|
}
|
|
6240
6560
|
}
|
|
@@ -6255,7 +6575,7 @@ const Methods = {
|
|
|
6255
6575
|
}
|
|
6256
6576
|
}
|
|
6257
6577
|
}
|
|
6258
|
-
|
|
6578
|
+
$xeTable.dispatchEvent('cell-click', params, evnt);
|
|
6259
6579
|
},
|
|
6260
6580
|
/**
|
|
6261
6581
|
* 列双击点击事件
|
|
@@ -6277,17 +6597,17 @@ const Methods = {
|
|
|
6277
6597
|
if (isEnableConf(editConfig) && editOpts.trigger === 'dblclick') {
|
|
6278
6598
|
if (!actived.args || evnt.currentTarget !== actived.args.cell) {
|
|
6279
6599
|
if (editOpts.mode === 'row') {
|
|
6280
|
-
|
|
6600
|
+
checkValidate($xeTable, 'blur')
|
|
6281
6601
|
.catch((e) => e)
|
|
6282
6602
|
.then(() => {
|
|
6283
6603
|
this.handleEdit(params, evnt)
|
|
6284
|
-
.then(() =>
|
|
6604
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
6285
6605
|
.catch((e) => e);
|
|
6286
6606
|
});
|
|
6287
6607
|
}
|
|
6288
6608
|
else if (editOpts.mode === 'cell') {
|
|
6289
6609
|
this.handleEdit(params, evnt)
|
|
6290
|
-
.then(() =>
|
|
6610
|
+
.then(() => checkValidate($xeTable, 'change'))
|
|
6291
6611
|
.catch((e) => e);
|
|
6292
6612
|
}
|
|
6293
6613
|
}
|
|
@@ -6473,14 +6793,16 @@ const Methods = {
|
|
|
6473
6793
|
const internalData = $xeTable;
|
|
6474
6794
|
const { treeConfig, dragConfig } = props;
|
|
6475
6795
|
const rowDragOpts = $xeTable.computeRowDragOpts;
|
|
6476
|
-
const { fullAllDataRowIdData } = internalData;
|
|
6796
|
+
const { afterFullData, tableFullData, fullAllDataRowIdData } = internalData;
|
|
6477
6797
|
const { isPeerDrag, isCrossDrag, isSelfToChildDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
|
|
6478
6798
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
6479
6799
|
const { transform, rowField, mapChildrenField, parentField } = treeOpts;
|
|
6480
6800
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
6481
|
-
const { afterFullData, tableFullData } = internalData;
|
|
6482
6801
|
const dEndMethod = dragEndMethod || (dragConfig ? dragConfig.dragEndMethod : null);
|
|
6483
6802
|
const dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
|
|
6803
|
+
const errRest = {
|
|
6804
|
+
status: false
|
|
6805
|
+
};
|
|
6484
6806
|
if (prevDragRow && dragRow) {
|
|
6485
6807
|
// 判断是否有拖动
|
|
6486
6808
|
if (prevDragRow !== dragRow) {
|
|
@@ -6495,7 +6817,7 @@ const Methods = {
|
|
|
6495
6817
|
const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
|
|
6496
6818
|
return Promise.resolve(dEndMethod ? dEndMethod(dragParams) : true).then((status) => {
|
|
6497
6819
|
if (!status) {
|
|
6498
|
-
return;
|
|
6820
|
+
return errRest;
|
|
6499
6821
|
}
|
|
6500
6822
|
let oafIndex = -1;
|
|
6501
6823
|
let nafIndex = -1;
|
|
@@ -6520,12 +6842,12 @@ const Methods = {
|
|
|
6520
6842
|
if (isPeerDrag && !isCrossDrag) {
|
|
6521
6843
|
if (oldRest.row[parentField] !== newRest.row[parentField]) {
|
|
6522
6844
|
// 非同级
|
|
6523
|
-
return;
|
|
6845
|
+
return errRest;
|
|
6524
6846
|
}
|
|
6525
6847
|
}
|
|
6526
6848
|
else {
|
|
6527
6849
|
if (!isCrossDrag) {
|
|
6528
|
-
return;
|
|
6850
|
+
return errRest;
|
|
6529
6851
|
}
|
|
6530
6852
|
if (oldAllMaps[newRowid]) {
|
|
6531
6853
|
isSelfToChildStatus = true;
|
|
@@ -6536,7 +6858,7 @@ const Methods = {
|
|
|
6536
6858
|
content: getI18n('vxe.error.treeDragChild')
|
|
6537
6859
|
});
|
|
6538
6860
|
}
|
|
6539
|
-
return;
|
|
6861
|
+
return errRest;
|
|
6540
6862
|
}
|
|
6541
6863
|
}
|
|
6542
6864
|
}
|
|
@@ -6544,13 +6866,13 @@ const Methods = {
|
|
|
6544
6866
|
else if (oldLevel) {
|
|
6545
6867
|
// 子到根
|
|
6546
6868
|
if (!isCrossDrag) {
|
|
6547
|
-
return;
|
|
6869
|
+
return errRest;
|
|
6548
6870
|
}
|
|
6549
6871
|
}
|
|
6550
6872
|
else if (newLevel) {
|
|
6551
6873
|
// 根到子
|
|
6552
6874
|
if (!isCrossDrag) {
|
|
6553
|
-
return;
|
|
6875
|
+
return errRest;
|
|
6554
6876
|
}
|
|
6555
6877
|
if (oldAllMaps[newRowid]) {
|
|
6556
6878
|
isSelfToChildStatus = true;
|
|
@@ -6561,7 +6883,7 @@ const Methods = {
|
|
|
6561
6883
|
content: getI18n('vxe.error.treeDragChild')
|
|
6562
6884
|
});
|
|
6563
6885
|
}
|
|
6564
|
-
return;
|
|
6886
|
+
return errRest;
|
|
6565
6887
|
}
|
|
6566
6888
|
}
|
|
6567
6889
|
}
|
|
@@ -6621,27 +6943,34 @@ const Methods = {
|
|
|
6621
6943
|
if (reactData.scrollYLoad) {
|
|
6622
6944
|
$xeTable.updateScrollYSpace();
|
|
6623
6945
|
}
|
|
6624
|
-
|
|
6946
|
+
if (evnt) {
|
|
6947
|
+
$xeTable.dispatchEvent('row-dragend', {
|
|
6948
|
+
oldRow: dragRow,
|
|
6949
|
+
newRow: prevDragRow,
|
|
6950
|
+
dragRow,
|
|
6951
|
+
dragPos: prevDragPos,
|
|
6952
|
+
dragToChild: isDragToChildFlag,
|
|
6953
|
+
offsetIndex: dragOffsetIndex,
|
|
6954
|
+
_index: {
|
|
6955
|
+
newIndex: nafIndex,
|
|
6956
|
+
oldIndex: oafIndex
|
|
6957
|
+
}
|
|
6958
|
+
}, evnt);
|
|
6959
|
+
}
|
|
6960
|
+
return $xeTable.$nextTick().then(() => {
|
|
6625
6961
|
$xeTable.updateCellAreas();
|
|
6626
6962
|
$xeTable.recalculate();
|
|
6963
|
+
}).then(() => {
|
|
6964
|
+
return {
|
|
6965
|
+
status: true
|
|
6966
|
+
};
|
|
6627
6967
|
});
|
|
6628
|
-
$xeTable.dispatchEvent('row-dragend', {
|
|
6629
|
-
oldRow: dragRow,
|
|
6630
|
-
newRow: prevDragRow,
|
|
6631
|
-
dragRow,
|
|
6632
|
-
dragPos: prevDragPos,
|
|
6633
|
-
dragToChild: isDragToChildFlag,
|
|
6634
|
-
offsetIndex: dragOffsetIndex,
|
|
6635
|
-
_index: {
|
|
6636
|
-
newIndex: nafIndex,
|
|
6637
|
-
oldIndex: oafIndex
|
|
6638
|
-
}
|
|
6639
|
-
}, evnt);
|
|
6640
6968
|
}).catch(() => {
|
|
6969
|
+
return errRest;
|
|
6641
6970
|
});
|
|
6642
6971
|
}
|
|
6643
6972
|
}
|
|
6644
|
-
return Promise.resolve();
|
|
6973
|
+
return Promise.resolve(errRest);
|
|
6645
6974
|
},
|
|
6646
6975
|
handleRowDragDragendEvent(evnt) {
|
|
6647
6976
|
const $xeTable = this;
|
|
@@ -6786,6 +7115,9 @@ const Methods = {
|
|
|
6786
7115
|
const { isPeerDrag, isCrossDrag, isSelfToChildDrag, isToChildDrag, dragEndMethod, dragToChildMethod } = columnDragOpts;
|
|
6787
7116
|
const { collectColumn } = internalData;
|
|
6788
7117
|
const dragOffsetIndex = prevDragPos === 'right' ? 1 : 0;
|
|
7118
|
+
const errRest = {
|
|
7119
|
+
status: false
|
|
7120
|
+
};
|
|
6789
7121
|
if (prevDragCol && dragCol) {
|
|
6790
7122
|
// 判断是否有拖动
|
|
6791
7123
|
if (prevDragCol !== dragCol) {
|
|
@@ -6802,7 +7134,7 @@ const Methods = {
|
|
|
6802
7134
|
const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
|
|
6803
7135
|
return Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then((status) => {
|
|
6804
7136
|
if (!status) {
|
|
6805
|
-
return;
|
|
7137
|
+
return errRest;
|
|
6806
7138
|
}
|
|
6807
7139
|
let oafIndex = -1;
|
|
6808
7140
|
let nafIndex = -1;
|
|
@@ -6816,12 +7148,12 @@ const Methods = {
|
|
|
6816
7148
|
if (isPeerDrag && !isCrossDrag) {
|
|
6817
7149
|
if (dragColumn.parentId !== newColumn.parentId) {
|
|
6818
7150
|
// 非同级
|
|
6819
|
-
return;
|
|
7151
|
+
return errRest;
|
|
6820
7152
|
}
|
|
6821
7153
|
}
|
|
6822
7154
|
else {
|
|
6823
7155
|
if (!isCrossDrag) {
|
|
6824
|
-
return;
|
|
7156
|
+
return errRest;
|
|
6825
7157
|
}
|
|
6826
7158
|
if (oldAllMaps[newColumn.id]) {
|
|
6827
7159
|
isSelfToChildStatus = true;
|
|
@@ -6832,7 +7164,7 @@ const Methods = {
|
|
|
6832
7164
|
content: getI18n('vxe.error.treeDragChild')
|
|
6833
7165
|
});
|
|
6834
7166
|
}
|
|
6835
|
-
return;
|
|
7167
|
+
return errRest;
|
|
6836
7168
|
}
|
|
6837
7169
|
}
|
|
6838
7170
|
}
|
|
@@ -6840,13 +7172,13 @@ const Methods = {
|
|
|
6840
7172
|
else if (dragColumn.parentId) {
|
|
6841
7173
|
// 子到根
|
|
6842
7174
|
if (!isCrossDrag) {
|
|
6843
|
-
return;
|
|
7175
|
+
return errRest;
|
|
6844
7176
|
}
|
|
6845
7177
|
}
|
|
6846
7178
|
else if (newColumn.parentId) {
|
|
6847
7179
|
// 根到子
|
|
6848
7180
|
if (!isCrossDrag) {
|
|
6849
|
-
return;
|
|
7181
|
+
return errRest;
|
|
6850
7182
|
}
|
|
6851
7183
|
if (oldAllMaps[newColumn.id]) {
|
|
6852
7184
|
isSelfToChildStatus = true;
|
|
@@ -6857,7 +7189,7 @@ const Methods = {
|
|
|
6857
7189
|
content: getI18n('vxe.error.treeDragChild')
|
|
6858
7190
|
});
|
|
6859
7191
|
}
|
|
6860
|
-
return;
|
|
7192
|
+
return errRest;
|
|
6861
7193
|
}
|
|
6862
7194
|
}
|
|
6863
7195
|
}
|
|
@@ -6918,26 +7250,32 @@ const Methods = {
|
|
|
6918
7250
|
$xeTable.clearCopyCellArea();
|
|
6919
7251
|
}
|
|
6920
7252
|
}
|
|
6921
|
-
|
|
6922
|
-
|
|
6923
|
-
|
|
6924
|
-
|
|
6925
|
-
|
|
6926
|
-
|
|
6927
|
-
|
|
6928
|
-
|
|
6929
|
-
|
|
6930
|
-
|
|
6931
|
-
|
|
6932
|
-
|
|
7253
|
+
if (evnt) {
|
|
7254
|
+
$xeTable.dispatchEvent('column-dragend', {
|
|
7255
|
+
oldColumn: dragColumn,
|
|
7256
|
+
newColumn,
|
|
7257
|
+
dragColumn,
|
|
7258
|
+
dragPos: prevDragPos,
|
|
7259
|
+
dragToChild: isDragToChildFlag,
|
|
7260
|
+
offsetIndex: dragOffsetIndex,
|
|
7261
|
+
_index: {
|
|
7262
|
+
newIndex: nafIndex,
|
|
7263
|
+
oldIndex: oafIndex
|
|
7264
|
+
}
|
|
7265
|
+
}, evnt);
|
|
7266
|
+
}
|
|
6933
7267
|
if (isSyncColumn) {
|
|
6934
7268
|
$xeTable.handleColDragSwapColumn();
|
|
6935
7269
|
}
|
|
7270
|
+
return {
|
|
7271
|
+
status: true
|
|
7272
|
+
};
|
|
6936
7273
|
}).catch(() => {
|
|
7274
|
+
return errRest;
|
|
6937
7275
|
});
|
|
6938
7276
|
}
|
|
6939
7277
|
}
|
|
6940
|
-
return Promise.resolve();
|
|
7278
|
+
return Promise.resolve(errRest);
|
|
6941
7279
|
},
|
|
6942
7280
|
handleHeaderCellDragDragendEvent(evnt) {
|
|
6943
7281
|
const $xeTable = this;
|
|
@@ -7063,48 +7401,52 @@ const Methods = {
|
|
|
7063
7401
|
setPendingRow(rows, status) {
|
|
7064
7402
|
const $xeTable = this;
|
|
7065
7403
|
const reactData = $xeTable;
|
|
7066
|
-
const
|
|
7404
|
+
const internalData = $xeTable;
|
|
7405
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7406
|
+
const { pendingRowMaps } = internalData;
|
|
7067
7407
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7068
7408
|
rows = [rows];
|
|
7069
7409
|
}
|
|
7070
7410
|
if (status) {
|
|
7071
7411
|
rows.forEach((row) => {
|
|
7072
|
-
const rowid =
|
|
7073
|
-
if (rowid && !
|
|
7074
|
-
|
|
7412
|
+
const rowid = handleGetRowId(row);
|
|
7413
|
+
if (rowid && !pendingRowMaps[rowid]) {
|
|
7414
|
+
pendingRowMaps[rowid] = row;
|
|
7075
7415
|
}
|
|
7076
7416
|
});
|
|
7077
7417
|
}
|
|
7078
7418
|
else {
|
|
7079
7419
|
rows.forEach((row) => {
|
|
7080
|
-
const rowid =
|
|
7081
|
-
if (rowid &&
|
|
7082
|
-
delete
|
|
7420
|
+
const rowid = handleGetRowId(row);
|
|
7421
|
+
if (rowid && pendingRowMaps[rowid]) {
|
|
7422
|
+
delete pendingRowMaps[rowid];
|
|
7083
7423
|
}
|
|
7084
7424
|
});
|
|
7085
7425
|
}
|
|
7086
|
-
reactData.
|
|
7426
|
+
reactData.pendingRowFlag++;
|
|
7087
7427
|
return $xeTable.$nextTick();
|
|
7088
7428
|
},
|
|
7089
7429
|
togglePendingRow(rows) {
|
|
7090
7430
|
const $xeTable = this;
|
|
7091
7431
|
const reactData = $xeTable;
|
|
7092
|
-
const
|
|
7432
|
+
const internalData = $xeTable;
|
|
7433
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7434
|
+
const { pendingRowMaps } = internalData;
|
|
7093
7435
|
if (rows && !XEUtils.isArray(rows)) {
|
|
7094
7436
|
rows = [rows];
|
|
7095
7437
|
}
|
|
7096
7438
|
rows.forEach((row) => {
|
|
7097
|
-
const rowid =
|
|
7439
|
+
const rowid = handleGetRowId(row);
|
|
7098
7440
|
if (rowid) {
|
|
7099
|
-
if (
|
|
7100
|
-
delete
|
|
7441
|
+
if (pendingRowMaps[rowid]) {
|
|
7442
|
+
delete pendingRowMaps[rowid];
|
|
7101
7443
|
}
|
|
7102
7444
|
else {
|
|
7103
|
-
|
|
7445
|
+
pendingRowMaps[rowid] = row;
|
|
7104
7446
|
}
|
|
7105
7447
|
}
|
|
7106
7448
|
});
|
|
7107
|
-
reactData.
|
|
7449
|
+
reactData.pendingRowFlag++;
|
|
7108
7450
|
return $xeTable.$nextTick();
|
|
7109
7451
|
},
|
|
7110
7452
|
hasPendingByRow(row) {
|
|
@@ -7120,10 +7462,8 @@ const Methods = {
|
|
|
7120
7462
|
},
|
|
7121
7463
|
getPendingRecords() {
|
|
7122
7464
|
const $xeTable = this;
|
|
7123
|
-
const reactData = $xeTable;
|
|
7124
7465
|
const internalData = $xeTable;
|
|
7125
|
-
const { pendingRowMaps } =
|
|
7126
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7466
|
+
const { fullAllDataRowIdData, pendingRowMaps } = internalData;
|
|
7127
7467
|
const insertRecords = [];
|
|
7128
7468
|
XEUtils.each(pendingRowMaps, (row, rowid) => {
|
|
7129
7469
|
if (fullAllDataRowIdData[rowid]) {
|
|
@@ -7133,8 +7473,12 @@ const Methods = {
|
|
|
7133
7473
|
return insertRecords;
|
|
7134
7474
|
},
|
|
7135
7475
|
clearPendingRow() {
|
|
7136
|
-
|
|
7137
|
-
|
|
7476
|
+
const $xeTable = this;
|
|
7477
|
+
const reactData = $xeTable;
|
|
7478
|
+
const internalData = $xeTable;
|
|
7479
|
+
internalData.pendingRowMaps = {};
|
|
7480
|
+
reactData.pendingRowFlag++;
|
|
7481
|
+
return $xeTable.$nextTick();
|
|
7138
7482
|
},
|
|
7139
7483
|
sort(sortConfs, sortOrder) {
|
|
7140
7484
|
const $xeTable = this;
|
|
@@ -7285,7 +7629,9 @@ const Methods = {
|
|
|
7285
7629
|
* @param {Event} evnt 事件
|
|
7286
7630
|
*/
|
|
7287
7631
|
closeFilter() {
|
|
7288
|
-
const
|
|
7632
|
+
const $xeTable = this;
|
|
7633
|
+
const reactData = $xeTable;
|
|
7634
|
+
const { filterStore } = reactData;
|
|
7289
7635
|
const { column, visible } = filterStore;
|
|
7290
7636
|
Object.assign(filterStore, {
|
|
7291
7637
|
isAllSelected: false,
|
|
@@ -7294,9 +7640,15 @@ const Methods = {
|
|
|
7294
7640
|
visible: false
|
|
7295
7641
|
});
|
|
7296
7642
|
if (visible) {
|
|
7297
|
-
|
|
7643
|
+
$xeTable.dispatchEvent('filter-visible', {
|
|
7644
|
+
column,
|
|
7645
|
+
field: column.field,
|
|
7646
|
+
property: column.field,
|
|
7647
|
+
filterList: () => $xeTable.getCheckedFilters(),
|
|
7648
|
+
visible: false
|
|
7649
|
+
}, null);
|
|
7298
7650
|
}
|
|
7299
|
-
return
|
|
7651
|
+
return $xeTable.$nextTick();
|
|
7300
7652
|
},
|
|
7301
7653
|
/**
|
|
7302
7654
|
* 判断指定列是否为筛选状态,如果为空则判断所有列
|
|
@@ -7327,17 +7679,16 @@ const Methods = {
|
|
|
7327
7679
|
const $xeTable = this;
|
|
7328
7680
|
const reactData = $xeTable;
|
|
7329
7681
|
const internalData = $xeTable;
|
|
7330
|
-
const
|
|
7331
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7682
|
+
const { fullAllDataRowIdData, rowExpandLazyLoadedMaps } = internalData;
|
|
7332
7683
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7333
7684
|
const { lazy } = expandOpts;
|
|
7334
7685
|
const rowid = getRowid($xeTable, row);
|
|
7335
7686
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7336
7687
|
if (lazy && rowRest) {
|
|
7337
7688
|
rowRest.expandLoaded = false;
|
|
7338
|
-
delete
|
|
7689
|
+
delete rowExpandLazyLoadedMaps[rowid];
|
|
7339
7690
|
}
|
|
7340
|
-
reactData.
|
|
7691
|
+
reactData.rowExpandedFlag++;
|
|
7341
7692
|
return $xeTable.$nextTick();
|
|
7342
7693
|
},
|
|
7343
7694
|
/**
|
|
@@ -7345,14 +7696,17 @@ const Methods = {
|
|
|
7345
7696
|
* @param {Row} row 行对象
|
|
7346
7697
|
*/
|
|
7347
7698
|
reloadRowExpand(row) {
|
|
7348
|
-
const
|
|
7699
|
+
const $xeTable = this;
|
|
7700
|
+
const internalData = $xeTable;
|
|
7701
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
7702
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7349
7703
|
const { lazy } = expandOpts;
|
|
7350
7704
|
const rowid = getRowid(this, row);
|
|
7351
7705
|
if (lazy && !rowExpandLazyLoadedMaps[rowid]) {
|
|
7352
|
-
|
|
7353
|
-
.then(() =>
|
|
7706
|
+
$xeTable.clearRowExpandLoaded(row)
|
|
7707
|
+
.then(() => handleAsyncRowExpand($xeTable, row));
|
|
7354
7708
|
}
|
|
7355
|
-
return
|
|
7709
|
+
return $xeTable.$nextTick();
|
|
7356
7710
|
},
|
|
7357
7711
|
reloadExpandContent(row) {
|
|
7358
7712
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7365,20 +7719,33 @@ const Methods = {
|
|
|
7365
7719
|
* 展开行事件
|
|
7366
7720
|
*/
|
|
7367
7721
|
triggerRowExpandEvent(evnt, params) {
|
|
7368
|
-
const
|
|
7722
|
+
const $xeTable = this;
|
|
7723
|
+
const reactData = $xeTable;
|
|
7724
|
+
const internalData = $xeTable;
|
|
7725
|
+
const { expandColumn: column } = reactData;
|
|
7726
|
+
const { rowExpandLazyLoadedMaps } = internalData;
|
|
7727
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7369
7728
|
const { row } = params;
|
|
7370
7729
|
const { lazy, trigger } = expandOpts;
|
|
7371
7730
|
if (trigger === 'manual') {
|
|
7372
7731
|
return;
|
|
7373
7732
|
}
|
|
7374
7733
|
evnt.stopPropagation();
|
|
7375
|
-
const rowid = getRowid(
|
|
7734
|
+
const rowid = getRowid($xeTable, row);
|
|
7376
7735
|
if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
|
|
7377
|
-
const expanded =
|
|
7378
|
-
const columnIndex =
|
|
7379
|
-
const $columnIndex =
|
|
7380
|
-
|
|
7381
|
-
|
|
7736
|
+
const expanded = !$xeTable.isRowExpandByRow(row);
|
|
7737
|
+
const columnIndex = $xeTable.getColumnIndex(column);
|
|
7738
|
+
const $columnIndex = $xeTable.getVMColumnIndex(column);
|
|
7739
|
+
$xeTable.setRowExpand(row, expanded);
|
|
7740
|
+
$xeTable.dispatchEvent('toggle-row-expand', {
|
|
7741
|
+
expanded,
|
|
7742
|
+
column,
|
|
7743
|
+
columnIndex,
|
|
7744
|
+
$columnIndex,
|
|
7745
|
+
row,
|
|
7746
|
+
rowIndex: $xeTable.getRowIndex(row),
|
|
7747
|
+
$rowIndex: $xeTable.getVMRowIndex(row)
|
|
7748
|
+
}, evnt);
|
|
7382
7749
|
}
|
|
7383
7750
|
},
|
|
7384
7751
|
/**
|
|
@@ -7424,48 +7791,6 @@ const Methods = {
|
|
|
7424
7791
|
}
|
|
7425
7792
|
return this.setRowExpand(expandedRows, expanded);
|
|
7426
7793
|
},
|
|
7427
|
-
handleAsyncRowExpand(row) {
|
|
7428
|
-
const $xeTable = this;
|
|
7429
|
-
const reactData = $xeTable;
|
|
7430
|
-
const internalData = $xeTable;
|
|
7431
|
-
return new Promise(resolve => {
|
|
7432
|
-
const { expandOpts } = this;
|
|
7433
|
-
const { loadMethod } = expandOpts;
|
|
7434
|
-
if (loadMethod) {
|
|
7435
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7436
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7437
|
-
const rowid = getRowid($xeTable, row);
|
|
7438
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7439
|
-
rExpandLazyLoadedMaps[rowid] = row;
|
|
7440
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7441
|
-
loadMethod({ $table: $xeTable, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) }).then(() => {
|
|
7442
|
-
const rExpandedMaps = Object.assign({}, reactData.rowExpandedMaps);
|
|
7443
|
-
if (rowRest) {
|
|
7444
|
-
rowRest.expandLoaded = true;
|
|
7445
|
-
}
|
|
7446
|
-
rExpandedMaps[rowid] = row;
|
|
7447
|
-
reactData.rowExpandedMaps = rExpandedMaps;
|
|
7448
|
-
}).catch(() => {
|
|
7449
|
-
if (rowRest) {
|
|
7450
|
-
rowRest.expandLoaded = false;
|
|
7451
|
-
}
|
|
7452
|
-
}).finally(() => {
|
|
7453
|
-
const rExpandLazyLoadedMaps = Object.assign({}, reactData.rowExpandLazyLoadedMaps);
|
|
7454
|
-
if (rExpandLazyLoadedMaps[rowid]) {
|
|
7455
|
-
delete rExpandLazyLoadedMaps[rowid];
|
|
7456
|
-
}
|
|
7457
|
-
reactData.rowExpandLazyLoadedMaps = rExpandLazyLoadedMaps;
|
|
7458
|
-
$xeTable.$nextTick()
|
|
7459
|
-
.then(() => $xeTable.recalculate())
|
|
7460
|
-
.then(() => $xeTable.updateCellAreas())
|
|
7461
|
-
.then(() => resolve());
|
|
7462
|
-
});
|
|
7463
|
-
}
|
|
7464
|
-
else {
|
|
7465
|
-
resolve();
|
|
7466
|
-
}
|
|
7467
|
-
});
|
|
7468
|
-
},
|
|
7469
7794
|
/**
|
|
7470
7795
|
* 设置展开行,二个参数设置这一行展开与否
|
|
7471
7796
|
* 支持单行
|
|
@@ -7475,8 +7800,12 @@ const Methods = {
|
|
|
7475
7800
|
*/
|
|
7476
7801
|
setRowExpand(rows, expanded) {
|
|
7477
7802
|
const $xeTable = this;
|
|
7478
|
-
const
|
|
7479
|
-
|
|
7803
|
+
const reactData = $xeTable;
|
|
7804
|
+
const internalData = $xeTable;
|
|
7805
|
+
const { expandColumn } = reactData;
|
|
7806
|
+
let { fullAllDataRowIdData, rowExpandedMaps, rowExpandLazyLoadedMaps } = internalData;
|
|
7807
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
7808
|
+
const expandOpts = $xeTable.computeExpandOpts;
|
|
7480
7809
|
const { reserve, lazy, accordion, toggleMethod } = expandOpts;
|
|
7481
7810
|
const lazyRests = [];
|
|
7482
7811
|
const columnIndex = $xeTable.getColumnIndex(expandColumn);
|
|
@@ -7487,30 +7816,31 @@ const Methods = {
|
|
|
7487
7816
|
}
|
|
7488
7817
|
if (accordion) {
|
|
7489
7818
|
// 只能同时展开一个
|
|
7490
|
-
|
|
7819
|
+
rowExpandedMaps = {};
|
|
7820
|
+
internalData.rowExpandedMaps = rowExpandedMaps;
|
|
7491
7821
|
rows = rows.slice(rows.length - 1, rows.length);
|
|
7492
7822
|
}
|
|
7493
|
-
const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) })) : rows;
|
|
7823
|
+
const validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: this.getRowIndex(row), $rowIndex: this.getVMRowIndex(row) })) : rows;
|
|
7494
7824
|
if (expanded) {
|
|
7495
7825
|
validRows.forEach((row) => {
|
|
7496
|
-
const rowid =
|
|
7497
|
-
if (!
|
|
7826
|
+
const rowid = handleGetRowId(row);
|
|
7827
|
+
if (!rowExpandedMaps[rowid]) {
|
|
7498
7828
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7499
7829
|
const isLoad = lazy && !rowRest.expandLoaded && !rowExpandLazyLoadedMaps[rowid];
|
|
7500
7830
|
if (isLoad) {
|
|
7501
|
-
lazyRests.push(
|
|
7831
|
+
lazyRests.push(handleAsyncRowExpand($xeTable, row));
|
|
7502
7832
|
}
|
|
7503
7833
|
else {
|
|
7504
|
-
|
|
7834
|
+
rowExpandedMaps[rowid] = row;
|
|
7505
7835
|
}
|
|
7506
7836
|
}
|
|
7507
7837
|
});
|
|
7508
7838
|
}
|
|
7509
7839
|
else {
|
|
7510
7840
|
validRows.forEach((item) => {
|
|
7511
|
-
const rowid =
|
|
7512
|
-
if (
|
|
7513
|
-
delete
|
|
7841
|
+
const rowid = handleGetRowId(item);
|
|
7842
|
+
if (rowExpandedMaps[rowid]) {
|
|
7843
|
+
delete rowExpandedMaps[rowid];
|
|
7514
7844
|
}
|
|
7515
7845
|
});
|
|
7516
7846
|
}
|
|
@@ -7518,7 +7848,7 @@ const Methods = {
|
|
|
7518
7848
|
validRows.forEach((row) => handleRowExpandReserve($xeTable, row, expanded));
|
|
7519
7849
|
}
|
|
7520
7850
|
}
|
|
7521
|
-
|
|
7851
|
+
reactData.rowExpandedFlag++;
|
|
7522
7852
|
return Promise.all(lazyRests)
|
|
7523
7853
|
.then(() => $xeTable.$nextTick())
|
|
7524
7854
|
.then(() => $xeTable.recalculate(true))
|
|
@@ -7534,9 +7864,13 @@ const Methods = {
|
|
|
7534
7864
|
* @param {Row} row 行对象
|
|
7535
7865
|
*/
|
|
7536
7866
|
isRowExpandByRow(row) {
|
|
7537
|
-
const
|
|
7867
|
+
const $xeTable = this;
|
|
7868
|
+
const reactData = $xeTable;
|
|
7869
|
+
const internalData = $xeTable;
|
|
7870
|
+
const { rowExpandedFlag } = reactData;
|
|
7871
|
+
const { rowExpandedMaps } = internalData;
|
|
7538
7872
|
const rowid = getRowid(this, row);
|
|
7539
|
-
return !!rowExpandedMaps[rowid];
|
|
7873
|
+
return !!rowExpandedFlag && !!rowExpandedMaps[rowid];
|
|
7540
7874
|
},
|
|
7541
7875
|
isExpandByRow(row) {
|
|
7542
7876
|
if (process.env.NODE_ENV === 'development') {
|
|
@@ -7556,7 +7890,8 @@ const Methods = {
|
|
|
7556
7890
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
7557
7891
|
const { reserve } = expandOpts;
|
|
7558
7892
|
const expList = $xeTable.getRowExpandRecords();
|
|
7559
|
-
|
|
7893
|
+
internalData.rowExpandedMaps = {};
|
|
7894
|
+
reactData.rowExpandedFlag++;
|
|
7560
7895
|
if (reserve) {
|
|
7561
7896
|
tableFullData.forEach((row) => handleRowExpandReserve($xeTable, row, false));
|
|
7562
7897
|
}
|
|
@@ -7576,8 +7911,10 @@ const Methods = {
|
|
|
7576
7911
|
return this.$nextTick();
|
|
7577
7912
|
},
|
|
7578
7913
|
getRowExpandRecords() {
|
|
7914
|
+
const $xeTable = this;
|
|
7915
|
+
const internalData = $xeTable;
|
|
7579
7916
|
const rest = [];
|
|
7580
|
-
XEUtils.each(
|
|
7917
|
+
XEUtils.each(internalData.rowExpandedMaps, item => {
|
|
7581
7918
|
if (item) {
|
|
7582
7919
|
rest.push(item);
|
|
7583
7920
|
}
|
|
@@ -7585,8 +7922,10 @@ const Methods = {
|
|
|
7585
7922
|
return rest;
|
|
7586
7923
|
},
|
|
7587
7924
|
getTreeExpandRecords() {
|
|
7925
|
+
const $xeTable = this;
|
|
7926
|
+
const internalData = $xeTable;
|
|
7588
7927
|
const rest = [];
|
|
7589
|
-
XEUtils.each(
|
|
7928
|
+
XEUtils.each(internalData.treeExpandedMaps, item => {
|
|
7590
7929
|
if (item) {
|
|
7591
7930
|
rest.push(item);
|
|
7592
7931
|
}
|
|
@@ -7619,12 +7958,10 @@ const Methods = {
|
|
|
7619
7958
|
const $xeTable = this;
|
|
7620
7959
|
const reactData = $xeTable;
|
|
7621
7960
|
const internalData = $xeTable;
|
|
7622
|
-
const { fullAllDataRowIdData } = internalData;
|
|
7961
|
+
const { fullAllDataRowIdData, treeExpandedMaps } = internalData;
|
|
7623
7962
|
const treeOpts = $xeTable.computeTreeOpts;
|
|
7624
7963
|
const { transform } = treeOpts;
|
|
7625
|
-
let tExpandedMaps = {};
|
|
7626
7964
|
if (rows) {
|
|
7627
|
-
tExpandedMaps = Object.assign({}, reactData.treeExpandedMaps);
|
|
7628
7965
|
if (!XEUtils.isArray(rows)) {
|
|
7629
7966
|
rows = [rows];
|
|
7630
7967
|
}
|
|
@@ -7633,8 +7970,8 @@ const Methods = {
|
|
|
7633
7970
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7634
7971
|
if (rowRest) {
|
|
7635
7972
|
rowRest.treeLoaded = false;
|
|
7636
|
-
if (
|
|
7637
|
-
delete
|
|
7973
|
+
if (treeExpandedMaps[rowid]) {
|
|
7974
|
+
delete treeExpandedMaps[rowid];
|
|
7638
7975
|
}
|
|
7639
7976
|
}
|
|
7640
7977
|
});
|
|
@@ -7644,7 +7981,8 @@ const Methods = {
|
|
|
7644
7981
|
rowRest.treeLoaded = false;
|
|
7645
7982
|
});
|
|
7646
7983
|
}
|
|
7647
|
-
|
|
7984
|
+
internalData.treeExpandedMaps = {};
|
|
7985
|
+
reactData.treeExpandedFlag++;
|
|
7648
7986
|
if (transform) {
|
|
7649
7987
|
handleVirtualTreeToList($xeTable);
|
|
7650
7988
|
return $xeTable.handleTableData();
|
|
@@ -7657,36 +7995,42 @@ const Methods = {
|
|
|
7657
7995
|
*/
|
|
7658
7996
|
reloadTreeExpand(row) {
|
|
7659
7997
|
const $xeTable = this;
|
|
7660
|
-
const
|
|
7998
|
+
const internalData = $xeTable;
|
|
7999
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
8000
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7661
8001
|
const { transform, lazy } = treeOpts;
|
|
7662
8002
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
7663
|
-
const rowid = getRowid(
|
|
8003
|
+
const rowid = getRowid($xeTable, row);
|
|
7664
8004
|
if (lazy && row[hasChildField] && !treeExpandLazyLoadedMaps[rowid]) {
|
|
7665
|
-
return
|
|
7666
|
-
return
|
|
8005
|
+
return $xeTable.clearTreeExpandLoaded(row).then(() => {
|
|
8006
|
+
return handleAsyncTreeExpandChilds($xeTable, row);
|
|
7667
8007
|
}).then(() => {
|
|
7668
8008
|
if (transform) {
|
|
7669
8009
|
handleVirtualTreeToList($xeTable);
|
|
7670
|
-
return
|
|
8010
|
+
return $xeTable.handleTableData();
|
|
7671
8011
|
}
|
|
7672
8012
|
}).then(() => {
|
|
7673
|
-
return
|
|
8013
|
+
return $xeTable.recalculate();
|
|
7674
8014
|
});
|
|
7675
8015
|
}
|
|
7676
|
-
return
|
|
8016
|
+
return $xeTable.$nextTick();
|
|
7677
8017
|
},
|
|
7678
8018
|
reloadTreeChilds(row) {
|
|
8019
|
+
const $xeTable = this;
|
|
7679
8020
|
if (process.env.NODE_ENV === 'development') {
|
|
7680
8021
|
warnLog('vxe.error.delFunc', ['reloadTreeChilds', 'reloadTreeExpand']);
|
|
7681
8022
|
}
|
|
7682
8023
|
// 即将废弃
|
|
7683
|
-
return
|
|
8024
|
+
return $xeTable.reloadTreeExpand(row);
|
|
7684
8025
|
},
|
|
7685
8026
|
/**
|
|
7686
8027
|
* 展开树节点事件
|
|
7687
8028
|
*/
|
|
7688
8029
|
triggerTreeExpandEvent(evnt, params) {
|
|
7689
|
-
const
|
|
8030
|
+
const $xeTable = this;
|
|
8031
|
+
const internalData = $xeTable;
|
|
8032
|
+
const { treeExpandLazyLoadedMaps } = internalData;
|
|
8033
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7690
8034
|
const { row, column } = params;
|
|
7691
8035
|
const { lazy, trigger } = treeOpts;
|
|
7692
8036
|
if (trigger === 'manual') {
|
|
@@ -7695,11 +8039,11 @@ const Methods = {
|
|
|
7695
8039
|
evnt.stopPropagation();
|
|
7696
8040
|
const rowid = getRowid(this, row);
|
|
7697
8041
|
if (!lazy || !treeExpandLazyLoadedMaps[rowid]) {
|
|
7698
|
-
const expanded =
|
|
7699
|
-
const columnIndex =
|
|
7700
|
-
const $columnIndex =
|
|
7701
|
-
|
|
7702
|
-
|
|
8042
|
+
const expanded = !$xeTable.isTreeExpandByRow(row);
|
|
8043
|
+
const columnIndex = $xeTable.getColumnIndex(column);
|
|
8044
|
+
const $columnIndex = $xeTable.getVMColumnIndex(column);
|
|
8045
|
+
$xeTable.setTreeExpand(row, expanded);
|
|
8046
|
+
$xeTable.dispatchEvent('toggle-tree-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt);
|
|
7703
8047
|
}
|
|
7704
8048
|
},
|
|
7705
8049
|
/**
|
|
@@ -7708,87 +8052,6 @@ const Methods = {
|
|
|
7708
8052
|
toggleTreeExpand(row) {
|
|
7709
8053
|
return this.setTreeExpand(row, !this.isTreeExpandByRow(row));
|
|
7710
8054
|
},
|
|
7711
|
-
/**
|
|
7712
|
-
* 处理默认展开树节点
|
|
7713
|
-
*/
|
|
7714
|
-
handleDefaultTreeExpand() {
|
|
7715
|
-
const { treeConfig, treeOpts, tableFullData } = this;
|
|
7716
|
-
if (treeConfig) {
|
|
7717
|
-
const { expandAll, expandRowKeys } = treeOpts;
|
|
7718
|
-
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7719
|
-
if (expandAll) {
|
|
7720
|
-
this.setAllTreeExpand(true);
|
|
7721
|
-
}
|
|
7722
|
-
else if (expandRowKeys) {
|
|
7723
|
-
const defExpandeds = [];
|
|
7724
|
-
const rowkey = getRowkey(this);
|
|
7725
|
-
expandRowKeys.forEach((rowid) => {
|
|
7726
|
-
const matchObj = XEUtils.findTree(tableFullData, item => rowid === XEUtils.get(item, rowkey), { children: childrenField });
|
|
7727
|
-
if (matchObj) {
|
|
7728
|
-
defExpandeds.push(matchObj.item);
|
|
7729
|
-
}
|
|
7730
|
-
});
|
|
7731
|
-
this.setTreeExpand(defExpandeds, true);
|
|
7732
|
-
}
|
|
7733
|
-
}
|
|
7734
|
-
},
|
|
7735
|
-
handleAsyncTreeExpandChilds(row) {
|
|
7736
|
-
const $xeTable = this;
|
|
7737
|
-
const { treeOpts, checkboxOpts } = this;
|
|
7738
|
-
const { transform, loadMethod } = treeOpts;
|
|
7739
|
-
const { checkStrictly } = checkboxOpts;
|
|
7740
|
-
return new Promise(resolve => {
|
|
7741
|
-
if (loadMethod) {
|
|
7742
|
-
const { treeExpandLazyLoadedMaps, fullAllDataRowIdData } = this;
|
|
7743
|
-
const rowid = getRowid($xeTable, row);
|
|
7744
|
-
const rowRest = fullAllDataRowIdData[rowid];
|
|
7745
|
-
treeExpandLazyLoadedMaps[rowid] = row;
|
|
7746
|
-
Promise.resolve(loadMethod({ $table: $xeTable, row })).then((childRecords) => {
|
|
7747
|
-
if (rowRest) {
|
|
7748
|
-
rowRest.treeLoaded = true;
|
|
7749
|
-
}
|
|
7750
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7751
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7752
|
-
}
|
|
7753
|
-
if (!XEUtils.isArray(childRecords)) {
|
|
7754
|
-
childRecords = [];
|
|
7755
|
-
}
|
|
7756
|
-
if (childRecords) {
|
|
7757
|
-
return this.loadTreeChildren(row, childRecords).then((childRows) => {
|
|
7758
|
-
const { treeExpandedMaps } = this;
|
|
7759
|
-
if (childRows.length && !treeExpandedMaps[rowid]) {
|
|
7760
|
-
treeExpandedMaps[rowid] = row;
|
|
7761
|
-
}
|
|
7762
|
-
// 如果当前节点已选中,则展开后子节点也被选中
|
|
7763
|
-
if (!checkStrictly && this.isCheckedByCheckboxRow(row)) {
|
|
7764
|
-
handleCheckedCheckboxRow($xeTable, childRows, true);
|
|
7765
|
-
}
|
|
7766
|
-
return this.$nextTick().then(() => {
|
|
7767
|
-
if (transform) {
|
|
7768
|
-
this.handleTableData();
|
|
7769
|
-
updateAfterDataIndex($xeTable);
|
|
7770
|
-
return this.$nextTick();
|
|
7771
|
-
}
|
|
7772
|
-
});
|
|
7773
|
-
});
|
|
7774
|
-
}
|
|
7775
|
-
}).catch(() => {
|
|
7776
|
-
const { treeExpandLazyLoadedMaps } = this;
|
|
7777
|
-
if (rowRest) {
|
|
7778
|
-
rowRest.treeLoaded = false;
|
|
7779
|
-
}
|
|
7780
|
-
if (treeExpandLazyLoadedMaps[rowid]) {
|
|
7781
|
-
delete treeExpandLazyLoadedMaps[rowid];
|
|
7782
|
-
}
|
|
7783
|
-
}).finally(() => {
|
|
7784
|
-
this.$nextTick().then(() => this.recalculate()).then(() => resolve());
|
|
7785
|
-
});
|
|
7786
|
-
}
|
|
7787
|
-
else {
|
|
7788
|
-
resolve();
|
|
7789
|
-
}
|
|
7790
|
-
});
|
|
7791
|
-
},
|
|
7792
8055
|
/**
|
|
7793
8056
|
* 设置所有树节点的展开与否
|
|
7794
8057
|
* @param {Boolean} expanded 是否展开
|
|
@@ -7813,42 +8076,47 @@ const Methods = {
|
|
|
7813
8076
|
* @returns
|
|
7814
8077
|
*/
|
|
7815
8078
|
handleBaseTreeExpand(rows, expanded) {
|
|
7816
|
-
const
|
|
8079
|
+
const $xeTable = this;
|
|
8080
|
+
const reactData = $xeTable;
|
|
8081
|
+
const internalData = $xeTable;
|
|
8082
|
+
const { treeNodeColumn } = reactData;
|
|
8083
|
+
const { fullAllDataRowIdData, tableFullData, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData;
|
|
8084
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7817
8085
|
const { reserve, lazy, accordion, toggleMethod } = treeOpts;
|
|
7818
|
-
const treeTempExpandedMaps = Object.assign({}, treeExpandedMaps);
|
|
7819
8086
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7820
8087
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
7821
8088
|
const result = [];
|
|
7822
|
-
const columnIndex =
|
|
7823
|
-
const $columnIndex =
|
|
7824
|
-
|
|
8089
|
+
const columnIndex = $xeTable.getColumnIndex(treeNodeColumn);
|
|
8090
|
+
const $columnIndex = $xeTable.getVMColumnIndex(treeNodeColumn);
|
|
8091
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
8092
|
+
let validRows = toggleMethod ? rows.filter((row) => toggleMethod({ $table: $xeTable, expanded, column: treeNodeColumn, columnIndex, $columnIndex, row })) : rows;
|
|
7825
8093
|
if (accordion) {
|
|
7826
8094
|
validRows = validRows.length ? [validRows[validRows.length - 1]] : [];
|
|
7827
8095
|
// 同一级只能展开一个
|
|
7828
8096
|
const matchObj = XEUtils.findTree(tableFullData, item => item === validRows[0], { children: childrenField });
|
|
7829
8097
|
if (matchObj) {
|
|
7830
8098
|
matchObj.items.forEach(item => {
|
|
7831
|
-
const rowid =
|
|
7832
|
-
if (
|
|
7833
|
-
delete
|
|
8099
|
+
const rowid = handleGetRowId(item);
|
|
8100
|
+
if (treeExpandedMaps[rowid]) {
|
|
8101
|
+
delete treeExpandedMaps[rowid];
|
|
7834
8102
|
}
|
|
7835
8103
|
});
|
|
7836
8104
|
}
|
|
7837
8105
|
}
|
|
7838
8106
|
if (expanded) {
|
|
7839
8107
|
validRows.forEach((row) => {
|
|
7840
|
-
const rowid =
|
|
7841
|
-
if (!
|
|
8108
|
+
const rowid = handleGetRowId(row);
|
|
8109
|
+
if (!treeExpandedMaps[rowid]) {
|
|
7842
8110
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
7843
8111
|
if (rowRest) {
|
|
7844
8112
|
const isLoad = lazy && row[hasChildField] && !rowRest.treeLoaded && !treeExpandLazyLoadedMaps[rowid];
|
|
7845
8113
|
// 是否使用懒加载
|
|
7846
8114
|
if (isLoad) {
|
|
7847
|
-
result.push(
|
|
8115
|
+
result.push(handleAsyncTreeExpandChilds($xeTable, row));
|
|
7848
8116
|
}
|
|
7849
8117
|
else {
|
|
7850
8118
|
if (row[childrenField] && row[childrenField].length) {
|
|
7851
|
-
|
|
8119
|
+
treeExpandedMaps[rowid] = row;
|
|
7852
8120
|
}
|
|
7853
8121
|
}
|
|
7854
8122
|
}
|
|
@@ -7857,18 +8125,18 @@ const Methods = {
|
|
|
7857
8125
|
}
|
|
7858
8126
|
else {
|
|
7859
8127
|
validRows.forEach((item) => {
|
|
7860
|
-
const rowid =
|
|
7861
|
-
if (
|
|
7862
|
-
delete
|
|
8128
|
+
const rowid = handleGetRowId(item);
|
|
8129
|
+
if (treeExpandedMaps[rowid]) {
|
|
8130
|
+
delete treeExpandedMaps[rowid];
|
|
7863
8131
|
}
|
|
7864
8132
|
});
|
|
7865
8133
|
}
|
|
7866
8134
|
if (reserve) {
|
|
7867
|
-
validRows.forEach((row) =>
|
|
8135
|
+
validRows.forEach((row) => handleTreeExpandReserve($xeTable, row, expanded));
|
|
7868
8136
|
}
|
|
7869
|
-
|
|
8137
|
+
reactData.treeExpandedFlag++;
|
|
7870
8138
|
return Promise.all(result).then(() => {
|
|
7871
|
-
return
|
|
8139
|
+
return $xeTable.recalculate();
|
|
7872
8140
|
});
|
|
7873
8141
|
},
|
|
7874
8142
|
/**
|
|
@@ -7922,30 +8190,38 @@ const Methods = {
|
|
|
7922
8190
|
* @param {Row} row 行对象
|
|
7923
8191
|
*/
|
|
7924
8192
|
isTreeExpandByRow(row) {
|
|
7925
|
-
const
|
|
7926
|
-
|
|
8193
|
+
const $xeTable = this;
|
|
8194
|
+
const reactData = $xeTable;
|
|
8195
|
+
const internalData = $xeTable;
|
|
8196
|
+
const { treeExpandedFlag } = reactData;
|
|
8197
|
+
const { treeExpandedMaps } = internalData;
|
|
8198
|
+
return !!treeExpandedFlag && !!treeExpandedMaps[getRowid($xeTable, row)];
|
|
7927
8199
|
},
|
|
7928
8200
|
/**
|
|
7929
8201
|
* 手动清空树形节点的展开状态,数据会恢复成未展开的状态
|
|
7930
8202
|
*/
|
|
7931
8203
|
clearTreeExpand() {
|
|
7932
8204
|
const $xeTable = this;
|
|
7933
|
-
const
|
|
7934
|
-
const
|
|
8205
|
+
const reactData = $xeTable;
|
|
8206
|
+
const internalData = $xeTable;
|
|
8207
|
+
const { tableFullTreeData } = internalData;
|
|
8208
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
7935
8209
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
7936
|
-
const
|
|
7937
|
-
|
|
8210
|
+
const { transform, reserve } = treeOpts;
|
|
8211
|
+
const expList = $xeTable.getTreeExpandRecords();
|
|
8212
|
+
internalData.treeExpandedMaps = {};
|
|
8213
|
+
reactData.treeExpandedFlag++;
|
|
7938
8214
|
if (reserve) {
|
|
7939
|
-
XEUtils.eachTree(
|
|
8215
|
+
XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve($xeTable, row, false), { children: childrenField });
|
|
7940
8216
|
}
|
|
7941
|
-
return
|
|
8217
|
+
return $xeTable.handleTableData().then(() => {
|
|
7942
8218
|
if (transform) {
|
|
7943
8219
|
handleVirtualTreeToList($xeTable);
|
|
7944
|
-
return
|
|
8220
|
+
return $xeTable.handleTableData();
|
|
7945
8221
|
}
|
|
7946
8222
|
}).then(() => {
|
|
7947
8223
|
if (expList.length) {
|
|
7948
|
-
|
|
8224
|
+
$xeTable.recalculate();
|
|
7949
8225
|
}
|
|
7950
8226
|
});
|
|
7951
8227
|
},
|
|
@@ -7953,18 +8229,6 @@ const Methods = {
|
|
|
7953
8229
|
this.treeExpandedReserveRowMap = {};
|
|
7954
8230
|
return this.$nextTick();
|
|
7955
8231
|
},
|
|
7956
|
-
handleTreeExpandReserve(row, expanded) {
|
|
7957
|
-
const { treeExpandedReserveRowMap, treeOpts } = this;
|
|
7958
|
-
if (treeOpts.reserve) {
|
|
7959
|
-
const rowid = getRowid(this, row);
|
|
7960
|
-
if (expanded) {
|
|
7961
|
-
treeExpandedReserveRowMap[rowid] = row;
|
|
7962
|
-
}
|
|
7963
|
-
else if (treeExpandedReserveRowMap[rowid]) {
|
|
7964
|
-
delete treeExpandedReserveRowMap[rowid];
|
|
7965
|
-
}
|
|
7966
|
-
}
|
|
7967
|
-
},
|
|
7968
8232
|
/**
|
|
7969
8233
|
* 获取表格的滚动状态
|
|
7970
8234
|
*/
|
|
@@ -8282,10 +8546,10 @@ const Methods = {
|
|
|
8282
8546
|
return;
|
|
8283
8547
|
}
|
|
8284
8548
|
const { highlightHoverRow } = tableProps;
|
|
8285
|
-
const { scrollXLoad, scrollYLoad } = reactData;
|
|
8549
|
+
const { scrollXLoad, scrollYLoad, expandColumn } = reactData;
|
|
8286
8550
|
const leftFixedWidth = $xeTable.computeLeftFixedWidth;
|
|
8287
8551
|
const rightFixedWidth = $xeTable.computeRightFixedWidth;
|
|
8288
|
-
if (!(scrollYLoad || leftFixedWidth || rightFixedWidth)) {
|
|
8552
|
+
if (!(scrollYLoad || leftFixedWidth || rightFixedWidth || expandColumn)) {
|
|
8289
8553
|
return;
|
|
8290
8554
|
}
|
|
8291
8555
|
const { elemStore, lastScrollTop, lastScrollLeft } = internalData;
|
|
@@ -8537,8 +8801,8 @@ const Methods = {
|
|
|
8537
8801
|
const $xeTable = this;
|
|
8538
8802
|
const reactData = $xeTable;
|
|
8539
8803
|
const internalData = $xeTable;
|
|
8540
|
-
const { isAllOverflow, scrollYLoad, expandColumn
|
|
8541
|
-
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData } = internalData;
|
|
8804
|
+
const { isAllOverflow, scrollYLoad, expandColumn } = reactData;
|
|
8805
|
+
const { scrollYStore, elemStore, isResizeCellHeight, afterFullData, fullAllDataRowIdData, rowExpandedMaps } = internalData;
|
|
8542
8806
|
const { startIndex } = scrollYStore;
|
|
8543
8807
|
const expandOpts = $xeTable.computeExpandOpts;
|
|
8544
8808
|
const rowOpts = $xeTable.computeRowOpts;
|
|
@@ -8865,7 +9129,7 @@ const Methods = {
|
|
|
8865
9129
|
if (this.footerSpanMethod) {
|
|
8866
9130
|
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
8867
9131
|
}
|
|
8868
|
-
setMerges(this, merges, this.mergeFooterList
|
|
9132
|
+
setMerges(this, merges, this.mergeFooterList);
|
|
8869
9133
|
return this.$nextTick().then(() => {
|
|
8870
9134
|
this.updateCellAreas();
|
|
8871
9135
|
return updateStyle($xeTable);
|