vxe-table 3.14.5 → 3.15.0-beta.0
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/style.css +1 -1
- package/es/table/module/edit/mixin.js +10 -9
- package/es/table/module/export/mixin.js +14 -11
- package/es/table/src/body.js +11 -13
- package/es/table/src/footer.js +3 -16
- package/es/table/src/methods.js +202 -67
- package/es/table/src/table.js +40 -23
- package/es/table/src/util.js +0 -13
- package/es/ui/index.js +2 -2
- package/es/ui/src/log.js +1 -1
- package/lib/index.umd.js +318 -183
- package/lib/index.umd.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/table/module/edit/mixin.js +9 -9
- package/lib/table/module/edit/mixin.min.js +1 -1
- package/lib/table/module/export/mixin.js +15 -11
- package/lib/table/module/export/mixin.min.js +1 -1
- package/lib/table/src/body.js +14 -15
- package/lib/table/src/body.min.js +1 -1
- package/lib/table/src/footer.js +4 -27
- package/lib/table/src/footer.min.js +1 -1
- package/lib/table/src/methods.js +231 -71
- package/lib/table/src/methods.min.js +1 -1
- package/lib/table/src/table.js +42 -23
- package/lib/table/src/table.min.js +1 -1
- package/lib/table/src/util.js +0 -25
- package/lib/table/src/util.min.js +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/package.json +2 -2
- package/packages/table/module/edit/mixin.ts +10 -9
- package/packages/table/module/export/mixin.ts +14 -11
- package/packages/table/src/body.ts +11 -13
- package/packages/table/src/footer.ts +3 -17
- package/packages/table/src/methods.ts +218 -78
- package/packages/table/src/table.ts +40 -23
- package/packages/table/src/util.ts +0 -14
- package/packages/ui/index.ts +1 -1
- /package/es/{iconfont.1743479120369.ttf → iconfont.1743578536739.ttf} +0 -0
- /package/es/{iconfont.1743479120369.woff → iconfont.1743578536739.woff} +0 -0
- /package/es/{iconfont.1743479120369.woff2 → iconfont.1743578536739.woff2} +0 -0
- /package/lib/{iconfont.1743479120369.ttf → iconfont.1743578536739.ttf} +0 -0
- /package/lib/{iconfont.1743479120369.woff → iconfont.1743578536739.woff} +0 -0
- /package/lib/{iconfont.1743479120369.woff2 → iconfont.1743578536739.woff2} +0 -0
package/es/table/src/methods.js
CHANGED
|
@@ -1256,32 +1256,67 @@ function calculateMergerOffsetIndex(list, offsetItem, type) {
|
|
|
1256
1256
|
}
|
|
1257
1257
|
}
|
|
1258
1258
|
}
|
|
1259
|
-
function
|
|
1260
|
-
|
|
1259
|
+
function buildMergeData(mergeConfigs) {
|
|
1260
|
+
const mergeMaps = {};
|
|
1261
|
+
if (mergeConfigs && mergeConfigs.length) {
|
|
1262
|
+
for (let mIndex = 0; mIndex < mergeConfigs.length; mIndex++) {
|
|
1263
|
+
const { row: _rowIndex, col: _columnIndex, rowspan: mergeRowspan, colspan: mergeColspan } = mergeConfigs[mIndex];
|
|
1264
|
+
for (let i = 0; i < mergeRowspan; i++) {
|
|
1265
|
+
for (let j = 0; j < mergeColspan; j++) {
|
|
1266
|
+
mergeMaps[`${_rowIndex + i}:${_columnIndex + j}`] = !i && !j
|
|
1267
|
+
? {
|
|
1268
|
+
rowspan: mergeRowspan,
|
|
1269
|
+
colspan: mergeColspan
|
|
1270
|
+
}
|
|
1271
|
+
: {
|
|
1272
|
+
rowspan: 0,
|
|
1273
|
+
colspan: 0
|
|
1274
|
+
};
|
|
1275
|
+
}
|
|
1276
|
+
}
|
|
1277
|
+
}
|
|
1278
|
+
}
|
|
1279
|
+
return mergeMaps;
|
|
1280
|
+
}
|
|
1281
|
+
const handleBodyMerge = ($xeTable, merges) => {
|
|
1261
1282
|
const internalData = $xeTable;
|
|
1283
|
+
const { fullAllDataRowIdData, fullColumnIdData, visibleColumn, afterFullData, mergeBodyList, mergeBodyMaps } = internalData;
|
|
1262
1284
|
if (merges) {
|
|
1263
|
-
|
|
1264
|
-
const { visibleColumn } = internalData;
|
|
1285
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1265
1286
|
if (!XEUtils.isArray(merges)) {
|
|
1266
1287
|
merges = [merges];
|
|
1267
1288
|
}
|
|
1268
|
-
// if (treeConfig && merges.length) {
|
|
1269
|
-
// errLog('vxe.error.noTree', ['merge-cells | merge-footer-items'])
|
|
1270
|
-
// }
|
|
1271
1289
|
merges.forEach((item) => {
|
|
1272
1290
|
let { row, col, rowspan, colspan } = item;
|
|
1273
|
-
|
|
1274
|
-
|
|
1291
|
+
let mergeRowIndex = -1;
|
|
1292
|
+
let mergeColumnIndex = -1;
|
|
1293
|
+
if (XEUtils.isNumber(row)) {
|
|
1294
|
+
mergeRowIndex = row;
|
|
1295
|
+
}
|
|
1296
|
+
else {
|
|
1297
|
+
const rowid = row ? handleGetRowId(row) : null;
|
|
1298
|
+
const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
|
|
1299
|
+
if (rowRest) {
|
|
1300
|
+
mergeRowIndex = rowRest._index;
|
|
1301
|
+
}
|
|
1275
1302
|
}
|
|
1276
1303
|
if (XEUtils.isNumber(col)) {
|
|
1277
|
-
|
|
1304
|
+
mergeColumnIndex = col;
|
|
1305
|
+
}
|
|
1306
|
+
else {
|
|
1307
|
+
const colid = col ? col.id : null;
|
|
1308
|
+
const colRest = colid ? fullColumnIdData[colid] : null;
|
|
1309
|
+
if (colRest) {
|
|
1310
|
+
mergeColumnIndex = colRest._index;
|
|
1311
|
+
}
|
|
1278
1312
|
}
|
|
1279
|
-
if (
|
|
1313
|
+
if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
|
|
1280
1314
|
rowspan = XEUtils.toNumber(rowspan) || 1;
|
|
1281
1315
|
colspan = XEUtils.toNumber(colspan) || 1;
|
|
1282
1316
|
if (rowspan > 1 || colspan > 1) {
|
|
1283
|
-
const
|
|
1284
|
-
const
|
|
1317
|
+
const row = afterFullData[mergeRowIndex];
|
|
1318
|
+
const column = visibleColumn[mergeColumnIndex];
|
|
1319
|
+
let mergeItem = mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
|
|
1285
1320
|
if (mergeItem) {
|
|
1286
1321
|
mergeItem.rowspan = rowspan;
|
|
1287
1322
|
mergeItem.colspan = colspan;
|
|
@@ -1289,24 +1324,73 @@ function setMerges($xeTable, merges, mList, rowList) {
|
|
|
1289
1324
|
mergeItem._colspan = colspan;
|
|
1290
1325
|
}
|
|
1291
1326
|
else {
|
|
1292
|
-
|
|
1293
|
-
const mergeColIndex = visibleColumn.indexOf(col);
|
|
1294
|
-
mList.push({
|
|
1327
|
+
mergeItem = {
|
|
1295
1328
|
row: mergeRowIndex,
|
|
1296
|
-
col:
|
|
1329
|
+
col: mergeColumnIndex,
|
|
1297
1330
|
rowspan,
|
|
1298
1331
|
colspan,
|
|
1299
1332
|
_row: row,
|
|
1300
|
-
_col:
|
|
1333
|
+
_col: column,
|
|
1301
1334
|
_rowspan: rowspan,
|
|
1302
1335
|
_colspan: colspan
|
|
1303
|
-
}
|
|
1336
|
+
};
|
|
1337
|
+
mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
|
|
1338
|
+
mergeBodyList.push(mergeItem);
|
|
1304
1339
|
}
|
|
1305
1340
|
}
|
|
1306
1341
|
}
|
|
1307
1342
|
});
|
|
1308
1343
|
}
|
|
1309
|
-
}
|
|
1344
|
+
};
|
|
1345
|
+
const handleFooterMerge = ($xeTable, merges) => {
|
|
1346
|
+
const reactData = $xeTable;
|
|
1347
|
+
const internalData = $xeTable;
|
|
1348
|
+
const { footerTableData } = reactData;
|
|
1349
|
+
const { mergeFooterList, mergeFooterMaps } = internalData;
|
|
1350
|
+
if (merges) {
|
|
1351
|
+
const { visibleColumn } = internalData;
|
|
1352
|
+
if (!XEUtils.isArray(merges)) {
|
|
1353
|
+
merges = [merges];
|
|
1354
|
+
}
|
|
1355
|
+
merges.forEach((item) => {
|
|
1356
|
+
let { row: margeRow, col: margeCol, rowspan, colspan } = item;
|
|
1357
|
+
const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1;
|
|
1358
|
+
let mergeColumnIndex = -1;
|
|
1359
|
+
if (XEUtils.isNumber(margeCol)) {
|
|
1360
|
+
mergeColumnIndex = margeCol;
|
|
1361
|
+
}
|
|
1362
|
+
if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
|
|
1363
|
+
rowspan = XEUtils.toNumber(rowspan) || 1;
|
|
1364
|
+
colspan = XEUtils.toNumber(colspan) || 1;
|
|
1365
|
+
if (rowspan > 1 || colspan > 1) {
|
|
1366
|
+
const row = footerTableData[mergeRowIndex];
|
|
1367
|
+
const column = visibleColumn[mergeColumnIndex];
|
|
1368
|
+
let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
|
|
1369
|
+
if (mergeItem) {
|
|
1370
|
+
mergeItem.rowspan = rowspan;
|
|
1371
|
+
mergeItem.colspan = colspan;
|
|
1372
|
+
mergeItem._rowspan = rowspan;
|
|
1373
|
+
mergeItem._colspan = colspan;
|
|
1374
|
+
}
|
|
1375
|
+
else {
|
|
1376
|
+
mergeItem = {
|
|
1377
|
+
row: mergeRowIndex,
|
|
1378
|
+
col: mergeColumnIndex,
|
|
1379
|
+
rowspan,
|
|
1380
|
+
colspan,
|
|
1381
|
+
_row: row,
|
|
1382
|
+
_col: column,
|
|
1383
|
+
_rowspan: rowspan,
|
|
1384
|
+
_colspan: colspan
|
|
1385
|
+
};
|
|
1386
|
+
mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
|
|
1387
|
+
mergeFooterList.push(mergeItem);
|
|
1388
|
+
}
|
|
1389
|
+
}
|
|
1390
|
+
}
|
|
1391
|
+
});
|
|
1392
|
+
}
|
|
1393
|
+
};
|
|
1310
1394
|
function removeMerges($xeTable, merges, mList, rowList) {
|
|
1311
1395
|
// const props = $xeTable
|
|
1312
1396
|
const internalData = $xeTable;
|
|
@@ -1965,8 +2049,8 @@ function handleUpdateColumn($xeTable) {
|
|
|
1965
2049
|
function loadScrollXData($xeTable) {
|
|
1966
2050
|
const reactData = $xeTable;
|
|
1967
2051
|
const internalData = $xeTable;
|
|
1968
|
-
const {
|
|
1969
|
-
const { scrollXStore } = internalData;
|
|
2052
|
+
const { isScrollXBig } = reactData;
|
|
2053
|
+
const { mergeBodyList, mergeFooterList, scrollXStore } = internalData;
|
|
1970
2054
|
const { preloadSize, startIndex, endIndex, offsetSize } = scrollXStore;
|
|
1971
2055
|
const { toVisibleIndex, visibleSize } = handleVirtualXVisible($xeTable);
|
|
1972
2056
|
const offsetItem = {
|
|
@@ -1975,7 +2059,7 @@ function loadScrollXData($xeTable) {
|
|
|
1975
2059
|
};
|
|
1976
2060
|
scrollXStore.visibleStartIndex = toVisibleIndex - 1;
|
|
1977
2061
|
scrollXStore.visibleEndIndex = toVisibleIndex + visibleSize + 1;
|
|
1978
|
-
calculateMergerOffsetIndex(
|
|
2062
|
+
calculateMergerOffsetIndex(mergeBodyList.concat(mergeFooterList), offsetItem, 'col');
|
|
1979
2063
|
const { startIndex: offsetStartIndex, endIndex: offsetEndIndex } = offsetItem;
|
|
1980
2064
|
if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
|
|
1981
2065
|
if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
|
|
@@ -2184,8 +2268,8 @@ function handleColumn($xeTable, collectColumn) {
|
|
|
2184
2268
|
function loadScrollYData($xeTable) {
|
|
2185
2269
|
const reactData = $xeTable;
|
|
2186
2270
|
const internalData = $xeTable;
|
|
2187
|
-
const {
|
|
2188
|
-
const { scrollYStore } = internalData;
|
|
2271
|
+
const { isAllOverflow, isScrollYBig } = reactData;
|
|
2272
|
+
const { mergeBodyList, scrollYStore } = internalData;
|
|
2189
2273
|
const { preloadSize, startIndex, endIndex, offsetSize } = scrollYStore;
|
|
2190
2274
|
const autoOffsetYSize = isAllOverflow ? offsetSize : offsetSize + 1;
|
|
2191
2275
|
const { toVisibleIndex, visibleSize } = handleVirtualYVisible($xeTable);
|
|
@@ -2195,7 +2279,7 @@ function loadScrollYData($xeTable) {
|
|
|
2195
2279
|
};
|
|
2196
2280
|
scrollYStore.visibleStartIndex = toVisibleIndex - 1;
|
|
2197
2281
|
scrollYStore.visibleEndIndex = toVisibleIndex + visibleSize + 1;
|
|
2198
|
-
calculateMergerOffsetIndex(
|
|
2282
|
+
calculateMergerOffsetIndex(mergeBodyList, offsetItem, 'row');
|
|
2199
2283
|
const { startIndex: offsetStartIndex, endIndex: offsetEndIndex } = offsetItem;
|
|
2200
2284
|
if (toVisibleIndex <= startIndex || toVisibleIndex >= endIndex - visibleSize - 1) {
|
|
2201
2285
|
if (startIndex !== offsetStartIndex || endIndex !== offsetEndIndex) {
|
|
@@ -2584,7 +2668,7 @@ const Methods = {
|
|
|
2584
2668
|
* 对于某些特殊的场景,比如深层树节点元素发生变动时可能会用到
|
|
2585
2669
|
*/
|
|
2586
2670
|
syncData() {
|
|
2587
|
-
|
|
2671
|
+
errLog('vxe.error.delFunc', ['syncData', 'getData']);
|
|
2588
2672
|
return this.$nextTick().then(() => {
|
|
2589
2673
|
this.tableData = [];
|
|
2590
2674
|
return this.$nextTick().then(() => this.loadTableData(this.tableFullData, true));
|
|
@@ -2595,30 +2679,35 @@ const Methods = {
|
|
|
2595
2679
|
* 对于手动更改了排序、筛选...等条件后需要重新处理数据时可能会用到
|
|
2596
2680
|
*/
|
|
2597
2681
|
updateData() {
|
|
2598
|
-
const
|
|
2599
|
-
|
|
2600
|
-
|
|
2682
|
+
const $xeTable = this;
|
|
2683
|
+
const reactData = $xeTable;
|
|
2684
|
+
const { scrollXLoad, scrollYLoad } = reactData;
|
|
2685
|
+
return $xeTable.handleTableData(true).then(() => {
|
|
2686
|
+
$xeTable.updateFooter();
|
|
2601
2687
|
if (scrollXLoad || scrollYLoad) {
|
|
2602
2688
|
if (scrollXLoad) {
|
|
2603
|
-
|
|
2689
|
+
$xeTable.updateScrollXSpace();
|
|
2604
2690
|
}
|
|
2605
2691
|
if (scrollYLoad) {
|
|
2606
|
-
|
|
2692
|
+
$xeTable.updateScrollYSpace();
|
|
2607
2693
|
}
|
|
2608
|
-
return
|
|
2694
|
+
return $xeTable.refreshScroll();
|
|
2609
2695
|
}
|
|
2610
2696
|
}).then(() => {
|
|
2611
|
-
|
|
2612
|
-
return
|
|
2697
|
+
$xeTable.updateCellAreas();
|
|
2698
|
+
return $xeTable.recalculate(true);
|
|
2613
2699
|
}).then(() => {
|
|
2614
2700
|
// 存在滚动行为未结束情况
|
|
2615
|
-
setTimeout(() =>
|
|
2701
|
+
setTimeout(() => $xeTable.recalculate(), 50);
|
|
2616
2702
|
});
|
|
2617
2703
|
},
|
|
2618
2704
|
handleTableData(force) {
|
|
2619
2705
|
const $xeTable = this;
|
|
2620
|
-
const
|
|
2621
|
-
|
|
2706
|
+
const reactData = $xeTable;
|
|
2707
|
+
const internalData = $xeTable;
|
|
2708
|
+
const { scrollYLoad } = reactData;
|
|
2709
|
+
const { scrollYStore, fullDataRowIdData } = internalData;
|
|
2710
|
+
let fullList = internalData.afterFullData;
|
|
2622
2711
|
// 是否进行数据处理
|
|
2623
2712
|
if (force) {
|
|
2624
2713
|
// 更新数据,处理筛选和排序
|
|
@@ -2627,14 +2716,17 @@ const Methods = {
|
|
|
2627
2716
|
fullList = handleVirtualTreeToList($xeTable);
|
|
2628
2717
|
}
|
|
2629
2718
|
const tableData = scrollYLoad ? fullList.slice(scrollYStore.startIndex, scrollYStore.endIndex) : fullList.slice(0);
|
|
2719
|
+
const visibleDataRowIdMaps = {};
|
|
2630
2720
|
tableData.forEach((row, $index) => {
|
|
2631
2721
|
const rowid = getRowid(this, row);
|
|
2632
2722
|
const rest = fullDataRowIdData[rowid];
|
|
2633
2723
|
if (rest) {
|
|
2634
2724
|
rest.$index = $index;
|
|
2635
2725
|
}
|
|
2726
|
+
visibleDataRowIdMaps[rowid] = row;
|
|
2636
2727
|
});
|
|
2637
2728
|
this.tableData = tableData;
|
|
2729
|
+
internalData.visibleDataRowIdData = visibleDataRowIdMaps;
|
|
2638
2730
|
return this.$nextTick();
|
|
2639
2731
|
},
|
|
2640
2732
|
/**
|
|
@@ -2708,7 +2800,7 @@ const Methods = {
|
|
|
2708
2800
|
internalData.tableFullData = fullData;
|
|
2709
2801
|
internalData.tableFullTreeData = treeData;
|
|
2710
2802
|
// 缓存数据
|
|
2711
|
-
$xeTable.cacheRowMap(
|
|
2803
|
+
$xeTable.cacheRowMap(isReset);
|
|
2712
2804
|
// 原始数据
|
|
2713
2805
|
internalData.tableSynchData = datas;
|
|
2714
2806
|
if (isReset) {
|
|
@@ -2726,6 +2818,7 @@ const Methods = {
|
|
|
2726
2818
|
$xeTable.clearMergeFooterItems();
|
|
2727
2819
|
$xeTable.handleTableData(true);
|
|
2728
2820
|
$xeTable.updateFooter();
|
|
2821
|
+
$xeTable.handleUpdateBodyMerge();
|
|
2729
2822
|
return $xeTable.$nextTick().then(() => {
|
|
2730
2823
|
updateHeight($xeTable);
|
|
2731
2824
|
updateStyle($xeTable);
|
|
@@ -2901,7 +2994,7 @@ const Methods = {
|
|
|
2901
2994
|
/**
|
|
2902
2995
|
* 更新数据行的 Map
|
|
2903
2996
|
*/
|
|
2904
|
-
cacheRowMap() {
|
|
2997
|
+
cacheRowMap(isReset) {
|
|
2905
2998
|
const $xeTable = this;
|
|
2906
2999
|
const props = $xeTable;
|
|
2907
3000
|
const reactData = $xeTable;
|
|
@@ -2912,7 +3005,7 @@ const Methods = {
|
|
|
2912
3005
|
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
2913
3006
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
2914
3007
|
const { lazy } = treeOpts;
|
|
2915
|
-
const fullAllDataRowIdMaps = Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
|
|
3008
|
+
const fullAllDataRowIdMaps = isReset ? {} : Object.assign({}, fullAllDataRowIdData); // 存在已删除数据
|
|
2916
3009
|
const fullDataRowIdMaps = {};
|
|
2917
3010
|
const { handleUpdateRowId } = createHandleUpdateRowId($xeTable);
|
|
2918
3011
|
const handleRowCache = (row, index, items, currIndex, parentRow, rowid, level, seq) => {
|
|
@@ -5520,6 +5613,25 @@ const Methods = {
|
|
|
5520
5613
|
this.updateCellAreas();
|
|
5521
5614
|
this.recalculate(true);
|
|
5522
5615
|
},
|
|
5616
|
+
/**
|
|
5617
|
+
* 处理合并
|
|
5618
|
+
*/
|
|
5619
|
+
handleUpdateBodyMerge() {
|
|
5620
|
+
const $xeTable = this;
|
|
5621
|
+
const reactData = $xeTable;
|
|
5622
|
+
const internalData = $xeTable;
|
|
5623
|
+
const { mergeBodyList } = internalData;
|
|
5624
|
+
internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList);
|
|
5625
|
+
reactData.mergeBodyFlag++;
|
|
5626
|
+
},
|
|
5627
|
+
handleUpdateFooterMerge() {
|
|
5628
|
+
const $xeTable = this;
|
|
5629
|
+
const reactData = $xeTable;
|
|
5630
|
+
const internalData = $xeTable;
|
|
5631
|
+
const { mergeFooterList } = internalData;
|
|
5632
|
+
internalData.mergeFooterCellMaps = buildMergeData(mergeFooterList);
|
|
5633
|
+
reactData.mergeFootFlag++;
|
|
5634
|
+
},
|
|
5523
5635
|
handleTargetLeaveEvent() {
|
|
5524
5636
|
const $xeTable = this;
|
|
5525
5637
|
const internalData = $xeTable;
|
|
@@ -9066,17 +9178,22 @@ const Methods = {
|
|
|
9066
9178
|
*/
|
|
9067
9179
|
updateFooter() {
|
|
9068
9180
|
const $xeTable = this;
|
|
9181
|
+
const props = $xeTable;
|
|
9182
|
+
const reactData = $xeTable;
|
|
9183
|
+
const internalData = $xeTable;
|
|
9069
9184
|
const $xeGrid = $xeTable.$xeGrid;
|
|
9070
|
-
const { showFooter,
|
|
9185
|
+
const { showFooter, footerData, footerMethod } = props;
|
|
9186
|
+
const { visibleColumn, afterFullData } = internalData;
|
|
9071
9187
|
let footData = [];
|
|
9072
9188
|
if (showFooter && footerData && footerData.length) {
|
|
9073
9189
|
footData = footerData.slice(0);
|
|
9074
9190
|
}
|
|
9075
9191
|
else if (showFooter && footerMethod) {
|
|
9076
|
-
footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data:
|
|
9192
|
+
footData = visibleColumn.length ? footerMethod({ columns: visibleColumn, data: afterFullData, $table: $xeTable, $grid: $xeGrid }) : [];
|
|
9077
9193
|
}
|
|
9078
|
-
|
|
9079
|
-
|
|
9194
|
+
reactData.footerTableData = footData;
|
|
9195
|
+
$xeTable.handleUpdateFooterMerge();
|
|
9196
|
+
return $xeTable.$nextTick();
|
|
9080
9197
|
},
|
|
9081
9198
|
/**
|
|
9082
9199
|
* 更新列状态 updateStatus({ row, column }, cellValue)
|
|
@@ -9099,12 +9216,14 @@ const Methods = {
|
|
|
9099
9216
|
*/
|
|
9100
9217
|
setMergeCells(merges) {
|
|
9101
9218
|
const $xeTable = this;
|
|
9102
|
-
|
|
9219
|
+
const props = $xeTable;
|
|
9220
|
+
if (props.spanMethod) {
|
|
9103
9221
|
errLog('vxe.error.errConflicts', ['merge-cells', 'span-method']);
|
|
9104
9222
|
}
|
|
9105
|
-
|
|
9106
|
-
|
|
9107
|
-
|
|
9223
|
+
handleBodyMerge($xeTable, merges);
|
|
9224
|
+
$xeTable.handleUpdateBodyMerge();
|
|
9225
|
+
return $xeTable.$nextTick().then(() => {
|
|
9226
|
+
$xeTable.updateCellAreas();
|
|
9108
9227
|
return updateStyle($xeTable);
|
|
9109
9228
|
});
|
|
9110
9229
|
},
|
|
@@ -9114,12 +9233,14 @@ const Methods = {
|
|
|
9114
9233
|
*/
|
|
9115
9234
|
removeMergeCells(merges) {
|
|
9116
9235
|
const $xeTable = this;
|
|
9117
|
-
|
|
9236
|
+
const props = $xeTable;
|
|
9237
|
+
const internalData = $xeTable;
|
|
9238
|
+
if (props.spanMethod) {
|
|
9118
9239
|
errLog('vxe.error.errConflicts', ['merge-cells', 'span-method']);
|
|
9119
9240
|
}
|
|
9120
|
-
const rest = removeMerges(
|
|
9121
|
-
return
|
|
9122
|
-
|
|
9241
|
+
const rest = removeMerges($xeTable, merges, internalData.mergeBodyList, internalData.afterFullData);
|
|
9242
|
+
return $xeTable.$nextTick().then(() => {
|
|
9243
|
+
$xeTable.updateCellAreas();
|
|
9123
9244
|
updateStyle($xeTable);
|
|
9124
9245
|
return rest;
|
|
9125
9246
|
});
|
|
@@ -9128,37 +9249,46 @@ const Methods = {
|
|
|
9128
9249
|
* 获取所有被合并的单元格
|
|
9129
9250
|
*/
|
|
9130
9251
|
getMergeCells() {
|
|
9131
|
-
|
|
9252
|
+
const $xeTable = this;
|
|
9253
|
+
const internalData = $xeTable;
|
|
9254
|
+
return internalData.mergeBodyList.slice(0);
|
|
9132
9255
|
},
|
|
9133
9256
|
/**
|
|
9134
9257
|
* 清除所有单元格合并
|
|
9135
9258
|
*/
|
|
9136
9259
|
clearMergeCells() {
|
|
9137
9260
|
const $xeTable = this;
|
|
9138
|
-
|
|
9139
|
-
|
|
9261
|
+
const internalData = $xeTable;
|
|
9262
|
+
internalData.mergeBodyList = [];
|
|
9263
|
+
internalData.mergeBodyMaps = {};
|
|
9264
|
+
internalData.mergeBodyCellMaps = {};
|
|
9265
|
+
return $xeTable.$nextTick().then(() => {
|
|
9140
9266
|
return updateStyle($xeTable);
|
|
9141
9267
|
});
|
|
9142
9268
|
},
|
|
9143
9269
|
setMergeFooterItems(merges) {
|
|
9144
9270
|
const $xeTable = this;
|
|
9145
|
-
|
|
9271
|
+
const props = $xeTable;
|
|
9272
|
+
if (props.footerSpanMethod) {
|
|
9146
9273
|
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
9147
9274
|
}
|
|
9148
|
-
|
|
9149
|
-
|
|
9150
|
-
|
|
9275
|
+
handleFooterMerge($xeTable, merges);
|
|
9276
|
+
$xeTable.handleUpdateFooterMerge();
|
|
9277
|
+
return $xeTable.$nextTick().then(() => {
|
|
9278
|
+
$xeTable.updateCellAreas();
|
|
9151
9279
|
return updateStyle($xeTable);
|
|
9152
9280
|
});
|
|
9153
9281
|
},
|
|
9154
9282
|
removeMergeFooterItems(merges) {
|
|
9155
9283
|
const $xeTable = this;
|
|
9156
|
-
|
|
9284
|
+
const props = $xeTable;
|
|
9285
|
+
const internalData = $xeTable;
|
|
9286
|
+
if (props.footerSpanMethod) {
|
|
9157
9287
|
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
9158
9288
|
}
|
|
9159
|
-
const rest = removeMerges(
|
|
9160
|
-
return
|
|
9161
|
-
|
|
9289
|
+
const rest = removeMerges($xeTable, merges, internalData.mergeFooterList);
|
|
9290
|
+
return $xeTable.$nextTick().then(() => {
|
|
9291
|
+
$xeTable.updateCellAreas();
|
|
9162
9292
|
updateStyle($xeTable);
|
|
9163
9293
|
return rest;
|
|
9164
9294
|
});
|
|
@@ -9167,15 +9297,20 @@ const Methods = {
|
|
|
9167
9297
|
* 获取所有被合并的表尾
|
|
9168
9298
|
*/
|
|
9169
9299
|
getMergeFooterItems() {
|
|
9170
|
-
|
|
9300
|
+
const $xeTable = this;
|
|
9301
|
+
const internalData = $xeTable;
|
|
9302
|
+
return internalData.mergeFooterList.slice(0);
|
|
9171
9303
|
},
|
|
9172
9304
|
/**
|
|
9173
9305
|
* 清除所有表尾合并
|
|
9174
9306
|
*/
|
|
9175
9307
|
clearMergeFooterItems() {
|
|
9176
9308
|
const $xeTable = this;
|
|
9177
|
-
|
|
9178
|
-
|
|
9309
|
+
const internalData = $xeTable;
|
|
9310
|
+
internalData.mergeFooterList = [];
|
|
9311
|
+
internalData.mergeFooterMaps = {};
|
|
9312
|
+
internalData.mergeFooterCellMaps = {};
|
|
9313
|
+
return $xeTable.$nextTick().then(() => {
|
|
9179
9314
|
return updateStyle($xeTable);
|
|
9180
9315
|
});
|
|
9181
9316
|
},
|
package/es/table/src/table.js
CHANGED
|
@@ -199,21 +199,23 @@ function renderRowExpandedVNs(h, $xeTable) {
|
|
|
199
199
|
const { transform, seqMode } = treeOpts;
|
|
200
200
|
const cellStyle = {};
|
|
201
201
|
const rowid = handleGetRowId(row);
|
|
202
|
-
const
|
|
202
|
+
const rowRest = fullAllDataRowIdData[rowid];
|
|
203
203
|
let rowLevel = 0;
|
|
204
204
|
let seq = -1;
|
|
205
|
-
let _rowIndex =
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
if (
|
|
209
|
-
rowLevel =
|
|
205
|
+
let _rowIndex = -1;
|
|
206
|
+
let rowIndex = -1;
|
|
207
|
+
let $rowIndex = -1;
|
|
208
|
+
if (rowRest) {
|
|
209
|
+
rowLevel = rowRest.level;
|
|
210
210
|
if (treeConfig && transform && seqMode === 'increasing') {
|
|
211
|
-
seq =
|
|
211
|
+
seq = rowRest._index + 1;
|
|
212
212
|
}
|
|
213
213
|
else {
|
|
214
|
-
seq =
|
|
214
|
+
seq = rowRest.seq;
|
|
215
215
|
}
|
|
216
|
-
|
|
216
|
+
rowIndex = rowRest.index;
|
|
217
|
+
$rowIndex = rowRest.$index;
|
|
218
|
+
_rowIndex = rowRest._index;
|
|
217
219
|
}
|
|
218
220
|
if (expandHeight) {
|
|
219
221
|
cellStyle.height = `${expandHeight}px`;
|
|
@@ -453,10 +455,6 @@ export default {
|
|
|
453
455
|
hasFixedColumn: false,
|
|
454
456
|
// 树节点列信息
|
|
455
457
|
treeNodeColumn: null,
|
|
456
|
-
// 合并单元格的对象集
|
|
457
|
-
mergeList: [],
|
|
458
|
-
// 合并表尾数据的对象集
|
|
459
|
-
mergeFooterList: [],
|
|
460
458
|
// 初始化标识
|
|
461
459
|
initStore: {
|
|
462
460
|
filter: false,
|
|
@@ -606,6 +604,10 @@ export default {
|
|
|
606
604
|
treeExpandedFlag: 1,
|
|
607
605
|
updateCheckboxFlag: 1,
|
|
608
606
|
pendingRowFlag: 1,
|
|
607
|
+
insertRowFlag: 1,
|
|
608
|
+
removeRowFlag: 1,
|
|
609
|
+
mergeBodyFlag: 1,
|
|
610
|
+
mergeFootFlag: 1,
|
|
609
611
|
rowHeightStore: {
|
|
610
612
|
default: 48,
|
|
611
613
|
medium: 44,
|
|
@@ -1031,19 +1033,21 @@ export default {
|
|
|
1031
1033
|
},
|
|
1032
1034
|
computeTableRowExpandedList() {
|
|
1033
1035
|
const $xeTable = this;
|
|
1036
|
+
const props = $xeTable;
|
|
1034
1037
|
const reactData = $xeTable;
|
|
1035
1038
|
const internalData = $xeTable;
|
|
1036
|
-
const {
|
|
1037
|
-
const {
|
|
1038
|
-
const {
|
|
1039
|
+
const { treeConfig } = props;
|
|
1040
|
+
const { rowExpandedFlag, expandColumn } = reactData;
|
|
1041
|
+
const { visibleDataRowIdData, rowExpandedMaps } = internalData;
|
|
1042
|
+
const treeOpts = $xeTable.computeTreeOpts;
|
|
1043
|
+
const { transform } = treeOpts;
|
|
1039
1044
|
const expandList = [];
|
|
1040
1045
|
if (expandColumn && rowExpandedFlag) {
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
});
|
|
1046
|
+
if (treeConfig && !transform) {
|
|
1047
|
+
return XEUtils.values(rowExpandedMaps);
|
|
1048
|
+
}
|
|
1045
1049
|
XEUtils.each(rowExpandedMaps, (row, rowid) => {
|
|
1046
|
-
if (
|
|
1050
|
+
if (visibleDataRowIdData[rowid]) {
|
|
1047
1051
|
expandList.push(row);
|
|
1048
1052
|
}
|
|
1049
1053
|
});
|
|
@@ -1302,13 +1306,26 @@ export default {
|
|
|
1302
1306
|
tableFullColumn: [],
|
|
1303
1307
|
// 渲染所有列
|
|
1304
1308
|
visibleColumn: [],
|
|
1305
|
-
//
|
|
1309
|
+
// 全量数据集(包括当前和已删除)
|
|
1306
1310
|
fullAllDataRowIdData: {},
|
|
1311
|
+
// 数据集(仅当前)
|
|
1312
|
+
fullDataRowIdData: {},
|
|
1313
|
+
// 数据集(仅可视)
|
|
1314
|
+
visibleDataRowIdData: {},
|
|
1307
1315
|
// 渲染中缓存数据
|
|
1308
1316
|
sourceDataRowIdData: {},
|
|
1309
|
-
fullDataRowIdData: {},
|
|
1310
1317
|
fullColumnIdData: {},
|
|
1311
1318
|
fullColumnFieldData: {},
|
|
1319
|
+
// 合并单元格的数据
|
|
1320
|
+
mergeBodyList: [],
|
|
1321
|
+
mergeBodyMaps: {},
|
|
1322
|
+
// 合并表尾的数据
|
|
1323
|
+
mergeFooterList: [],
|
|
1324
|
+
mergeFooterMaps: {},
|
|
1325
|
+
// 已合并单元格数据集合
|
|
1326
|
+
mergeBodyCellMaps: {},
|
|
1327
|
+
// 已合并表尾数据集合
|
|
1328
|
+
mergeFooterCellMaps: {},
|
|
1312
1329
|
// 已展开的行集合
|
|
1313
1330
|
rowExpandedMaps: {},
|
|
1314
1331
|
// 懒加载中的展开行的集合
|
package/es/table/src/util.js
CHANGED
|
@@ -353,19 +353,6 @@ export function calcTreeLine(params, prevRow) {
|
|
|
353
353
|
}
|
|
354
354
|
return cellHeight * expandSize - (prevRow ? 1 : (12 - getOffsetSize($table)));
|
|
355
355
|
}
|
|
356
|
-
export function mergeBodyMethod(mergeList, _rowIndex, _columnIndex) {
|
|
357
|
-
for (let mIndex = 0; mIndex < mergeList.length; mIndex++) {
|
|
358
|
-
const { row: mergeRowIndex, col: mergeColIndex, rowspan: mergeRowspan, colspan: mergeColspan } = mergeList[mIndex];
|
|
359
|
-
if (mergeColIndex > -1 && mergeRowIndex > -1 && mergeRowspan && mergeColspan) {
|
|
360
|
-
if (mergeRowIndex === _rowIndex && mergeColIndex === _columnIndex) {
|
|
361
|
-
return { rowspan: mergeRowspan, colspan: mergeColspan };
|
|
362
|
-
}
|
|
363
|
-
if (_rowIndex >= mergeRowIndex && _rowIndex < mergeRowIndex + mergeRowspan && _columnIndex >= mergeColIndex && _columnIndex < mergeColIndex + mergeColspan) {
|
|
364
|
-
return { rowspan: 0, colspan: 0 };
|
|
365
|
-
}
|
|
366
|
-
}
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
356
|
export function getCellValue(row, column) {
|
|
370
357
|
return XEUtils.get(row, column.field);
|
|
371
358
|
}
|
package/es/ui/index.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { VxeUI } from '@vxe-ui/core';
|
|
2
2
|
import { getFuncText } from './src/utils';
|
|
3
|
-
export const version = "3.
|
|
3
|
+
export const version = "3.15.0-beta.0";
|
|
4
4
|
VxeUI.version = version;
|
|
5
5
|
VxeUI.tableVersion = version;
|
|
6
6
|
VxeUI.setConfig({
|
|
@@ -192,7 +192,7 @@ VxeUI.setConfig({
|
|
|
192
192
|
},
|
|
193
193
|
virtualXConfig: {
|
|
194
194
|
enabled: true,
|
|
195
|
-
gt:
|
|
195
|
+
gt: 28,
|
|
196
196
|
preSize: 0,
|
|
197
197
|
oSize: 1
|
|
198
198
|
},
|
package/es/ui/src/log.js
CHANGED