vxe-table 4.13.4 → 4.13.6
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 +1 -1
- package/es/index.css +1 -1
- package/es/index.min.css +1 -1
- package/es/locale/lang/ar-EG.js +3 -2
- package/es/locale/lang/de-DE.js +3 -2
- package/es/locale/lang/en-US.js +2 -1
- package/es/locale/lang/es-ES.js +3 -2
- package/es/locale/lang/fr-FR.js +2 -1
- package/es/locale/lang/hu-HU.js +2 -1
- package/es/locale/lang/hy-AM.js +2 -1
- package/es/locale/lang/id-ID.js +2 -1
- package/es/locale/lang/it-IT.js +2 -1
- package/es/locale/lang/ja-JP.js +2 -1
- package/es/locale/lang/ko-KR.js +2 -1
- package/es/locale/lang/nb-NO.js +2 -1
- package/es/locale/lang/pt-BR.js +2 -1
- package/es/locale/lang/ru-RU.js +2 -1
- package/es/locale/lang/th-TH.js +2 -1
- package/es/locale/lang/ug-CN.js +2 -1
- package/es/locale/lang/uk-UA.js +2 -1
- package/es/locale/lang/vi-VN.js +2 -1
- package/es/locale/lang/zh-CHT.js +2 -1
- package/es/locale/lang/zh-CN.js +2 -1
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/module/custom/hook.js +11 -8
- package/es/table/module/custom/panel.js +7 -7
- package/es/table/module/export/hook.js +21 -20
- package/es/table/module/keyboard/hook.js +3 -2
- package/es/table/src/body.js +45 -10
- package/es/table/src/cell.js +159 -69
- package/es/table/src/column.js +2 -0
- package/es/table/src/columnInfo.js +1 -0
- package/es/table/src/emits.js +1 -0
- package/es/table/src/props.js +9 -7
- package/es/table/src/table.js +656 -173
- package/es/table/style.css +71 -41
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +13 -1
- package/es/ui/src/dom.js +3 -0
- package/es/ui/src/log.js +1 -1
- package/es/vxe-table/style.css +71 -41
- package/es/vxe-table/style.min.css +1 -1
- package/lib/grid/src/grid.js +1 -1
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.css +1 -1
- package/lib/index.min.css +1 -1
- package/lib/index.umd.js +421 -180
- package/lib/index.umd.min.js +1 -1
- package/lib/locale/lang/ar-EG.js +3 -2
- package/lib/locale/lang/ar-EG.min.js +1 -1
- package/lib/locale/lang/de-DE.js +3 -2
- package/lib/locale/lang/de-DE.min.js +1 -1
- package/lib/locale/lang/en-US.js +2 -1
- package/lib/locale/lang/en-US.min.js +1 -1
- package/lib/locale/lang/en-US.umd.js +2 -1
- package/lib/locale/lang/es-ES.js +3 -2
- package/lib/locale/lang/es-ES.min.js +1 -1
- package/lib/locale/lang/es-ES.umd.js +3 -2
- package/lib/locale/lang/fr-FR.js +2 -1
- package/lib/locale/lang/fr-FR.min.js +1 -1
- package/lib/locale/lang/hu-HU.js +2 -1
- package/lib/locale/lang/hu-HU.min.js +1 -1
- package/lib/locale/lang/hu-HU.umd.js +2 -1
- package/lib/locale/lang/hy-AM.js +2 -1
- package/lib/locale/lang/hy-AM.min.js +1 -1
- package/lib/locale/lang/id-ID.js +2 -1
- package/lib/locale/lang/id-ID.min.js +1 -1
- package/lib/locale/lang/it-IT.js +2 -1
- package/lib/locale/lang/it-IT.min.js +1 -1
- package/lib/locale/lang/ja-JP.js +2 -1
- package/lib/locale/lang/ja-JP.min.js +1 -1
- package/lib/locale/lang/ja-JP.umd.js +2 -1
- package/lib/locale/lang/ko-KR.js +2 -1
- package/lib/locale/lang/ko-KR.min.js +1 -1
- package/lib/locale/lang/ko-KR.umd.js +2 -1
- package/lib/locale/lang/nb-NO.js +2 -1
- package/lib/locale/lang/nb-NO.min.js +1 -1
- package/lib/locale/lang/pt-BR.js +2 -1
- package/lib/locale/lang/pt-BR.min.js +1 -1
- package/lib/locale/lang/pt-BR.umd.js +2 -1
- package/lib/locale/lang/ru-RU.js +2 -1
- package/lib/locale/lang/ru-RU.min.js +1 -1
- package/lib/locale/lang/ru-RU.umd.js +2 -1
- package/lib/locale/lang/th-TH.js +2 -1
- package/lib/locale/lang/th-TH.min.js +1 -1
- package/lib/locale/lang/ug-CN.js +2 -1
- package/lib/locale/lang/ug-CN.min.js +1 -1
- package/lib/locale/lang/uk-UA.js +2 -1
- package/lib/locale/lang/uk-UA.min.js +1 -1
- package/lib/locale/lang/uk-UA.umd.js +2 -1
- package/lib/locale/lang/vi-VN.js +2 -1
- package/lib/locale/lang/vi-VN.min.js +1 -1
- package/lib/locale/lang/zh-CHT.js +2 -1
- package/lib/locale/lang/zh-CHT.min.js +1 -1
- package/lib/locale/lang/zh-CN.js +2 -1
- package/lib/locale/lang/zh-CN.min.js +1 -1
- package/lib/locale/lang/zh-CN.umd.js +2 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/module/custom/hook.js +11 -1
- package/lib/table/module/custom/hook.min.js +1 -1
- package/lib/table/module/custom/panel.js +6 -2
- package/lib/table/module/custom/panel.min.js +1 -1
- package/lib/table/module/export/hook.js +21 -11
- package/lib/table/module/export/hook.min.js +1 -1
- package/lib/table/module/keyboard/hook.js +2 -1
- package/lib/table/module/keyboard/hook.min.js +1 -1
- package/lib/table/src/body.js +35 -9
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/cell.js +177 -52
- package/lib/table/src/cell.min.js +1 -1
- package/lib/table/src/column.js +2 -0
- package/lib/table/src/column.min.js +1 -1
- package/lib/table/src/columnInfo.js +1 -0
- package/lib/table/src/columnInfo.min.js +1 -1
- package/lib/table/src/emits.js +1 -1
- package/lib/table/src/emits.min.js +1 -1
- package/lib/table/src/props.js +9 -7
- package/lib/table/src/props.min.js +1 -1
- package/lib/table/src/table.js +136 -92
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/style/style.css +71 -41
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +13 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/dom.js +4 -0
- package/lib/ui/src/dom.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-table/style/style.css +71 -41
- package/lib/vxe-table/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/grid/src/grid.ts +1 -1
- package/packages/locale/lang/ar-EG.ts +3 -2
- package/packages/locale/lang/de-DE.ts +3 -2
- package/packages/locale/lang/en-US.ts +2 -1
- package/packages/locale/lang/es-ES.ts +3 -2
- package/packages/locale/lang/fr-FR.ts +2 -1
- package/packages/locale/lang/hu-HU.ts +2 -1
- package/packages/locale/lang/hy-AM.ts +2 -1
- package/packages/locale/lang/id-ID.ts +2 -1
- package/packages/locale/lang/it-IT.ts +2 -1
- package/packages/locale/lang/ja-JP.ts +2 -1
- package/packages/locale/lang/ko-KR.ts +2 -1
- package/packages/locale/lang/nb-NO.ts +2 -1
- package/packages/locale/lang/pt-BR.ts +2 -1
- package/packages/locale/lang/ru-RU.ts +2 -1
- package/packages/locale/lang/th-TH.ts +2 -1
- package/packages/locale/lang/ug-CN.ts +2 -1
- package/packages/locale/lang/uk-UA.ts +2 -1
- package/packages/locale/lang/vi-VN.ts +2 -1
- package/packages/locale/lang/zh-CHT.ts +2 -1
- package/packages/locale/lang/zh-CN.ts +2 -1
- package/packages/table/module/custom/hook.ts +14 -8
- package/packages/table/module/custom/panel.ts +7 -7
- package/packages/table/module/export/hook.ts +28 -27
- package/packages/table/module/keyboard/hook.ts +3 -2
- package/packages/table/src/body.ts +46 -10
- package/packages/table/src/cell.ts +162 -73
- package/packages/table/src/column.ts +2 -0
- package/packages/table/src/columnInfo.ts +1 -0
- package/packages/table/src/emits.ts +1 -0
- package/packages/table/src/props.ts +9 -7
- package/packages/table/src/table.ts +661 -178
- package/packages/ui/index.ts +12 -0
- package/packages/ui/src/dom.ts +4 -0
- package/styles/components/table.scss +133 -93
- /package/es/{iconfont.1744768289920.ttf → iconfont.1745197925862.ttf} +0 -0
- /package/es/{iconfont.1744768289920.woff → iconfont.1745197925862.woff} +0 -0
- /package/es/{iconfont.1744768289920.woff2 → iconfont.1745197925862.woff2} +0 -0
- /package/lib/{iconfont.1744768289920.ttf → iconfont.1745197925862.ttf} +0 -0
- /package/lib/{iconfont.1744768289920.woff → iconfont.1745197925862.woff} +0 -0
- /package/lib/{iconfont.1744768289920.woff2 → iconfont.1745197925862.woff2} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { defineComponent, h, ComponentPublicInstance, reactive, ref, Ref, provide, inject, nextTick, onActivated, onDeactivated, onBeforeUnmount, onUnmounted, watch, computed, onMounted } from 'vue'
|
|
2
2
|
import XEUtils from 'xe-utils'
|
|
3
|
-
import { initTpImg, getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEventTargetNode, getPaddingTopBottomSize, getOffsetPos, setScrollTop, setScrollLeft, toCssUnit } from '../../ui/src/dom'
|
|
3
|
+
import { initTpImg, getTpImg, isPx, isScale, hasClass, addClass, removeClass, getEventTargetNode, getPaddingTopBottomSize, getOffsetPos, setScrollTop, setScrollLeft, toCssUnit, hasControlKey } from '../../ui/src/dom'
|
|
4
4
|
import { getLastZIndex, nextZIndex, hasChildrenList, getFuncText, isEnableConf, formatText, eqEmptyValue } from '../../ui/src/utils'
|
|
5
5
|
import { VxeUI } from '../../ui'
|
|
6
6
|
import Cell from './cell'
|
|
@@ -89,6 +89,8 @@ export default defineComponent({
|
|
|
89
89
|
selectRadioRow: null,
|
|
90
90
|
// 表尾合计数据
|
|
91
91
|
footerTableData: [],
|
|
92
|
+
// 行分组列信息
|
|
93
|
+
rowGroupColumn: null,
|
|
92
94
|
// 展开列信息
|
|
93
95
|
expandColumn: null,
|
|
94
96
|
// 树节点列信息
|
|
@@ -241,6 +243,12 @@ export default defineComponent({
|
|
|
241
243
|
isFooter: false
|
|
242
244
|
},
|
|
243
245
|
|
|
246
|
+
visiblwRowsFlag: 1,
|
|
247
|
+
|
|
248
|
+
isRowGroupStatus: false,
|
|
249
|
+
rowGroupList: [],
|
|
250
|
+
|
|
251
|
+
rowGroupExpandedFlag: 1,
|
|
244
252
|
rowExpandedFlag: 1,
|
|
245
253
|
treeExpandedFlag: 1,
|
|
246
254
|
updateCheckboxFlag: 1,
|
|
@@ -337,10 +345,13 @@ export default defineComponent({
|
|
|
337
345
|
tableFullData: [],
|
|
338
346
|
afterFullData: [],
|
|
339
347
|
afterTreeFullData: [],
|
|
348
|
+
afterGroupFullData: [],
|
|
340
349
|
// 列表条件处理后数据集合
|
|
341
350
|
afterFullRowMaps: {},
|
|
342
351
|
// 树结构完整数据、条件处理后
|
|
343
352
|
tableFullTreeData: [],
|
|
353
|
+
// 行分组全量数据、条件处理后
|
|
354
|
+
tableFullGroupData: [],
|
|
344
355
|
tableSynchData: [],
|
|
345
356
|
tableSourceData: [],
|
|
346
357
|
// 收集的列配置(带分组)
|
|
@@ -374,6 +385,8 @@ export default defineComponent({
|
|
|
374
385
|
rowExpandedMaps: {},
|
|
375
386
|
// 懒加载中的展开行的集合
|
|
376
387
|
rowExpandLazyLoadedMaps: {},
|
|
388
|
+
// 已展开的分组行
|
|
389
|
+
rowGroupExpandedMaps: {},
|
|
377
390
|
// 已展开树节点集合
|
|
378
391
|
treeExpandedMaps: {},
|
|
379
392
|
// 懒加载中的树节点的集合
|
|
@@ -562,6 +575,10 @@ export default defineComponent({
|
|
|
562
575
|
return Object.assign({}, getConfig().table.rowConfig, props.rowConfig)
|
|
563
576
|
})
|
|
564
577
|
|
|
578
|
+
const computeRowGroupOpts = computed(() => {
|
|
579
|
+
return Object.assign({}, getConfig().table.rowGroupConfig, props.rowGroupConfig)
|
|
580
|
+
})
|
|
581
|
+
|
|
565
582
|
const computeCurrentRowOpts = computed(() => {
|
|
566
583
|
return Object.assign({}, getConfig().table.currentRowConfig, props.currentRowConfig)
|
|
567
584
|
})
|
|
@@ -742,20 +759,21 @@ export default defineComponent({
|
|
|
742
759
|
|
|
743
760
|
const computeTableRowExpandedList = computed(() => {
|
|
744
761
|
const { treeConfig } = props
|
|
745
|
-
const { rowExpandedFlag, expandColumn } = reactData
|
|
762
|
+
const { rowExpandedFlag, expandColumn, rowGroupExpandedFlag, treeExpandedFlag, isRowGroupStatus } = reactData
|
|
746
763
|
const { visibleDataRowIdData, rowExpandedMaps } = internalData
|
|
747
764
|
const treeOpts = computeTreeOpts.value
|
|
748
765
|
const { transform } = treeOpts
|
|
749
766
|
const expandList: any[] = []
|
|
750
|
-
if (expandColumn && rowExpandedFlag) {
|
|
751
|
-
if (treeConfig &&
|
|
767
|
+
if (expandColumn && rowExpandedFlag && rowGroupExpandedFlag && treeExpandedFlag) {
|
|
768
|
+
if (isRowGroupStatus || (treeConfig && transform)) {
|
|
769
|
+
XEUtils.each(rowExpandedMaps, (row, rowid) => {
|
|
770
|
+
if (visibleDataRowIdData[rowid]) {
|
|
771
|
+
expandList.push(row)
|
|
772
|
+
}
|
|
773
|
+
})
|
|
774
|
+
} else {
|
|
752
775
|
return XEUtils.values(rowExpandedMaps)
|
|
753
776
|
}
|
|
754
|
-
XEUtils.each(rowExpandedMaps, (row, rowid) => {
|
|
755
|
-
if (visibleDataRowIdData[rowid]) {
|
|
756
|
-
expandList.push(row)
|
|
757
|
-
}
|
|
758
|
-
})
|
|
759
777
|
}
|
|
760
778
|
return expandList
|
|
761
779
|
})
|
|
@@ -815,7 +833,7 @@ export default defineComponent({
|
|
|
815
833
|
// 暂时不支持树形结构
|
|
816
834
|
}
|
|
817
835
|
// 如果所有行都被禁用
|
|
818
|
-
return tableFullData.every((row) => !checkMethod({ row }))
|
|
836
|
+
return tableFullData.every((row) => !checkMethod({ $table: $xeTable, row }))
|
|
819
837
|
}
|
|
820
838
|
return false
|
|
821
839
|
}
|
|
@@ -832,6 +850,11 @@ export default defineComponent({
|
|
|
832
850
|
}
|
|
833
851
|
})
|
|
834
852
|
|
|
853
|
+
const computeRowGroupFields = computed(() => {
|
|
854
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
855
|
+
return rowGroupOpts.groupFields
|
|
856
|
+
})
|
|
857
|
+
|
|
835
858
|
const refMaps: VxeTablePrivateRef = {
|
|
836
859
|
refElem,
|
|
837
860
|
refTooltip,
|
|
@@ -879,6 +902,7 @@ export default defineComponent({
|
|
|
879
902
|
computeHeaderCellOpts,
|
|
880
903
|
computeFooterCellOpts,
|
|
881
904
|
computeRowOpts,
|
|
905
|
+
computeRowGroupOpts,
|
|
882
906
|
computeCurrentRowOpts,
|
|
883
907
|
computeRowDragOpts,
|
|
884
908
|
computeColumnDragOpts,
|
|
@@ -1388,7 +1412,7 @@ export default defineComponent({
|
|
|
1388
1412
|
const storeData: VxeTableDefines.CustomStoreData = getCustomStorageMap(tableId)
|
|
1389
1413
|
if (restoreStore) {
|
|
1390
1414
|
return Promise.resolve(
|
|
1391
|
-
restoreStore({ id: tableId, type: 'restore', storeData })
|
|
1415
|
+
restoreStore({ $table: $xeTable, id: tableId, type: 'restore', storeData })
|
|
1392
1416
|
).then(storeData => {
|
|
1393
1417
|
if (!storeData) {
|
|
1394
1418
|
return
|
|
@@ -1420,6 +1444,7 @@ export default defineComponent({
|
|
|
1420
1444
|
const rowOpts = computeRowOpts.value
|
|
1421
1445
|
const isGroup = collectColumn.some(hasChildrenList)
|
|
1422
1446
|
let isAllOverflow = !!props.showOverflow
|
|
1447
|
+
let rowGroupColumn: VxeTableDefines.ColumnInfo | undefined
|
|
1423
1448
|
let expandColumn: VxeTableDefines.ColumnInfo | undefined
|
|
1424
1449
|
let treeNodeColumn: VxeTableDefines.ColumnInfo | undefined
|
|
1425
1450
|
let checkboxColumn: VxeTableDefines.ColumnInfo | undefined
|
|
@@ -1427,7 +1452,7 @@ export default defineComponent({
|
|
|
1427
1452
|
let htmlColumn: VxeTableDefines.ColumnInfo | undefined
|
|
1428
1453
|
let hasFixed: VxeColumnPropTypes.Fixed | undefined
|
|
1429
1454
|
const handleFunc = (column: VxeTableDefines.ColumnInfo, index: number, items: VxeTableDefines.ColumnInfo[], path?: string[], parentColumn?: VxeTableDefines.ColumnInfo) => {
|
|
1430
|
-
const { id: colid, field, fixed, type, treeNode } = column
|
|
1455
|
+
const { id: colid, field, fixed, type, treeNode, rowGroupNode } = column
|
|
1431
1456
|
const rest = { $index: -1, _index: -1, column, colid, index, items, parent: parentColumn || null, width: 0, oLeft: 0 }
|
|
1432
1457
|
if (field) {
|
|
1433
1458
|
if (fullColumnFieldData[field]) {
|
|
@@ -1452,7 +1477,16 @@ export default defineComponent({
|
|
|
1452
1477
|
if (!treeNodeColumn) {
|
|
1453
1478
|
treeNodeColumn = column
|
|
1454
1479
|
}
|
|
1455
|
-
}
|
|
1480
|
+
}
|
|
1481
|
+
if (rowGroupNode) {
|
|
1482
|
+
if (treeNodeColumn) {
|
|
1483
|
+
warnLog('vxe.error.colRepet', ['row-group-node', rowGroupNode])
|
|
1484
|
+
}
|
|
1485
|
+
if (!rowGroupColumn) {
|
|
1486
|
+
rowGroupColumn = column
|
|
1487
|
+
}
|
|
1488
|
+
}
|
|
1489
|
+
if (type === 'expand') {
|
|
1456
1490
|
if (expandColumn) {
|
|
1457
1491
|
warnLog('vxe.error.colRepet', ['type', type])
|
|
1458
1492
|
}
|
|
@@ -1509,6 +1543,7 @@ export default defineComponent({
|
|
|
1509
1543
|
}
|
|
1510
1544
|
|
|
1511
1545
|
reactData.isGroup = isGroup
|
|
1546
|
+
reactData.rowGroupColumn = rowGroupColumn
|
|
1512
1547
|
reactData.treeNodeColumn = treeNodeColumn
|
|
1513
1548
|
reactData.expandColumn = expandColumn
|
|
1514
1549
|
reactData.isAllOverflow = isAllOverflow
|
|
@@ -1782,20 +1817,22 @@ export default defineComponent({
|
|
|
1782
1817
|
}
|
|
1783
1818
|
|
|
1784
1819
|
/**
|
|
1785
|
-
*
|
|
1820
|
+
* 如果为虚拟树、行分组、则将树结构拍平
|
|
1786
1821
|
* @returns
|
|
1787
1822
|
*/
|
|
1788
1823
|
const handleVirtualTreeToList = () => {
|
|
1789
1824
|
const { treeConfig } = props
|
|
1790
|
-
const {
|
|
1825
|
+
const { isRowGroupStatus } = reactData
|
|
1826
|
+
const { fullAllDataRowIdData, treeExpandedMaps, rowGroupExpandedMaps } = internalData
|
|
1827
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
1791
1828
|
const treeOpts = computeTreeOpts.value
|
|
1792
|
-
const
|
|
1829
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable)
|
|
1830
|
+
const fullData: any[] = []
|
|
1831
|
+
const expandMaps: {
|
|
1832
|
+
[key: string]: number
|
|
1833
|
+
} = {}
|
|
1793
1834
|
if (treeConfig && treeOpts.transform) {
|
|
1794
|
-
const
|
|
1795
|
-
const fullData: any[] = []
|
|
1796
|
-
const expandMaps: {
|
|
1797
|
-
[key: string]: number
|
|
1798
|
-
} = {}
|
|
1835
|
+
const childrenField = treeOpts.children || treeOpts.childrenField
|
|
1799
1836
|
XEUtils.eachTree(internalData.afterTreeFullData, (row, index, items, path, parentRow) => {
|
|
1800
1837
|
const rowid = handleGetRowId(row)
|
|
1801
1838
|
const parentRowid = handleGetRowId(parentRow)
|
|
@@ -1811,19 +1848,38 @@ export default defineComponent({
|
|
|
1811
1848
|
internalData.afterFullData = fullData
|
|
1812
1849
|
updateScrollYStatus(fullData)
|
|
1813
1850
|
return fullData
|
|
1851
|
+
} else if (isRowGroupStatus) {
|
|
1852
|
+
const { childrenField } = rowGroupOpts
|
|
1853
|
+
XEUtils.eachTree(internalData.afterGroupFullData, (row, index, items, path, parentRow) => {
|
|
1854
|
+
const rowid = handleGetRowId(row)
|
|
1855
|
+
const parentRowid = handleGetRowId(parentRow)
|
|
1856
|
+
if (!parentRow || (expandMaps[parentRowid] && rowGroupExpandedMaps[parentRowid])) {
|
|
1857
|
+
const rowRest = fullAllDataRowIdData[rowid]
|
|
1858
|
+
if (rowRest) {
|
|
1859
|
+
rowRest._index = fullData.length
|
|
1860
|
+
}
|
|
1861
|
+
expandMaps[rowid] = 1
|
|
1862
|
+
fullData.push(row)
|
|
1863
|
+
}
|
|
1864
|
+
}, { children: childrenField })
|
|
1865
|
+
internalData.afterFullData = fullData
|
|
1866
|
+
updateScrollYStatus(fullData)
|
|
1867
|
+
return fullData
|
|
1814
1868
|
}
|
|
1815
1869
|
return internalData.afterFullData
|
|
1816
1870
|
}
|
|
1817
1871
|
|
|
1818
1872
|
/**
|
|
1819
|
-
*
|
|
1873
|
+
* 编译处理后全量的表格数据
|
|
1820
1874
|
* 如果存在筛选条件,继续处理
|
|
1821
1875
|
*/
|
|
1822
1876
|
const updateAfterFullData = () => {
|
|
1823
1877
|
const { treeConfig } = props
|
|
1824
|
-
const {
|
|
1878
|
+
const { isRowGroupStatus } = reactData
|
|
1879
|
+
const { tableFullColumn, tableFullData, tableFullTreeData, tableFullGroupData } = internalData
|
|
1825
1880
|
const filterOpts = computeFilterOpts.value
|
|
1826
1881
|
const sortOpts = computeSortOpts.value
|
|
1882
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
1827
1883
|
const treeOpts = computeTreeOpts.value
|
|
1828
1884
|
const childrenField = treeOpts.children || treeOpts.childrenField
|
|
1829
1885
|
const { transform, rowField, parentField, mapChildrenField } = treeOpts
|
|
@@ -1831,7 +1887,6 @@ export default defineComponent({
|
|
|
1831
1887
|
const { remote: allRemoteSort, sortMethod: allSortMethod, multiple: sortMultiple, chronological } = sortOpts
|
|
1832
1888
|
let tableData: any[] = []
|
|
1833
1889
|
let tableTree: any[] = []
|
|
1834
|
-
|
|
1835
1890
|
// 处理数据
|
|
1836
1891
|
if (!allRemoteFilter || !allRemoteSort) {
|
|
1837
1892
|
const filterColumns: {
|
|
@@ -1878,14 +1933,23 @@ export default defineComponent({
|
|
|
1878
1933
|
} else if (compFilterMethod) {
|
|
1879
1934
|
return itemList.some((item) => compFilterMethod({ value: item.value, option: item, cellValue, row, column, $table: $xeTable }))
|
|
1880
1935
|
} else if (allFilterMethod) {
|
|
1881
|
-
return allFilterMethod({ options: itemList, values: valueList, cellValue, row, column })
|
|
1936
|
+
return allFilterMethod({ $table: $xeTable, options: itemList, values: valueList, cellValue, row, column })
|
|
1882
1937
|
} else if (tdFilterMethod) {
|
|
1883
1938
|
return itemList.some((item) => tdFilterMethod({ value: item.value, option: item, cellValue, row, column, $table: $xeTable }))
|
|
1884
1939
|
}
|
|
1885
1940
|
return valueList.indexOf(XEUtils.get(row, column.field)) > -1
|
|
1886
1941
|
})
|
|
1887
1942
|
}
|
|
1888
|
-
if (
|
|
1943
|
+
if (isRowGroupStatus) {
|
|
1944
|
+
// 行分组
|
|
1945
|
+
tableTree = XEUtils.searchTree(tableFullGroupData, handleFilter, {
|
|
1946
|
+
original: true,
|
|
1947
|
+
isEvery: true,
|
|
1948
|
+
children: rowGroupOpts.mapChildrenField,
|
|
1949
|
+
mapChildren: rowGroupOpts.childrenField
|
|
1950
|
+
})
|
|
1951
|
+
tableData = tableTree
|
|
1952
|
+
} else if (treeConfig && transform) {
|
|
1889
1953
|
// 筛选虚拟树
|
|
1890
1954
|
tableTree = XEUtils.searchTree(tableFullTreeData, handleFilter, {
|
|
1891
1955
|
original: true,
|
|
@@ -1899,7 +1963,16 @@ export default defineComponent({
|
|
|
1899
1963
|
tableTree = tableData
|
|
1900
1964
|
}
|
|
1901
1965
|
} else {
|
|
1902
|
-
if (
|
|
1966
|
+
if (isRowGroupStatus) {
|
|
1967
|
+
// 还原行分组
|
|
1968
|
+
tableTree = XEUtils.searchTree(tableFullGroupData, () => true, {
|
|
1969
|
+
original: true,
|
|
1970
|
+
isEvery: true,
|
|
1971
|
+
children: rowGroupOpts.mapChildrenField,
|
|
1972
|
+
mapChildren: rowGroupOpts.childrenField
|
|
1973
|
+
})
|
|
1974
|
+
tableData = tableTree
|
|
1975
|
+
} else if (treeConfig && transform) {
|
|
1903
1976
|
// 还原虚拟树
|
|
1904
1977
|
tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
|
|
1905
1978
|
original: true,
|
|
@@ -1914,11 +1987,33 @@ export default defineComponent({
|
|
|
1914
1987
|
}
|
|
1915
1988
|
}
|
|
1916
1989
|
|
|
1917
|
-
//
|
|
1990
|
+
// 处理排序
|
|
1918
1991
|
// 支持单列、多列、组合排序
|
|
1919
1992
|
if (!allRemoteSort && orderColumns.length) {
|
|
1920
|
-
if (
|
|
1921
|
-
//
|
|
1993
|
+
if (isRowGroupStatus) {
|
|
1994
|
+
// 行分组的排序
|
|
1995
|
+
if (allSortMethod) {
|
|
1996
|
+
const sortRests = allSortMethod({ data: tableTree, sortList: orderColumns, $table: $xeTable })
|
|
1997
|
+
tableTree = XEUtils.isArray(sortRests) ? sortRests : tableTree
|
|
1998
|
+
} else {
|
|
1999
|
+
const treeList = XEUtils.toTreeArray(tableTree, {
|
|
2000
|
+
key: rowGroupOpts.rowField,
|
|
2001
|
+
parentKey: rowGroupOpts.parentField,
|
|
2002
|
+
children: rowGroupOpts.mapChildrenField
|
|
2003
|
+
})
|
|
2004
|
+
tableTree = XEUtils.toArrayTree(
|
|
2005
|
+
XEUtils.orderBy(treeList, orderColumns.map(({ column, order }) => [getOrderField(column), order])),
|
|
2006
|
+
{
|
|
2007
|
+
key: rowGroupOpts.rowField,
|
|
2008
|
+
parentKey: rowGroupOpts.parentField,
|
|
2009
|
+
children: rowGroupOpts.childrenField,
|
|
2010
|
+
mapChildren: rowGroupOpts.mapChildrenField
|
|
2011
|
+
}
|
|
2012
|
+
)
|
|
2013
|
+
}
|
|
2014
|
+
tableData = tableTree
|
|
2015
|
+
} else if (treeConfig && transform) {
|
|
2016
|
+
// 虚拟树的排序
|
|
1922
2017
|
if (allSortMethod) {
|
|
1923
2018
|
const sortRests = allSortMethod({ data: tableTree, sortList: orderColumns, $table: $xeTable })
|
|
1924
2019
|
tableTree = XEUtils.isArray(sortRests) ? sortRests : tableTree
|
|
@@ -1948,12 +2043,22 @@ export default defineComponent({
|
|
|
1948
2043
|
}
|
|
1949
2044
|
}
|
|
1950
2045
|
} else {
|
|
1951
|
-
if (
|
|
2046
|
+
if (isRowGroupStatus) {
|
|
2047
|
+
// 还原行分组
|
|
2048
|
+
// 还原虚拟树
|
|
2049
|
+
tableTree = XEUtils.searchTree(tableFullGroupData, () => true, {
|
|
2050
|
+
original: true,
|
|
2051
|
+
isEvery: true,
|
|
2052
|
+
children: rowGroupOpts.mapChildrenField,
|
|
2053
|
+
mapChildren: rowGroupOpts.childrenField
|
|
2054
|
+
})
|
|
2055
|
+
tableData = tableTree
|
|
2056
|
+
} else if (treeConfig && transform) {
|
|
1952
2057
|
// 还原虚拟树
|
|
1953
2058
|
tableTree = XEUtils.searchTree(tableFullTreeData, () => true, {
|
|
1954
2059
|
original: true,
|
|
1955
2060
|
isEvery,
|
|
1956
|
-
children:
|
|
2061
|
+
children: mapChildrenField,
|
|
1957
2062
|
mapChildren: childrenField
|
|
1958
2063
|
})
|
|
1959
2064
|
tableData = tableTree
|
|
@@ -1964,6 +2069,7 @@ export default defineComponent({
|
|
|
1964
2069
|
}
|
|
1965
2070
|
internalData.afterFullData = tableData
|
|
1966
2071
|
internalData.afterTreeFullData = tableTree
|
|
2072
|
+
internalData.afterGroupFullData = tableTree
|
|
1967
2073
|
updateAfterDataIndex()
|
|
1968
2074
|
}
|
|
1969
2075
|
|
|
@@ -2383,7 +2489,7 @@ export default defineComponent({
|
|
|
2383
2489
|
const handleCheckedRadioRow = (row: any, isForce?: boolean) => {
|
|
2384
2490
|
const radioOpts = computeRadioOpts.value
|
|
2385
2491
|
const { checkMethod } = radioOpts
|
|
2386
|
-
if (row && (isForce || (!checkMethod || checkMethod({ row })))) {
|
|
2492
|
+
if (row && (isForce || (!checkMethod || checkMethod({ $table: $xeTable, row })))) {
|
|
2387
2493
|
reactData.selectRadioRow = row
|
|
2388
2494
|
handleRadioReserveRow(row)
|
|
2389
2495
|
}
|
|
@@ -2401,8 +2507,10 @@ export default defineComponent({
|
|
|
2401
2507
|
|
|
2402
2508
|
const handleCheckedAllCheckboxRow = (checked: boolean, isForce?: boolean) => {
|
|
2403
2509
|
const { treeConfig } = props
|
|
2404
|
-
const {
|
|
2510
|
+
const { isRowGroupStatus } = reactData
|
|
2511
|
+
const { afterFullData, afterTreeFullData, afterGroupFullData, checkboxReserveRowMap, selectCheckboxMaps } = internalData
|
|
2405
2512
|
const treeOpts = computeTreeOpts.value
|
|
2513
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
2406
2514
|
const childrenField = treeOpts.children || treeOpts.childrenField
|
|
2407
2515
|
const checkboxOpts = computeCheckboxOpts.value
|
|
2408
2516
|
const { checkField, reserve, checkMethod } = checkboxOpts
|
|
@@ -2412,54 +2520,80 @@ export default defineComponent({
|
|
|
2412
2520
|
const selectRowMaps: Record<string, any> = {}
|
|
2413
2521
|
|
|
2414
2522
|
/**
|
|
2415
|
-
*
|
|
2523
|
+
* 绑定属性方式(有污染)
|
|
2416
2524
|
* 必须在行数据存在对应的属性,否则将不响应
|
|
2417
2525
|
*/
|
|
2418
2526
|
if (checkField) {
|
|
2419
2527
|
const checkValFn = (row: any) => {
|
|
2420
|
-
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
2528
|
+
if (isForce || (!checkMethod || checkMethod({ $table: $xeTable, row }))) {
|
|
2421
2529
|
if (checked) {
|
|
2422
2530
|
selectRowMaps[handleGetRowId(row)] = row
|
|
2423
2531
|
}
|
|
2424
2532
|
XEUtils.set(row, checkField, checked)
|
|
2425
2533
|
}
|
|
2426
|
-
if (treeConfig && indeterminateField) {
|
|
2534
|
+
if ((treeConfig || isRowGroupStatus) && indeterminateField) {
|
|
2427
2535
|
XEUtils.set(row, indeterminateField, false)
|
|
2428
2536
|
}
|
|
2429
2537
|
}
|
|
2430
2538
|
// 如果存在选中方法
|
|
2431
2539
|
// 如果方法成立,则更新值,否则忽略该数据
|
|
2432
|
-
if (treeConfig) {
|
|
2540
|
+
if ((treeConfig || isRowGroupStatus)) {
|
|
2433
2541
|
XEUtils.eachTree(afterFullData, checkValFn, { children: childrenField })
|
|
2434
2542
|
} else {
|
|
2435
2543
|
afterFullData.forEach(checkValFn)
|
|
2436
2544
|
}
|
|
2437
2545
|
} else {
|
|
2438
2546
|
/**
|
|
2439
|
-
|
|
2440
|
-
|
|
2441
|
-
|
|
2442
|
-
if (
|
|
2547
|
+
* 默认方式(无污染)
|
|
2548
|
+
* 无需任何属性,直接绑定
|
|
2549
|
+
*/
|
|
2550
|
+
if (isRowGroupStatus) {
|
|
2443
2551
|
if (checked) {
|
|
2444
2552
|
/**
|
|
2445
|
-
|
|
2446
|
-
|
|
2447
|
-
|
|
2448
|
-
XEUtils.eachTree(
|
|
2449
|
-
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
2553
|
+
* 如果是行分组勾选
|
|
2554
|
+
* 如果方法成立,则添加到临时集合中
|
|
2555
|
+
*/
|
|
2556
|
+
XEUtils.eachTree(afterGroupFullData, (row) => {
|
|
2557
|
+
if (isForce || (!checkMethod || checkMethod({ $table: $xeTable, row }))) {
|
|
2558
|
+
const rowid = handleGetRowId(row)
|
|
2559
|
+
selectRowMaps[rowid] = row
|
|
2560
|
+
}
|
|
2561
|
+
}, { children: rowGroupOpts.mapChildrenField })
|
|
2562
|
+
} else {
|
|
2563
|
+
/**
|
|
2564
|
+
* 如果是树取消
|
|
2565
|
+
* 如果方法成立,则不添加到临时集合中
|
|
2566
|
+
*/
|
|
2567
|
+
if (!isForce && checkMethod) {
|
|
2568
|
+
XEUtils.eachTree(afterGroupFullData, (row) => {
|
|
2569
|
+
const rowid = handleGetRowId(row)
|
|
2570
|
+
if (checkMethod({ $table: $xeTable, row }) ? false : selectCheckboxMaps[rowid]) {
|
|
2571
|
+
selectRowMaps[rowid] = row
|
|
2572
|
+
}
|
|
2573
|
+
}, { children: rowGroupOpts.mapChildrenField })
|
|
2574
|
+
}
|
|
2575
|
+
}
|
|
2576
|
+
} else if (treeConfig) {
|
|
2577
|
+
if (checked) {
|
|
2578
|
+
/**
|
|
2579
|
+
* 如果是树勾选
|
|
2580
|
+
* 如果方法成立,则添加到临时集合中
|
|
2581
|
+
*/
|
|
2582
|
+
XEUtils.eachTree(afterTreeFullData, (row) => {
|
|
2583
|
+
if (isForce || (!checkMethod || checkMethod({ $table: $xeTable, row }))) {
|
|
2450
2584
|
const rowid = handleGetRowId(row)
|
|
2451
2585
|
selectRowMaps[rowid] = row
|
|
2452
2586
|
}
|
|
2453
2587
|
}, { children: childrenField })
|
|
2454
2588
|
} else {
|
|
2455
2589
|
/**
|
|
2456
|
-
|
|
2457
|
-
|
|
2458
|
-
|
|
2590
|
+
* 如果是树取消
|
|
2591
|
+
* 如果方法成立,则不添加到临时集合中
|
|
2592
|
+
*/
|
|
2459
2593
|
if (!isForce && checkMethod) {
|
|
2460
|
-
XEUtils.eachTree(
|
|
2594
|
+
XEUtils.eachTree(afterTreeFullData, (row) => {
|
|
2461
2595
|
const rowid = handleGetRowId(row)
|
|
2462
|
-
if (checkMethod({ row }) ?
|
|
2596
|
+
if (checkMethod({ $table: $xeTable, row }) ? false : selectCheckboxMaps[rowid]) {
|
|
2463
2597
|
selectRowMaps[rowid] = row
|
|
2464
2598
|
}
|
|
2465
2599
|
}, { children: childrenField })
|
|
@@ -2468,14 +2602,14 @@ export default defineComponent({
|
|
|
2468
2602
|
} else {
|
|
2469
2603
|
if (checked) {
|
|
2470
2604
|
/**
|
|
2471
|
-
|
|
2472
|
-
|
|
2473
|
-
|
|
2474
|
-
|
|
2605
|
+
* 如果是行勾选
|
|
2606
|
+
* 如果存在选中方法且成立或者本身已勾选,则添加到临时集合中
|
|
2607
|
+
* 如果不存在选中方法,则添加所有数据到临时集合中
|
|
2608
|
+
*/
|
|
2475
2609
|
if (!isForce && checkMethod) {
|
|
2476
2610
|
afterFullData.forEach((row) => {
|
|
2477
2611
|
const rowid = handleGetRowId(row)
|
|
2478
|
-
if (selectCheckboxMaps[rowid] || checkMethod({ row })) {
|
|
2612
|
+
if (selectCheckboxMaps[rowid] || checkMethod({ $table: $xeTable, row })) {
|
|
2479
2613
|
selectRowMaps[rowid] = row
|
|
2480
2614
|
}
|
|
2481
2615
|
})
|
|
@@ -2487,14 +2621,14 @@ export default defineComponent({
|
|
|
2487
2621
|
}
|
|
2488
2622
|
} else {
|
|
2489
2623
|
/**
|
|
2490
|
-
|
|
2491
|
-
|
|
2492
|
-
|
|
2493
|
-
|
|
2624
|
+
* 如果是行取消
|
|
2625
|
+
* 如果方法成立,则不添加到临时集合中;如果方法不成立则判断当前是否已勾选,如果已被勾选则添加到新集合中
|
|
2626
|
+
* 如果不存在选中方法,无需处理,临时集合默认为空
|
|
2627
|
+
*/
|
|
2494
2628
|
if (!isForce && checkMethod) {
|
|
2495
2629
|
afterFullData.forEach((row) => {
|
|
2496
2630
|
const rowid = handleGetRowId(row)
|
|
2497
|
-
if (checkMethod({ row }) ?
|
|
2631
|
+
if (checkMethod({ $table: $xeTable, row }) ? false : selectCheckboxMaps[rowid]) {
|
|
2498
2632
|
selectRowMaps[rowid] = row
|
|
2499
2633
|
}
|
|
2500
2634
|
})
|
|
@@ -2851,14 +2985,87 @@ export default defineComponent({
|
|
|
2851
2985
|
})
|
|
2852
2986
|
}
|
|
2853
2987
|
|
|
2988
|
+
const handleUpdateRowGroup = (groupFields?: string[]) => {
|
|
2989
|
+
reactData.rowGroupList = groupFields
|
|
2990
|
+
? (XEUtils.isArray(groupFields) ? groupFields : [groupFields]).map(field => {
|
|
2991
|
+
return {
|
|
2992
|
+
field
|
|
2993
|
+
}
|
|
2994
|
+
})
|
|
2995
|
+
: []
|
|
2996
|
+
}
|
|
2997
|
+
|
|
2998
|
+
const handleGroupData = (list: any[], rowGroups: VxeTableDefines.RowGroupItem[]) => {
|
|
2999
|
+
let fullData = list
|
|
3000
|
+
let treeData = list
|
|
3001
|
+
if (rowGroups) {
|
|
3002
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
3003
|
+
const { rowField, parentField, childrenField, mapChildrenField } = rowGroupOpts
|
|
3004
|
+
const checkboxOpts = computeCheckboxOpts.value
|
|
3005
|
+
const { checkField } = checkboxOpts
|
|
3006
|
+
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField
|
|
3007
|
+
const rgItem = rowGroups[0]
|
|
3008
|
+
if (rgItem && rowField && parentField && childrenField && mapChildrenField) {
|
|
3009
|
+
fullData = []
|
|
3010
|
+
treeData = []
|
|
3011
|
+
const groupField = rgItem.field
|
|
3012
|
+
const groupColumn = $xeTable.getColumnByField(groupField)
|
|
3013
|
+
const groupMaps: Record<string, any[]> = {}
|
|
3014
|
+
const rowkey = getRowkey($xeTable)
|
|
3015
|
+
list.forEach((row) => {
|
|
3016
|
+
const cellValue = groupColumn ? $xeTable.getCellLabel(row, groupColumn) : XEUtils.get(row, groupField)
|
|
3017
|
+
const groupValue = XEUtils.eqNull(cellValue) ? '' : cellValue
|
|
3018
|
+
let childList = groupMaps[groupValue]
|
|
3019
|
+
if (!childList) {
|
|
3020
|
+
childList = []
|
|
3021
|
+
groupMaps[groupValue] = childList
|
|
3022
|
+
}
|
|
3023
|
+
if (row.isAggregate) {
|
|
3024
|
+
row.isAggregate = undefined
|
|
3025
|
+
}
|
|
3026
|
+
childList.push(row)
|
|
3027
|
+
})
|
|
3028
|
+
XEUtils.objectEach(groupMaps, (childList, groupValue) => {
|
|
3029
|
+
const { fullData: childFullData, treeData: childTreeData } = handleGroupData(childList, rowGroups.slice(1))
|
|
3030
|
+
const groupRow = {
|
|
3031
|
+
isAggregate: true,
|
|
3032
|
+
groupContent: groupValue,
|
|
3033
|
+
groupField,
|
|
3034
|
+
[rowField]: getRowUniqueId(),
|
|
3035
|
+
[parentField]: null,
|
|
3036
|
+
[rowkey]: getRowUniqueId(),
|
|
3037
|
+
[childrenField]: childTreeData,
|
|
3038
|
+
[mapChildrenField]: childTreeData
|
|
3039
|
+
}
|
|
3040
|
+
if (checkField) {
|
|
3041
|
+
groupRow[checkField] = false
|
|
3042
|
+
}
|
|
3043
|
+
if (indeterminateField) {
|
|
3044
|
+
groupRow[indeterminateField] = false
|
|
3045
|
+
}
|
|
3046
|
+
treeData.push(groupRow)
|
|
3047
|
+
fullData.push(groupRow)
|
|
3048
|
+
if (childFullData.length) {
|
|
3049
|
+
fullData.push(...childFullData)
|
|
3050
|
+
}
|
|
3051
|
+
})
|
|
3052
|
+
}
|
|
3053
|
+
}
|
|
3054
|
+
return {
|
|
3055
|
+
treeData,
|
|
3056
|
+
fullData
|
|
3057
|
+
}
|
|
3058
|
+
}
|
|
3059
|
+
|
|
2854
3060
|
/**
|
|
2855
3061
|
* 加载表格数据
|
|
2856
3062
|
* @param {Array} datas 数据
|
|
2857
3063
|
*/
|
|
2858
3064
|
const loadTableData = (datas: any[], isReset: boolean) => {
|
|
2859
|
-
const { keepSource, treeConfig } = props
|
|
2860
|
-
const { scrollYLoad: oldScrollYLoad } = reactData
|
|
3065
|
+
const { keepSource, treeConfig, rowGroupConfig } = props
|
|
3066
|
+
const { rowGroupList, scrollYLoad: oldScrollYLoad } = reactData
|
|
2861
3067
|
const { scrollYStore, scrollXStore, lastScrollLeft, lastScrollTop } = internalData
|
|
3068
|
+
const rowOpts = computeRowOpts.value
|
|
2862
3069
|
const treeOpts = computeTreeOpts.value
|
|
2863
3070
|
const expandOpts = computeExpandOpts.value
|
|
2864
3071
|
const { transform } = treeOpts
|
|
@@ -2868,6 +3075,15 @@ export default defineComponent({
|
|
|
2868
3075
|
if (fullData.length > supportMaxRow) {
|
|
2869
3076
|
errLog('vxe.error.errMaxRow', [supportMaxRow])
|
|
2870
3077
|
}
|
|
3078
|
+
if (treeConfig && rowGroupList.length) {
|
|
3079
|
+
errLog('vxe.error.noTree', ['row-group-config'])
|
|
3080
|
+
return nextTick()
|
|
3081
|
+
}
|
|
3082
|
+
if (rowOpts.drag && rowGroupList.length) {
|
|
3083
|
+
errLog('vxe.error.errConflicts', ['row-config.drag', 'row-group-config'])
|
|
3084
|
+
return nextTick()
|
|
3085
|
+
}
|
|
3086
|
+
let isRGroup = false
|
|
2871
3087
|
if (treeConfig) {
|
|
2872
3088
|
if (transform) {
|
|
2873
3089
|
// 树结构自动转换
|
|
@@ -2901,7 +3117,13 @@ export default defineComponent({
|
|
|
2901
3117
|
} else {
|
|
2902
3118
|
treeData = fullData.slice(0)
|
|
2903
3119
|
}
|
|
3120
|
+
} else if (rowGroupConfig && rowGroupList.length) {
|
|
3121
|
+
const groupRest = handleGroupData(fullData, rowGroupList)
|
|
3122
|
+
treeData = groupRest.treeData
|
|
3123
|
+
fullData = groupRest.fullData
|
|
3124
|
+
isRGroup = true
|
|
2904
3125
|
}
|
|
3126
|
+
reactData.isRowGroupStatus = isRGroup
|
|
2905
3127
|
scrollYStore.startIndex = 0
|
|
2906
3128
|
scrollYStore.endIndex = 1
|
|
2907
3129
|
scrollXStore.startIndex = 0
|
|
@@ -2915,7 +3137,8 @@ export default defineComponent({
|
|
|
2915
3137
|
reactData.isDragRowMove = false
|
|
2916
3138
|
// 全量数据
|
|
2917
3139
|
internalData.tableFullData = fullData
|
|
2918
|
-
internalData.tableFullTreeData = treeData
|
|
3140
|
+
internalData.tableFullTreeData = isRGroup ? [] : treeData
|
|
3141
|
+
internalData.tableFullGroupData = isRGroup ? treeData : []
|
|
2919
3142
|
// 缓存数据
|
|
2920
3143
|
$xeTable.cacheRowMap(isReset)
|
|
2921
3144
|
// 原始数据
|
|
@@ -3287,7 +3510,7 @@ export default defineComponent({
|
|
|
3287
3510
|
*/
|
|
3288
3511
|
const handleBaseTreeExpand = (rows: any[], expanded: boolean) => {
|
|
3289
3512
|
const { treeNodeColumn } = reactData
|
|
3290
|
-
const { fullAllDataRowIdData,
|
|
3513
|
+
const { fullAllDataRowIdData, tableFullTreeData, treeExpandedMaps, treeExpandLazyLoadedMaps } = internalData
|
|
3291
3514
|
const treeOpts = computeTreeOpts.value
|
|
3292
3515
|
const { reserve, lazy, accordion, toggleMethod } = treeOpts
|
|
3293
3516
|
const childrenField = treeOpts.children || treeOpts.childrenField
|
|
@@ -3300,7 +3523,7 @@ export default defineComponent({
|
|
|
3300
3523
|
if (accordion) {
|
|
3301
3524
|
validRows = validRows.length ? [validRows[validRows.length - 1]] : []
|
|
3302
3525
|
// 同一级只能展开一个
|
|
3303
|
-
const matchObj = XEUtils.findTree(
|
|
3526
|
+
const matchObj = XEUtils.findTree(tableFullTreeData, item => item === validRows[0], { children: childrenField })
|
|
3304
3527
|
if (matchObj) {
|
|
3305
3528
|
matchObj.items.forEach(item => {
|
|
3306
3529
|
const rowid = handleGetRowId(item)
|
|
@@ -3355,6 +3578,80 @@ export default defineComponent({
|
|
|
3355
3578
|
return handleBaseTreeExpand(rows, expanded).then(() => {
|
|
3356
3579
|
handleVirtualTreeToList()
|
|
3357
3580
|
$xeTable.handleTableData()
|
|
3581
|
+
reactData.treeExpandedFlag++
|
|
3582
|
+
updateAfterDataIndex()
|
|
3583
|
+
return nextTick()
|
|
3584
|
+
}).then(() => {
|
|
3585
|
+
return $xeTable.recalculate(true)
|
|
3586
|
+
}).then(() => {
|
|
3587
|
+
setTimeout(() => {
|
|
3588
|
+
$xeTable.updateCellAreas()
|
|
3589
|
+
}, 30)
|
|
3590
|
+
})
|
|
3591
|
+
}
|
|
3592
|
+
|
|
3593
|
+
/**
|
|
3594
|
+
* 展开与收起行分组节点
|
|
3595
|
+
* @param rows
|
|
3596
|
+
* @param expanded
|
|
3597
|
+
* @returns
|
|
3598
|
+
*/
|
|
3599
|
+
const handleRowGroupBaseExpand = (rows: any[], expanded: boolean) => {
|
|
3600
|
+
const { fullAllDataRowIdData, tableFullGroupData, rowGroupExpandedMaps } = internalData
|
|
3601
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
3602
|
+
const { mapChildrenField, accordion } = rowGroupOpts
|
|
3603
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable)
|
|
3604
|
+
let validRows = rows
|
|
3605
|
+
if (mapChildrenField) {
|
|
3606
|
+
if (accordion) {
|
|
3607
|
+
validRows = validRows.length ? [validRows[validRows.length - 1]] : []
|
|
3608
|
+
// 同一级只能展开一个
|
|
3609
|
+
const matchObj = XEUtils.findTree(tableFullGroupData, item => getRowid($xeTable, item) === getRowid($xeTable, validRows[0]), { children: mapChildrenField })
|
|
3610
|
+
if (matchObj) {
|
|
3611
|
+
matchObj.items.forEach(item => {
|
|
3612
|
+
const rowid = handleGetRowId(item)
|
|
3613
|
+
if (rowGroupExpandedMaps[rowid]) {
|
|
3614
|
+
delete rowGroupExpandedMaps[rowid]
|
|
3615
|
+
}
|
|
3616
|
+
})
|
|
3617
|
+
}
|
|
3618
|
+
}
|
|
3619
|
+
if (expanded) {
|
|
3620
|
+
validRows.forEach((row) => {
|
|
3621
|
+
const rowid = handleGetRowId(row)
|
|
3622
|
+
if (!rowGroupExpandedMaps[rowid]) {
|
|
3623
|
+
const rowRest = fullAllDataRowIdData[rowid]
|
|
3624
|
+
if (rowRest) {
|
|
3625
|
+
if (row[mapChildrenField] && row[mapChildrenField].length) {
|
|
3626
|
+
rowGroupExpandedMaps[rowid] = row
|
|
3627
|
+
}
|
|
3628
|
+
}
|
|
3629
|
+
}
|
|
3630
|
+
})
|
|
3631
|
+
} else {
|
|
3632
|
+
validRows.forEach(item => {
|
|
3633
|
+
const rowid = handleGetRowId(item)
|
|
3634
|
+
if (rowGroupExpandedMaps[rowid]) {
|
|
3635
|
+
delete rowGroupExpandedMaps[rowid]
|
|
3636
|
+
}
|
|
3637
|
+
})
|
|
3638
|
+
}
|
|
3639
|
+
}
|
|
3640
|
+
reactData.rowGroupExpandedFlag++
|
|
3641
|
+
return $xeTable.recalculate()
|
|
3642
|
+
}
|
|
3643
|
+
|
|
3644
|
+
/**
|
|
3645
|
+
* 行分组的展开与收起
|
|
3646
|
+
* @param rows
|
|
3647
|
+
* @param expanded
|
|
3648
|
+
* @returns
|
|
3649
|
+
*/
|
|
3650
|
+
const handleRowGroupVirtualExpand = (rows: any[], expanded: boolean) => {
|
|
3651
|
+
return handleRowGroupBaseExpand(rows, expanded).then(() => {
|
|
3652
|
+
handleVirtualTreeToList()
|
|
3653
|
+
$xeTable.handleTableData()
|
|
3654
|
+
reactData.rowGroupExpandedFlag++
|
|
3358
3655
|
updateAfterDataIndex()
|
|
3359
3656
|
return nextTick()
|
|
3360
3657
|
}).then(() => {
|
|
@@ -4122,7 +4419,7 @@ export default defineComponent({
|
|
|
4122
4419
|
if (!column) {
|
|
4123
4420
|
return null
|
|
4124
4421
|
}
|
|
4125
|
-
const formatter = column
|
|
4422
|
+
const { formatter } = column
|
|
4126
4423
|
const cellValue = getCellValue(row, column)
|
|
4127
4424
|
let cellLabel = cellValue
|
|
4128
4425
|
if (formatter) {
|
|
@@ -4365,7 +4662,7 @@ export default defineComponent({
|
|
|
4365
4662
|
getCheckboxRecords (isFull) {
|
|
4366
4663
|
const { treeConfig } = props
|
|
4367
4664
|
const { updateCheckboxFlag } = reactData
|
|
4368
|
-
const { tableFullData, afterFullData,
|
|
4665
|
+
const { tableFullData, afterFullData, tableFullTreeData, fullDataRowIdData, afterFullRowMaps, selectCheckboxMaps } = internalData
|
|
4369
4666
|
const treeOpts = computeTreeOpts.value
|
|
4370
4667
|
const checkboxOpts = computeCheckboxOpts.value
|
|
4371
4668
|
const { transform, mapChildrenField } = treeOpts
|
|
@@ -4375,7 +4672,8 @@ export default defineComponent({
|
|
|
4375
4672
|
if (updateCheckboxFlag) {
|
|
4376
4673
|
if (checkField) {
|
|
4377
4674
|
if (treeConfig) {
|
|
4378
|
-
|
|
4675
|
+
// 如果开启 transform 默认就是完整数据
|
|
4676
|
+
const currTableData = isFull ? (transform ? tableFullTreeData : tableFullData) : (transform ? tableFullTreeData : afterFullData)
|
|
4379
4677
|
rowList = XEUtils.filterTree(currTableData, row => XEUtils.get(row, checkField), { children: transform ? mapChildrenField : childrenField })
|
|
4380
4678
|
} else {
|
|
4381
4679
|
const currTableData = isFull ? tableFullData : afterFullData
|
|
@@ -5363,7 +5661,7 @@ export default defineComponent({
|
|
|
5363
5661
|
})
|
|
5364
5662
|
if (isUpdate) {
|
|
5365
5663
|
if (!remote) {
|
|
5366
|
-
|
|
5664
|
+
$xeTable.handleTableData(true)
|
|
5367
5665
|
}
|
|
5368
5666
|
$xeTable.handleColumnSortEvent(new Event('click'), firstColumn)
|
|
5369
5667
|
}
|
|
@@ -5390,7 +5688,7 @@ export default defineComponent({
|
|
|
5390
5688
|
clearAllSort()
|
|
5391
5689
|
}
|
|
5392
5690
|
if (!sortOpts.remote) {
|
|
5393
|
-
|
|
5691
|
+
$xeTable.handleTableData(true)
|
|
5394
5692
|
}
|
|
5395
5693
|
return nextTick().then(updateStyle)
|
|
5396
5694
|
},
|
|
@@ -5535,8 +5833,8 @@ export default defineComponent({
|
|
|
5535
5833
|
const expandOpts = computeExpandOpts.value
|
|
5536
5834
|
const { reserve, lazy, accordion, toggleMethod } = expandOpts
|
|
5537
5835
|
const lazyRests: any[] = []
|
|
5538
|
-
const columnIndex = $xeTable.getColumnIndex(expandColumn)
|
|
5539
|
-
const $columnIndex = $xeTable.getVMColumnIndex(expandColumn)
|
|
5836
|
+
const columnIndex = expandColumn ? $xeTable.getColumnIndex(expandColumn) : -1
|
|
5837
|
+
const $columnIndex = expandColumn ? $xeTable.getVMColumnIndex(expandColumn) : -1
|
|
5540
5838
|
if (rows) {
|
|
5541
5839
|
if (!XEUtils.isArray(rows)) {
|
|
5542
5840
|
rows = [rows]
|
|
@@ -5547,9 +5845,9 @@ export default defineComponent({
|
|
|
5547
5845
|
internalData.rowExpandedMaps = rowExpandedMaps
|
|
5548
5846
|
rows = rows.slice(rows.length - 1, rows.length)
|
|
5549
5847
|
}
|
|
5550
|
-
const validRows: any[] = toggleMethod ? rows.filter((row: any) => toggleMethod({ $table: $xeTable, expanded, column: expandColumn, columnIndex, $columnIndex, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) })) : rows
|
|
5848
|
+
const validRows: any[] = toggleMethod ? rows.filter((row: any) => toggleMethod({ $table: $xeTable, expanded, column: expandColumn as VxeTableDefines.ColumnInfo, columnIndex, $columnIndex, row, rowIndex: $xeTable.getRowIndex(row), $rowIndex: $xeTable.getVMRowIndex(row) })) : rows
|
|
5551
5849
|
if (expanded) {
|
|
5552
|
-
validRows.forEach((row
|
|
5850
|
+
validRows.forEach((row) => {
|
|
5553
5851
|
const rowid = handleGetRowId(row)
|
|
5554
5852
|
if (!rowExpandedMaps[rowid]) {
|
|
5555
5853
|
const rowRest = fullAllDataRowIdData[rowid]
|
|
@@ -5638,6 +5936,70 @@ export default defineComponent({
|
|
|
5638
5936
|
})
|
|
5639
5937
|
return rest
|
|
5640
5938
|
},
|
|
5939
|
+
setRowGroups (fieldOrColumns) {
|
|
5940
|
+
const { rowGroupConfig } = props
|
|
5941
|
+
if (!rowGroupConfig) {
|
|
5942
|
+
errLog('vxe.error.reqProp', ['row-group-config'])
|
|
5943
|
+
return nextTick()
|
|
5944
|
+
}
|
|
5945
|
+
if (fieldOrColumns) {
|
|
5946
|
+
handleUpdateRowGroup((XEUtils.isArray(fieldOrColumns) ? fieldOrColumns : [fieldOrColumns]).map(fieldOrColumn => {
|
|
5947
|
+
return XEUtils.isString(fieldOrColumn) ? fieldOrColumn : fieldOrColumn.field
|
|
5948
|
+
}))
|
|
5949
|
+
return loadTableData(internalData.tableSynchData, true)
|
|
5950
|
+
}
|
|
5951
|
+
return nextTick()
|
|
5952
|
+
},
|
|
5953
|
+
clearRowGroups () {
|
|
5954
|
+
const { rowGroupConfig } = props
|
|
5955
|
+
if (!rowGroupConfig) {
|
|
5956
|
+
errLog('vxe.error.reqProp', ['row-group-config'])
|
|
5957
|
+
return nextTick()
|
|
5958
|
+
}
|
|
5959
|
+
handleUpdateRowGroup([])
|
|
5960
|
+
return loadTableData(internalData.tableSynchData, true)
|
|
5961
|
+
},
|
|
5962
|
+
isRowGroupRecord (row) {
|
|
5963
|
+
const { isRowGroupStatus } = reactData
|
|
5964
|
+
return isRowGroupStatus && row.isAggregate
|
|
5965
|
+
},
|
|
5966
|
+
isRowGroupExpandByRow (row) {
|
|
5967
|
+
const { rowGroupExpandedFlag } = reactData
|
|
5968
|
+
const { rowGroupExpandedMaps } = internalData
|
|
5969
|
+
return !!rowGroupExpandedFlag && !!rowGroupExpandedMaps[getRowid($xeTable, row)]
|
|
5970
|
+
},
|
|
5971
|
+
setRowGroupExpand (rows, expanded) {
|
|
5972
|
+
if (rows) {
|
|
5973
|
+
if (!XEUtils.isArray(rows)) {
|
|
5974
|
+
rows = [rows]
|
|
5975
|
+
}
|
|
5976
|
+
return handleRowGroupVirtualExpand(rows, expanded)
|
|
5977
|
+
}
|
|
5978
|
+
return nextTick()
|
|
5979
|
+
},
|
|
5980
|
+
setAllRowGroupExpand (expanded) {
|
|
5981
|
+
const { tableFullGroupData } = internalData
|
|
5982
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
5983
|
+
const { mapChildrenField } = rowGroupOpts
|
|
5984
|
+
const rgExpandedMaps: Record<string, any> = {}
|
|
5985
|
+
if (expanded && mapChildrenField) {
|
|
5986
|
+
XEUtils.eachTree(tableFullGroupData, (row) => {
|
|
5987
|
+
if (row[mapChildrenField] && row[mapChildrenField].length) {
|
|
5988
|
+
rgExpandedMaps[getRowid($xeTable, row)] = row
|
|
5989
|
+
}
|
|
5990
|
+
}, { children: mapChildrenField })
|
|
5991
|
+
}
|
|
5992
|
+
internalData.rowGroupExpandedMaps = rgExpandedMaps
|
|
5993
|
+
handleVirtualTreeToList()
|
|
5994
|
+
reactData.rowGroupExpandedFlag++
|
|
5995
|
+
return $xeTable.handleTableData()
|
|
5996
|
+
},
|
|
5997
|
+
clearRowGroupExpand () {
|
|
5998
|
+
internalData.rowGroupExpandedMaps = {}
|
|
5999
|
+
handleVirtualTreeToList()
|
|
6000
|
+
reactData.rowGroupExpandedFlag++
|
|
6001
|
+
return $xeTable.handleTableData()
|
|
6002
|
+
},
|
|
5641
6003
|
getTreeExpandRecords () {
|
|
5642
6004
|
const rest: any[] = []
|
|
5643
6005
|
XEUtils.each(internalData.treeExpandedMaps, item => {
|
|
@@ -5680,11 +6042,11 @@ export default defineComponent({
|
|
|
5680
6042
|
})
|
|
5681
6043
|
}
|
|
5682
6044
|
internalData.treeExpandedMaps = {}
|
|
5683
|
-
reactData.treeExpandedFlag++
|
|
5684
6045
|
if (transform) {
|
|
5685
6046
|
handleVirtualTreeToList()
|
|
5686
|
-
|
|
6047
|
+
$xeTable.handleTableData()
|
|
5687
6048
|
}
|
|
6049
|
+
reactData.treeExpandedFlag++
|
|
5688
6050
|
return nextTick()
|
|
5689
6051
|
},
|
|
5690
6052
|
/**
|
|
@@ -5698,15 +6060,16 @@ export default defineComponent({
|
|
|
5698
6060
|
const { transform, lazy } = treeOpts
|
|
5699
6061
|
const rowid = getRowid($xeTable, row)
|
|
5700
6062
|
if (lazy && row[hasChildField] && !treeExpandLazyLoadedMaps[rowid]) {
|
|
5701
|
-
return
|
|
6063
|
+
return $xeTable.clearTreeExpandLoaded(row).then(() => {
|
|
5702
6064
|
return handleAsyncTreeExpandChilds(row)
|
|
5703
6065
|
}).then(() => {
|
|
5704
6066
|
if (transform) {
|
|
5705
6067
|
handleVirtualTreeToList()
|
|
5706
|
-
|
|
6068
|
+
$xeTable.handleTableData()
|
|
5707
6069
|
}
|
|
6070
|
+
reactData.treeExpandedFlag++
|
|
5708
6071
|
}).then(() => {
|
|
5709
|
-
return
|
|
6072
|
+
return $xeTable.recalculate()
|
|
5710
6073
|
})
|
|
5711
6074
|
}
|
|
5712
6075
|
return nextTick()
|
|
@@ -5716,13 +6079,13 @@ export default defineComponent({
|
|
|
5716
6079
|
warnLog('vxe.error.delFunc', ['reloadTreeChilds', 'reloadTreeExpand'])
|
|
5717
6080
|
}
|
|
5718
6081
|
// 即将废弃
|
|
5719
|
-
return
|
|
6082
|
+
return $xeTable.reloadTreeExpand(row)
|
|
5720
6083
|
},
|
|
5721
6084
|
/**
|
|
5722
6085
|
* 切换/展开树节点
|
|
5723
6086
|
*/
|
|
5724
6087
|
toggleTreeExpand (row) {
|
|
5725
|
-
return
|
|
6088
|
+
return $xeTable.setTreeExpand(row, !$xeTable.isTreeExpandByRow(row))
|
|
5726
6089
|
},
|
|
5727
6090
|
/**
|
|
5728
6091
|
* 设置所有树节点的展开与否
|
|
@@ -5740,10 +6103,11 @@ export default defineComponent({
|
|
|
5740
6103
|
expandeds.push(row)
|
|
5741
6104
|
}
|
|
5742
6105
|
}, { children: childrenField })
|
|
5743
|
-
return
|
|
6106
|
+
return $xeTable.setTreeExpand(expandeds, expanded).then(() => {
|
|
5744
6107
|
if (transform) {
|
|
5745
6108
|
handleVirtualTreeToList()
|
|
5746
|
-
|
|
6109
|
+
reactData.treeExpandedFlag++
|
|
6110
|
+
return $xeTable.recalculate()
|
|
5747
6111
|
}
|
|
5748
6112
|
})
|
|
5749
6113
|
},
|
|
@@ -5791,15 +6155,15 @@ export default defineComponent({
|
|
|
5791
6155
|
const { transform, reserve } = treeOpts
|
|
5792
6156
|
const expList = $xeTable.getTreeExpandRecords()
|
|
5793
6157
|
internalData.treeExpandedMaps = {}
|
|
5794
|
-
reactData.treeExpandedFlag++
|
|
5795
6158
|
if (reserve) {
|
|
5796
6159
|
XEUtils.eachTree(tableFullTreeData, row => handleTreeExpandReserve(row, false), { children: childrenField })
|
|
5797
6160
|
}
|
|
5798
6161
|
return $xeTable.handleTableData().then(() => {
|
|
5799
6162
|
if (transform) {
|
|
5800
6163
|
handleVirtualTreeToList()
|
|
5801
|
-
|
|
6164
|
+
$xeTable.handleTableData()
|
|
5802
6165
|
}
|
|
6166
|
+
reactData.treeExpandedFlag++
|
|
5803
6167
|
}).then(() => {
|
|
5804
6168
|
if (expList.length) {
|
|
5805
6169
|
return $xeTable.recalculate()
|
|
@@ -6114,7 +6478,7 @@ export default defineComponent({
|
|
|
6114
6478
|
hasResizable = 1
|
|
6115
6479
|
resizableData[colKey] = column.renderWidth
|
|
6116
6480
|
}
|
|
6117
|
-
if (isCustomVisible && (!checkMethod || checkMethod({ column }))) {
|
|
6481
|
+
if (isCustomVisible && (!checkMethod || checkMethod({ $table: $xeTable, column }))) {
|
|
6118
6482
|
if (!column.visible && column.defaultVisible) {
|
|
6119
6483
|
hasVisible = 1
|
|
6120
6484
|
visibleData[colKey] = false
|
|
@@ -6390,8 +6754,7 @@ export default defineComponent({
|
|
|
6390
6754
|
const hasDeleteKey = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.DELETE)
|
|
6391
6755
|
const isF2 = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.F2)
|
|
6392
6756
|
const isContextMenu = globalEvents.hasKey(evnt, GLOBAL_EVENT_KEYS.CONTEXT_MENU)
|
|
6393
|
-
const
|
|
6394
|
-
const hasCtrlKey = evnt.ctrlKey
|
|
6757
|
+
const isControlKey = hasControlKey(evnt)
|
|
6395
6758
|
const hasShiftKey = evnt.shiftKey
|
|
6396
6759
|
const isAltKey = evnt.altKey
|
|
6397
6760
|
const operArrow = isLeftArrow || isUpArrow || isRightArrow || isDwArrow
|
|
@@ -6451,7 +6814,7 @@ export default defineComponent({
|
|
|
6451
6814
|
} else if (isEnter && !isAltKey && keyboardConfig && keyboardOpts.isEnter && (selected.row || actived.row || (treeConfig && (rowOpts.isCurrent || highlightCurrentRow) && currentRow))) {
|
|
6452
6815
|
const { isLastEnterAppendRow, beforeEnterMethod, enterMethod } = keyboardOpts
|
|
6453
6816
|
// 退出选中
|
|
6454
|
-
if (
|
|
6817
|
+
if (isControlKey) {
|
|
6455
6818
|
// 如果是激活编辑状态,则取消编辑
|
|
6456
6819
|
if (actived.row) {
|
|
6457
6820
|
const params = actived.args
|
|
@@ -6616,7 +6979,7 @@ export default defineComponent({
|
|
|
6616
6979
|
.then(() => $xeTable.scrollToRow(parentRow))
|
|
6617
6980
|
.then(() => $xeTable.triggerCurrentRowEvent(evnt, params))
|
|
6618
6981
|
}
|
|
6619
|
-
} else if (keyboardConfig && isEnableConf(editConfig) && keyboardOpts.isEdit && !
|
|
6982
|
+
} else if (keyboardConfig && isEnableConf(editConfig) && keyboardOpts.isEdit && !isControlKey && (isSpacebar || (keyCode >= 48 && keyCode <= 57) || (keyCode >= 65 && keyCode <= 90) || (keyCode >= 96 && keyCode <= 111) || (keyCode >= 186 && keyCode <= 192) || (keyCode >= 219 && keyCode <= 222))) {
|
|
6620
6983
|
const { editMode, editMethod } = keyboardOpts
|
|
6621
6984
|
// 启用编辑后,空格键功能将失效
|
|
6622
6985
|
// if (isSpacebar) {
|
|
@@ -6769,9 +7132,11 @@ export default defineComponent({
|
|
|
6769
7132
|
const rTooltipMethod = tooltipMethod || (dragConfig ? dragConfig.rowTooltipMethod : null)
|
|
6770
7133
|
let tipContent = ''
|
|
6771
7134
|
if (rTooltipMethod) {
|
|
6772
|
-
|
|
7135
|
+
const rtParams = {
|
|
7136
|
+
$table: $xeTable,
|
|
6773
7137
|
row: dragRow
|
|
6774
|
-
}
|
|
7138
|
+
}
|
|
7139
|
+
tipContent = `${rTooltipMethod(rtParams) || ''}`
|
|
6775
7140
|
} else {
|
|
6776
7141
|
tipContent = getI18n('vxe.table.dragTip', [tdEl.textContent || ''])
|
|
6777
7142
|
}
|
|
@@ -6809,9 +7174,11 @@ export default defineComponent({
|
|
|
6809
7174
|
const { tooltipMethod } = columnDragOpts
|
|
6810
7175
|
let tipContent = ''
|
|
6811
7176
|
if (tooltipMethod) {
|
|
6812
|
-
|
|
7177
|
+
const dtParams = {
|
|
7178
|
+
$table: $xeTable,
|
|
6813
7179
|
column: dragCol as VxeTableDefines.ColumnInfo
|
|
6814
|
-
}
|
|
7180
|
+
}
|
|
7181
|
+
tipContent = `${tooltipMethod(dtParams) || ''}`
|
|
6815
7182
|
} else {
|
|
6816
7183
|
tipContent = getI18n('vxe.table.dragTip', [tdEl.textContent || ''])
|
|
6817
7184
|
}
|
|
@@ -7091,11 +7458,8 @@ export default defineComponent({
|
|
|
7091
7458
|
*/
|
|
7092
7459
|
cacheRowMap (isReset) {
|
|
7093
7460
|
const { treeConfig } = props
|
|
7094
|
-
const {
|
|
7095
|
-
const
|
|
7096
|
-
const childrenField = treeOpts.children || treeOpts.childrenField
|
|
7097
|
-
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
|
|
7098
|
-
const { lazy } = treeOpts
|
|
7461
|
+
const { isRowGroupStatus } = reactData
|
|
7462
|
+
const { fullAllDataRowIdData, tableFullData, tableFullTreeData, tableFullGroupData, treeExpandedMaps } = internalData
|
|
7099
7463
|
const fullAllDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = isReset ? {} : { ...fullAllDataRowIdData } // 存在已删除数据
|
|
7100
7464
|
const fullDataRowIdMaps: Record<string, VxeTableDefines.RowCacheItem> = {}
|
|
7101
7465
|
|
|
@@ -7122,6 +7486,10 @@ export default defineComponent({
|
|
|
7122
7486
|
}
|
|
7123
7487
|
|
|
7124
7488
|
if (treeConfig) {
|
|
7489
|
+
const treeOpts = computeTreeOpts.value
|
|
7490
|
+
const { lazy } = treeOpts
|
|
7491
|
+
const childrenField = treeOpts.children || treeOpts.childrenField
|
|
7492
|
+
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
|
|
7125
7493
|
XEUtils.eachTree(tableFullTreeData, (row, index, items, path, parentRow, nodes) => {
|
|
7126
7494
|
const rowid = handleUpdateRowId(row)
|
|
7127
7495
|
if (treeConfig && lazy) {
|
|
@@ -7136,6 +7504,13 @@ export default defineComponent({
|
|
|
7136
7504
|
}
|
|
7137
7505
|
handleRowCache(row, index, items, parentRow ? -1 : index, parentRow, rowid, nodes.length - 1, toTreePathSeq(path))
|
|
7138
7506
|
}, { children: childrenField })
|
|
7507
|
+
} else if (isRowGroupStatus) {
|
|
7508
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
7509
|
+
const { mapChildrenField } = rowGroupOpts
|
|
7510
|
+
XEUtils.eachTree(tableFullGroupData, (row, index, items, path, parentRow, nodes) => {
|
|
7511
|
+
const rowid = handleUpdateRowId(row)
|
|
7512
|
+
handleRowCache(row, index, items, parentRow ? -1 : index, parentRow, rowid, nodes.length - 1, toTreePathSeq(path))
|
|
7513
|
+
}, { children: mapChildrenField })
|
|
7139
7514
|
} else {
|
|
7140
7515
|
tableFullData.forEach((row, index, items) => {
|
|
7141
7516
|
handleRowCache(row, index, items, index, null, handleUpdateRowId(row), 0, index + 1)
|
|
@@ -7566,6 +7941,7 @@ export default defineComponent({
|
|
|
7566
7941
|
: tableMethods.getCustomStoreData()
|
|
7567
7942
|
if (updateStore) {
|
|
7568
7943
|
return updateStore({
|
|
7944
|
+
$table: $xeTable,
|
|
7569
7945
|
id: tableId,
|
|
7570
7946
|
type,
|
|
7571
7947
|
storeData
|
|
@@ -7636,29 +8012,47 @@ export default defineComponent({
|
|
|
7636
8012
|
},
|
|
7637
8013
|
updateCheckboxStatus () {
|
|
7638
8014
|
const { treeConfig } = props
|
|
7639
|
-
const {
|
|
8015
|
+
const { isRowGroupStatus } = reactData
|
|
8016
|
+
const { afterTreeFullData, afterGroupFullData, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData
|
|
8017
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
7640
8018
|
const treeOpts = computeTreeOpts.value
|
|
7641
|
-
const { transform, mapChildrenField } = treeOpts
|
|
7642
8019
|
const childrenField = treeOpts.children || treeOpts.childrenField
|
|
7643
8020
|
const checkboxOpts = computeCheckboxOpts.value
|
|
7644
8021
|
const { checkField, checkStrictly, checkMethod } = checkboxOpts
|
|
7645
|
-
const { afterTreeFullData } = internalData
|
|
7646
8022
|
if (checkStrictly) {
|
|
7647
8023
|
return
|
|
7648
8024
|
}
|
|
7649
|
-
|
|
7650
|
-
if (treeConfig) {
|
|
8025
|
+
if (isRowGroupStatus || treeConfig) {
|
|
7651
8026
|
const { handleGetRowId } = createHandleGetRowId($xeTable)
|
|
7652
8027
|
const childRowMaps: Record<string, number> = {}
|
|
7653
8028
|
const childRowList: any[][] = []
|
|
7654
|
-
|
|
7655
|
-
|
|
7656
|
-
|
|
7657
|
-
|
|
7658
|
-
|
|
7659
|
-
|
|
8029
|
+
|
|
8030
|
+
if (isRowGroupStatus) {
|
|
8031
|
+
// 行分组
|
|
8032
|
+
const mapChildrenField = rowGroupOpts.mapChildrenField
|
|
8033
|
+
if (mapChildrenField) {
|
|
8034
|
+
XEUtils.eachTree(afterGroupFullData, (row) => {
|
|
8035
|
+
const rowid = handleGetRowId(row)
|
|
8036
|
+
const childList = row[mapChildrenField]
|
|
8037
|
+
if (childList && childList.length && !childRowMaps[rowid]) {
|
|
8038
|
+
childRowMaps[rowid] = 1
|
|
8039
|
+
childRowList.unshift([row, rowid, childList])
|
|
8040
|
+
}
|
|
8041
|
+
}, { children: mapChildrenField })
|
|
7660
8042
|
}
|
|
7661
|
-
}
|
|
8043
|
+
} else if (treeConfig) {
|
|
8044
|
+
// 树结构
|
|
8045
|
+
const { transform, mapChildrenField } = treeOpts
|
|
8046
|
+
XEUtils.eachTree(afterTreeFullData, (row) => {
|
|
8047
|
+
const rowid = handleGetRowId(row)
|
|
8048
|
+
const childList = row[transform ? mapChildrenField : childrenField]
|
|
8049
|
+
if (childList && childList.length && !childRowMaps[rowid]) {
|
|
8050
|
+
childRowMaps[rowid] = 1
|
|
8051
|
+
childRowList.unshift([row, rowid, childList])
|
|
8052
|
+
}
|
|
8053
|
+
}, { children: transform ? mapChildrenField : childrenField })
|
|
8054
|
+
}
|
|
8055
|
+
|
|
7662
8056
|
childRowList.forEach(vals => {
|
|
7663
8057
|
const row: string = vals[0]
|
|
7664
8058
|
const rowid: string = vals[1]
|
|
@@ -7671,7 +8065,7 @@ export default defineComponent({
|
|
|
7671
8065
|
? (item) => {
|
|
7672
8066
|
const childRowid = handleGetRowId(item)
|
|
7673
8067
|
const isSelect = checkField ? XEUtils.get(item, checkField) : selectCheckboxMaps[childRowid]
|
|
7674
|
-
if (checkMethod({ row: item })) {
|
|
8068
|
+
if (checkMethod({ $table: $xeTable, row: item })) {
|
|
7675
8069
|
if (isSelect) {
|
|
7676
8070
|
sLen++
|
|
7677
8071
|
} else if (treeIndeterminateRowMaps[childRowid]) {
|
|
@@ -7729,7 +8123,8 @@ export default defineComponent({
|
|
|
7729
8123
|
},
|
|
7730
8124
|
updateAllCheckboxStatus () {
|
|
7731
8125
|
const { treeConfig } = props
|
|
7732
|
-
const {
|
|
8126
|
+
const { isRowGroupStatus } = reactData
|
|
8127
|
+
const { afterFullData, afterTreeFullData, afterGroupFullData, checkboxReserveRowMap, selectCheckboxMaps, treeIndeterminateRowMaps } = internalData
|
|
7733
8128
|
const checkboxOpts = computeCheckboxOpts.value
|
|
7734
8129
|
const { checkField, checkMethod, showReserveStatus } = checkboxOpts
|
|
7735
8130
|
const { handleGetRowId } = createHandleGetRowId($xeTable)
|
|
@@ -7738,12 +8133,12 @@ export default defineComponent({
|
|
|
7738
8133
|
let hLen = 0 // 半选
|
|
7739
8134
|
let vLen = 0 // 有效行
|
|
7740
8135
|
|
|
7741
|
-
const rootList = (treeConfig ? afterTreeFullData : afterFullData)
|
|
8136
|
+
const rootList = (treeConfig ? afterTreeFullData : (isRowGroupStatus ? afterGroupFullData : afterFullData))
|
|
7742
8137
|
rootList.forEach(checkMethod
|
|
7743
8138
|
? row => {
|
|
7744
8139
|
const childRowid = handleGetRowId(row)
|
|
7745
8140
|
const selected = checkField ? XEUtils.get(row, checkField) : selectCheckboxMaps[childRowid]
|
|
7746
|
-
if (checkMethod({ row })) {
|
|
8141
|
+
if (checkMethod({ $table: $xeTable, row })) {
|
|
7747
8142
|
if (selected) {
|
|
7748
8143
|
sLen++
|
|
7749
8144
|
} else if (treeIndeterminateRowMaps[childRowid]) {
|
|
@@ -7790,7 +8185,9 @@ export default defineComponent({
|
|
|
7790
8185
|
*/
|
|
7791
8186
|
handleBatchSelectRows (rows, checked, isForce) {
|
|
7792
8187
|
const { treeConfig } = props
|
|
8188
|
+
const { isRowGroupStatus } = reactData
|
|
7793
8189
|
const { selectCheckboxMaps } = internalData
|
|
8190
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
7794
8191
|
const treeOpts = computeTreeOpts.value
|
|
7795
8192
|
const { transform, mapChildrenField } = treeOpts
|
|
7796
8193
|
const childrenField = treeOpts.children || treeOpts.childrenField
|
|
@@ -7801,10 +8198,10 @@ export default defineComponent({
|
|
|
7801
8198
|
const indeterminateField = checkboxOpts.indeterminateField || checkboxOpts.halfField
|
|
7802
8199
|
if (checkField) {
|
|
7803
8200
|
// 树结构
|
|
7804
|
-
if (treeConfig && !checkStrictly) {
|
|
8201
|
+
if ((treeConfig || isRowGroupStatus) && !checkStrictly) {
|
|
7805
8202
|
// 更新子节点状态
|
|
7806
8203
|
XEUtils.eachTree(rows, (row) => {
|
|
7807
|
-
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
8204
|
+
if (isForce || (!checkMethod || checkMethod({ $table: $xeTable, row }))) {
|
|
7808
8205
|
XEUtils.set(row, checkField, checked)
|
|
7809
8206
|
if (indeterminateField) {
|
|
7810
8207
|
XEUtils.set(row, indeterminateField, false)
|
|
@@ -7817,7 +8214,7 @@ export default defineComponent({
|
|
|
7817
8214
|
}
|
|
7818
8215
|
// 列表
|
|
7819
8216
|
rows.forEach(row => {
|
|
7820
|
-
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
8217
|
+
if (isForce || (!checkMethod || checkMethod({ $table: $xeTable, row }))) {
|
|
7821
8218
|
XEUtils.set(row, checkField, checked)
|
|
7822
8219
|
handleCheckboxReserveRow(row, checked)
|
|
7823
8220
|
}
|
|
@@ -7827,29 +8224,48 @@ export default defineComponent({
|
|
|
7827
8224
|
}
|
|
7828
8225
|
|
|
7829
8226
|
// 树结构
|
|
7830
|
-
if (
|
|
7831
|
-
|
|
7832
|
-
|
|
7833
|
-
|
|
7834
|
-
|
|
7835
|
-
if (
|
|
7836
|
-
|
|
7837
|
-
|
|
7838
|
-
|
|
7839
|
-
|
|
8227
|
+
if (!checkStrictly) {
|
|
8228
|
+
if (isRowGroupStatus) {
|
|
8229
|
+
// 更新行分组节点状态
|
|
8230
|
+
XEUtils.eachTree(rows, (row) => {
|
|
8231
|
+
const rowid = handleGetRowId(row)
|
|
8232
|
+
if (isForce || (!checkMethod || checkMethod({ $table: $xeTable, row }))) {
|
|
8233
|
+
if (checked) {
|
|
8234
|
+
selectCheckboxMaps[rowid] = row
|
|
8235
|
+
} else {
|
|
8236
|
+
if (selectCheckboxMaps[rowid]) {
|
|
8237
|
+
delete selectCheckboxMaps[rowid]
|
|
8238
|
+
}
|
|
7840
8239
|
}
|
|
8240
|
+
handleCheckboxReserveRow(row, checked)
|
|
7841
8241
|
}
|
|
7842
|
-
|
|
7843
|
-
|
|
7844
|
-
|
|
7845
|
-
|
|
7846
|
-
|
|
8242
|
+
}, { children: rowGroupOpts.mapChildrenField })
|
|
8243
|
+
reactData.updateCheckboxFlag++
|
|
8244
|
+
return
|
|
8245
|
+
} else if (treeConfig) {
|
|
8246
|
+
// 更新子节点状态
|
|
8247
|
+
XEUtils.eachTree(rows, (row) => {
|
|
8248
|
+
const rowid = handleGetRowId(row)
|
|
8249
|
+
if (isForce || (!checkMethod || checkMethod({ $table: $xeTable, row }))) {
|
|
8250
|
+
if (checked) {
|
|
8251
|
+
selectCheckboxMaps[rowid] = row
|
|
8252
|
+
} else {
|
|
8253
|
+
if (selectCheckboxMaps[rowid]) {
|
|
8254
|
+
delete selectCheckboxMaps[rowid]
|
|
8255
|
+
}
|
|
8256
|
+
}
|
|
8257
|
+
handleCheckboxReserveRow(row, checked)
|
|
8258
|
+
}
|
|
8259
|
+
}, { children: transform ? mapChildrenField : childrenField })
|
|
8260
|
+
reactData.updateCheckboxFlag++
|
|
8261
|
+
return
|
|
8262
|
+
}
|
|
7847
8263
|
}
|
|
7848
8264
|
|
|
7849
8265
|
// 列表
|
|
7850
8266
|
rows.forEach(row => {
|
|
7851
8267
|
const rowid = handleGetRowId(row)
|
|
7852
|
-
if (isForce || (!checkMethod || checkMethod({ row }))) {
|
|
8268
|
+
if (isForce || (!checkMethod || checkMethod({ $table: $xeTable, row }))) {
|
|
7853
8269
|
if (checked) {
|
|
7854
8270
|
if (!selectCheckboxMaps[rowid]) {
|
|
7855
8271
|
selectCheckboxMaps[rowid] = row
|
|
@@ -8020,20 +8436,22 @@ export default defineComponent({
|
|
|
8020
8436
|
const radioOpts = computeRadioOpts.value
|
|
8021
8437
|
const checkboxOpts = computeCheckboxOpts.value
|
|
8022
8438
|
const keyboardOpts = computeKeyboardOpts.value
|
|
8439
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
8023
8440
|
const rowOpts = computeRowOpts.value
|
|
8024
8441
|
const columnOpts = computeColumnOpts.value
|
|
8025
8442
|
const currentColumnOpts = computeCurrentColumnOpts.value
|
|
8026
8443
|
const { actived, focused } = editStore
|
|
8027
8444
|
const { row, column } = params
|
|
8028
|
-
const { type, treeNode } = column
|
|
8445
|
+
const { type, treeNode, rowGroupNode } = column
|
|
8029
8446
|
const isRadioType = type === 'radio'
|
|
8030
8447
|
const isCheckboxType = type === 'checkbox'
|
|
8031
8448
|
const isExpandType = type === 'expand'
|
|
8032
8449
|
const cell = evnt.currentTarget as HTMLDivElement
|
|
8033
8450
|
const triggerRadio = isRadioType && getEventTargetNode(evnt, cell, 'vxe-cell--radio').flag
|
|
8034
8451
|
const triggerCheckbox = isCheckboxType && getEventTargetNode(evnt, cell, 'vxe-cell--checkbox').flag
|
|
8035
|
-
const triggerTreeNode = treeNode && getEventTargetNode(evnt, cell, 'vxe-tree
|
|
8452
|
+
const triggerTreeNode = treeNode && getEventTargetNode(evnt, cell, 'vxe-cell--tree-btn').flag
|
|
8036
8453
|
const triggerExpandNode = isExpandType && getEventTargetNode(evnt, cell, 'vxe-table--expanded').flag
|
|
8454
|
+
const triggerRowGroupNode = isExpandType && getEventTargetNode(evnt, cell, 'vxe-row-group--node-btn').flag
|
|
8037
8455
|
params = Object.assign({ cell, triggerRadio, triggerCheckbox, triggerTreeNode, triggerExpandNode }, params)
|
|
8038
8456
|
if (!triggerCheckbox && !triggerRadio) {
|
|
8039
8457
|
// 如果是展开行
|
|
@@ -8044,10 +8462,14 @@ export default defineComponent({
|
|
|
8044
8462
|
if ((treeOpts.trigger === 'row' || (treeNode && treeOpts.trigger === 'cell'))) {
|
|
8045
8463
|
$xeTable.triggerTreeExpandEvent(evnt, params)
|
|
8046
8464
|
}
|
|
8465
|
+
// 如果是行分组
|
|
8466
|
+
if ((rowGroupOpts.trigger === 'row' || (rowGroupNode && rowGroupOpts.trigger === 'cell'))) {
|
|
8467
|
+
$xeTable.triggerRowGroupExpandEvent(evnt, params)
|
|
8468
|
+
}
|
|
8047
8469
|
}
|
|
8048
8470
|
// 如果点击了树节点
|
|
8049
8471
|
if (!triggerTreeNode) {
|
|
8050
|
-
if (!triggerExpandNode) {
|
|
8472
|
+
if (!triggerExpandNode && !triggerRowGroupNode) {
|
|
8051
8473
|
// 如果是当前行
|
|
8052
8474
|
if (rowOpts.isCurrent || highlightCurrentRow) {
|
|
8053
8475
|
if (!triggerCheckbox && !triggerRadio) {
|
|
@@ -8162,7 +8584,9 @@ export default defineComponent({
|
|
|
8162
8584
|
}
|
|
8163
8585
|
},
|
|
8164
8586
|
triggerCheckRowEvent (evnt: MouseEvent, params, checked) {
|
|
8587
|
+
const { treeConfig } = props
|
|
8165
8588
|
const { row } = params
|
|
8589
|
+
const { isRowGroupStatus } = reactData
|
|
8166
8590
|
const { afterFullData } = internalData
|
|
8167
8591
|
const checkboxOpts = computeCheckboxOpts.value
|
|
8168
8592
|
const { checkMethod, trigger } = checkboxOpts
|
|
@@ -8170,7 +8594,7 @@ export default defineComponent({
|
|
|
8170
8594
|
return
|
|
8171
8595
|
}
|
|
8172
8596
|
evnt.stopPropagation()
|
|
8173
|
-
if (checkboxOpts.isShiftKey && evnt.shiftKey && !
|
|
8597
|
+
if (checkboxOpts.isShiftKey && evnt.shiftKey && !(treeConfig || isRowGroupStatus)) {
|
|
8174
8598
|
const checkboxRecords = $xeTable.getCheckboxRecords()
|
|
8175
8599
|
if (checkboxRecords.length) {
|
|
8176
8600
|
const firstRow = checkboxRecords[0]
|
|
@@ -8187,7 +8611,7 @@ export default defineComponent({
|
|
|
8187
8611
|
}
|
|
8188
8612
|
}
|
|
8189
8613
|
}
|
|
8190
|
-
if (!checkMethod || checkMethod({ row })) {
|
|
8614
|
+
if (!checkMethod || checkMethod({ $table: $xeTable, row })) {
|
|
8191
8615
|
$xeTable.handleBatchSelectRows([row], checked)
|
|
8192
8616
|
$xeTable.checkSelectionStatus()
|
|
8193
8617
|
dispatchEvent('checkbox-change', Object.assign({
|
|
@@ -8285,7 +8709,7 @@ export default defineComponent({
|
|
|
8285
8709
|
* 展开行事件
|
|
8286
8710
|
*/
|
|
8287
8711
|
triggerRowExpandEvent (evnt, params) {
|
|
8288
|
-
const { expandColumn
|
|
8712
|
+
const { expandColumn } = reactData
|
|
8289
8713
|
const { rowExpandLazyLoadedMaps } = internalData
|
|
8290
8714
|
const expandOpts = computeExpandOpts.value
|
|
8291
8715
|
const { row } = params
|
|
@@ -8297,12 +8721,12 @@ export default defineComponent({
|
|
|
8297
8721
|
const rowid = getRowid($xeTable, row)
|
|
8298
8722
|
if (!lazy || !rowExpandLazyLoadedMaps[rowid]) {
|
|
8299
8723
|
const expanded = !$xeTable.isRowExpandByRow(row)
|
|
8300
|
-
const columnIndex = $xeTable.getColumnIndex(
|
|
8301
|
-
const $columnIndex = $xeTable.getVMColumnIndex(
|
|
8724
|
+
const columnIndex = expandColumn ? $xeTable.getColumnIndex(expandColumn) : -1
|
|
8725
|
+
const $columnIndex = expandColumn ? $xeTable.getVMColumnIndex(expandColumn) : -1
|
|
8302
8726
|
$xeTable.setRowExpand(row, expanded)
|
|
8303
8727
|
dispatchEvent('toggle-row-expand', {
|
|
8304
8728
|
expanded,
|
|
8305
|
-
column,
|
|
8729
|
+
column: expandColumn,
|
|
8306
8730
|
columnIndex,
|
|
8307
8731
|
$columnIndex,
|
|
8308
8732
|
row,
|
|
@@ -8311,6 +8735,25 @@ export default defineComponent({
|
|
|
8311
8735
|
}, evnt)
|
|
8312
8736
|
}
|
|
8313
8737
|
},
|
|
8738
|
+
/**
|
|
8739
|
+
* 行分组事件
|
|
8740
|
+
*/
|
|
8741
|
+
triggerRowGroupExpandEvent (evnt, params) {
|
|
8742
|
+
const { rowGroupExpandedMaps } = internalData
|
|
8743
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
8744
|
+
const { row, column } = params
|
|
8745
|
+
const { trigger } = rowGroupOpts
|
|
8746
|
+
if (trigger === 'manual') {
|
|
8747
|
+
return
|
|
8748
|
+
}
|
|
8749
|
+
evnt.stopPropagation()
|
|
8750
|
+
const rowid = getRowid($xeTable, row)
|
|
8751
|
+
const expanded = !rowGroupExpandedMaps[rowid]
|
|
8752
|
+
const columnIndex = $xeTable.getColumnIndex(column)
|
|
8753
|
+
const $columnIndex = $xeTable.getVMColumnIndex(column)
|
|
8754
|
+
$xeTable.setRowGroupExpand(row, expanded)
|
|
8755
|
+
dispatchEvent('toggle-row-group-expand', { expanded, column, columnIndex, $columnIndex, row }, evnt)
|
|
8756
|
+
},
|
|
8314
8757
|
/**
|
|
8315
8758
|
* 展开树节点事件
|
|
8316
8759
|
*/
|
|
@@ -8446,7 +8889,7 @@ export default defineComponent({
|
|
|
8446
8889
|
const triggerInput = cell && cell.tagName && cell.tagName.toLowerCase() === 'input'
|
|
8447
8890
|
const triggerRadio = isRadioType && getEventTargetNode(evnt, cell, 'vxe-cell--radio').flag
|
|
8448
8891
|
const triggerCheckbox = isCheckboxType && getEventTargetNode(evnt, cell, 'vxe-cell--checkbox').flag
|
|
8449
|
-
const triggerTreeNode = treeNode && getEventTargetNode(evnt, cell, 'vxe-tree
|
|
8892
|
+
const triggerTreeNode = treeNode && getEventTargetNode(evnt, cell, 'vxe-cell--tree-btn').flag
|
|
8450
8893
|
const triggerExpandNode = isExpandType && getEventTargetNode(evnt, cell, 'vxe-table--expanded').flag
|
|
8451
8894
|
let isColDragCell = false
|
|
8452
8895
|
if (rowOpts.drag) {
|
|
@@ -8716,7 +9159,7 @@ export default defineComponent({
|
|
|
8716
9159
|
evnt.preventDefault()
|
|
8717
9160
|
return
|
|
8718
9161
|
}
|
|
8719
|
-
const
|
|
9162
|
+
const isControlKey = hasControlKey(evnt)
|
|
8720
9163
|
const trEl = evnt.currentTarget as HTMLElement
|
|
8721
9164
|
const rowid = trEl.getAttribute('rowid') || ''
|
|
8722
9165
|
const rest = fullAllDataRowIdData[rowid]
|
|
@@ -8728,11 +9171,11 @@ export default defineComponent({
|
|
|
8728
9171
|
const { dragRow } = reactData
|
|
8729
9172
|
const offsetY = evnt.clientY - trEl.getBoundingClientRect().y
|
|
8730
9173
|
const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom'
|
|
8731
|
-
internalData.prevDragToChild = !!(treeConfig && transform && (isCrossDrag && isToChildDrag) &&
|
|
9174
|
+
internalData.prevDragToChild = !!(treeConfig && transform && (isCrossDrag && isToChildDrag) && isControlKey)
|
|
8732
9175
|
internalData.prevDragRow = row
|
|
8733
9176
|
internalData.prevDragPos = dragPos
|
|
8734
9177
|
if ($xeTable.eqRow(dragRow, row) ||
|
|
8735
|
-
(
|
|
9178
|
+
(isControlKey && treeConfig && lazy && row[hasChildField] && rowRest && !rowRest.treeLoaded) ||
|
|
8736
9179
|
(!isCrossDrag && treeConfig && transform && (isPeerDrag ? dragRow[parentField] !== row[parentField] : rest.level))
|
|
8737
9180
|
) {
|
|
8738
9181
|
showDropTip(evnt, trEl, null, false, dragPos)
|
|
@@ -8991,7 +9434,7 @@ export default defineComponent({
|
|
|
8991
9434
|
evnt.preventDefault()
|
|
8992
9435
|
return
|
|
8993
9436
|
}
|
|
8994
|
-
const
|
|
9437
|
+
const isControlKey = hasControlKey(evnt)
|
|
8995
9438
|
const thEl = evnt.currentTarget as HTMLElement
|
|
8996
9439
|
const colid = thEl.getAttribute('colid')
|
|
8997
9440
|
const column = $xeTable.getColumnById(colid)
|
|
@@ -9000,7 +9443,7 @@ export default defineComponent({
|
|
|
9000
9443
|
const { clientX } = evnt
|
|
9001
9444
|
const offsetX = clientX - thEl.getBoundingClientRect().x
|
|
9002
9445
|
const dragPos = offsetX < thEl.clientWidth / 2 ? 'left' : 'right'
|
|
9003
|
-
internalData.prevDragToChild = !!((isCrossDrag && isToChildDrag) &&
|
|
9446
|
+
internalData.prevDragToChild = !!((isCrossDrag && isToChildDrag) && isControlKey)
|
|
9004
9447
|
internalData.prevDragCol = column
|
|
9005
9448
|
internalData.prevDragPos = dragPos
|
|
9006
9449
|
if (column.fixed ||
|
|
@@ -9525,17 +9968,19 @@ export default defineComponent({
|
|
|
9525
9968
|
*/
|
|
9526
9969
|
scrollToTreeRow (row) {
|
|
9527
9970
|
const { treeConfig } = props
|
|
9971
|
+
const { isRowGroupStatus } = reactData
|
|
9528
9972
|
const { tableFullData } = internalData
|
|
9529
9973
|
const rests: Promise<any>[] = []
|
|
9530
|
-
if (treeConfig) {
|
|
9974
|
+
if (treeConfig || isRowGroupStatus) {
|
|
9975
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
9531
9976
|
const treeOpts = computeTreeOpts.value
|
|
9532
9977
|
const childrenField = treeOpts.children || treeOpts.childrenField
|
|
9533
|
-
const matchObj = XEUtils.findTree(tableFullData, item => $xeTable.eqRow(item, row), { children: childrenField })
|
|
9978
|
+
const matchObj = XEUtils.findTree(tableFullData, item => $xeTable.eqRow(item, row), { children: isRowGroupStatus ? rowGroupOpts.mapChildrenField : childrenField })
|
|
9534
9979
|
if (matchObj) {
|
|
9535
9980
|
const nodes = matchObj.nodes
|
|
9536
9981
|
nodes.forEach((row, index) => {
|
|
9537
|
-
if (index < nodes.length - 1 &&
|
|
9538
|
-
rests.push(
|
|
9982
|
+
if (index < nodes.length - 1 && !$xeTable.isTreeExpandByRow(row)) {
|
|
9983
|
+
rests.push($xeTable.setTreeExpand(row, true))
|
|
9539
9984
|
}
|
|
9540
9985
|
})
|
|
9541
9986
|
}
|
|
@@ -9964,7 +10409,7 @@ export default defineComponent({
|
|
|
9964
10409
|
|
|
9965
10410
|
const renderRowExpandedVNs = () => {
|
|
9966
10411
|
const { treeConfig } = props
|
|
9967
|
-
const { expandColumn } = reactData
|
|
10412
|
+
const { expandColumn, isRowGroupStatus } = reactData
|
|
9968
10413
|
const tableRowExpandedList = computeTableRowExpandedList.value
|
|
9969
10414
|
const expandOpts = computeExpandOpts.value
|
|
9970
10415
|
const { mode } = expandOpts
|
|
@@ -9981,13 +10426,15 @@ export default defineComponent({
|
|
|
9981
10426
|
const { handleGetRowId } = createHandleGetRowId($xeTable)
|
|
9982
10427
|
tableRowExpandedList.forEach((row) => {
|
|
9983
10428
|
const expandOpts = computeExpandOpts.value
|
|
9984
|
-
const { height: expandHeight, padding } = expandOpts
|
|
9985
|
-
const { fullAllDataRowIdData } = internalData
|
|
10429
|
+
const { height: expandHeight, padding, indent } = expandOpts
|
|
10430
|
+
const { fullAllDataRowIdData, fullColumnIdData } = internalData
|
|
9986
10431
|
const treeOpts = computeTreeOpts.value
|
|
9987
10432
|
const { transform, seqMode } = treeOpts
|
|
9988
10433
|
const cellStyle: Record<string, string> = {}
|
|
9989
10434
|
const rowid = handleGetRowId(row)
|
|
9990
10435
|
const rowRest = fullAllDataRowIdData[rowid]
|
|
10436
|
+
const colid = expandColumn.id
|
|
10437
|
+
const colRest = fullColumnIdData[colid] || {}
|
|
9991
10438
|
let rowLevel = 0
|
|
9992
10439
|
let seq: string | number = -1
|
|
9993
10440
|
let _rowIndex = -1
|
|
@@ -9995,7 +10442,7 @@ export default defineComponent({
|
|
|
9995
10442
|
let $rowIndex = -1
|
|
9996
10443
|
if (rowRest) {
|
|
9997
10444
|
rowLevel = rowRest.level
|
|
9998
|
-
if (treeConfig && transform && seqMode === 'increasing') {
|
|
10445
|
+
if (isRowGroupStatus || (treeConfig && transform && seqMode === 'increasing')) {
|
|
9999
10446
|
seq = rowRest._index + 1
|
|
10000
10447
|
} else {
|
|
10001
10448
|
seq = rowRest.seq
|
|
@@ -10007,10 +10454,39 @@ export default defineComponent({
|
|
|
10007
10454
|
if (expandHeight) {
|
|
10008
10455
|
cellStyle.height = `${expandHeight}px`
|
|
10009
10456
|
}
|
|
10010
|
-
if (treeConfig) {
|
|
10011
|
-
cellStyle.paddingLeft = `${(rowLevel * treeOpts.indent) + 30}px`
|
|
10457
|
+
if (isRowGroupStatus || treeConfig) {
|
|
10458
|
+
cellStyle.paddingLeft = `${(rowLevel * (XEUtils.isNumber(indent) ? indent : treeOpts.indent)) + 30}px`
|
|
10459
|
+
}
|
|
10460
|
+
let columnIndex = -1
|
|
10461
|
+
let $columnIndex = -1
|
|
10462
|
+
let _columnIndex = -1
|
|
10463
|
+
if (colRest) {
|
|
10464
|
+
columnIndex = colRest.index
|
|
10465
|
+
$columnIndex = colRest.$index
|
|
10466
|
+
_columnIndex = colRest._index
|
|
10467
|
+
}
|
|
10468
|
+
const expandParams: VxeTableDefines.CellRenderDataParams = {
|
|
10469
|
+
$grid: $xeGrid,
|
|
10470
|
+
$table: $xeTable,
|
|
10471
|
+
seq,
|
|
10472
|
+
column: expandColumn,
|
|
10473
|
+
columnIndex,
|
|
10474
|
+
$columnIndex,
|
|
10475
|
+
_columnIndex,
|
|
10476
|
+
fixed: '',
|
|
10477
|
+
type: 'body',
|
|
10478
|
+
level: rowLevel,
|
|
10479
|
+
rowid,
|
|
10480
|
+
row,
|
|
10481
|
+
rowIndex,
|
|
10482
|
+
$rowIndex,
|
|
10483
|
+
_rowIndex,
|
|
10484
|
+
isHidden: false,
|
|
10485
|
+
isEdit: false,
|
|
10486
|
+
visibleData: [],
|
|
10487
|
+
data: [],
|
|
10488
|
+
items: []
|
|
10012
10489
|
}
|
|
10013
|
-
const expandParams = { $table: $xeTable, seq, column: expandColumn, fixed: '', type: 'body', level: rowLevel, row, rowIndex, $rowIndex, _rowIndex }
|
|
10014
10490
|
expandVNs.push(
|
|
10015
10491
|
h('div', {
|
|
10016
10492
|
key: rowid,
|
|
@@ -10163,7 +10639,7 @@ export default defineComponent({
|
|
|
10163
10639
|
|
|
10164
10640
|
const renderVN = () => {
|
|
10165
10641
|
const { loading, stripe, showHeader, height, treeConfig, mouseConfig, showFooter, highlightCell, highlightHoverRow, highlightHoverColumn, editConfig, editRules } = props
|
|
10166
|
-
const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, columnStore, filterStore, customStore } = reactData
|
|
10642
|
+
const { isGroup, overflowX, overflowY, scrollXLoad, scrollYLoad, tableData, initStore, isRowGroupStatus, columnStore, filterStore, customStore } = reactData
|
|
10167
10643
|
const { leftList, rightList } = columnStore
|
|
10168
10644
|
const loadingSlot = slots.loading
|
|
10169
10645
|
const tableTipConfig = computeTableTipConfig.value
|
|
@@ -10204,6 +10680,7 @@ export default defineComponent({
|
|
|
10204
10680
|
'is--header': showHeader,
|
|
10205
10681
|
'is--footer': showFooter,
|
|
10206
10682
|
'is--group': isGroup,
|
|
10683
|
+
'is-row-group': isRowGroupStatus,
|
|
10207
10684
|
'is--tree-line': treeConfig && (treeOpts.showLine || treeOpts.line),
|
|
10208
10685
|
'is--fixed-left': leftList.length,
|
|
10209
10686
|
'is--fixed-right': rightList.length,
|
|
@@ -10586,6 +11063,10 @@ export default defineComponent({
|
|
|
10586
11063
|
})
|
|
10587
11064
|
})
|
|
10588
11065
|
|
|
11066
|
+
watch(computeRowGroupFields, (val) => {
|
|
11067
|
+
handleUpdateRowGroup(val)
|
|
11068
|
+
})
|
|
11069
|
+
|
|
10589
11070
|
if ($xeTabs) {
|
|
10590
11071
|
watch(() => $xeTabs ? $xeTabs.reactData.resizeFlag : null, () => {
|
|
10591
11072
|
handleGlobalResizeEvent()
|
|
@@ -10620,11 +11101,15 @@ export default defineComponent({
|
|
|
10620
11101
|
const columnOpts = computeColumnOpts.value
|
|
10621
11102
|
const rowOpts = computeRowOpts.value
|
|
10622
11103
|
const customOpts = computeCustomOpts.value
|
|
11104
|
+
const rowGroupOpts = computeRowGroupOpts.value
|
|
11105
|
+
const { groupFields } = rowGroupOpts
|
|
10623
11106
|
|
|
10624
11107
|
if (columnOpts.drag || rowOpts.drag || customOpts.allowSort) {
|
|
10625
11108
|
initTpImg()
|
|
10626
11109
|
}
|
|
10627
11110
|
|
|
11111
|
+
handleUpdateRowGroup(groupFields)
|
|
11112
|
+
|
|
10628
11113
|
nextTick(() => {
|
|
10629
11114
|
const { data, exportConfig, importConfig, treeConfig, showOverflow, highlightCurrentRow, highlightCurrentColumn } = props
|
|
10630
11115
|
const { scrollXStore, scrollYStore } = internalData
|
|
@@ -10640,8 +11125,6 @@ export default defineComponent({
|
|
|
10640
11125
|
const importOpts = computeImportOpts.value
|
|
10641
11126
|
const currentRowOpts = computeCurrentRowOpts.value
|
|
10642
11127
|
const currentColumnOpts = computeCurrentColumnOpts.value
|
|
10643
|
-
const virtualXOpts = computeVirtualXOpts.value
|
|
10644
|
-
const virtualYOpts = computeVirtualYOpts.value
|
|
10645
11128
|
const keyboardOpts = computeKeyboardOpts.value
|
|
10646
11129
|
|
|
10647
11130
|
if (props.rowId) {
|
|
@@ -10768,19 +11251,19 @@ export default defineComponent({
|
|
|
10768
11251
|
}
|
|
10769
11252
|
|
|
10770
11253
|
// 如果不支持虚拟滚动
|
|
10771
|
-
if (props.spanMethod) {
|
|
10772
|
-
|
|
10773
|
-
|
|
10774
|
-
|
|
10775
|
-
|
|
10776
|
-
|
|
10777
|
-
|
|
10778
|
-
}
|
|
10779
|
-
if (props.footerSpanMethod) {
|
|
10780
|
-
|
|
10781
|
-
|
|
10782
|
-
|
|
10783
|
-
}
|
|
11254
|
+
// if (props.spanMethod) {
|
|
11255
|
+
// if (virtualXOpts.enabled) {
|
|
11256
|
+
// warnLog('vxe.error.notConflictProp', ['span-method', 'virtual-x-config.enabled=false'])
|
|
11257
|
+
// }
|
|
11258
|
+
// if (virtualYOpts.enabled) {
|
|
11259
|
+
// warnLog('vxe.error.notConflictProp', ['span-method', 'virtual-y-config.enabled=false'])
|
|
11260
|
+
// }
|
|
11261
|
+
// }
|
|
11262
|
+
// if (props.footerSpanMethod) {
|
|
11263
|
+
// if (virtualXOpts.enabled) {
|
|
11264
|
+
// warnLog('vxe.error.notConflictProp', ['footer-span-method', 'virtual-x-config.enabled=false'])
|
|
11265
|
+
// }
|
|
11266
|
+
// }
|
|
10784
11267
|
|
|
10785
11268
|
// 检查是否有安装需要的模块
|
|
10786
11269
|
if (props.editConfig && !$xeTable.insert) {
|