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
package/es/table/src/table.js
CHANGED
|
@@ -260,6 +260,7 @@ export default defineVxeComponent({
|
|
|
260
260
|
pendingRowFlag: 1,
|
|
261
261
|
insertRowFlag: 1,
|
|
262
262
|
removeRowFlag: 1,
|
|
263
|
+
mergeHeadFlag: 1,
|
|
263
264
|
mergeBodyFlag: 1,
|
|
264
265
|
mergeFootFlag: 1,
|
|
265
266
|
rowHeightStore: {
|
|
@@ -1126,15 +1127,62 @@ export default defineVxeComponent({
|
|
|
1126
1127
|
});
|
|
1127
1128
|
}
|
|
1128
1129
|
};
|
|
1129
|
-
const
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1130
|
+
const removeBodyMerges = (merges) => {
|
|
1131
|
+
const { mergeBodyList, fullColumnIdData, fullAllDataRowIdData, mergeBodyMaps } = internalData;
|
|
1132
|
+
const rest = [];
|
|
1133
|
+
if (merges) {
|
|
1134
|
+
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1135
|
+
if (!XEUtils.isArray(merges)) {
|
|
1136
|
+
merges = [merges];
|
|
1137
|
+
}
|
|
1138
|
+
merges.forEach((item) => {
|
|
1139
|
+
const { row: margeRow, col: margeCol } = item;
|
|
1140
|
+
let mergeRowIndex = -1;
|
|
1141
|
+
let mergeColumnIndex = -1;
|
|
1142
|
+
if (XEUtils.isNumber(margeRow)) {
|
|
1143
|
+
mergeRowIndex = margeRow;
|
|
1144
|
+
}
|
|
1145
|
+
else {
|
|
1146
|
+
const rowid = margeRow ? handleGetRowId(margeRow) : null;
|
|
1147
|
+
const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
|
|
1148
|
+
if (rowRest) {
|
|
1149
|
+
mergeRowIndex = rowRest._index;
|
|
1150
|
+
}
|
|
1151
|
+
}
|
|
1152
|
+
if (XEUtils.isNumber(margeCol)) {
|
|
1153
|
+
mergeColumnIndex = margeCol;
|
|
1154
|
+
}
|
|
1155
|
+
else {
|
|
1156
|
+
const colid = margeCol ? margeCol.id : null;
|
|
1157
|
+
const colRest = colid ? fullColumnIdData[colid] : null;
|
|
1158
|
+
if (colRest) {
|
|
1159
|
+
mergeColumnIndex = colRest._index;
|
|
1160
|
+
}
|
|
1161
|
+
}
|
|
1162
|
+
const mcIndex = XEUtils.findIndexOf(mergeBodyList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex);
|
|
1163
|
+
if (mcIndex > -1) {
|
|
1164
|
+
const rItems = mergeBodyList.splice(mcIndex, 1);
|
|
1165
|
+
const item = rItems[0];
|
|
1166
|
+
if (item) {
|
|
1167
|
+
rest.push(rItems[0]);
|
|
1168
|
+
if (mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
|
|
1169
|
+
delete mergeBodyMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
|
|
1170
|
+
}
|
|
1171
|
+
}
|
|
1172
|
+
}
|
|
1173
|
+
});
|
|
1174
|
+
}
|
|
1175
|
+
return rest;
|
|
1134
1176
|
};
|
|
1135
|
-
const
|
|
1177
|
+
const handleUpdateMergeHeaderCells = (merges) => {
|
|
1178
|
+
internalData.mergeHeaderList = [];
|
|
1179
|
+
internalData.mergeHeaderMaps = {};
|
|
1180
|
+
internalData.mergeHeaderCellMaps = {};
|
|
1181
|
+
$xeTable.setMergeHeaderCells(merges);
|
|
1182
|
+
};
|
|
1183
|
+
const handleHeaderMerge = (merges) => {
|
|
1136
1184
|
const { footerTableData } = reactData;
|
|
1137
|
-
const {
|
|
1185
|
+
const { mergeHeaderList, mergeHeaderMaps, fullColumnIdData } = internalData;
|
|
1138
1186
|
if (merges) {
|
|
1139
1187
|
const { visibleColumn } = internalData;
|
|
1140
1188
|
if (!XEUtils.isArray(merges)) {
|
|
@@ -1160,7 +1208,7 @@ export default defineVxeComponent({
|
|
|
1160
1208
|
if (rowspan > 1 || colspan > 1) {
|
|
1161
1209
|
const row = footerTableData[mergeRowIndex];
|
|
1162
1210
|
const column = visibleColumn[mergeColumnIndex];
|
|
1163
|
-
let mergeItem =
|
|
1211
|
+
let mergeItem = mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
|
|
1164
1212
|
if (mergeItem) {
|
|
1165
1213
|
mergeItem.rowspan = rowspan;
|
|
1166
1214
|
mergeItem.colspan = colspan;
|
|
@@ -1178,36 +1226,25 @@ export default defineVxeComponent({
|
|
|
1178
1226
|
_rowspan: rowspan,
|
|
1179
1227
|
_colspan: colspan
|
|
1180
1228
|
};
|
|
1181
|
-
|
|
1182
|
-
|
|
1229
|
+
mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
|
|
1230
|
+
mergeHeaderList.push(mergeItem);
|
|
1183
1231
|
}
|
|
1184
1232
|
}
|
|
1185
1233
|
}
|
|
1186
1234
|
});
|
|
1187
1235
|
}
|
|
1188
1236
|
};
|
|
1189
|
-
const
|
|
1190
|
-
const {
|
|
1237
|
+
const removeHeaderMerges = (merges) => {
|
|
1238
|
+
const { mergeHeaderList, fullColumnIdData, mergeHeaderMaps } = internalData;
|
|
1191
1239
|
const rest = [];
|
|
1192
1240
|
if (merges) {
|
|
1193
|
-
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1194
1241
|
if (!XEUtils.isArray(merges)) {
|
|
1195
1242
|
merges = [merges];
|
|
1196
1243
|
}
|
|
1197
1244
|
merges.forEach((item) => {
|
|
1198
1245
|
const { row: margeRow, col: margeCol } = item;
|
|
1199
|
-
|
|
1246
|
+
const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1;
|
|
1200
1247
|
let mergeColumnIndex = -1;
|
|
1201
|
-
if (XEUtils.isNumber(margeRow)) {
|
|
1202
|
-
mergeRowIndex = margeRow;
|
|
1203
|
-
}
|
|
1204
|
-
else {
|
|
1205
|
-
const rowid = margeRow ? handleGetRowId(margeRow) : null;
|
|
1206
|
-
const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
|
|
1207
|
-
if (rowRest) {
|
|
1208
|
-
mergeRowIndex = rowRest._index;
|
|
1209
|
-
}
|
|
1210
|
-
}
|
|
1211
1248
|
if (XEUtils.isNumber(margeCol)) {
|
|
1212
1249
|
mergeColumnIndex = margeCol;
|
|
1213
1250
|
}
|
|
@@ -1218,14 +1255,14 @@ export default defineVxeComponent({
|
|
|
1218
1255
|
mergeColumnIndex = colRest._index;
|
|
1219
1256
|
}
|
|
1220
1257
|
}
|
|
1221
|
-
const mcIndex = XEUtils.findIndexOf(
|
|
1258
|
+
const mcIndex = XEUtils.findIndexOf(mergeHeaderList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex);
|
|
1222
1259
|
if (mcIndex > -1) {
|
|
1223
|
-
const rItems =
|
|
1260
|
+
const rItems = mergeHeaderList.splice(mcIndex, 1);
|
|
1224
1261
|
const item = rItems[0];
|
|
1225
1262
|
if (item) {
|
|
1226
|
-
rest.push(
|
|
1227
|
-
if (
|
|
1228
|
-
delete
|
|
1263
|
+
rest.push(item);
|
|
1264
|
+
if (mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
|
|
1265
|
+
delete mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
|
|
1229
1266
|
}
|
|
1230
1267
|
}
|
|
1231
1268
|
}
|
|
@@ -1233,6 +1270,66 @@ export default defineVxeComponent({
|
|
|
1233
1270
|
}
|
|
1234
1271
|
return rest;
|
|
1235
1272
|
};
|
|
1273
|
+
const handleUpdateMergeFooterCells = (merges) => {
|
|
1274
|
+
internalData.mergeFooterList = [];
|
|
1275
|
+
internalData.mergeFooterMaps = {};
|
|
1276
|
+
internalData.mergeFooterCellMaps = {};
|
|
1277
|
+
$xeTable.setMergeFooterCells(merges);
|
|
1278
|
+
};
|
|
1279
|
+
const handleFooterMerge = (merges) => {
|
|
1280
|
+
const { footerTableData } = reactData;
|
|
1281
|
+
const { mergeFooterList, mergeFooterMaps, fullColumnIdData } = internalData;
|
|
1282
|
+
if (merges) {
|
|
1283
|
+
const { visibleColumn } = internalData;
|
|
1284
|
+
if (!XEUtils.isArray(merges)) {
|
|
1285
|
+
merges = [merges];
|
|
1286
|
+
}
|
|
1287
|
+
merges.forEach((item) => {
|
|
1288
|
+
let { row: margeRow, col: margeCol, rowspan, colspan } = item;
|
|
1289
|
+
const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1;
|
|
1290
|
+
let mergeColumnIndex = -1;
|
|
1291
|
+
if (XEUtils.isNumber(margeCol)) {
|
|
1292
|
+
mergeColumnIndex = margeCol;
|
|
1293
|
+
}
|
|
1294
|
+
else {
|
|
1295
|
+
const colid = margeCol ? margeCol.id : null;
|
|
1296
|
+
const colRest = colid ? fullColumnIdData[colid] : null;
|
|
1297
|
+
if (colRest) {
|
|
1298
|
+
mergeColumnIndex = colRest._index;
|
|
1299
|
+
}
|
|
1300
|
+
}
|
|
1301
|
+
if (mergeRowIndex > -1 && mergeColumnIndex > -1 && (rowspan || colspan)) {
|
|
1302
|
+
rowspan = XEUtils.toNumber(rowspan) || 1;
|
|
1303
|
+
colspan = XEUtils.toNumber(colspan) || 1;
|
|
1304
|
+
if (rowspan > 1 || colspan > 1) {
|
|
1305
|
+
const row = footerTableData[mergeRowIndex];
|
|
1306
|
+
const column = visibleColumn[mergeColumnIndex];
|
|
1307
|
+
let mergeItem = mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
|
|
1308
|
+
if (mergeItem) {
|
|
1309
|
+
mergeItem.rowspan = rowspan;
|
|
1310
|
+
mergeItem.colspan = colspan;
|
|
1311
|
+
mergeItem._rowspan = rowspan;
|
|
1312
|
+
mergeItem._colspan = colspan;
|
|
1313
|
+
}
|
|
1314
|
+
else {
|
|
1315
|
+
mergeItem = {
|
|
1316
|
+
row: mergeRowIndex,
|
|
1317
|
+
col: mergeColumnIndex,
|
|
1318
|
+
rowspan,
|
|
1319
|
+
colspan,
|
|
1320
|
+
_row: row,
|
|
1321
|
+
_col: column,
|
|
1322
|
+
_rowspan: rowspan,
|
|
1323
|
+
_colspan: colspan
|
|
1324
|
+
};
|
|
1325
|
+
mergeFooterMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
|
|
1326
|
+
mergeFooterList.push(mergeItem);
|
|
1327
|
+
}
|
|
1328
|
+
}
|
|
1329
|
+
}
|
|
1330
|
+
});
|
|
1331
|
+
}
|
|
1332
|
+
};
|
|
1236
1333
|
const removeFooterMerges = (merges) => {
|
|
1237
1334
|
const { mergeFooterList, fullColumnIdData, mergeFooterMaps } = internalData;
|
|
1238
1335
|
const rest = [];
|
|
@@ -1338,8 +1435,23 @@ export default defineVxeComponent({
|
|
|
1338
1435
|
});
|
|
1339
1436
|
};
|
|
1340
1437
|
const calcTableHeight = (key) => {
|
|
1438
|
+
const { editConfig } = props;
|
|
1341
1439
|
const { parentHeight } = reactData;
|
|
1342
|
-
|
|
1440
|
+
let val = props[key];
|
|
1441
|
+
if (key === 'minHeight') {
|
|
1442
|
+
const defMinHeight = getConfig().table.minHeight;
|
|
1443
|
+
if (XEUtils.eqNull(val)) {
|
|
1444
|
+
if (eqEmptyValue(defMinHeight)) {
|
|
1445
|
+
// 编辑模式默认最小高度
|
|
1446
|
+
if (isEnableConf(editConfig)) {
|
|
1447
|
+
val = 144;
|
|
1448
|
+
}
|
|
1449
|
+
}
|
|
1450
|
+
else {
|
|
1451
|
+
val = defMinHeight;
|
|
1452
|
+
}
|
|
1453
|
+
}
|
|
1454
|
+
}
|
|
1343
1455
|
let num = 0;
|
|
1344
1456
|
if (val) {
|
|
1345
1457
|
if (val === '100%' || val === 'auto') {
|
|
@@ -2253,7 +2365,7 @@ export default defineVxeComponent({
|
|
|
2253
2365
|
}
|
|
2254
2366
|
if (xRightCornerEl) {
|
|
2255
2367
|
xRightCornerEl.style.width = scrollbarXToTop ? '' : `${osbWidth}px`;
|
|
2256
|
-
xRightCornerEl.style.display = scrollbarXToTop ? '' : (
|
|
2368
|
+
xRightCornerEl.style.display = scrollbarXToTop ? '' : (xScrollbarVisible === 'visible' ? 'block' : '');
|
|
2257
2369
|
}
|
|
2258
2370
|
const scrollYVirtualEl = refScrollYVirtualElem.value;
|
|
2259
2371
|
if (scrollYVirtualEl) {
|
|
@@ -2264,7 +2376,7 @@ export default defineVxeComponent({
|
|
|
2264
2376
|
const yTopCornerEl = refScrollYTopCornerElem.value;
|
|
2265
2377
|
if (yTopCornerEl) {
|
|
2266
2378
|
yTopCornerEl.style.height = `${tHeaderHeight}px`;
|
|
2267
|
-
yTopCornerEl.style.display =
|
|
2379
|
+
yTopCornerEl.style.display = tHeaderHeight && yScrollbarVisible === 'visible' ? 'block' : '';
|
|
2268
2380
|
}
|
|
2269
2381
|
const yWrapperEl = refScrollYWrapperElem.value;
|
|
2270
2382
|
if (yWrapperEl) {
|
|
@@ -2275,7 +2387,7 @@ export default defineVxeComponent({
|
|
|
2275
2387
|
if (yBottomCornerEl) {
|
|
2276
2388
|
yBottomCornerEl.style.height = `${tFooterHeight}px`;
|
|
2277
2389
|
yBottomCornerEl.style.top = `${tHeaderHeight + tbHeight}px`;
|
|
2278
|
-
yBottomCornerEl.style.display =
|
|
2390
|
+
yBottomCornerEl.style.display = tFooterHeight && yScrollbarVisible === 'visible' ? 'block' : '';
|
|
2279
2391
|
}
|
|
2280
2392
|
const rowExpandEl = refRowExpandElem.value;
|
|
2281
2393
|
if (rowExpandEl) {
|
|
@@ -2965,10 +3077,17 @@ export default defineVxeComponent({
|
|
|
2965
3077
|
$xeTable.setMergeCells(mergeCells);
|
|
2966
3078
|
}
|
|
2967
3079
|
};
|
|
3080
|
+
const handleDefaultMergeHeaderItems = () => {
|
|
3081
|
+
const { mergeHeaderCells } = props;
|
|
3082
|
+
if (mergeHeaderCells) {
|
|
3083
|
+
$xeTable.setMergeHeaderCells(mergeHeaderCells);
|
|
3084
|
+
}
|
|
3085
|
+
};
|
|
2968
3086
|
const handleDefaultMergeFooterItems = () => {
|
|
2969
|
-
const { mergeFooterItems } = props;
|
|
2970
|
-
|
|
2971
|
-
|
|
3087
|
+
const { mergeFooterCells, mergeFooterItems } = props;
|
|
3088
|
+
const mFooterCells = mergeFooterCells || mergeFooterItems;
|
|
3089
|
+
if (mFooterCells) {
|
|
3090
|
+
$xeTable.setMergeFooterCells(mFooterCells);
|
|
2972
3091
|
}
|
|
2973
3092
|
};
|
|
2974
3093
|
// 计算可视渲染相关数据
|
|
@@ -3405,6 +3524,10 @@ export default defineVxeComponent({
|
|
|
3405
3524
|
}
|
|
3406
3525
|
handleReserveStatus();
|
|
3407
3526
|
$xeTable.checkSelectionStatus();
|
|
3527
|
+
$xeTable.dispatchEvent('data-change', {
|
|
3528
|
+
visibleColumn: internalData.visibleColumn,
|
|
3529
|
+
visibleData: internalData.afterFullData
|
|
3530
|
+
}, null);
|
|
3408
3531
|
return new Promise(resolve => {
|
|
3409
3532
|
nextTick()
|
|
3410
3533
|
.then(() => handleRecalculateStyle(false, false, false))
|
|
@@ -3467,6 +3590,7 @@ export default defineVxeComponent({
|
|
|
3467
3590
|
handleDefaultTreeExpand();
|
|
3468
3591
|
handleDefaultRowGroupExpand();
|
|
3469
3592
|
handleDefaultMergeCells();
|
|
3593
|
+
handleDefaultMergeHeaderItems();
|
|
3470
3594
|
handleDefaultMergeFooterItems();
|
|
3471
3595
|
nextTick(() => setTimeout(() => $xeTable.recalculate()));
|
|
3472
3596
|
};
|
|
@@ -6785,6 +6909,10 @@ export default defineVxeComponent({
|
|
|
6785
6909
|
}
|
|
6786
6910
|
reactData.footerTableData = footData;
|
|
6787
6911
|
$xeTable.handleUpdateFooterMerge();
|
|
6912
|
+
$xeTable.dispatchEvent('footer-data-change', {
|
|
6913
|
+
visibleColumn: internalData.visibleColumn,
|
|
6914
|
+
footData
|
|
6915
|
+
}, null);
|
|
6788
6916
|
return nextTick();
|
|
6789
6917
|
},
|
|
6790
6918
|
/**
|
|
@@ -6852,39 +6980,85 @@ export default defineVxeComponent({
|
|
|
6852
6980
|
return updateStyle();
|
|
6853
6981
|
});
|
|
6854
6982
|
},
|
|
6855
|
-
|
|
6983
|
+
setMergeHeaderCells(merges) {
|
|
6984
|
+
handleHeaderMerge(merges);
|
|
6985
|
+
$xeTable.handleUpdateHeaderMerge();
|
|
6986
|
+
return nextTick().then(() => {
|
|
6987
|
+
return updateStyle();
|
|
6988
|
+
});
|
|
6989
|
+
},
|
|
6990
|
+
/**
|
|
6991
|
+
* 移除表头单元格合并 [{row:Row|number, col:ColumnInfo|number}]
|
|
6992
|
+
*/
|
|
6993
|
+
removeMergeHeaderCells(merges) {
|
|
6994
|
+
const rest = removeHeaderMerges(merges);
|
|
6995
|
+
$xeTable.handleUpdateHeaderMerge();
|
|
6996
|
+
return nextTick().then(() => {
|
|
6997
|
+
updateStyle();
|
|
6998
|
+
return rest;
|
|
6999
|
+
});
|
|
7000
|
+
},
|
|
7001
|
+
/**
|
|
7002
|
+
* 获取所有被合并的表头单元格
|
|
7003
|
+
*/
|
|
7004
|
+
getMergeHeaderCells() {
|
|
7005
|
+
return internalData.mergeHeaderList.slice(0);
|
|
7006
|
+
},
|
|
7007
|
+
/**
|
|
7008
|
+
* 清除所有表头单元格合并
|
|
7009
|
+
*/
|
|
7010
|
+
clearMergeHeaderCells() {
|
|
7011
|
+
internalData.mergeHeaderList = [];
|
|
7012
|
+
internalData.mergeHeaderMaps = {};
|
|
7013
|
+
internalData.mergeHeaderCellMaps = {};
|
|
7014
|
+
reactData.mergeHeadFlag++;
|
|
7015
|
+
return nextTick().then(() => {
|
|
7016
|
+
return updateStyle();
|
|
7017
|
+
});
|
|
7018
|
+
},
|
|
7019
|
+
setMergeFooterCells(merges) {
|
|
6856
7020
|
if (props.footerSpanMethod) {
|
|
6857
|
-
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
7021
|
+
errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
|
|
6858
7022
|
}
|
|
6859
7023
|
handleFooterMerge(merges);
|
|
6860
7024
|
$xeTable.handleUpdateFooterMerge();
|
|
6861
7025
|
return nextTick().then(() => {
|
|
6862
|
-
$xeTable.updateCellAreas();
|
|
6863
7026
|
return updateStyle();
|
|
6864
7027
|
});
|
|
6865
7028
|
},
|
|
6866
|
-
|
|
7029
|
+
setMergeFooterItems(merges) {
|
|
7030
|
+
// errLog('vxe.error.delFunc', ['setMergeFooterItems', 'setMergeFooterCells'])
|
|
7031
|
+
return $xeTable.setMergeFooterCells(merges);
|
|
7032
|
+
},
|
|
7033
|
+
removeMergeFooterCells(merges) {
|
|
6867
7034
|
if (props.footerSpanMethod) {
|
|
6868
|
-
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
7035
|
+
errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
|
|
6869
7036
|
}
|
|
6870
7037
|
const rest = removeFooterMerges(merges);
|
|
6871
7038
|
$xeTable.handleUpdateFooterMerge();
|
|
6872
7039
|
return nextTick().then(() => {
|
|
6873
|
-
$xeTable.updateCellAreas();
|
|
6874
7040
|
updateStyle();
|
|
6875
7041
|
return rest;
|
|
6876
7042
|
});
|
|
6877
7043
|
},
|
|
7044
|
+
removeMergeFooterItems(merges) {
|
|
7045
|
+
// errLog('vxe.error.delFunc', ['removeMergeFooterItems', 'removeMergeFooterCells'])
|
|
7046
|
+
return $xeTable.removeMergeFooterCells(merges);
|
|
7047
|
+
},
|
|
6878
7048
|
/**
|
|
6879
7049
|
* 获取所有被合并的表尾
|
|
6880
7050
|
*/
|
|
6881
|
-
|
|
7051
|
+
getMergeFooterCells() {
|
|
6882
7052
|
return internalData.mergeFooterList.slice(0);
|
|
6883
7053
|
},
|
|
7054
|
+
getMergeFooterItems() {
|
|
7055
|
+
// errLog('vxe.error.delFunc', ['getMergeFooterItems', 'getMergeFooterCells'])
|
|
7056
|
+
return $xeTable.getMergeFooterCells();
|
|
7057
|
+
},
|
|
6884
7058
|
/**
|
|
6885
7059
|
* 清除所有表尾合并
|
|
6886
7060
|
*/
|
|
6887
|
-
|
|
7061
|
+
clearMergeFooterCells() {
|
|
6888
7062
|
internalData.mergeFooterList = [];
|
|
6889
7063
|
internalData.mergeFooterMaps = {};
|
|
6890
7064
|
internalData.mergeFooterCellMaps = {};
|
|
@@ -6893,6 +7067,10 @@ export default defineVxeComponent({
|
|
|
6893
7067
|
return updateStyle();
|
|
6894
7068
|
});
|
|
6895
7069
|
},
|
|
7070
|
+
clearMergeFooterItems() {
|
|
7071
|
+
// errLog('vxe.error.delFunc', ['clearMergeFooterItems', 'clearMergeFooterCells'])
|
|
7072
|
+
return $xeTable.clearMergeFooterCells();
|
|
7073
|
+
},
|
|
6896
7074
|
updateCellAreas() {
|
|
6897
7075
|
const { mouseConfig } = props;
|
|
6898
7076
|
const mouseOpts = computeMouseOpts.value;
|
|
@@ -8956,6 +9134,11 @@ export default defineVxeComponent({
|
|
|
8956
9134
|
internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList);
|
|
8957
9135
|
reactData.mergeBodyFlag++;
|
|
8958
9136
|
},
|
|
9137
|
+
handleUpdateHeaderMerge() {
|
|
9138
|
+
const { mergeHeaderList } = internalData;
|
|
9139
|
+
internalData.mergeHeaderCellMaps = buildMergeData(mergeHeaderList);
|
|
9140
|
+
reactData.mergeHeadFlag++;
|
|
9141
|
+
},
|
|
8959
9142
|
handleUpdateFooterMerge() {
|
|
8960
9143
|
const { mergeFooterList } = internalData;
|
|
8961
9144
|
internalData.mergeFooterCellMaps = buildMergeData(mergeFooterList);
|
|
@@ -11714,7 +11897,10 @@ export default defineVxeComponent({
|
|
|
11714
11897
|
ref: refScrollXSpaceElem,
|
|
11715
11898
|
class: 'vxe-table--scroll-x-space'
|
|
11716
11899
|
})
|
|
11717
|
-
])
|
|
11900
|
+
]),
|
|
11901
|
+
h('div', {
|
|
11902
|
+
class: 'vxe-table--scroll-x-handle-appearance'
|
|
11903
|
+
})
|
|
11718
11904
|
]),
|
|
11719
11905
|
h('div', {
|
|
11720
11906
|
ref: refScrollXRightCornerElem,
|
|
@@ -11744,7 +11930,10 @@ export default defineVxeComponent({
|
|
|
11744
11930
|
ref: refScrollYSpaceElem,
|
|
11745
11931
|
class: 'vxe-table--scroll-y-space'
|
|
11746
11932
|
})
|
|
11747
|
-
])
|
|
11933
|
+
]),
|
|
11934
|
+
h('div', {
|
|
11935
|
+
class: 'vxe-table--scroll-y-handle-appearance'
|
|
11936
|
+
})
|
|
11748
11937
|
]),
|
|
11749
11938
|
h('div', {
|
|
11750
11939
|
ref: refScrollYBottomCornerElem,
|
|
@@ -12221,15 +12410,32 @@ export default defineVxeComponent({
|
|
|
12221
12410
|
watch(mergeCellFlag, () => {
|
|
12222
12411
|
handleUpdateMergeBodyCells(props.mergeCells || []);
|
|
12223
12412
|
});
|
|
12224
|
-
const
|
|
12413
|
+
const mergeHeaderItemFlag = ref(0);
|
|
12414
|
+
watch(() => props.mergeHeaderCells ? props.mergeHeaderCells.length : -1, () => {
|
|
12415
|
+
mergeHeaderItemFlag.value++;
|
|
12416
|
+
});
|
|
12417
|
+
watch(() => props.mergeHeaderCells, () => {
|
|
12418
|
+
mergeHeaderItemFlag.value++;
|
|
12419
|
+
});
|
|
12420
|
+
watch(mergeHeaderItemFlag, () => {
|
|
12421
|
+
handleUpdateMergeHeaderCells(props.mergeHeaderCells || []);
|
|
12422
|
+
});
|
|
12423
|
+
const mergeFooteCellFlag = ref(0);
|
|
12424
|
+
watch(() => props.mergeFooterCells ? props.mergeFooterCells.length : -1, () => {
|
|
12425
|
+
mergeFooteCellFlag.value++;
|
|
12426
|
+
});
|
|
12427
|
+
watch(() => props.mergeFooterCells, () => {
|
|
12428
|
+
mergeFooteCellFlag.value++;
|
|
12429
|
+
});
|
|
12225
12430
|
watch(() => props.mergeFooterItems ? props.mergeFooterItems.length : -1, () => {
|
|
12226
|
-
|
|
12431
|
+
mergeFooteCellFlag.value++;
|
|
12227
12432
|
});
|
|
12228
12433
|
watch(() => props.mergeFooterItems, () => {
|
|
12229
|
-
|
|
12434
|
+
mergeFooteCellFlag.value++;
|
|
12230
12435
|
});
|
|
12231
|
-
watch(
|
|
12232
|
-
|
|
12436
|
+
watch(mergeFooteCellFlag, () => {
|
|
12437
|
+
const mFooterCells = props.mergeFooterCells || props.mergeFooterItems;
|
|
12438
|
+
handleUpdateMergeFooterCells(mFooterCells || []);
|
|
12233
12439
|
});
|
|
12234
12440
|
watch(computeRowGroupFields, (val) => {
|
|
12235
12441
|
handleUpdateRowGroup(val);
|
package/es/table/src/util.js
CHANGED
|
@@ -80,14 +80,19 @@ export function createInternalData() {
|
|
|
80
80
|
sourceDataRowIdData: {},
|
|
81
81
|
fullColumnIdData: {},
|
|
82
82
|
fullColumnFieldData: {},
|
|
83
|
+
// 合并表头单元格的数据
|
|
84
|
+
mergeHeaderList: [],
|
|
85
|
+
mergeHeaderMaps: {},
|
|
86
|
+
// 已合并单元格数据集合
|
|
87
|
+
mergeHeaderCellMaps: {},
|
|
83
88
|
// 合并单元格的数据
|
|
84
89
|
mergeBodyList: [],
|
|
85
90
|
mergeBodyMaps: {},
|
|
91
|
+
// 已合并单元格数据集合
|
|
92
|
+
mergeBodyCellMaps: {},
|
|
86
93
|
// 合并表尾的数据
|
|
87
94
|
mergeFooterList: [],
|
|
88
95
|
mergeFooterMaps: {},
|
|
89
|
-
// 已合并单元格数据集合
|
|
90
|
-
mergeBodyCellMaps: {},
|
|
91
96
|
// 已合并表尾数据集合
|
|
92
97
|
mergeFooterCellMaps: {},
|
|
93
98
|
// 已展开的行集合
|
|
@@ -181,6 +186,69 @@ export const convertHeaderColumnToRows = (originColumns) => {
|
|
|
181
186
|
});
|
|
182
187
|
return rows;
|
|
183
188
|
};
|
|
189
|
+
export function convertHeaderToGridRows(spanColumns) {
|
|
190
|
+
const rSize = spanColumns.length;
|
|
191
|
+
const cSize = spanColumns[0].reduce((sum, cell) => sum + cell.colSpan, 0);
|
|
192
|
+
const occupiedRows = [];
|
|
193
|
+
const fullRows = [];
|
|
194
|
+
for (let rIndex = 0; rIndex < rSize; rIndex++) {
|
|
195
|
+
const oCols = [];
|
|
196
|
+
const dCols = [];
|
|
197
|
+
for (let cIndex = 0; cIndex < cSize; cIndex++) {
|
|
198
|
+
oCols.push(false);
|
|
199
|
+
dCols.push('');
|
|
200
|
+
}
|
|
201
|
+
occupiedRows.push(oCols);
|
|
202
|
+
fullRows.push(dCols);
|
|
203
|
+
}
|
|
204
|
+
for (let rIndex = 0; rIndex < rSize; rIndex++) {
|
|
205
|
+
let currColIndex = 0;
|
|
206
|
+
for (const column of spanColumns[rIndex]) {
|
|
207
|
+
const { colSpan, rowSpan } = column;
|
|
208
|
+
let startColIndex = -1;
|
|
209
|
+
for (let ccIndex = currColIndex; ccIndex <= cSize - colSpan; ccIndex++) {
|
|
210
|
+
let oFlag = true;
|
|
211
|
+
for (let csIndex = 0; csIndex < colSpan; csIndex++) {
|
|
212
|
+
if (occupiedRows[rIndex][ccIndex + csIndex]) {
|
|
213
|
+
oFlag = false;
|
|
214
|
+
break;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (oFlag) {
|
|
218
|
+
startColIndex = ccIndex;
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
if (startColIndex === -1) {
|
|
223
|
+
for (let j = 0; j <= cSize - colSpan; j++) {
|
|
224
|
+
let oFlag = true;
|
|
225
|
+
for (let k = 0; k < colSpan; k++) {
|
|
226
|
+
if (occupiedRows[rIndex][j + k]) {
|
|
227
|
+
oFlag = false;
|
|
228
|
+
break;
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
if (oFlag) {
|
|
232
|
+
startColIndex = j;
|
|
233
|
+
break;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
if (startColIndex === -1) {
|
|
237
|
+
// error
|
|
238
|
+
break;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
for (let srIndex = rIndex; srIndex < rIndex + rowSpan; srIndex++) {
|
|
242
|
+
for (let scIndex = startColIndex; scIndex < startColIndex + colSpan; scIndex++) {
|
|
243
|
+
occupiedRows[srIndex][scIndex] = true;
|
|
244
|
+
fullRows[srIndex][scIndex] = column;
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
currColIndex = startColIndex + colSpan;
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
return fullRows;
|
|
251
|
+
}
|
|
184
252
|
export function restoreScrollLocation($xeTable, scrollLeft, scrollTop) {
|
|
185
253
|
const internalData = $xeTable.internalData;
|
|
186
254
|
if (scrollLeft || scrollTop) {
|