vxe-table 4.16.0 → 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/module/edit/hook.js +55 -17
- package/es/table/src/column.js +2 -0
- package/es/table/src/columnInfo.js +1 -0
- package/es/table/src/emits.js +5 -0
- package/es/table/src/header.js +47 -16
- package/es/table/src/props.js +11 -3
- package/es/table/src/store.js +8 -0
- package/es/table/src/table.js +579 -87
- 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 +265 -65
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/table/module/edit/hook.js +54 -15
- package/lib/table/module/edit/hook.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/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/store.js +15 -0
- package/lib/table/src/store.min.js +1 -0
- package/lib/table/src/table.js +45 -25
- 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/module/edit/hook.ts +55 -19
- package/packages/table/src/column.ts +2 -0
- package/packages/table/src/columnInfo.ts +1 -0
- package/packages/table/src/emits.ts +6 -0
- package/packages/table/src/header.ts +49 -17
- package/packages/table/src/props.ts +11 -3
- package/packages/table/src/store.ts +14 -0
- package/packages/table/src/table.ts +583 -83
- 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.1756083655214.ttf → iconfont.1756452373591.ttf} +0 -0
- /package/es/{iconfont.1756083655214.woff → iconfont.1756452373591.woff} +0 -0
- /package/es/{iconfont.1756083655214.woff2 → iconfont.1756452373591.woff2} +0 -0
- /package/lib/{iconfont.1756083655214.ttf → iconfont.1756452373591.ttf} +0 -0
- /package/lib/{iconfont.1756083655214.woff → iconfont.1756452373591.woff} +0 -0
- /package/lib/{iconfont.1756083655214.woff2 → iconfont.1756452373591.woff2} +0 -0
|
@@ -8,6 +8,7 @@ import { createInternalData, getRowUniqueId, clearTableAllStatus, getColumnList,
|
|
|
8
8
|
import { getSlotVNs } from '../../ui/src/vn'
|
|
9
9
|
import { moveRowAnimateToTb, clearRowAnimate, moveColAnimateToLr, clearColAnimate } from './anime'
|
|
10
10
|
import { warnLog, errLog } from '../../ui/src/log'
|
|
11
|
+
import { getCrossTableDragRowInfo } from './store'
|
|
11
12
|
import Cell from './cell'
|
|
12
13
|
import TableBodyComponent from './body'
|
|
13
14
|
import TableHeaderComponent from './header'
|
|
@@ -40,6 +41,11 @@ const customStorageKey = 'VXE_CUSTOM_STORE'
|
|
|
40
41
|
const maxYHeight = 5e6
|
|
41
42
|
const maxXWidth = 5e6
|
|
42
43
|
|
|
44
|
+
let crossTableDragRowObj: {
|
|
45
|
+
$oldTable: VxeTableConstructor & VxeTablePrivateMethods
|
|
46
|
+
$newTable: (VxeTableConstructor & VxeTablePrivateMethods) | null
|
|
47
|
+
} | null = null
|
|
48
|
+
|
|
43
49
|
export default defineVxeComponent({
|
|
44
50
|
name: 'VxeTable',
|
|
45
51
|
props: tableProps,
|
|
@@ -62,6 +68,8 @@ export default defineVxeComponent({
|
|
|
62
68
|
|
|
63
69
|
const { computeSize } = useFns.useSize(props)
|
|
64
70
|
|
|
71
|
+
const crossTableDragRowInfo = getCrossTableDragRowInfo()
|
|
72
|
+
|
|
65
73
|
const reactData = reactive<TableReactData>({
|
|
66
74
|
// 低性能的静态列
|
|
67
75
|
staticColumns: [],
|
|
@@ -274,6 +282,8 @@ export default defineVxeComponent({
|
|
|
274
282
|
pendingRowFlag: 1,
|
|
275
283
|
insertRowFlag: 1,
|
|
276
284
|
removeRowFlag: 1,
|
|
285
|
+
|
|
286
|
+
mergeHeadFlag: 1,
|
|
277
287
|
mergeBodyFlag: 1,
|
|
278
288
|
mergeFootFlag: 1,
|
|
279
289
|
|
|
@@ -302,9 +312,9 @@ export default defineVxeComponent({
|
|
|
302
312
|
|
|
303
313
|
isCustomStatus: false,
|
|
304
314
|
|
|
305
|
-
|
|
315
|
+
isCrossDragRow: false,
|
|
306
316
|
dragRow: null,
|
|
307
|
-
|
|
317
|
+
isCrossDragCol: false,
|
|
308
318
|
dragCol: null,
|
|
309
319
|
dragTipText: '',
|
|
310
320
|
|
|
@@ -1241,16 +1251,62 @@ export default defineVxeComponent({
|
|
|
1241
1251
|
}
|
|
1242
1252
|
}
|
|
1243
1253
|
|
|
1244
|
-
const
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
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
|
|
1249
1298
|
}
|
|
1250
1299
|
|
|
1251
|
-
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[]) => {
|
|
1252
1308
|
const { footerTableData } = reactData
|
|
1253
|
-
const {
|
|
1309
|
+
const { mergeHeaderList, mergeHeaderMaps, fullColumnIdData } = internalData
|
|
1254
1310
|
if (merges) {
|
|
1255
1311
|
const { visibleColumn } = internalData
|
|
1256
1312
|
if (!XEUtils.isArray(merges)) {
|
|
@@ -1275,7 +1331,7 @@ export default defineVxeComponent({
|
|
|
1275
1331
|
if (rowspan > 1 || colspan > 1) {
|
|
1276
1332
|
const row = footerTableData[mergeRowIndex]
|
|
1277
1333
|
const column = visibleColumn[mergeColumnIndex]
|
|
1278
|
-
let mergeItem =
|
|
1334
|
+
let mergeItem = mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]
|
|
1279
1335
|
if (mergeItem) {
|
|
1280
1336
|
mergeItem.rowspan = rowspan
|
|
1281
1337
|
mergeItem.colspan = colspan
|
|
@@ -1292,8 +1348,8 @@ export default defineVxeComponent({
|
|
|
1292
1348
|
_rowspan: rowspan,
|
|
1293
1349
|
_colspan: colspan
|
|
1294
1350
|
}
|
|
1295
|
-
|
|
1296
|
-
|
|
1351
|
+
mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem
|
|
1352
|
+
mergeHeaderList.push(mergeItem)
|
|
1297
1353
|
}
|
|
1298
1354
|
}
|
|
1299
1355
|
}
|
|
@@ -1301,27 +1357,17 @@ export default defineVxeComponent({
|
|
|
1301
1357
|
}
|
|
1302
1358
|
}
|
|
1303
1359
|
|
|
1304
|
-
const
|
|
1305
|
-
const {
|
|
1360
|
+
const removeHeaderMerges = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) => {
|
|
1361
|
+
const { mergeHeaderList, fullColumnIdData, mergeHeaderMaps } = internalData
|
|
1306
1362
|
const rest: VxeTableDefines.MergeItem[] = []
|
|
1307
1363
|
if (merges) {
|
|
1308
|
-
const { handleGetRowId } = createHandleGetRowId($xeTable)
|
|
1309
1364
|
if (!XEUtils.isArray(merges)) {
|
|
1310
1365
|
merges = [merges]
|
|
1311
1366
|
}
|
|
1312
1367
|
merges.forEach((item) => {
|
|
1313
1368
|
const { row: margeRow, col: margeCol } = item
|
|
1314
|
-
|
|
1369
|
+
const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1
|
|
1315
1370
|
let mergeColumnIndex = -1
|
|
1316
|
-
if (XEUtils.isNumber(margeRow)) {
|
|
1317
|
-
mergeRowIndex = margeRow
|
|
1318
|
-
} else {
|
|
1319
|
-
const rowid = margeRow ? handleGetRowId(margeRow) : null
|
|
1320
|
-
const rowRest = rowid ? fullAllDataRowIdData[rowid] : null
|
|
1321
|
-
if (rowRest) {
|
|
1322
|
-
mergeRowIndex = rowRest._index
|
|
1323
|
-
}
|
|
1324
|
-
}
|
|
1325
1371
|
if (XEUtils.isNumber(margeCol)) {
|
|
1326
1372
|
mergeColumnIndex = margeCol
|
|
1327
1373
|
} else {
|
|
@@ -1331,14 +1377,14 @@ export default defineVxeComponent({
|
|
|
1331
1377
|
mergeColumnIndex = colRest._index
|
|
1332
1378
|
}
|
|
1333
1379
|
}
|
|
1334
|
-
const mcIndex = XEUtils.findIndexOf(
|
|
1380
|
+
const mcIndex = XEUtils.findIndexOf(mergeHeaderList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex)
|
|
1335
1381
|
if (mcIndex > -1) {
|
|
1336
|
-
const rItems =
|
|
1382
|
+
const rItems = mergeHeaderList.splice(mcIndex, 1)
|
|
1337
1383
|
const item = rItems[0]
|
|
1338
1384
|
if (item) {
|
|
1339
|
-
rest.push(
|
|
1340
|
-
if (
|
|
1341
|
-
delete
|
|
1385
|
+
rest.push(item)
|
|
1386
|
+
if (mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
|
|
1387
|
+
delete mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]
|
|
1342
1388
|
}
|
|
1343
1389
|
}
|
|
1344
1390
|
}
|
|
@@ -1347,6 +1393,66 @@ export default defineVxeComponent({
|
|
|
1347
1393
|
return rest
|
|
1348
1394
|
}
|
|
1349
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
|
+
|
|
1350
1456
|
const removeFooterMerges = (merges: VxeTableDefines.MergeOptions | VxeTableDefines.MergeOptions[]) => {
|
|
1351
1457
|
const { mergeFooterList, fullColumnIdData, mergeFooterMaps } = internalData
|
|
1352
1458
|
const rest: VxeTableDefines.MergeItem[] = []
|
|
@@ -1454,8 +1560,22 @@ export default defineVxeComponent({
|
|
|
1454
1560
|
}
|
|
1455
1561
|
|
|
1456
1562
|
const calcTableHeight = (key: 'height' | 'minHeight' | 'maxHeight') => {
|
|
1563
|
+
const { editConfig } = props
|
|
1457
1564
|
const { parentHeight } = reactData
|
|
1458
|
-
|
|
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
|
+
}
|
|
1459
1579
|
let num = 0
|
|
1460
1580
|
if (val) {
|
|
1461
1581
|
if (val === '100%' || val === 'auto') {
|
|
@@ -2318,22 +2438,27 @@ export default defineVxeComponent({
|
|
|
2318
2438
|
emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : ''
|
|
2319
2439
|
}
|
|
2320
2440
|
|
|
2441
|
+
const scrollbarXConf = scrollbarOpts.x || {}
|
|
2321
2442
|
const scrollbarXToTop = computeScrollbarXToTop.value
|
|
2443
|
+
const scrollbarYConf = scrollbarOpts.y || {}
|
|
2322
2444
|
const scrollbarYToLeft = computeScrollbarYToLeft.value
|
|
2323
2445
|
|
|
2324
2446
|
let xScrollbarVisible = overflowX ? 'visible' : 'hidden'
|
|
2325
|
-
if ($xeGanttView) {
|
|
2447
|
+
if (scrollbarXConf.visible === 'visible' || $xeGanttView) {
|
|
2326
2448
|
osbHeight = scrollbarHeight
|
|
2327
2449
|
xScrollbarVisible = 'visible'
|
|
2328
|
-
} else if (
|
|
2450
|
+
} else if (scrollbarXConf.visible === 'hidden' || scrollbarXConf.visible === false) {
|
|
2329
2451
|
osbHeight = 0
|
|
2330
2452
|
xScrollbarVisible = 'hidden'
|
|
2331
2453
|
}
|
|
2332
2454
|
|
|
2333
2455
|
let yScrollbarVisible = overflowY ? 'visible' : 'hidden'
|
|
2334
|
-
if ((
|
|
2456
|
+
if ((scrollbarYConf.visible === 'hidden' || scrollbarYConf.visible === false) || ($xeGanttView && !scrollbarYToLeft)) {
|
|
2335
2457
|
osbWidth = 0
|
|
2336
2458
|
yScrollbarVisible = 'hidden'
|
|
2459
|
+
} else if (scrollbarYConf.visible === 'visible') {
|
|
2460
|
+
osbWidth = scrollbarWidth
|
|
2461
|
+
yScrollbarVisible = 'visible'
|
|
2337
2462
|
}
|
|
2338
2463
|
|
|
2339
2464
|
let tbHeight = 0
|
|
@@ -2375,7 +2500,7 @@ export default defineVxeComponent({
|
|
|
2375
2500
|
}
|
|
2376
2501
|
if (xRightCornerEl) {
|
|
2377
2502
|
xRightCornerEl.style.width = scrollbarXToTop ? '' : `${osbWidth}px`
|
|
2378
|
-
xRightCornerEl.style.display = scrollbarXToTop ? '' : (
|
|
2503
|
+
xRightCornerEl.style.display = scrollbarXToTop ? '' : (xScrollbarVisible === 'visible' ? 'block' : '')
|
|
2379
2504
|
}
|
|
2380
2505
|
|
|
2381
2506
|
const scrollYVirtualEl = refScrollYVirtualElem.value
|
|
@@ -2387,7 +2512,7 @@ export default defineVxeComponent({
|
|
|
2387
2512
|
const yTopCornerEl = refScrollYTopCornerElem.value
|
|
2388
2513
|
if (yTopCornerEl) {
|
|
2389
2514
|
yTopCornerEl.style.height = `${tHeaderHeight}px`
|
|
2390
|
-
yTopCornerEl.style.display =
|
|
2515
|
+
yTopCornerEl.style.display = tHeaderHeight && yScrollbarVisible === 'visible' ? 'block' : ''
|
|
2391
2516
|
}
|
|
2392
2517
|
const yWrapperEl = refScrollYWrapperElem.value
|
|
2393
2518
|
if (yWrapperEl) {
|
|
@@ -2398,7 +2523,7 @@ export default defineVxeComponent({
|
|
|
2398
2523
|
if (yBottomCornerEl) {
|
|
2399
2524
|
yBottomCornerEl.style.height = `${tFooterHeight}px`
|
|
2400
2525
|
yBottomCornerEl.style.top = `${tHeaderHeight + tbHeight}px`
|
|
2401
|
-
yBottomCornerEl.style.display =
|
|
2526
|
+
yBottomCornerEl.style.display = tFooterHeight && yScrollbarVisible === 'visible' ? 'block' : ''
|
|
2402
2527
|
}
|
|
2403
2528
|
|
|
2404
2529
|
const rowExpandEl = refRowExpandElem.value
|
|
@@ -3106,10 +3231,18 @@ export default defineVxeComponent({
|
|
|
3106
3231
|
}
|
|
3107
3232
|
}
|
|
3108
3233
|
|
|
3234
|
+
const handleDefaultMergeHeaderItems = () => {
|
|
3235
|
+
const { mergeHeaderCells } = props
|
|
3236
|
+
if (mergeHeaderCells) {
|
|
3237
|
+
$xeTable.setMergeHeaderCells(mergeHeaderCells)
|
|
3238
|
+
}
|
|
3239
|
+
}
|
|
3240
|
+
|
|
3109
3241
|
const handleDefaultMergeFooterItems = () => {
|
|
3110
|
-
const { mergeFooterItems } = props
|
|
3111
|
-
|
|
3112
|
-
|
|
3242
|
+
const { mergeFooterCells, mergeFooterItems } = props
|
|
3243
|
+
const mFooterCells = mergeFooterCells || mergeFooterItems
|
|
3244
|
+
if (mFooterCells) {
|
|
3245
|
+
$xeTable.setMergeFooterCells(mFooterCells)
|
|
3113
3246
|
}
|
|
3114
3247
|
}
|
|
3115
3248
|
|
|
@@ -3561,6 +3694,10 @@ export default defineVxeComponent({
|
|
|
3561
3694
|
|
|
3562
3695
|
handleReserveStatus()
|
|
3563
3696
|
$xeTable.checkSelectionStatus()
|
|
3697
|
+
$xeTable.dispatchEvent('data-change', {
|
|
3698
|
+
visibleColumn: internalData.visibleColumn,
|
|
3699
|
+
visibleData: internalData.afterFullData
|
|
3700
|
+
}, null)
|
|
3564
3701
|
return new Promise<void>(resolve => {
|
|
3565
3702
|
nextTick()
|
|
3566
3703
|
.then(() => handleRecalculateStyle(false, false, false))
|
|
@@ -3623,6 +3760,7 @@ export default defineVxeComponent({
|
|
|
3623
3760
|
handleDefaultTreeExpand()
|
|
3624
3761
|
handleDefaultRowGroupExpand()
|
|
3625
3762
|
handleDefaultMergeCells()
|
|
3763
|
+
handleDefaultMergeHeaderItems()
|
|
3626
3764
|
handleDefaultMergeFooterItems()
|
|
3627
3765
|
nextTick(() => setTimeout(() => $xeTable.recalculate()))
|
|
3628
3766
|
}
|
|
@@ -5079,7 +5217,9 @@ export default defineVxeComponent({
|
|
|
5079
5217
|
}
|
|
5080
5218
|
}
|
|
5081
5219
|
}
|
|
5082
|
-
|
|
5220
|
+
const rest = $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true)
|
|
5221
|
+
clearRowDragData()
|
|
5222
|
+
return rest
|
|
5083
5223
|
},
|
|
5084
5224
|
/**
|
|
5085
5225
|
* 获取表格的全量列
|
|
@@ -6945,6 +7085,10 @@ export default defineVxeComponent({
|
|
|
6945
7085
|
}
|
|
6946
7086
|
reactData.footerTableData = footData
|
|
6947
7087
|
$xeTable.handleUpdateFooterMerge()
|
|
7088
|
+
$xeTable.dispatchEvent('footer-data-change', {
|
|
7089
|
+
visibleColumn: internalData.visibleColumn,
|
|
7090
|
+
footData
|
|
7091
|
+
}, null)
|
|
6948
7092
|
return nextTick()
|
|
6949
7093
|
},
|
|
6950
7094
|
/**
|
|
@@ -7012,39 +7156,85 @@ export default defineVxeComponent({
|
|
|
7012
7156
|
return updateStyle()
|
|
7013
7157
|
})
|
|
7014
7158
|
},
|
|
7015
|
-
|
|
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) {
|
|
7016
7196
|
if (props.footerSpanMethod) {
|
|
7017
|
-
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method'])
|
|
7197
|
+
errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method'])
|
|
7018
7198
|
}
|
|
7019
7199
|
handleFooterMerge(merges)
|
|
7020
7200
|
$xeTable.handleUpdateFooterMerge()
|
|
7021
7201
|
return nextTick().then(() => {
|
|
7022
|
-
$xeTable.updateCellAreas()
|
|
7023
7202
|
return updateStyle()
|
|
7024
7203
|
})
|
|
7025
7204
|
},
|
|
7026
|
-
|
|
7205
|
+
setMergeFooterItems (merges) {
|
|
7206
|
+
// errLog('vxe.error.delFunc', ['setMergeFooterItems', 'setMergeFooterCells'])
|
|
7207
|
+
return $xeTable.setMergeFooterCells(merges)
|
|
7208
|
+
},
|
|
7209
|
+
removeMergeFooterCells (merges) {
|
|
7027
7210
|
if (props.footerSpanMethod) {
|
|
7028
|
-
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method'])
|
|
7211
|
+
errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method'])
|
|
7029
7212
|
}
|
|
7030
7213
|
const rest = removeFooterMerges(merges)
|
|
7031
7214
|
$xeTable.handleUpdateFooterMerge()
|
|
7032
7215
|
return nextTick().then(() => {
|
|
7033
|
-
$xeTable.updateCellAreas()
|
|
7034
7216
|
updateStyle()
|
|
7035
7217
|
return rest
|
|
7036
7218
|
})
|
|
7037
7219
|
},
|
|
7220
|
+
removeMergeFooterItems (merges) {
|
|
7221
|
+
// errLog('vxe.error.delFunc', ['removeMergeFooterItems', 'removeMergeFooterCells'])
|
|
7222
|
+
return $xeTable.removeMergeFooterCells(merges)
|
|
7223
|
+
},
|
|
7038
7224
|
/**
|
|
7039
7225
|
* 获取所有被合并的表尾
|
|
7040
7226
|
*/
|
|
7041
|
-
|
|
7227
|
+
getMergeFooterCells () {
|
|
7042
7228
|
return internalData.mergeFooterList.slice(0)
|
|
7043
7229
|
},
|
|
7230
|
+
getMergeFooterItems () {
|
|
7231
|
+
// errLog('vxe.error.delFunc', ['getMergeFooterItems', 'getMergeFooterCells'])
|
|
7232
|
+
return $xeTable.getMergeFooterCells()
|
|
7233
|
+
},
|
|
7044
7234
|
/**
|
|
7045
7235
|
* 清除所有表尾合并
|
|
7046
7236
|
*/
|
|
7047
|
-
|
|
7237
|
+
clearMergeFooterCells () {
|
|
7048
7238
|
internalData.mergeFooterList = []
|
|
7049
7239
|
internalData.mergeFooterMaps = {}
|
|
7050
7240
|
internalData.mergeFooterCellMaps = {}
|
|
@@ -7053,6 +7243,10 @@ export default defineVxeComponent({
|
|
|
7053
7243
|
return updateStyle()
|
|
7054
7244
|
})
|
|
7055
7245
|
},
|
|
7246
|
+
clearMergeFooterItems () {
|
|
7247
|
+
// errLog('vxe.error.delFunc', ['clearMergeFooterItems', 'clearMergeFooterCells'])
|
|
7248
|
+
return $xeTable.clearMergeFooterCells()
|
|
7249
|
+
},
|
|
7056
7250
|
updateCellAreas () {
|
|
7057
7251
|
const { mouseConfig } = props
|
|
7058
7252
|
const mouseOpts = computeMouseOpts.value
|
|
@@ -7776,12 +7970,18 @@ export default defineVxeComponent({
|
|
|
7776
7970
|
}
|
|
7777
7971
|
}
|
|
7778
7972
|
|
|
7973
|
+
const clearCrossTableDragStatus = () => {
|
|
7974
|
+
crossTableDragRowObj = null
|
|
7975
|
+
crossTableDragRowInfo.row = null
|
|
7976
|
+
}
|
|
7977
|
+
|
|
7779
7978
|
const clearDragStatus = () => {
|
|
7780
7979
|
const { dragRow, dragCol } = reactData
|
|
7781
7980
|
if (dragRow || dragCol) {
|
|
7782
7981
|
clearColDropOrigin()
|
|
7783
7982
|
clearRowDropOrigin()
|
|
7784
7983
|
hideDropTip()
|
|
7984
|
+
clearCrossTableDragStatus()
|
|
7785
7985
|
reactData.dragRow = null
|
|
7786
7986
|
reactData.dragCol = null
|
|
7787
7987
|
}
|
|
@@ -7973,6 +8173,25 @@ export default defineVxeComponent({
|
|
|
7973
8173
|
}
|
|
7974
8174
|
}
|
|
7975
8175
|
|
|
8176
|
+
const clearRowDragData = () => {
|
|
8177
|
+
let wrapperEl = refElem.value
|
|
8178
|
+
const dtClss = ['.vxe-body--row']
|
|
8179
|
+
if ($xeGantt) {
|
|
8180
|
+
const { refGanttContainerElem } = $xeGantt.getRefMaps()
|
|
8181
|
+
const ganttContainerElem = refGanttContainerElem.value
|
|
8182
|
+
if (ganttContainerElem) {
|
|
8183
|
+
wrapperEl = ganttContainerElem
|
|
8184
|
+
}
|
|
8185
|
+
dtClss.push('.vxe-gantt-view--body-row', '.vxe-gantt-view--chart-row')
|
|
8186
|
+
}
|
|
8187
|
+
hideDropTip()
|
|
8188
|
+
clearRowDropOrigin()
|
|
8189
|
+
clearRowAnimate(wrapperEl, dtClss)
|
|
8190
|
+
internalData.prevDragToChild = false
|
|
8191
|
+
reactData.dragRow = null
|
|
8192
|
+
reactData.dragCol = null
|
|
8193
|
+
}
|
|
8194
|
+
|
|
7976
8195
|
/**
|
|
7977
8196
|
* 处理显示 tooltip
|
|
7978
8197
|
* @param {Event} evnt 事件
|
|
@@ -9069,6 +9288,11 @@ export default defineVxeComponent({
|
|
|
9069
9288
|
internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList)
|
|
9070
9289
|
reactData.mergeBodyFlag++
|
|
9071
9290
|
},
|
|
9291
|
+
handleUpdateHeaderMerge () {
|
|
9292
|
+
const { mergeHeaderList } = internalData
|
|
9293
|
+
internalData.mergeHeaderCellMaps = buildMergeData(mergeHeaderList)
|
|
9294
|
+
reactData.mergeHeadFlag++
|
|
9295
|
+
},
|
|
9072
9296
|
handleUpdateFooterMerge () {
|
|
9073
9297
|
const { mergeFooterList } = internalData
|
|
9074
9298
|
internalData.mergeFooterCellMaps = buildMergeData(mergeFooterList)
|
|
@@ -10010,6 +10234,218 @@ export default defineVxeComponent({
|
|
|
10010
10234
|
}
|
|
10011
10235
|
return Promise.resolve(errRest)
|
|
10012
10236
|
},
|
|
10237
|
+
/**
|
|
10238
|
+
* 处理跨表拖拽完成
|
|
10239
|
+
*/
|
|
10240
|
+
handleCrossTableRowDragFinishEvent (evnt) {
|
|
10241
|
+
const { tableData } = reactData
|
|
10242
|
+
const { fullAllDataRowIdData } = internalData
|
|
10243
|
+
const rowOpts = computeRowOpts.value
|
|
10244
|
+
const cellOpts = computeCellOpts.value
|
|
10245
|
+
const defaultRowHeight = computeDefaultRowHeight.value
|
|
10246
|
+
const rowDragOpts = computeRowDragOpts.value
|
|
10247
|
+
const { animation, isCrossTableDrag } = rowDragOpts
|
|
10248
|
+
const treeOpts = computeTreeOpts.value
|
|
10249
|
+
const { mapChildrenField } = treeOpts
|
|
10250
|
+
const el = refElem.value
|
|
10251
|
+
if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
|
|
10252
|
+
const { row: dragRow } = crossTableDragRowInfo
|
|
10253
|
+
if (dragRow) {
|
|
10254
|
+
const dragRowid = getRowid($xeTable, dragRow)
|
|
10255
|
+
const dragRowRest = fullAllDataRowIdData[dragRowid]
|
|
10256
|
+
let dragRowHeight = 0
|
|
10257
|
+
let rsIndex = -1
|
|
10258
|
+
if (dragRowRest) {
|
|
10259
|
+
if (animation) {
|
|
10260
|
+
dragRowHeight = getCellRestHeight(dragRowRest, cellOpts, rowOpts, defaultRowHeight)
|
|
10261
|
+
}
|
|
10262
|
+
rsIndex = dragRowRest.$index
|
|
10263
|
+
}
|
|
10264
|
+
const dragRangeList = rsIndex > -1 && rsIndex < tableData.length - 1 ? tableData.slice(rsIndex + 1) : []
|
|
10265
|
+
const dragList = XEUtils.toTreeArray([dragRow], {
|
|
10266
|
+
updated: true,
|
|
10267
|
+
children: mapChildrenField
|
|
10268
|
+
})
|
|
10269
|
+
$xeTable.remove(dragList).then(() => {
|
|
10270
|
+
if (animation && dragRowHeight && dragRangeList.length) {
|
|
10271
|
+
const $xeGanttView = internalData.xeGanttView
|
|
10272
|
+
let wrapperEl = el
|
|
10273
|
+
if ($xeGantt && $xeGanttView) {
|
|
10274
|
+
const { refGanttContainerElem } = $xeGantt.getRefMaps()
|
|
10275
|
+
const ganttContainerElem = refGanttContainerElem.value
|
|
10276
|
+
if (ganttContainerElem) {
|
|
10277
|
+
wrapperEl = ganttContainerElem
|
|
10278
|
+
}
|
|
10279
|
+
}
|
|
10280
|
+
|
|
10281
|
+
const dtClss: string[] = []
|
|
10282
|
+
dragRangeList.forEach(row => {
|
|
10283
|
+
const rowid = getRowid($xeTable, row)
|
|
10284
|
+
dtClss.push(`.vxe-body--row[rowid="${rowid}"]`)
|
|
10285
|
+
if ($xeGantt) {
|
|
10286
|
+
dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`)
|
|
10287
|
+
}
|
|
10288
|
+
})
|
|
10289
|
+
const dtTrList = wrapperEl.querySelectorAll<HTMLElement>(dtClss.join(','))
|
|
10290
|
+
moveRowAnimateToTb(dtTrList, dragRowHeight)
|
|
10291
|
+
}
|
|
10292
|
+
})
|
|
10293
|
+
dispatchEvent('row-remove-dragend', {
|
|
10294
|
+
row: dragRow
|
|
10295
|
+
}, evnt)
|
|
10296
|
+
clearRowDragData()
|
|
10297
|
+
clearCrossTableDragStatus()
|
|
10298
|
+
}
|
|
10299
|
+
}
|
|
10300
|
+
},
|
|
10301
|
+
/**
|
|
10302
|
+
* 处理跨表拖至新的空表
|
|
10303
|
+
*/
|
|
10304
|
+
handleCrossTableRowDragoverEmptyEvent (evnt) {
|
|
10305
|
+
const { tableData } = reactData
|
|
10306
|
+
const rowDragOpts = computeRowDragOpts.value
|
|
10307
|
+
const { isCrossTableDrag } = rowDragOpts
|
|
10308
|
+
if (isCrossTableDrag && crossTableDragRowObj && !tableData.length) {
|
|
10309
|
+
const { $oldTable } = crossTableDragRowObj
|
|
10310
|
+
if ($oldTable && $oldTable.xID !== $xeTable.xID) {
|
|
10311
|
+
evnt.preventDefault()
|
|
10312
|
+
crossTableDragRowObj.$newTable = $xeTable
|
|
10313
|
+
internalData.prevDragRow = null
|
|
10314
|
+
}
|
|
10315
|
+
}
|
|
10316
|
+
},
|
|
10317
|
+
/**
|
|
10318
|
+
* 处理跨表拖插入
|
|
10319
|
+
*/
|
|
10320
|
+
handleCrossTableRowDragInsertEvent (evnt) {
|
|
10321
|
+
const { treeConfig } = props
|
|
10322
|
+
const { prevDragRow, prevDragPos, prevDragToChild } = internalData
|
|
10323
|
+
const rowDragOpts = computeRowDragOpts.value
|
|
10324
|
+
const { animation, isSelfToChildDrag, isCrossTableDrag, dragEndMethod, dragToChildMethod } = rowDragOpts
|
|
10325
|
+
const rowOpts = computeRowOpts.value
|
|
10326
|
+
const cellOpts = computeCellOpts.value
|
|
10327
|
+
const defaultRowHeight = computeDefaultRowHeight.value
|
|
10328
|
+
const treeOpts = computeTreeOpts.value
|
|
10329
|
+
const { parentField, mapChildrenField } = treeOpts
|
|
10330
|
+
const childrenField = treeOpts.children || treeOpts.childrenField
|
|
10331
|
+
// 跨表拖拽
|
|
10332
|
+
if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
|
|
10333
|
+
const { row: oldRow } = crossTableDragRowInfo
|
|
10334
|
+
const { $oldTable } = crossTableDragRowObj
|
|
10335
|
+
const el = refElem.value
|
|
10336
|
+
if ($oldTable && oldRow) {
|
|
10337
|
+
const dragRow = oldRow
|
|
10338
|
+
let dragOffsetIndex = -1
|
|
10339
|
+
if (prevDragRow) {
|
|
10340
|
+
dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0
|
|
10341
|
+
}
|
|
10342
|
+
const dragParams = {
|
|
10343
|
+
oldRow: dragRow,
|
|
10344
|
+
newRow: prevDragRow,
|
|
10345
|
+
dragRow,
|
|
10346
|
+
dragPos: prevDragPos as 'top' | 'bottom',
|
|
10347
|
+
dragToChild: !!prevDragToChild,
|
|
10348
|
+
offsetIndex: dragOffsetIndex as 0 | 1
|
|
10349
|
+
}
|
|
10350
|
+
const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild
|
|
10351
|
+
const errRest = {
|
|
10352
|
+
status: false
|
|
10353
|
+
}
|
|
10354
|
+
Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then((status) => {
|
|
10355
|
+
if (!status) {
|
|
10356
|
+
return errRest
|
|
10357
|
+
}
|
|
10358
|
+
let insertRest: Promise<any> = Promise.resolve()
|
|
10359
|
+
if (treeConfig) {
|
|
10360
|
+
const dragList = XEUtils.toTreeArray([dragRow], {
|
|
10361
|
+
updated: true,
|
|
10362
|
+
children: mapChildrenField
|
|
10363
|
+
})
|
|
10364
|
+
$oldTable.handleCrossTableRowDragFinishEvent(evnt)
|
|
10365
|
+
if (prevDragRow) {
|
|
10366
|
+
dragRow[parentField] = prevDragRow[parentField]
|
|
10367
|
+
} else {
|
|
10368
|
+
dragRow[parentField] = null
|
|
10369
|
+
}
|
|
10370
|
+
dragList.forEach(row => {
|
|
10371
|
+
row[childrenField] = undefined
|
|
10372
|
+
row[mapChildrenField] = undefined
|
|
10373
|
+
})
|
|
10374
|
+
if (prevDragRow) {
|
|
10375
|
+
if (prevDragPos === 'bottom') {
|
|
10376
|
+
insertRest = $xeTable.insertNextAt(dragList, prevDragRow)
|
|
10377
|
+
} else {
|
|
10378
|
+
insertRest = $xeTable.insertAt(dragList, prevDragRow)
|
|
10379
|
+
}
|
|
10380
|
+
} else {
|
|
10381
|
+
insertRest = $xeTable.insert(dragList)
|
|
10382
|
+
}
|
|
10383
|
+
} else {
|
|
10384
|
+
$oldTable.handleCrossTableRowDragFinishEvent(evnt)
|
|
10385
|
+
if (prevDragRow) {
|
|
10386
|
+
if (prevDragPos === 'bottom') {
|
|
10387
|
+
insertRest = $xeTable.insertNextAt(dragRow, prevDragRow)
|
|
10388
|
+
} else {
|
|
10389
|
+
insertRest = $xeTable.insertAt(dragRow, prevDragRow)
|
|
10390
|
+
}
|
|
10391
|
+
} else {
|
|
10392
|
+
insertRest = $xeTable.insert(dragRow)
|
|
10393
|
+
}
|
|
10394
|
+
}
|
|
10395
|
+
dispatchEvent('row-insert-dragend', {
|
|
10396
|
+
oldRow,
|
|
10397
|
+
newRow: prevDragRow,
|
|
10398
|
+
dragRow,
|
|
10399
|
+
dragPos: prevDragPos as any,
|
|
10400
|
+
dragToChild: isDragToChildFlag,
|
|
10401
|
+
offsetIndex: dragOffsetIndex
|
|
10402
|
+
}, evnt)
|
|
10403
|
+
clearRowDragData()
|
|
10404
|
+
|
|
10405
|
+
insertRest.then(() => {
|
|
10406
|
+
const { tableData } = reactData
|
|
10407
|
+
const { fullAllDataRowIdData } = internalData
|
|
10408
|
+
const oldRowid = getRowid($xeTable, dragRow)
|
|
10409
|
+
const oldRowRest = fullAllDataRowIdData[oldRowid]
|
|
10410
|
+
let dragRowHeight = 0
|
|
10411
|
+
let rsIndex = -1
|
|
10412
|
+
if (oldRowRest) {
|
|
10413
|
+
if (animation) {
|
|
10414
|
+
dragRowHeight = getCellRestHeight(oldRowRest, cellOpts, rowOpts, defaultRowHeight)
|
|
10415
|
+
}
|
|
10416
|
+
rsIndex = oldRowRest.$index
|
|
10417
|
+
}
|
|
10418
|
+
const dragRangeList = rsIndex > -1 ? tableData.slice(rsIndex) : []
|
|
10419
|
+
if (animation && dragRowHeight && dragRangeList.length) {
|
|
10420
|
+
const $xeGanttView = internalData.xeGanttView
|
|
10421
|
+
let wrapperEl = el
|
|
10422
|
+
if ($xeGantt && $xeGanttView) {
|
|
10423
|
+
const { refGanttContainerElem } = $xeGantt.getRefMaps()
|
|
10424
|
+
const ganttContainerElem = refGanttContainerElem.value
|
|
10425
|
+
if (ganttContainerElem) {
|
|
10426
|
+
wrapperEl = ganttContainerElem
|
|
10427
|
+
}
|
|
10428
|
+
}
|
|
10429
|
+
|
|
10430
|
+
const dtClss: string[] = []
|
|
10431
|
+
dragRangeList.forEach(row => {
|
|
10432
|
+
const rowid = getRowid($xeTable, row)
|
|
10433
|
+
dtClss.push(`.vxe-body--row[rowid="${rowid}"]`)
|
|
10434
|
+
if ($xeGantt) {
|
|
10435
|
+
dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`)
|
|
10436
|
+
}
|
|
10437
|
+
})
|
|
10438
|
+
const dtTrList = wrapperEl.querySelectorAll<HTMLElement>(dtClss.join(','))
|
|
10439
|
+
moveRowAnimateToTb(dtTrList, -dragRowHeight)
|
|
10440
|
+
}
|
|
10441
|
+
})
|
|
10442
|
+
})
|
|
10443
|
+
}
|
|
10444
|
+
}
|
|
10445
|
+
},
|
|
10446
|
+
hideCrossTableRowDropClearStatus () {
|
|
10447
|
+
hideDropTip()
|
|
10448
|
+
},
|
|
10013
10449
|
handleRowDragDragendEvent (evnt) {
|
|
10014
10450
|
const { treeConfig } = props
|
|
10015
10451
|
const { fullAllDataRowIdData, prevDragToChild } = internalData
|
|
@@ -10018,7 +10454,16 @@ export default defineVxeComponent({
|
|
|
10018
10454
|
const { lazy } = treeOpts
|
|
10019
10455
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
|
|
10020
10456
|
const { prevDragRow, prevDragPos } = internalData
|
|
10021
|
-
|
|
10457
|
+
const rowDragOpts = computeRowDragOpts.value
|
|
10458
|
+
const { isCrossTableDrag } = rowDragOpts
|
|
10459
|
+
// 跨表拖拽
|
|
10460
|
+
if (isCrossTableDrag && crossTableDragRowObj) {
|
|
10461
|
+
const { $newTable } = crossTableDragRowObj
|
|
10462
|
+
if ($newTable && $newTable.xID !== $xeTable.xID) {
|
|
10463
|
+
$newTable.handleCrossTableRowDragInsertEvent(evnt)
|
|
10464
|
+
return
|
|
10465
|
+
}
|
|
10466
|
+
}
|
|
10022
10467
|
if (treeConfig && lazy && prevDragToChild) {
|
|
10023
10468
|
// 懒加载
|
|
10024
10469
|
const newRowid = getRowid($xeTable, prevDragRow)
|
|
@@ -10033,21 +10478,8 @@ export default defineVxeComponent({
|
|
|
10033
10478
|
} else {
|
|
10034
10479
|
$xeTable.handleRowDragSwapEvent(evnt, true, dragRow, prevDragRow, prevDragPos, prevDragToChild)
|
|
10035
10480
|
}
|
|
10036
|
-
|
|
10037
|
-
|
|
10038
|
-
const { refGanttContainerElem } = $xeGantt.getRefMaps()
|
|
10039
|
-
const ganttContainerElem = refGanttContainerElem.value
|
|
10040
|
-
if (ganttContainerElem) {
|
|
10041
|
-
wrapperEl = ganttContainerElem
|
|
10042
|
-
}
|
|
10043
|
-
dtClss.push('.vxe-gantt-view--body-row', '.vxe-gantt-view--chart-row')
|
|
10044
|
-
}
|
|
10045
|
-
hideDropTip()
|
|
10046
|
-
clearRowDropOrigin()
|
|
10047
|
-
clearRowAnimate(wrapperEl, dtClss)
|
|
10048
|
-
internalData.prevDragToChild = false
|
|
10049
|
-
reactData.dragRow = null
|
|
10050
|
-
reactData.dragCol = null
|
|
10481
|
+
clearRowDragData()
|
|
10482
|
+
clearCrossTableDragStatus()
|
|
10051
10483
|
},
|
|
10052
10484
|
handleRowDragDragoverEvent (evnt) {
|
|
10053
10485
|
const { treeConfig } = props
|
|
@@ -10057,8 +10489,8 @@ export default defineVxeComponent({
|
|
|
10057
10489
|
const { lazy, transform, parentField } = treeOpts
|
|
10058
10490
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
|
|
10059
10491
|
const rowDragOpts = computeRowDragOpts.value
|
|
10060
|
-
const { isPeerDrag, isCrossDrag, isToChildDrag } = rowDragOpts
|
|
10061
|
-
if (!dragRow) {
|
|
10492
|
+
const { isPeerDrag, isCrossDrag, isToChildDrag, isCrossTableDrag } = rowDragOpts
|
|
10493
|
+
if (!dragRow && !(isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj)) {
|
|
10062
10494
|
evnt.preventDefault()
|
|
10063
10495
|
return
|
|
10064
10496
|
}
|
|
@@ -10067,16 +10499,37 @@ export default defineVxeComponent({
|
|
|
10067
10499
|
const rowid = trEl.getAttribute('rowid') || ''
|
|
10068
10500
|
const rest = fullAllDataRowIdData[rowid]
|
|
10069
10501
|
if (rest) {
|
|
10502
|
+
evnt.preventDefault()
|
|
10070
10503
|
const row = rest.row
|
|
10071
10504
|
const rowid = getRowid($xeTable, row)
|
|
10072
10505
|
const rowRest = fullAllDataRowIdData[rowid]
|
|
10073
|
-
evnt.preventDefault()
|
|
10074
|
-
const { dragRow } = reactData
|
|
10075
10506
|
const offsetY = evnt.clientY - trEl.getBoundingClientRect().y
|
|
10076
10507
|
const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom'
|
|
10077
10508
|
internalData.prevDragToChild = !!(treeConfig && transform && (isCrossDrag && isToChildDrag) && isControlKey)
|
|
10078
10509
|
internalData.prevDragRow = row
|
|
10079
10510
|
internalData.prevDragPos = dragPos
|
|
10511
|
+
// 跨表拖拽
|
|
10512
|
+
if (isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj) {
|
|
10513
|
+
const { $oldTable, $newTable } = crossTableDragRowObj
|
|
10514
|
+
if ($oldTable) {
|
|
10515
|
+
const oldTableReactData = $oldTable.reactData
|
|
10516
|
+
if ($oldTable.xID === $xeTable.xID) {
|
|
10517
|
+
if ($newTable) {
|
|
10518
|
+
$newTable.hideCrossTableRowDropClearStatus()
|
|
10519
|
+
}
|
|
10520
|
+
reactData.isCrossDragRow = false
|
|
10521
|
+
oldTableReactData.isCrossDragRow = false
|
|
10522
|
+
crossTableDragRowObj.$newTable = null
|
|
10523
|
+
} else {
|
|
10524
|
+
$oldTable.hideCrossTableRowDropClearStatus()
|
|
10525
|
+
oldTableReactData.isCrossDragRow = true
|
|
10526
|
+
reactData.dragTipText = oldTableReactData.dragTipText
|
|
10527
|
+
crossTableDragRowObj.$newTable = $xeTable
|
|
10528
|
+
showDropTip(evnt, trEl, null, true, dragPos)
|
|
10529
|
+
return
|
|
10530
|
+
}
|
|
10531
|
+
}
|
|
10532
|
+
}
|
|
10080
10533
|
if ($xeTable.eqRow(dragRow, row) ||
|
|
10081
10534
|
(isControlKey && treeConfig && lazy && row[hasChildField] && rowRest && !rowRest.treeLoaded) ||
|
|
10082
10535
|
(!isCrossDrag && treeConfig && transform && (isPeerDrag ? dragRow[parentField] !== row[parentField] : rest.level))
|
|
@@ -10096,7 +10549,7 @@ export default defineVxeComponent({
|
|
|
10096
10549
|
evnt.stopPropagation()
|
|
10097
10550
|
const { dragConfig } = props
|
|
10098
10551
|
const rowDragOpts = computeRowDragOpts.value
|
|
10099
|
-
const { trigger, dragStartMethod } = rowDragOpts
|
|
10552
|
+
const { isCrossTableDrag, trigger, dragStartMethod } = rowDragOpts
|
|
10100
10553
|
const { row } = params
|
|
10101
10554
|
const dragEl = evnt.currentTarget as HTMLElement
|
|
10102
10555
|
const tdEl = trigger === 'cell' || trigger === 'row' ? dragEl : dragEl.parentElement?.parentElement as HTMLElement
|
|
@@ -10107,10 +10560,16 @@ export default defineVxeComponent({
|
|
|
10107
10560
|
trEl.draggable = false
|
|
10108
10561
|
reactData.dragRow = null
|
|
10109
10562
|
reactData.dragCol = null
|
|
10563
|
+
clearCrossTableDragStatus()
|
|
10110
10564
|
hideDropTip()
|
|
10111
10565
|
return
|
|
10112
10566
|
}
|
|
10567
|
+
if (isCrossTableDrag) {
|
|
10568
|
+
crossTableDragRowInfo.row = row
|
|
10569
|
+
crossTableDragRowObj = { $oldTable: $xeTable, $newTable: null }
|
|
10570
|
+
}
|
|
10113
10571
|
reactData.dragRow = row
|
|
10572
|
+
reactData.isCrossDragRow = false
|
|
10114
10573
|
reactData.dragCol = null
|
|
10115
10574
|
trEl.draggable = true
|
|
10116
10575
|
updateRowDropOrigin(row)
|
|
@@ -10435,6 +10894,7 @@ export default defineVxeComponent({
|
|
|
10435
10894
|
internalData.prevDragToChild = false
|
|
10436
10895
|
reactData.dragRow = null
|
|
10437
10896
|
reactData.dragCol = null
|
|
10897
|
+
clearCrossTableDragStatus()
|
|
10438
10898
|
},
|
|
10439
10899
|
handleHeaderCellDragDragoverEvent (evnt) {
|
|
10440
10900
|
const { dragCol } = reactData
|
|
@@ -10513,12 +10973,14 @@ export default defineVxeComponent({
|
|
|
10513
10973
|
thEl.draggable = false
|
|
10514
10974
|
reactData.dragRow = null
|
|
10515
10975
|
reactData.dragCol = null
|
|
10976
|
+
clearCrossTableDragStatus()
|
|
10516
10977
|
hideDropTip()
|
|
10517
10978
|
return
|
|
10518
10979
|
}
|
|
10519
10980
|
reactData.dragCol = column
|
|
10520
10981
|
reactData.dragRow = null
|
|
10521
10982
|
thEl.draggable = true
|
|
10983
|
+
clearCrossTableDragStatus()
|
|
10522
10984
|
updateColDropOrigin(column)
|
|
10523
10985
|
updateColDropTipContent(thEl)
|
|
10524
10986
|
dispatchEvent('column-dragstart', params, evnt)
|
|
@@ -10526,6 +10988,7 @@ export default defineVxeComponent({
|
|
|
10526
10988
|
handleHeaderCellDragMouseupEvent () {
|
|
10527
10989
|
clearColDropOrigin()
|
|
10528
10990
|
hideDropTip()
|
|
10991
|
+
clearCrossTableDragStatus()
|
|
10529
10992
|
reactData.dragRow = null
|
|
10530
10993
|
reactData.dragCol = null
|
|
10531
10994
|
},
|
|
@@ -11428,9 +11891,10 @@ export default defineVxeComponent({
|
|
|
11428
11891
|
const rTipSlot = rowDragSlots.tip || (dragConfig && dragConfig.slots ? dragConfig.slots.rowTip : null)
|
|
11429
11892
|
const columnDragSlots = columnDragOpts.slots || {}
|
|
11430
11893
|
const cTipSlot = columnDragSlots.tip
|
|
11894
|
+
const dRow = dragRow || (rowDragOpts.isCrossTableDrag ? crossTableDragRowInfo.row : null)
|
|
11431
11895
|
|
|
11432
|
-
if (
|
|
11433
|
-
return callSlot(rTipSlot, { row:
|
|
11896
|
+
if (dRow && rTipSlot) {
|
|
11897
|
+
return callSlot(rTipSlot, { row: dRow })
|
|
11434
11898
|
}
|
|
11435
11899
|
if (dragCol && cTipSlot) {
|
|
11436
11900
|
return callSlot(cTipSlot, { column: dragCol })
|
|
@@ -11444,6 +11908,7 @@ export default defineVxeComponent({
|
|
|
11444
11908
|
const columnOpts = computeColumnOpts.value
|
|
11445
11909
|
const rowDragOpts = computeRowDragOpts.value
|
|
11446
11910
|
const columnDragOpts = computeColumnDragOpts.value
|
|
11911
|
+
const dRow = dragRow || (rowDragOpts.isCrossTableDrag ? crossTableDragRowInfo.row : null)
|
|
11447
11912
|
|
|
11448
11913
|
if (rowOpts.drag || columnOpts.drag) {
|
|
11449
11914
|
return h('div', {
|
|
@@ -11461,7 +11926,7 @@ export default defineVxeComponent({
|
|
|
11461
11926
|
'is--guides': columnDragOpts.showGuidesStatus
|
|
11462
11927
|
}]
|
|
11463
11928
|
}),
|
|
11464
|
-
(
|
|
11929
|
+
(dRow && rowDragOpts.showDragTip) || (dragCol && columnDragOpts.showDragTip)
|
|
11465
11930
|
? h('div', {
|
|
11466
11931
|
ref: refDragTipElem,
|
|
11467
11932
|
class: 'vxe-table--drag-sort-tip'
|
|
@@ -11473,7 +11938,7 @@ export default defineVxeComponent({
|
|
|
11473
11938
|
class: 'vxe-table--drag-sort-tip-status'
|
|
11474
11939
|
}, [
|
|
11475
11940
|
h('span', {
|
|
11476
|
-
class: ['vxe-table--drag-sort-tip-normal-status',
|
|
11941
|
+
class: ['vxe-table--drag-sort-tip-normal-status', dRow ? getIcon().TABLE_DRAG_STATUS_ROW : getIcon().TABLE_DRAG_STATUS_COLUMN]
|
|
11477
11942
|
}),
|
|
11478
11943
|
h('span', {
|
|
11479
11944
|
class: ['vxe-table--drag-sort-tip-sub-status', getIcon().TABLE_DRAG_STATUS_SUB_ROW]
|
|
@@ -11618,7 +12083,10 @@ export default defineVxeComponent({
|
|
|
11618
12083
|
ref: refScrollXSpaceElem,
|
|
11619
12084
|
class: 'vxe-table--scroll-x-space'
|
|
11620
12085
|
})
|
|
11621
|
-
])
|
|
12086
|
+
]),
|
|
12087
|
+
h('div', {
|
|
12088
|
+
class: 'vxe-table--scroll-x-handle-appearance'
|
|
12089
|
+
})
|
|
11622
12090
|
]),
|
|
11623
12091
|
h('div', {
|
|
11624
12092
|
ref: refScrollXRightCornerElem,
|
|
@@ -11649,7 +12117,10 @@ export default defineVxeComponent({
|
|
|
11649
12117
|
ref: refScrollYSpaceElem,
|
|
11650
12118
|
class: 'vxe-table--scroll-y-space'
|
|
11651
12119
|
})
|
|
11652
|
-
])
|
|
12120
|
+
]),
|
|
12121
|
+
h('div', {
|
|
12122
|
+
class: 'vxe-table--scroll-y-handle-appearance'
|
|
12123
|
+
})
|
|
11653
12124
|
]),
|
|
11654
12125
|
h('div', {
|
|
11655
12126
|
ref: refScrollYBottomCornerElem,
|
|
@@ -11731,6 +12202,7 @@ export default defineVxeComponent({
|
|
|
11731
12202
|
const { teleportToWrapperElem } = internalData
|
|
11732
12203
|
const { leftList, rightList } = columnStore
|
|
11733
12204
|
const loadingSlot = slots.loading
|
|
12205
|
+
const rowDragOpts = computeRowDragOpts.value
|
|
11734
12206
|
const tableTipConfig = computeTableTipConfig.value
|
|
11735
12207
|
const validTipConfig = computeValidTipConfig.value
|
|
11736
12208
|
const validOpts = computeValidOpts.value
|
|
@@ -11750,6 +12222,11 @@ export default defineVxeComponent({
|
|
|
11750
12222
|
const columnDragOpts = computeColumnDragOpts.value
|
|
11751
12223
|
const scrollbarXToTop = computeScrollbarXToTop.value
|
|
11752
12224
|
const scrollbarYToLeft = computeScrollbarYToLeft.value
|
|
12225
|
+
const { isCrossTableDrag } = rowDragOpts
|
|
12226
|
+
const rwOns: Record<string, any> = {}
|
|
12227
|
+
if (isCrossTableDrag && !tableData.length) {
|
|
12228
|
+
rwOns.onDragover = $xeTable.handleCrossTableRowDragoverEmptyEvent
|
|
12229
|
+
}
|
|
11753
12230
|
return h('div', {
|
|
11754
12231
|
ref: refElem,
|
|
11755
12232
|
class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
|
|
@@ -11811,7 +12288,8 @@ export default defineVxeComponent({
|
|
|
11811
12288
|
]),
|
|
11812
12289
|
h('div', {
|
|
11813
12290
|
key: 'tw',
|
|
11814
|
-
class: 'vxe-table--render-wrapper'
|
|
12291
|
+
class: 'vxe-table--render-wrapper',
|
|
12292
|
+
...rwOns
|
|
11815
12293
|
}, scrollbarXToTop
|
|
11816
12294
|
? [
|
|
11817
12295
|
renderScrollX(),
|
|
@@ -12137,15 +12615,33 @@ export default defineVxeComponent({
|
|
|
12137
12615
|
handleUpdateMergeBodyCells(props.mergeCells || [])
|
|
12138
12616
|
})
|
|
12139
12617
|
|
|
12140
|
-
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
|
+
})
|
|
12141
12636
|
watch(() => props.mergeFooterItems ? props.mergeFooterItems.length : -1, () => {
|
|
12142
|
-
|
|
12637
|
+
mergeFooteCellFlag.value++
|
|
12143
12638
|
})
|
|
12144
12639
|
watch(() => props.mergeFooterItems, () => {
|
|
12145
|
-
|
|
12640
|
+
mergeFooteCellFlag.value++
|
|
12146
12641
|
})
|
|
12147
|
-
watch(
|
|
12148
|
-
|
|
12642
|
+
watch(mergeFooteCellFlag, () => {
|
|
12643
|
+
const mFooterCells = props.mergeFooterCells || props.mergeFooterItems
|
|
12644
|
+
handleUpdateMergeFooterCells(mFooterCells || [])
|
|
12149
12645
|
})
|
|
12150
12646
|
|
|
12151
12647
|
watch(computeRowGroupFields, (val) => {
|
|
@@ -12240,6 +12736,7 @@ export default defineVxeComponent({
|
|
|
12240
12736
|
const currentColumnOpts = computeCurrentColumnOpts.value
|
|
12241
12737
|
const keyboardOpts = computeKeyboardOpts.value
|
|
12242
12738
|
const aggregateOpts = computeAggregateOpts.value
|
|
12739
|
+
const rowDragOpts = computeRowDragOpts.value
|
|
12243
12740
|
|
|
12244
12741
|
if (props.rowId) {
|
|
12245
12742
|
warnLog('vxe.error.delProp', ['row-id', 'row-config.keyField'])
|
|
@@ -12344,7 +12841,10 @@ export default defineVxeComponent({
|
|
|
12344
12841
|
}
|
|
12345
12842
|
}
|
|
12346
12843
|
if (treeConfig && rowOpts.drag && !treeOpts.transform) {
|
|
12347
|
-
errLog('vxe.error.notSupportProp', ['
|
|
12844
|
+
errLog('vxe.error.notSupportProp', ['row-config.drag', 'tree-config.transform=false', 'tree-config.transform=true'])
|
|
12845
|
+
}
|
|
12846
|
+
if (treeConfig && rowDragOpts.isCrossTableDrag && !rowDragOpts.isCrossDrag) {
|
|
12847
|
+
errLog('vxe.error.reqSupportProp', ['tree-config & row-drag-config.isCrossTableDrag', 'row-drag-config.isCrossDrag'])
|
|
12348
12848
|
}
|
|
12349
12849
|
if (props.dragConfig) {
|
|
12350
12850
|
warnLog('vxe.error.delProp', ['drag-config', 'row-drag-config'])
|