vxe-table 4.16.1 → 4.16.2
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/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/table/src/column.js +2 -0
- package/es/table/src/columnInfo.js +1 -0
- package/es/table/src/emits.js +3 -0
- package/es/table/src/header.js +47 -16
- package/es/table/src/props.js +11 -3
- package/es/table/src/table.js +257 -51
- package/es/table/src/util.js +70 -2
- package/es/table/style.css +11 -17
- package/es/table/style.min.css +1 -1
- package/es/ui/index.js +2 -2
- package/es/ui/src/log.js +1 -1
- package/es/vxe-table/style.css +11 -17
- 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 +181 -38
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +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/header.js +62 -13
- package/lib/table/src/header.min.js +1 -1
- package/lib/table/src/props.js +11 -3
- package/lib/table/src/props.min.js +1 -1
- package/lib/table/src/table.js +24 -13
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +74 -2
- package/lib/table/src/util.min.js +1 -1
- package/lib/table/style/style.css +11 -17
- package/lib/table/style/style.min.css +1 -1
- package/lib/ui/index.js +2 -2
- 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/lib/vxe-table/style/style.css +11 -17
- 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/table/src/column.ts +2 -0
- package/packages/table/src/columnInfo.ts +1 -0
- package/packages/table/src/emits.ts +4 -0
- package/packages/table/src/header.ts +49 -17
- package/packages/table/src/props.ts +11 -3
- package/packages/table/src/table.ts +258 -50
- package/packages/table/src/util.ts +76 -2
- package/packages/ui/index.ts +1 -1
- package/styles/components/table.scss +33 -55
- /package/es/{iconfont.1756272578850.ttf → iconfont.1756452373591.ttf} +0 -0
- /package/es/{iconfont.1756272578850.woff → iconfont.1756452373591.woff} +0 -0
- /package/es/{iconfont.1756272578850.woff2 → iconfont.1756452373591.woff2} +0 -0
- /package/lib/{iconfont.1756272578850.ttf → iconfont.1756452373591.ttf} +0 -0
- /package/lib/{iconfont.1756272578850.woff → iconfont.1756452373591.woff} +0 -0
- /package/lib/{iconfont.1756272578850.woff2 → iconfont.1756452373591.woff2} +0 -0
|
@@ -282,6 +282,8 @@ export default defineVxeComponent({
|
|
|
282
282
|
pendingRowFlag: 1,
|
|
283
283
|
insertRowFlag: 1,
|
|
284
284
|
removeRowFlag: 1,
|
|
285
|
+
|
|
286
|
+
mergeHeadFlag: 1,
|
|
285
287
|
mergeBodyFlag: 1,
|
|
286
288
|
mergeFootFlag: 1,
|
|
287
289
|
|
|
@@ -1249,16 +1251,62 @@ export default defineVxeComponent({
|
|
|
1249
1251
|
}
|
|
1250
1252
|
}
|
|
1251
1253
|
|
|
1252
|
-
const
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1254
|
+
const removeBodyMerges = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) => {
|
|
1255
|
+
const { mergeBodyList, fullColumnIdData, fullAllDataRowIdData, mergeBodyMaps } = internalData
|
|
1256
|
+
const rest: VxeTableDefines.MergeItem[] = []
|
|
1257
|
+
if (merges) {
|
|
1258
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable)
|
|
1259
|
+
if (!XEUtils.isArray(merges)) {
|
|
1260
|
+
merges = [merges]
|
|
1261
|
+
}
|
|
1262
|
+
merges.forEach((item) => {
|
|
1263
|
+
const { row: margeRow, col: margeCol } = item
|
|
1264
|
+
let mergeRowIndex = -1
|
|
1265
|
+
let mergeColumnIndex = -1
|
|
1266
|
+
if (XEUtils.isNumber(margeRow)) {
|
|
1267
|
+
mergeRowIndex = margeRow
|
|
1268
|
+
} else {
|
|
1269
|
+
const rowid = margeRow ? handleGetRowId(margeRow) : null
|
|
1270
|
+
const rowRest = rowid ? fullAllDataRowIdData[rowid] : null
|
|
1271
|
+
if (rowRest) {
|
|
1272
|
+
mergeRowIndex = rowRest._index
|
|
1273
|
+
}
|
|
1274
|
+
}
|
|
1275
|
+
if (XEUtils.isNumber(margeCol)) {
|
|
1276
|
+
mergeColumnIndex = margeCol
|
|
1277
|
+
} else {
|
|
1278
|
+
const colid = margeCol ? margeCol.id : null
|
|
1279
|
+
const colRest = colid ? fullColumnIdData[colid] : null
|
|
1280
|
+
if (colRest) {
|
|
1281
|
+
mergeColumnIndex = colRest._index
|
|
1282
|
+
}
|
|
1283
|
+
}
|
|
1284
|
+
const mcIndex = XEUtils.findIndexOf(mergeBodyList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex)
|
|
1285
|
+
if (mcIndex > -1) {
|
|
1286
|
+
const rItems = mergeBodyList.splice(mcIndex, 1)
|
|
1287
|
+
const item = rItems[0]
|
|
1288
|
+
if (item) {
|
|
1289
|
+
rest.push(rItems[0])
|
|
1290
|
+
if (mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
|
|
1291
|
+
delete mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`]
|
|
1292
|
+
}
|
|
1293
|
+
}
|
|
1294
|
+
}
|
|
1295
|
+
})
|
|
1296
|
+
}
|
|
1297
|
+
return rest
|
|
1257
1298
|
}
|
|
1258
1299
|
|
|
1259
|
-
const
|
|
1300
|
+
const handleUpdateMergeHeaderCells = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) => {
|
|
1301
|
+
internalData.mergeHeaderList = []
|
|
1302
|
+
internalData.mergeHeaderMaps = {}
|
|
1303
|
+
internalData.mergeHeaderCellMaps = {}
|
|
1304
|
+
$xeTable.setMergeHeaderCells(merges)
|
|
1305
|
+
}
|
|
1306
|
+
|
|
1307
|
+
const handleHeaderMerge = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) => {
|
|
1260
1308
|
const { footerTableData } = reactData
|
|
1261
|
-
const {
|
|
1309
|
+
const { mergeHeaderList, mergeHeaderMaps, fullColumnIdData } = internalData
|
|
1262
1310
|
if (merges) {
|
|
1263
1311
|
const { visibleColumn } = internalData
|
|
1264
1312
|
if (!XEUtils.isArray(merges)) {
|
|
@@ -1283,7 +1331,7 @@ export default defineVxeComponent({
|
|
|
1283
1331
|
if (rowspan > 1 || colspan > 1) {
|
|
1284
1332
|
const row = footerTableData[mergeRowIndex]
|
|
1285
1333
|
const column = visibleColumn[mergeColumnIndex]
|
|
1286
|
-
let mergeItem =
|
|
1334
|
+
let mergeItem = mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]
|
|
1287
1335
|
if (mergeItem) {
|
|
1288
1336
|
mergeItem.rowspan = rowspan
|
|
1289
1337
|
mergeItem.colspan = colspan
|
|
@@ -1300,8 +1348,8 @@ export default defineVxeComponent({
|
|
|
1300
1348
|
_rowspan: rowspan,
|
|
1301
1349
|
_colspan: colspan
|
|
1302
1350
|
}
|
|
1303
|
-
|
|
1304
|
-
|
|
1351
|
+
mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem
|
|
1352
|
+
mergeHeaderList.push(mergeItem)
|
|
1305
1353
|
}
|
|
1306
1354
|
}
|
|
1307
1355
|
}
|
|
@@ -1309,27 +1357,17 @@ export default defineVxeComponent({
|
|
|
1309
1357
|
}
|
|
1310
1358
|
}
|
|
1311
1359
|
|
|
1312
|
-
const
|
|
1313
|
-
const {
|
|
1360
|
+
const removeHeaderMerges = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) => {
|
|
1361
|
+
const { mergeHeaderList, fullColumnIdData, mergeHeaderMaps } = internalData
|
|
1314
1362
|
const rest: VxeTableDefines.MergeItem[] = []
|
|
1315
1363
|
if (merges) {
|
|
1316
|
-
const { handleGetRowId } = createHandleGetRowId($xeTable)
|
|
1317
1364
|
if (!XEUtils.isArray(merges)) {
|
|
1318
1365
|
merges = [merges]
|
|
1319
1366
|
}
|
|
1320
1367
|
merges.forEach((item) => {
|
|
1321
1368
|
const { row: margeRow, col: margeCol } = item
|
|
1322
|
-
|
|
1369
|
+
const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1
|
|
1323
1370
|
let mergeColumnIndex = -1
|
|
1324
|
-
if (XEUtils.isNumber(margeRow)) {
|
|
1325
|
-
mergeRowIndex = margeRow
|
|
1326
|
-
} else {
|
|
1327
|
-
const rowid = margeRow ? handleGetRowId(margeRow) : null
|
|
1328
|
-
const rowRest = rowid ? fullAllDataRowIdData[rowid] : null
|
|
1329
|
-
if (rowRest) {
|
|
1330
|
-
mergeRowIndex = rowRest._index
|
|
1331
|
-
}
|
|
1332
|
-
}
|
|
1333
1371
|
if (XEUtils.isNumber(margeCol)) {
|
|
1334
1372
|
mergeColumnIndex = margeCol
|
|
1335
1373
|
} else {
|
|
@@ -1339,14 +1377,14 @@ export default defineVxeComponent({
|
|
|
1339
1377
|
mergeColumnIndex = colRest._index
|
|
1340
1378
|
}
|
|
1341
1379
|
}
|
|
1342
|
-
const mcIndex = XEUtils.findIndexOf(
|
|
1380
|
+
const mcIndex = XEUtils.findIndexOf(mergeHeaderList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex)
|
|
1343
1381
|
if (mcIndex > -1) {
|
|
1344
|
-
const rItems =
|
|
1382
|
+
const rItems = mergeHeaderList.splice(mcIndex, 1)
|
|
1345
1383
|
const item = rItems[0]
|
|
1346
1384
|
if (item) {
|
|
1347
|
-
rest.push(
|
|
1348
|
-
if (
|
|
1349
|
-
delete
|
|
1385
|
+
rest.push(item)
|
|
1386
|
+
if (mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
|
|
1387
|
+
delete mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]
|
|
1350
1388
|
}
|
|
1351
1389
|
}
|
|
1352
1390
|
}
|
|
@@ -1355,6 +1393,66 @@ export default defineVxeComponent({
|
|
|
1355
1393
|
return rest
|
|
1356
1394
|
}
|
|
1357
1395
|
|
|
1396
|
+
const handleUpdateMergeFooterCells = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) => {
|
|
1397
|
+
internalData.mergeFooterList = []
|
|
1398
|
+
internalData.mergeFooterMaps = {}
|
|
1399
|
+
internalData.mergeFooterCellMaps = {}
|
|
1400
|
+
$xeTable.setMergeFooterCells(merges)
|
|
1401
|
+
}
|
|
1402
|
+
|
|
1403
|
+
const handleFooterMerge = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) => {
|
|
1404
|
+
const { footerTableData } = reactData
|
|
1405
|
+
const { mergeFooterList, mergeFooterMaps, fullColumnIdData } = internalData
|
|
1406
|
+
if (merges) {
|
|
1407
|
+
const { visibleColumn } = internalData
|
|
1408
|
+
if (!XEUtils.isArray(merges)) {
|
|
1409
|
+
merges = [merges]
|
|
1410
|
+
}
|
|
1411
|
+
merges.forEach((item) => {
|
|
1412
|
+
let { row: margeRow, col: margeCol, rowspan, colspan } = item
|
|
1413
|
+
const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1
|
|
1414
|
+
let mergeColumnIndex = -1
|
|
1415
|
+
if (XEUtils.isNumber(margeCol)) {
|
|
1416
|
+
mergeColumnIndex = margeCol
|
|
1417
|
+
} else {
|
|
1418
|
+
const colid = margeCol ? margeCol.id : null
|
|
1419
|
+
const colRest = colid ? fullColumnIdData[colid] : null
|
|
1420
|
+
if (colRest) {
|
|
1421
|
+
mergeColumnIndex = colRest._index
|
|
1422
|
+
}
|
|
1423
|
+
}
|
|
1424
|
+
if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
|
|
1425
|
+
rowspan = XEUtils.toNumber(rowspan) || 1
|
|
1426
|
+
colspan = XEUtils.toNumber(colspan) || 1
|
|
1427
|
+
if (rowspan > 1 || colspan > 1) {
|
|
1428
|
+
const row = footerTableData[mergeRowIndex]
|
|
1429
|
+
const column = visibleColumn[mergeColumnIndex]
|
|
1430
|
+
let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`]
|
|
1431
|
+
if (mergeItem) {
|
|
1432
|
+
mergeItem.rowspan = rowspan
|
|
1433
|
+
mergeItem.colspan = colspan
|
|
1434
|
+
mergeItem._rowspan = rowspan
|
|
1435
|
+
mergeItem._colspan = colspan
|
|
1436
|
+
} else {
|
|
1437
|
+
mergeItem = {
|
|
1438
|
+
row: mergeRowIndex,
|
|
1439
|
+
col: mergeColumnIndex,
|
|
1440
|
+
rowspan,
|
|
1441
|
+
colspan,
|
|
1442
|
+
_row: row,
|
|
1443
|
+
_col: column,
|
|
1444
|
+
_rowspan: rowspan,
|
|
1445
|
+
_colspan: colspan
|
|
1446
|
+
}
|
|
1447
|
+
mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem
|
|
1448
|
+
mergeFooterList.push(mergeItem)
|
|
1449
|
+
}
|
|
1450
|
+
}
|
|
1451
|
+
}
|
|
1452
|
+
})
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1455
|
+
|
|
1358
1456
|
const removeFooterMerges = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) => {
|
|
1359
1457
|
const { mergeFooterList, fullColumnIdData, mergeFooterMaps } = internalData
|
|
1360
1458
|
const rest: VxeTableDefines.MergeItem[] = []
|
|
@@ -1462,8 +1560,22 @@ export default defineVxeComponent({
|
|
|
1462
1560
|
}
|
|
1463
1561
|
|
|
1464
1562
|
const calcTableHeight = (key: 'height' | 'minHeight' | 'maxHeight') => {
|
|
1563
|
+
const { editConfig } = props
|
|
1465
1564
|
const { parentHeight } = reactData
|
|
1466
|
-
|
|
1565
|
+
let val = props[key]
|
|
1566
|
+
if (key === 'minHeight') {
|
|
1567
|
+
const defMinHeight = getConfig().table.minHeight
|
|
1568
|
+
if (XEUtils.eqNull(val)) {
|
|
1569
|
+
if (eqEmptyValue(defMinHeight)) {
|
|
1570
|
+
// 编辑模式默认最小高度
|
|
1571
|
+
if (isEnableConf(editConfig)) {
|
|
1572
|
+
val = 144
|
|
1573
|
+
}
|
|
1574
|
+
} else {
|
|
1575
|
+
val = defMinHeight
|
|
1576
|
+
}
|
|
1577
|
+
}
|
|
1578
|
+
}
|
|
1467
1579
|
let num = 0
|
|
1468
1580
|
if (val) {
|
|
1469
1581
|
if (val === '100%' || val === 'auto') {
|
|
@@ -2388,7 +2500,7 @@ export default defineVxeComponent({
|
|
|
2388
2500
|
}
|
|
2389
2501
|
if (xRightCornerEl) {
|
|
2390
2502
|
xRightCornerEl.style.width = scrollbarXToTop ? '' : `${osbWidth}px`
|
|
2391
|
-
xRightCornerEl.style.display = scrollbarXToTop ? '' : (
|
|
2503
|
+
xRightCornerEl.style.display = scrollbarXToTop ? '' : (xScrollbarVisible === 'visible' ? 'block' : '')
|
|
2392
2504
|
}
|
|
2393
2505
|
|
|
2394
2506
|
const scrollYVirtualEl = refScrollYVirtualElem.value
|
|
@@ -2400,7 +2512,7 @@ export default defineVxeComponent({
|
|
|
2400
2512
|
const yTopCornerEl = refScrollYTopCornerElem.value
|
|
2401
2513
|
if (yTopCornerEl) {
|
|
2402
2514
|
yTopCornerEl.style.height = `${tHeaderHeight}px`
|
|
2403
|
-
yTopCornerEl.style.display =
|
|
2515
|
+
yTopCornerEl.style.display = tHeaderHeight && yScrollbarVisible === 'visible' ? 'block' : ''
|
|
2404
2516
|
}
|
|
2405
2517
|
const yWrapperEl = refScrollYWrapperElem.value
|
|
2406
2518
|
if (yWrapperEl) {
|
|
@@ -2411,7 +2523,7 @@ export default defineVxeComponent({
|
|
|
2411
2523
|
if (yBottomCornerEl) {
|
|
2412
2524
|
yBottomCornerEl.style.height = `${tFooterHeight}px`
|
|
2413
2525
|
yBottomCornerEl.style.top = `${tHeaderHeight + tbHeight}px`
|
|
2414
|
-
yBottomCornerEl.style.display =
|
|
2526
|
+
yBottomCornerEl.style.display = tFooterHeight && yScrollbarVisible === 'visible' ? 'block' : ''
|
|
2415
2527
|
}
|
|
2416
2528
|
|
|
2417
2529
|
const rowExpandEl = refRowExpandElem.value
|
|
@@ -3119,10 +3231,18 @@ export default defineVxeComponent({
|
|
|
3119
3231
|
}
|
|
3120
3232
|
}
|
|
3121
3233
|
|
|
3234
|
+
const handleDefaultMergeHeaderItems = () => {
|
|
3235
|
+
const { mergeHeaderCells } = props
|
|
3236
|
+
if (mergeHeaderCells) {
|
|
3237
|
+
$xeTable.setMergeHeaderCells(mergeHeaderCells)
|
|
3238
|
+
}
|
|
3239
|
+
}
|
|
3240
|
+
|
|
3122
3241
|
const handleDefaultMergeFooterItems = () => {
|
|
3123
|
-
const { mergeFooterItems } = props
|
|
3124
|
-
|
|
3125
|
-
|
|
3242
|
+
const { mergeFooterCells, mergeFooterItems } = props
|
|
3243
|
+
const mFooterCells = mergeFooterCells || mergeFooterItems
|
|
3244
|
+
if (mFooterCells) {
|
|
3245
|
+
$xeTable.setMergeFooterCells(mFooterCells)
|
|
3126
3246
|
}
|
|
3127
3247
|
}
|
|
3128
3248
|
|
|
@@ -3574,6 +3694,10 @@ export default defineVxeComponent({
|
|
|
3574
3694
|
|
|
3575
3695
|
handleReserveStatus()
|
|
3576
3696
|
$xeTable.checkSelectionStatus()
|
|
3697
|
+
$xeTable.dispatchEvent('data-change', {
|
|
3698
|
+
visibleColumn: internalData.visibleColumn,
|
|
3699
|
+
visibleData: internalData.afterFullData
|
|
3700
|
+
}, null)
|
|
3577
3701
|
return new Promise<void>(resolve => {
|
|
3578
3702
|
nextTick()
|
|
3579
3703
|
.then(() => handleRecalculateStyle(false, false, false))
|
|
@@ -3636,6 +3760,7 @@ export default defineVxeComponent({
|
|
|
3636
3760
|
handleDefaultTreeExpand()
|
|
3637
3761
|
handleDefaultRowGroupExpand()
|
|
3638
3762
|
handleDefaultMergeCells()
|
|
3763
|
+
handleDefaultMergeHeaderItems()
|
|
3639
3764
|
handleDefaultMergeFooterItems()
|
|
3640
3765
|
nextTick(() => setTimeout(() => $xeTable.recalculate()))
|
|
3641
3766
|
}
|
|
@@ -6960,6 +7085,10 @@ export default defineVxeComponent({
|
|
|
6960
7085
|
}
|
|
6961
7086
|
reactData.footerTableData = footData
|
|
6962
7087
|
$xeTable.handleUpdateFooterMerge()
|
|
7088
|
+
$xeTable.dispatchEvent('footer-data-change', {
|
|
7089
|
+
visibleColumn: internalData.visibleColumn,
|
|
7090
|
+
footData
|
|
7091
|
+
}, null)
|
|
6963
7092
|
return nextTick()
|
|
6964
7093
|
},
|
|
6965
7094
|
/**
|
|
@@ -7027,39 +7156,85 @@ export default defineVxeComponent({
|
|
|
7027
7156
|
return updateStyle()
|
|
7028
7157
|
})
|
|
7029
7158
|
},
|
|
7030
|
-
|
|
7159
|
+
setMergeHeaderCells (merges) {
|
|
7160
|
+
handleHeaderMerge(merges)
|
|
7161
|
+
$xeTable.handleUpdateHeaderMerge()
|
|
7162
|
+
return nextTick().then(() => {
|
|
7163
|
+
return updateStyle()
|
|
7164
|
+
})
|
|
7165
|
+
},
|
|
7166
|
+
/**
|
|
7167
|
+
* 移除表头单元格合并 [{row:Row|number, col:ColumnInfo|number}]
|
|
7168
|
+
*/
|
|
7169
|
+
removeMergeHeaderCells (merges) {
|
|
7170
|
+
const rest = removeHeaderMerges(merges)
|
|
7171
|
+
$xeTable.handleUpdateHeaderMerge()
|
|
7172
|
+
return nextTick().then(() => {
|
|
7173
|
+
updateStyle()
|
|
7174
|
+
return rest
|
|
7175
|
+
})
|
|
7176
|
+
},
|
|
7177
|
+
/**
|
|
7178
|
+
* 获取所有被合并的表头单元格
|
|
7179
|
+
*/
|
|
7180
|
+
getMergeHeaderCells () {
|
|
7181
|
+
return internalData.mergeHeaderList.slice(0)
|
|
7182
|
+
},
|
|
7183
|
+
/**
|
|
7184
|
+
* 清除所有表头单元格合并
|
|
7185
|
+
*/
|
|
7186
|
+
clearMergeHeaderCells () {
|
|
7187
|
+
internalData.mergeHeaderList = []
|
|
7188
|
+
internalData.mergeHeaderMaps = {}
|
|
7189
|
+
internalData.mergeHeaderCellMaps = {}
|
|
7190
|
+
reactData.mergeHeadFlag++
|
|
7191
|
+
return nextTick().then(() => {
|
|
7192
|
+
return updateStyle()
|
|
7193
|
+
})
|
|
7194
|
+
},
|
|
7195
|
+
setMergeFooterCells (merges) {
|
|
7031
7196
|
if (props.footerSpanMethod) {
|
|
7032
|
-
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method'])
|
|
7197
|
+
errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method'])
|
|
7033
7198
|
}
|
|
7034
7199
|
handleFooterMerge(merges)
|
|
7035
7200
|
$xeTable.handleUpdateFooterMerge()
|
|
7036
7201
|
return nextTick().then(() => {
|
|
7037
|
-
$xeTable.updateCellAreas()
|
|
7038
7202
|
return updateStyle()
|
|
7039
7203
|
})
|
|
7040
7204
|
},
|
|
7041
|
-
|
|
7205
|
+
setMergeFooterItems (merges) {
|
|
7206
|
+
// errLog('vxe.error.delFunc', ['setMergeFooterItems', 'setMergeFooterCells'])
|
|
7207
|
+
return $xeTable.setMergeFooterCells(merges)
|
|
7208
|
+
},
|
|
7209
|
+
removeMergeFooterCells (merges) {
|
|
7042
7210
|
if (props.footerSpanMethod) {
|
|
7043
|
-
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method'])
|
|
7211
|
+
errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method'])
|
|
7044
7212
|
}
|
|
7045
7213
|
const rest = removeFooterMerges(merges)
|
|
7046
7214
|
$xeTable.handleUpdateFooterMerge()
|
|
7047
7215
|
return nextTick().then(() => {
|
|
7048
|
-
$xeTable.updateCellAreas()
|
|
7049
7216
|
updateStyle()
|
|
7050
7217
|
return rest
|
|
7051
7218
|
})
|
|
7052
7219
|
},
|
|
7220
|
+
removeMergeFooterItems (merges) {
|
|
7221
|
+
// errLog('vxe.error.delFunc', ['removeMergeFooterItems', 'removeMergeFooterCells'])
|
|
7222
|
+
return $xeTable.removeMergeFooterCells(merges)
|
|
7223
|
+
},
|
|
7053
7224
|
/**
|
|
7054
7225
|
* 获取所有被合并的表尾
|
|
7055
7226
|
*/
|
|
7056
|
-
|
|
7227
|
+
getMergeFooterCells () {
|
|
7057
7228
|
return internalData.mergeFooterList.slice(0)
|
|
7058
7229
|
},
|
|
7230
|
+
getMergeFooterItems () {
|
|
7231
|
+
// errLog('vxe.error.delFunc', ['getMergeFooterItems', 'getMergeFooterCells'])
|
|
7232
|
+
return $xeTable.getMergeFooterCells()
|
|
7233
|
+
},
|
|
7059
7234
|
/**
|
|
7060
7235
|
* 清除所有表尾合并
|
|
7061
7236
|
*/
|
|
7062
|
-
|
|
7237
|
+
clearMergeFooterCells () {
|
|
7063
7238
|
internalData.mergeFooterList = []
|
|
7064
7239
|
internalData.mergeFooterMaps = {}
|
|
7065
7240
|
internalData.mergeFooterCellMaps = {}
|
|
@@ -7068,6 +7243,10 @@ export default defineVxeComponent({
|
|
|
7068
7243
|
return updateStyle()
|
|
7069
7244
|
})
|
|
7070
7245
|
},
|
|
7246
|
+
clearMergeFooterItems () {
|
|
7247
|
+
// errLog('vxe.error.delFunc', ['clearMergeFooterItems', 'clearMergeFooterCells'])
|
|
7248
|
+
return $xeTable.clearMergeFooterCells()
|
|
7249
|
+
},
|
|
7071
7250
|
updateCellAreas () {
|
|
7072
7251
|
const { mouseConfig } = props
|
|
7073
7252
|
const mouseOpts = computeMouseOpts.value
|
|
@@ -9109,6 +9288,11 @@ export default defineVxeComponent({
|
|
|
9109
9288
|
internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList)
|
|
9110
9289
|
reactData.mergeBodyFlag++
|
|
9111
9290
|
},
|
|
9291
|
+
handleUpdateHeaderMerge () {
|
|
9292
|
+
const { mergeHeaderList } = internalData
|
|
9293
|
+
internalData.mergeHeaderCellMaps = buildMergeData(mergeHeaderList)
|
|
9294
|
+
reactData.mergeHeadFlag++
|
|
9295
|
+
},
|
|
9112
9296
|
handleUpdateFooterMerge () {
|
|
9113
9297
|
const { mergeFooterList } = internalData
|
|
9114
9298
|
internalData.mergeFooterCellMaps = buildMergeData(mergeFooterList)
|
|
@@ -11899,7 +12083,10 @@ export default defineVxeComponent({
|
|
|
11899
12083
|
ref: refScrollXSpaceElem,
|
|
11900
12084
|
class: 'vxe-table--scroll-x-space'
|
|
11901
12085
|
})
|
|
11902
|
-
])
|
|
12086
|
+
]),
|
|
12087
|
+
h('div', {
|
|
12088
|
+
class: 'vxe-table--scroll-x-handle-appearance'
|
|
12089
|
+
})
|
|
11903
12090
|
]),
|
|
11904
12091
|
h('div', {
|
|
11905
12092
|
ref: refScrollXRightCornerElem,
|
|
@@ -11930,7 +12117,10 @@ export default defineVxeComponent({
|
|
|
11930
12117
|
ref: refScrollYSpaceElem,
|
|
11931
12118
|
class: 'vxe-table--scroll-y-space'
|
|
11932
12119
|
})
|
|
11933
|
-
])
|
|
12120
|
+
]),
|
|
12121
|
+
h('div', {
|
|
12122
|
+
class: 'vxe-table--scroll-y-handle-appearance'
|
|
12123
|
+
})
|
|
11934
12124
|
]),
|
|
11935
12125
|
h('div', {
|
|
11936
12126
|
ref: refScrollYBottomCornerElem,
|
|
@@ -12425,15 +12615,33 @@ export default defineVxeComponent({
|
|
|
12425
12615
|
handleUpdateMergeBodyCells(props.mergeCells || [])
|
|
12426
12616
|
})
|
|
12427
12617
|
|
|
12428
|
-
const
|
|
12618
|
+
const mergeHeaderItemFlag = ref(0)
|
|
12619
|
+
watch(() => props.mergeHeaderCells ? props.mergeHeaderCells.length : -1, () => {
|
|
12620
|
+
mergeHeaderItemFlag.value++
|
|
12621
|
+
})
|
|
12622
|
+
watch(() => props.mergeHeaderCells, () => {
|
|
12623
|
+
mergeHeaderItemFlag.value++
|
|
12624
|
+
})
|
|
12625
|
+
watch(mergeHeaderItemFlag, () => {
|
|
12626
|
+
handleUpdateMergeHeaderCells(props.mergeHeaderCells || [])
|
|
12627
|
+
})
|
|
12628
|
+
|
|
12629
|
+
const mergeFooteCellFlag = ref(0)
|
|
12630
|
+
watch(() => props.mergeFooterCells ? props.mergeFooterCells.length : -1, () => {
|
|
12631
|
+
mergeFooteCellFlag.value++
|
|
12632
|
+
})
|
|
12633
|
+
watch(() => props.mergeFooterCells, () => {
|
|
12634
|
+
mergeFooteCellFlag.value++
|
|
12635
|
+
})
|
|
12429
12636
|
watch(() => props.mergeFooterItems ? props.mergeFooterItems.length : -1, () => {
|
|
12430
|
-
|
|
12637
|
+
mergeFooteCellFlag.value++
|
|
12431
12638
|
})
|
|
12432
12639
|
watch(() => props.mergeFooterItems, () => {
|
|
12433
|
-
|
|
12640
|
+
mergeFooteCellFlag.value++
|
|
12434
12641
|
})
|
|
12435
|
-
watch(
|
|
12436
|
-
|
|
12642
|
+
watch(mergeFooteCellFlag, () => {
|
|
12643
|
+
const mFooterCells = props.mergeFooterCells || props.mergeFooterItems
|
|
12644
|
+
handleUpdateMergeFooterCells(mFooterCells || [])
|
|
12437
12645
|
})
|
|
12438
12646
|
|
|
12439
12647
|
watch(computeRowGroupFields, (val) => {
|
|
@@ -73,6 +73,7 @@ export function createInternalData (): TableInternalData {
|
|
|
73
73
|
tableFullColumn: [],
|
|
74
74
|
// 渲染所有列
|
|
75
75
|
visibleColumn: [],
|
|
76
|
+
|
|
76
77
|
// 全量数据集(包括当前和已删除)
|
|
77
78
|
fullAllDataRowIdData: {},
|
|
78
79
|
// 数据集(仅当前)
|
|
@@ -84,16 +85,22 @@ export function createInternalData (): TableInternalData {
|
|
|
84
85
|
fullColumnIdData: {},
|
|
85
86
|
fullColumnFieldData: {},
|
|
86
87
|
|
|
88
|
+
// 合并表头单元格的数据
|
|
89
|
+
mergeHeaderList: [],
|
|
90
|
+
mergeHeaderMaps: {},
|
|
91
|
+
// 已合并单元格数据集合
|
|
92
|
+
mergeHeaderCellMaps: {},
|
|
87
93
|
// 合并单元格的数据
|
|
88
94
|
mergeBodyList: [],
|
|
89
95
|
mergeBodyMaps: {},
|
|
96
|
+
// 已合并单元格数据集合
|
|
97
|
+
mergeBodyCellMaps: {},
|
|
90
98
|
// 合并表尾的数据
|
|
91
99
|
mergeFooterList: [],
|
|
92
100
|
mergeFooterMaps: {},
|
|
93
|
-
// 已合并单元格数据集合
|
|
94
|
-
mergeBodyCellMaps: {},
|
|
95
101
|
// 已合并表尾数据集合
|
|
96
102
|
mergeFooterCellMaps: {},
|
|
103
|
+
|
|
97
104
|
// 已展开的行集合
|
|
98
105
|
rowExpandedMaps: {},
|
|
99
106
|
// 懒加载中的展开行的集合
|
|
@@ -194,6 +201,73 @@ export const convertHeaderColumnToRows = (originColumns: any): any[][] => {
|
|
|
194
201
|
return rows
|
|
195
202
|
}
|
|
196
203
|
|
|
204
|
+
export function convertHeaderToGridRows (spanColumns: VxeTableDefines.ColumnInfo[][]) {
|
|
205
|
+
const rSize = spanColumns.length
|
|
206
|
+
const cSize = spanColumns[0].reduce((sum, cell) => sum + cell.colSpan, 0)
|
|
207
|
+
|
|
208
|
+
const occupiedRows: boolean[][] = []
|
|
209
|
+
const fullRows: any[][] = []
|
|
210
|
+
for (let rIndex = 0; rIndex < rSize; rIndex++) {
|
|
211
|
+
const oCols: boolean[] = []
|
|
212
|
+
const dCols: string[] = []
|
|
213
|
+
for (let cIndex = 0; cIndex < cSize; cIndex++) {
|
|
214
|
+
oCols.push(false)
|
|
215
|
+
dCols.push('')
|
|
216
|
+
}
|
|
217
|
+
occupiedRows.push(oCols)
|
|
218
|
+
fullRows.push(dCols)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
for (let rIndex = 0; rIndex < rSize; rIndex++) {
|
|
222
|
+
let currColIndex = 0
|
|
223
|
+
for (const column of spanColumns[rIndex]) {
|
|
224
|
+
const { colSpan, rowSpan } = column
|
|
225
|
+
let startColIndex = -1
|
|
226
|
+
for (let ccIndex = currColIndex; ccIndex <= cSize - colSpan; ccIndex++) {
|
|
227
|
+
let oFlag = true
|
|
228
|
+
for (let csIndex = 0; csIndex < colSpan; csIndex++) {
|
|
229
|
+
if (occupiedRows[rIndex][ccIndex + csIndex]) {
|
|
230
|
+
oFlag = false
|
|
231
|
+
break
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
if (oFlag) {
|
|
235
|
+
startColIndex = ccIndex
|
|
236
|
+
break
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
if (startColIndex === -1) {
|
|
240
|
+
for (let j = 0; j <= cSize - colSpan; j++) {
|
|
241
|
+
let oFlag = true
|
|
242
|
+
for (let k = 0; k < colSpan; k++) {
|
|
243
|
+
if (occupiedRows[rIndex][j + k]) {
|
|
244
|
+
oFlag = false
|
|
245
|
+
break
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
if (oFlag) {
|
|
249
|
+
startColIndex = j
|
|
250
|
+
break
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
if (startColIndex === -1) {
|
|
254
|
+
// error
|
|
255
|
+
break
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
for (let srIndex = rIndex; srIndex < rIndex + rowSpan; srIndex++) {
|
|
260
|
+
for (let scIndex = startColIndex; scIndex < startColIndex + colSpan; scIndex++) {
|
|
261
|
+
occupiedRows[srIndex][scIndex] = true
|
|
262
|
+
fullRows[srIndex][scIndex] = column
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
currColIndex = startColIndex + colSpan
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return fullRows
|
|
269
|
+
}
|
|
270
|
+
|
|
197
271
|
export function restoreScrollLocation ($xeTable: VxeTableConstructor, scrollLeft: number, scrollTop: number) {
|
|
198
272
|
const internalData = $xeTable.internalData
|
|
199
273
|
|