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
package/es/table/src/table.js
CHANGED
|
@@ -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';
|
|
@@ -32,6 +33,7 @@ const supportMaxRow = 5e6;
|
|
|
32
33
|
const customStorageKey = 'VXE_CUSTOM_STORE';
|
|
33
34
|
const maxYHeight = 5e6;
|
|
34
35
|
const maxXWidth = 5e6;
|
|
36
|
+
let crossTableDragRowObj = null;
|
|
35
37
|
export default defineVxeComponent({
|
|
36
38
|
name: 'VxeTable',
|
|
37
39
|
props: tableProps,
|
|
@@ -48,6 +50,7 @@ export default defineVxeComponent({
|
|
|
48
50
|
const $xeGantt = inject('$xeGantt', null);
|
|
49
51
|
const $xeGGWrapper = $xeGrid || $xeGantt;
|
|
50
52
|
const { computeSize } = useFns.useSize(props);
|
|
53
|
+
const crossTableDragRowInfo = getCrossTableDragRowInfo();
|
|
51
54
|
const reactData = reactive({
|
|
52
55
|
// 低性能的静态列
|
|
53
56
|
staticColumns: [],
|
|
@@ -257,6 +260,7 @@ export default defineVxeComponent({
|
|
|
257
260
|
pendingRowFlag: 1,
|
|
258
261
|
insertRowFlag: 1,
|
|
259
262
|
removeRowFlag: 1,
|
|
263
|
+
mergeHeadFlag: 1,
|
|
260
264
|
mergeBodyFlag: 1,
|
|
261
265
|
mergeFootFlag: 1,
|
|
262
266
|
rowHeightStore: {
|
|
@@ -279,9 +283,9 @@ export default defineVxeComponent({
|
|
|
279
283
|
resizeHeightFlag: 1,
|
|
280
284
|
resizeWidthFlag: 1,
|
|
281
285
|
isCustomStatus: false,
|
|
282
|
-
|
|
286
|
+
isCrossDragRow: false,
|
|
283
287
|
dragRow: null,
|
|
284
|
-
|
|
288
|
+
isCrossDragCol: false,
|
|
285
289
|
dragCol: null,
|
|
286
290
|
dragTipText: '',
|
|
287
291
|
isDragResize: false,
|
|
@@ -1123,15 +1127,62 @@ export default defineVxeComponent({
|
|
|
1123
1127
|
});
|
|
1124
1128
|
}
|
|
1125
1129
|
};
|
|
1126
|
-
const
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
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;
|
|
1131
1176
|
};
|
|
1132
|
-
const
|
|
1177
|
+
const handleUpdateMergeHeaderCells = (merges) => {
|
|
1178
|
+
internalData.mergeHeaderList = [];
|
|
1179
|
+
internalData.mergeHeaderMaps = {};
|
|
1180
|
+
internalData.mergeHeaderCellMaps = {};
|
|
1181
|
+
$xeTable.setMergeHeaderCells(merges);
|
|
1182
|
+
};
|
|
1183
|
+
const handleHeaderMerge = (merges) => {
|
|
1133
1184
|
const { footerTableData } = reactData;
|
|
1134
|
-
const {
|
|
1185
|
+
const { mergeHeaderList, mergeHeaderMaps, fullColumnIdData } = internalData;
|
|
1135
1186
|
if (merges) {
|
|
1136
1187
|
const { visibleColumn } = internalData;
|
|
1137
1188
|
if (!XEUtils.isArray(merges)) {
|
|
@@ -1157,7 +1208,7 @@ export default defineVxeComponent({
|
|
|
1157
1208
|
if (rowspan > 1 || colspan > 1) {
|
|
1158
1209
|
const row = footerTableData[mergeRowIndex];
|
|
1159
1210
|
const column = visibleColumn[mergeColumnIndex];
|
|
1160
|
-
let mergeItem =
|
|
1211
|
+
let mergeItem = mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
|
|
1161
1212
|
if (mergeItem) {
|
|
1162
1213
|
mergeItem.rowspan = rowspan;
|
|
1163
1214
|
mergeItem.colspan = colspan;
|
|
@@ -1175,36 +1226,25 @@ export default defineVxeComponent({
|
|
|
1175
1226
|
_rowspan: rowspan,
|
|
1176
1227
|
_colspan: colspan
|
|
1177
1228
|
};
|
|
1178
|
-
|
|
1179
|
-
|
|
1229
|
+
mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`] = mergeItem;
|
|
1230
|
+
mergeHeaderList.push(mergeItem);
|
|
1180
1231
|
}
|
|
1181
1232
|
}
|
|
1182
1233
|
}
|
|
1183
1234
|
});
|
|
1184
1235
|
}
|
|
1185
1236
|
};
|
|
1186
|
-
const
|
|
1187
|
-
const {
|
|
1237
|
+
const removeHeaderMerges = (merges) => {
|
|
1238
|
+
const { mergeHeaderList, fullColumnIdData, mergeHeaderMaps } = internalData;
|
|
1188
1239
|
const rest = [];
|
|
1189
1240
|
if (merges) {
|
|
1190
|
-
const { handleGetRowId } = createHandleGetRowId($xeTable);
|
|
1191
1241
|
if (!XEUtils.isArray(merges)) {
|
|
1192
1242
|
merges = [merges];
|
|
1193
1243
|
}
|
|
1194
1244
|
merges.forEach((item) => {
|
|
1195
1245
|
const { row: margeRow, col: margeCol } = item;
|
|
1196
|
-
|
|
1246
|
+
const mergeRowIndex = XEUtils.isNumber(margeRow) ? margeRow : -1;
|
|
1197
1247
|
let mergeColumnIndex = -1;
|
|
1198
|
-
if (XEUtils.isNumber(margeRow)) {
|
|
1199
|
-
mergeRowIndex = margeRow;
|
|
1200
|
-
}
|
|
1201
|
-
else {
|
|
1202
|
-
const rowid = margeRow ? handleGetRowId(margeRow) : null;
|
|
1203
|
-
const rowRest = rowid ? fullAllDataRowIdData[rowid] : null;
|
|
1204
|
-
if (rowRest) {
|
|
1205
|
-
mergeRowIndex = rowRest._index;
|
|
1206
|
-
}
|
|
1207
|
-
}
|
|
1208
1248
|
if (XEUtils.isNumber(margeCol)) {
|
|
1209
1249
|
mergeColumnIndex = margeCol;
|
|
1210
1250
|
}
|
|
@@ -1215,14 +1255,14 @@ export default defineVxeComponent({
|
|
|
1215
1255
|
mergeColumnIndex = colRest._index;
|
|
1216
1256
|
}
|
|
1217
1257
|
}
|
|
1218
|
-
const mcIndex = XEUtils.findIndexOf(
|
|
1258
|
+
const mcIndex = XEUtils.findIndexOf(mergeHeaderList, item => item.row === mergeRowIndex && item.col === mergeColumnIndex);
|
|
1219
1259
|
if (mcIndex > -1) {
|
|
1220
|
-
const rItems =
|
|
1260
|
+
const rItems = mergeHeaderList.splice(mcIndex, 1);
|
|
1221
1261
|
const item = rItems[0];
|
|
1222
1262
|
if (item) {
|
|
1223
|
-
rest.push(
|
|
1224
|
-
if (
|
|
1225
|
-
delete
|
|
1263
|
+
rest.push(item);
|
|
1264
|
+
if (mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`]) {
|
|
1265
|
+
delete mergeHeaderMaps[`${mergeRowIndex}:${mergeColumnIndex}`];
|
|
1226
1266
|
}
|
|
1227
1267
|
}
|
|
1228
1268
|
}
|
|
@@ -1230,6 +1270,66 @@ export default defineVxeComponent({
|
|
|
1230
1270
|
}
|
|
1231
1271
|
return rest;
|
|
1232
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
|
+
};
|
|
1233
1333
|
const removeFooterMerges = (merges) => {
|
|
1234
1334
|
const { mergeFooterList, fullColumnIdData, mergeFooterMaps } = internalData;
|
|
1235
1335
|
const rest = [];
|
|
@@ -1335,8 +1435,23 @@ export default defineVxeComponent({
|
|
|
1335
1435
|
});
|
|
1336
1436
|
};
|
|
1337
1437
|
const calcTableHeight = (key) => {
|
|
1438
|
+
const { editConfig } = props;
|
|
1338
1439
|
const { parentHeight } = reactData;
|
|
1339
|
-
|
|
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
|
+
}
|
|
1340
1455
|
let num = 0;
|
|
1341
1456
|
if (val) {
|
|
1342
1457
|
if (val === '100%' || val === 'auto') {
|
|
@@ -2190,22 +2305,28 @@ export default defineVxeComponent({
|
|
|
2190
2305
|
emptyPlaceholderElem.style.top = `${tHeaderHeight}px`;
|
|
2191
2306
|
emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : '';
|
|
2192
2307
|
}
|
|
2308
|
+
const scrollbarXConf = scrollbarOpts.x || {};
|
|
2193
2309
|
const scrollbarXToTop = computeScrollbarXToTop.value;
|
|
2310
|
+
const scrollbarYConf = scrollbarOpts.y || {};
|
|
2194
2311
|
const scrollbarYToLeft = computeScrollbarYToLeft.value;
|
|
2195
2312
|
let xScrollbarVisible = overflowX ? 'visible' : 'hidden';
|
|
2196
|
-
if ($xeGanttView) {
|
|
2313
|
+
if (scrollbarXConf.visible === 'visible' || $xeGanttView) {
|
|
2197
2314
|
osbHeight = scrollbarHeight;
|
|
2198
2315
|
xScrollbarVisible = 'visible';
|
|
2199
2316
|
}
|
|
2200
|
-
else if (
|
|
2317
|
+
else if (scrollbarXConf.visible === 'hidden' || scrollbarXConf.visible === false) {
|
|
2201
2318
|
osbHeight = 0;
|
|
2202
2319
|
xScrollbarVisible = 'hidden';
|
|
2203
2320
|
}
|
|
2204
2321
|
let yScrollbarVisible = overflowY ? 'visible' : 'hidden';
|
|
2205
|
-
if ((
|
|
2322
|
+
if ((scrollbarYConf.visible === 'hidden' || scrollbarYConf.visible === false) || ($xeGanttView && !scrollbarYToLeft)) {
|
|
2206
2323
|
osbWidth = 0;
|
|
2207
2324
|
yScrollbarVisible = 'hidden';
|
|
2208
2325
|
}
|
|
2326
|
+
else if (scrollbarYConf.visible === 'visible') {
|
|
2327
|
+
osbWidth = scrollbarWidth;
|
|
2328
|
+
yScrollbarVisible = 'visible';
|
|
2329
|
+
}
|
|
2209
2330
|
let tbHeight = 0;
|
|
2210
2331
|
let bodyMaxHeight = 0;
|
|
2211
2332
|
const bodyMinHeight = customMinHeight - tHeaderHeight - tFooterHeight - osbHeight;
|
|
@@ -2244,7 +2365,7 @@ export default defineVxeComponent({
|
|
|
2244
2365
|
}
|
|
2245
2366
|
if (xRightCornerEl) {
|
|
2246
2367
|
xRightCornerEl.style.width = scrollbarXToTop ? '' : `${osbWidth}px`;
|
|
2247
|
-
xRightCornerEl.style.display = scrollbarXToTop ? '' : (
|
|
2368
|
+
xRightCornerEl.style.display = scrollbarXToTop ? '' : (xScrollbarVisible === 'visible' ? 'block' : '');
|
|
2248
2369
|
}
|
|
2249
2370
|
const scrollYVirtualEl = refScrollYVirtualElem.value;
|
|
2250
2371
|
if (scrollYVirtualEl) {
|
|
@@ -2255,7 +2376,7 @@ export default defineVxeComponent({
|
|
|
2255
2376
|
const yTopCornerEl = refScrollYTopCornerElem.value;
|
|
2256
2377
|
if (yTopCornerEl) {
|
|
2257
2378
|
yTopCornerEl.style.height = `${tHeaderHeight}px`;
|
|
2258
|
-
yTopCornerEl.style.display =
|
|
2379
|
+
yTopCornerEl.style.display = tHeaderHeight && yScrollbarVisible === 'visible' ? 'block' : '';
|
|
2259
2380
|
}
|
|
2260
2381
|
const yWrapperEl = refScrollYWrapperElem.value;
|
|
2261
2382
|
if (yWrapperEl) {
|
|
@@ -2266,7 +2387,7 @@ export default defineVxeComponent({
|
|
|
2266
2387
|
if (yBottomCornerEl) {
|
|
2267
2388
|
yBottomCornerEl.style.height = `${tFooterHeight}px`;
|
|
2268
2389
|
yBottomCornerEl.style.top = `${tHeaderHeight + tbHeight}px`;
|
|
2269
|
-
yBottomCornerEl.style.display =
|
|
2390
|
+
yBottomCornerEl.style.display = tFooterHeight && yScrollbarVisible === 'visible' ? 'block' : '';
|
|
2270
2391
|
}
|
|
2271
2392
|
const rowExpandEl = refRowExpandElem.value;
|
|
2272
2393
|
if (rowExpandEl) {
|
|
@@ -2956,10 +3077,17 @@ export default defineVxeComponent({
|
|
|
2956
3077
|
$xeTable.setMergeCells(mergeCells);
|
|
2957
3078
|
}
|
|
2958
3079
|
};
|
|
3080
|
+
const handleDefaultMergeHeaderItems = () => {
|
|
3081
|
+
const { mergeHeaderCells } = props;
|
|
3082
|
+
if (mergeHeaderCells) {
|
|
3083
|
+
$xeTable.setMergeHeaderCells(mergeHeaderCells);
|
|
3084
|
+
}
|
|
3085
|
+
};
|
|
2959
3086
|
const handleDefaultMergeFooterItems = () => {
|
|
2960
|
-
const { mergeFooterItems } = props;
|
|
2961
|
-
|
|
2962
|
-
|
|
3087
|
+
const { mergeFooterCells, mergeFooterItems } = props;
|
|
3088
|
+
const mFooterCells = mergeFooterCells || mergeFooterItems;
|
|
3089
|
+
if (mFooterCells) {
|
|
3090
|
+
$xeTable.setMergeFooterCells(mFooterCells);
|
|
2963
3091
|
}
|
|
2964
3092
|
};
|
|
2965
3093
|
// 计算可视渲染相关数据
|
|
@@ -3396,6 +3524,10 @@ export default defineVxeComponent({
|
|
|
3396
3524
|
}
|
|
3397
3525
|
handleReserveStatus();
|
|
3398
3526
|
$xeTable.checkSelectionStatus();
|
|
3527
|
+
$xeTable.dispatchEvent('data-change', {
|
|
3528
|
+
visibleColumn: internalData.visibleColumn,
|
|
3529
|
+
visibleData: internalData.afterFullData
|
|
3530
|
+
}, null);
|
|
3399
3531
|
return new Promise(resolve => {
|
|
3400
3532
|
nextTick()
|
|
3401
3533
|
.then(() => handleRecalculateStyle(false, false, false))
|
|
@@ -3458,6 +3590,7 @@ export default defineVxeComponent({
|
|
|
3458
3590
|
handleDefaultTreeExpand();
|
|
3459
3591
|
handleDefaultRowGroupExpand();
|
|
3460
3592
|
handleDefaultMergeCells();
|
|
3593
|
+
handleDefaultMergeHeaderItems();
|
|
3461
3594
|
handleDefaultMergeFooterItems();
|
|
3462
3595
|
nextTick(() => setTimeout(() => $xeTable.recalculate()));
|
|
3463
3596
|
};
|
|
@@ -4903,7 +5036,9 @@ export default defineVxeComponent({
|
|
|
4903
5036
|
}
|
|
4904
5037
|
}
|
|
4905
5038
|
}
|
|
4906
|
-
|
|
5039
|
+
const rest = $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
|
|
5040
|
+
clearRowDragData();
|
|
5041
|
+
return rest;
|
|
4907
5042
|
},
|
|
4908
5043
|
/**
|
|
4909
5044
|
* 获取表格的全量列
|
|
@@ -6774,6 +6909,10 @@ export default defineVxeComponent({
|
|
|
6774
6909
|
}
|
|
6775
6910
|
reactData.footerTableData = footData;
|
|
6776
6911
|
$xeTable.handleUpdateFooterMerge();
|
|
6912
|
+
$xeTable.dispatchEvent('footer-data-change', {
|
|
6913
|
+
visibleColumn: internalData.visibleColumn,
|
|
6914
|
+
footData
|
|
6915
|
+
}, null);
|
|
6777
6916
|
return nextTick();
|
|
6778
6917
|
},
|
|
6779
6918
|
/**
|
|
@@ -6841,39 +6980,85 @@ export default defineVxeComponent({
|
|
|
6841
6980
|
return updateStyle();
|
|
6842
6981
|
});
|
|
6843
6982
|
},
|
|
6844
|
-
|
|
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) {
|
|
6845
7020
|
if (props.footerSpanMethod) {
|
|
6846
|
-
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
7021
|
+
errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
|
|
6847
7022
|
}
|
|
6848
7023
|
handleFooterMerge(merges);
|
|
6849
7024
|
$xeTable.handleUpdateFooterMerge();
|
|
6850
7025
|
return nextTick().then(() => {
|
|
6851
|
-
$xeTable.updateCellAreas();
|
|
6852
7026
|
return updateStyle();
|
|
6853
7027
|
});
|
|
6854
7028
|
},
|
|
6855
|
-
|
|
7029
|
+
setMergeFooterItems(merges) {
|
|
7030
|
+
// errLog('vxe.error.delFunc', ['setMergeFooterItems', 'setMergeFooterCells'])
|
|
7031
|
+
return $xeTable.setMergeFooterCells(merges);
|
|
7032
|
+
},
|
|
7033
|
+
removeMergeFooterCells(merges) {
|
|
6856
7034
|
if (props.footerSpanMethod) {
|
|
6857
|
-
errLog('vxe.error.errConflicts', ['merge-footer-items', 'footer-span-method']);
|
|
7035
|
+
errLog('vxe.error.errConflicts', ['merge-footer-cells | merge-footer-items', 'footer-span-method']);
|
|
6858
7036
|
}
|
|
6859
7037
|
const rest = removeFooterMerges(merges);
|
|
6860
7038
|
$xeTable.handleUpdateFooterMerge();
|
|
6861
7039
|
return nextTick().then(() => {
|
|
6862
|
-
$xeTable.updateCellAreas();
|
|
6863
7040
|
updateStyle();
|
|
6864
7041
|
return rest;
|
|
6865
7042
|
});
|
|
6866
7043
|
},
|
|
7044
|
+
removeMergeFooterItems(merges) {
|
|
7045
|
+
// errLog('vxe.error.delFunc', ['removeMergeFooterItems', 'removeMergeFooterCells'])
|
|
7046
|
+
return $xeTable.removeMergeFooterCells(merges);
|
|
7047
|
+
},
|
|
6867
7048
|
/**
|
|
6868
7049
|
* 获取所有被合并的表尾
|
|
6869
7050
|
*/
|
|
6870
|
-
|
|
7051
|
+
getMergeFooterCells() {
|
|
6871
7052
|
return internalData.mergeFooterList.slice(0);
|
|
6872
7053
|
},
|
|
7054
|
+
getMergeFooterItems() {
|
|
7055
|
+
// errLog('vxe.error.delFunc', ['getMergeFooterItems', 'getMergeFooterCells'])
|
|
7056
|
+
return $xeTable.getMergeFooterCells();
|
|
7057
|
+
},
|
|
6873
7058
|
/**
|
|
6874
7059
|
* 清除所有表尾合并
|
|
6875
7060
|
*/
|
|
6876
|
-
|
|
7061
|
+
clearMergeFooterCells() {
|
|
6877
7062
|
internalData.mergeFooterList = [];
|
|
6878
7063
|
internalData.mergeFooterMaps = {};
|
|
6879
7064
|
internalData.mergeFooterCellMaps = {};
|
|
@@ -6882,6 +7067,10 @@ export default defineVxeComponent({
|
|
|
6882
7067
|
return updateStyle();
|
|
6883
7068
|
});
|
|
6884
7069
|
},
|
|
7070
|
+
clearMergeFooterItems() {
|
|
7071
|
+
// errLog('vxe.error.delFunc', ['clearMergeFooterItems', 'clearMergeFooterCells'])
|
|
7072
|
+
return $xeTable.clearMergeFooterCells();
|
|
7073
|
+
},
|
|
6885
7074
|
updateCellAreas() {
|
|
6886
7075
|
const { mouseConfig } = props;
|
|
6887
7076
|
const mouseOpts = computeMouseOpts.value;
|
|
@@ -7627,12 +7816,17 @@ export default defineVxeComponent({
|
|
|
7627
7816
|
}
|
|
7628
7817
|
}
|
|
7629
7818
|
};
|
|
7819
|
+
const clearCrossTableDragStatus = () => {
|
|
7820
|
+
crossTableDragRowObj = null;
|
|
7821
|
+
crossTableDragRowInfo.row = null;
|
|
7822
|
+
};
|
|
7630
7823
|
const clearDragStatus = () => {
|
|
7631
7824
|
const { dragRow, dragCol } = reactData;
|
|
7632
7825
|
if (dragRow || dragCol) {
|
|
7633
7826
|
clearColDropOrigin();
|
|
7634
7827
|
clearRowDropOrigin();
|
|
7635
7828
|
hideDropTip();
|
|
7829
|
+
clearCrossTableDragStatus();
|
|
7636
7830
|
reactData.dragRow = null;
|
|
7637
7831
|
reactData.dragCol = null;
|
|
7638
7832
|
}
|
|
@@ -7821,6 +8015,24 @@ export default defineVxeComponent({
|
|
|
7821
8015
|
cdLineEl.style.display = '';
|
|
7822
8016
|
}
|
|
7823
8017
|
};
|
|
8018
|
+
const clearRowDragData = () => {
|
|
8019
|
+
let wrapperEl = refElem.value;
|
|
8020
|
+
const dtClss = ['.vxe-body--row'];
|
|
8021
|
+
if ($xeGantt) {
|
|
8022
|
+
const { refGanttContainerElem } = $xeGantt.getRefMaps();
|
|
8023
|
+
const ganttContainerElem = refGanttContainerElem.value;
|
|
8024
|
+
if (ganttContainerElem) {
|
|
8025
|
+
wrapperEl = ganttContainerElem;
|
|
8026
|
+
}
|
|
8027
|
+
dtClss.push('.vxe-gantt-view--body-row', '.vxe-gantt-view--chart-row');
|
|
8028
|
+
}
|
|
8029
|
+
hideDropTip();
|
|
8030
|
+
clearRowDropOrigin();
|
|
8031
|
+
clearRowAnimate(wrapperEl, dtClss);
|
|
8032
|
+
internalData.prevDragToChild = false;
|
|
8033
|
+
reactData.dragRow = null;
|
|
8034
|
+
reactData.dragCol = null;
|
|
8035
|
+
};
|
|
7824
8036
|
/**
|
|
7825
8037
|
* 处理显示 tooltip
|
|
7826
8038
|
* @param {Event} evnt 事件
|
|
@@ -8922,6 +9134,11 @@ export default defineVxeComponent({
|
|
|
8922
9134
|
internalData.mergeBodyCellMaps = buildMergeData(mergeBodyList);
|
|
8923
9135
|
reactData.mergeBodyFlag++;
|
|
8924
9136
|
},
|
|
9137
|
+
handleUpdateHeaderMerge() {
|
|
9138
|
+
const { mergeHeaderList } = internalData;
|
|
9139
|
+
internalData.mergeHeaderCellMaps = buildMergeData(mergeHeaderList);
|
|
9140
|
+
reactData.mergeHeadFlag++;
|
|
9141
|
+
},
|
|
8925
9142
|
handleUpdateFooterMerge() {
|
|
8926
9143
|
const { mergeFooterList } = internalData;
|
|
8927
9144
|
internalData.mergeFooterCellMaps = buildMergeData(mergeFooterList);
|
|
@@ -9860,6 +10077,221 @@ export default defineVxeComponent({
|
|
|
9860
10077
|
}
|
|
9861
10078
|
return Promise.resolve(errRest);
|
|
9862
10079
|
},
|
|
10080
|
+
/**
|
|
10081
|
+
* 处理跨表拖拽完成
|
|
10082
|
+
*/
|
|
10083
|
+
handleCrossTableRowDragFinishEvent(evnt) {
|
|
10084
|
+
const { tableData } = reactData;
|
|
10085
|
+
const { fullAllDataRowIdData } = internalData;
|
|
10086
|
+
const rowOpts = computeRowOpts.value;
|
|
10087
|
+
const cellOpts = computeCellOpts.value;
|
|
10088
|
+
const defaultRowHeight = computeDefaultRowHeight.value;
|
|
10089
|
+
const rowDragOpts = computeRowDragOpts.value;
|
|
10090
|
+
const { animation, isCrossTableDrag } = rowDragOpts;
|
|
10091
|
+
const treeOpts = computeTreeOpts.value;
|
|
10092
|
+
const { mapChildrenField } = treeOpts;
|
|
10093
|
+
const el = refElem.value;
|
|
10094
|
+
if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
|
|
10095
|
+
const { row: dragRow } = crossTableDragRowInfo;
|
|
10096
|
+
if (dragRow) {
|
|
10097
|
+
const dragRowid = getRowid($xeTable, dragRow);
|
|
10098
|
+
const dragRowRest = fullAllDataRowIdData[dragRowid];
|
|
10099
|
+
let dragRowHeight = 0;
|
|
10100
|
+
let rsIndex = -1;
|
|
10101
|
+
if (dragRowRest) {
|
|
10102
|
+
if (animation) {
|
|
10103
|
+
dragRowHeight = getCellRestHeight(dragRowRest, cellOpts, rowOpts, defaultRowHeight);
|
|
10104
|
+
}
|
|
10105
|
+
rsIndex = dragRowRest.$index;
|
|
10106
|
+
}
|
|
10107
|
+
const dragRangeList = rsIndex > -1 && rsIndex < tableData.length - 1 ? tableData.slice(rsIndex + 1) : [];
|
|
10108
|
+
const dragList = XEUtils.toTreeArray([dragRow], {
|
|
10109
|
+
updated: true,
|
|
10110
|
+
children: mapChildrenField
|
|
10111
|
+
});
|
|
10112
|
+
$xeTable.remove(dragList).then(() => {
|
|
10113
|
+
if (animation && dragRowHeight && dragRangeList.length) {
|
|
10114
|
+
const $xeGanttView = internalData.xeGanttView;
|
|
10115
|
+
let wrapperEl = el;
|
|
10116
|
+
if ($xeGantt && $xeGanttView) {
|
|
10117
|
+
const { refGanttContainerElem } = $xeGantt.getRefMaps();
|
|
10118
|
+
const ganttContainerElem = refGanttContainerElem.value;
|
|
10119
|
+
if (ganttContainerElem) {
|
|
10120
|
+
wrapperEl = ganttContainerElem;
|
|
10121
|
+
}
|
|
10122
|
+
}
|
|
10123
|
+
const dtClss = [];
|
|
10124
|
+
dragRangeList.forEach(row => {
|
|
10125
|
+
const rowid = getRowid($xeTable, row);
|
|
10126
|
+
dtClss.push(`.vxe-body--row[rowid="${rowid}"]`);
|
|
10127
|
+
if ($xeGantt) {
|
|
10128
|
+
dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`);
|
|
10129
|
+
}
|
|
10130
|
+
});
|
|
10131
|
+
const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
|
|
10132
|
+
moveRowAnimateToTb(dtTrList, dragRowHeight);
|
|
10133
|
+
}
|
|
10134
|
+
});
|
|
10135
|
+
dispatchEvent('row-remove-dragend', {
|
|
10136
|
+
row: dragRow
|
|
10137
|
+
}, evnt);
|
|
10138
|
+
clearRowDragData();
|
|
10139
|
+
clearCrossTableDragStatus();
|
|
10140
|
+
}
|
|
10141
|
+
}
|
|
10142
|
+
},
|
|
10143
|
+
/**
|
|
10144
|
+
* 处理跨表拖至新的空表
|
|
10145
|
+
*/
|
|
10146
|
+
handleCrossTableRowDragoverEmptyEvent(evnt) {
|
|
10147
|
+
const { tableData } = reactData;
|
|
10148
|
+
const rowDragOpts = computeRowDragOpts.value;
|
|
10149
|
+
const { isCrossTableDrag } = rowDragOpts;
|
|
10150
|
+
if (isCrossTableDrag && crossTableDragRowObj && !tableData.length) {
|
|
10151
|
+
const { $oldTable } = crossTableDragRowObj;
|
|
10152
|
+
if ($oldTable && $oldTable.xID !== $xeTable.xID) {
|
|
10153
|
+
evnt.preventDefault();
|
|
10154
|
+
crossTableDragRowObj.$newTable = $xeTable;
|
|
10155
|
+
internalData.prevDragRow = null;
|
|
10156
|
+
}
|
|
10157
|
+
}
|
|
10158
|
+
},
|
|
10159
|
+
/**
|
|
10160
|
+
* 处理跨表拖插入
|
|
10161
|
+
*/
|
|
10162
|
+
handleCrossTableRowDragInsertEvent(evnt) {
|
|
10163
|
+
const { treeConfig } = props;
|
|
10164
|
+
const { prevDragRow, prevDragPos, prevDragToChild } = internalData;
|
|
10165
|
+
const rowDragOpts = computeRowDragOpts.value;
|
|
10166
|
+
const { animation, isSelfToChildDrag, isCrossTableDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
|
|
10167
|
+
const rowOpts = computeRowOpts.value;
|
|
10168
|
+
const cellOpts = computeCellOpts.value;
|
|
10169
|
+
const defaultRowHeight = computeDefaultRowHeight.value;
|
|
10170
|
+
const treeOpts = computeTreeOpts.value;
|
|
10171
|
+
const { parentField, mapChildrenField } = treeOpts;
|
|
10172
|
+
const childrenField = treeOpts.children || treeOpts.childrenField;
|
|
10173
|
+
// 跨表拖拽
|
|
10174
|
+
if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
|
|
10175
|
+
const { row: oldRow } = crossTableDragRowInfo;
|
|
10176
|
+
const { $oldTable } = crossTableDragRowObj;
|
|
10177
|
+
const el = refElem.value;
|
|
10178
|
+
if ($oldTable && oldRow) {
|
|
10179
|
+
const dragRow = oldRow;
|
|
10180
|
+
let dragOffsetIndex = -1;
|
|
10181
|
+
if (prevDragRow) {
|
|
10182
|
+
dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
|
|
10183
|
+
}
|
|
10184
|
+
const dragParams = {
|
|
10185
|
+
oldRow: dragRow,
|
|
10186
|
+
newRow: prevDragRow,
|
|
10187
|
+
dragRow,
|
|
10188
|
+
dragPos: prevDragPos,
|
|
10189
|
+
dragToChild: !!prevDragToChild,
|
|
10190
|
+
offsetIndex: dragOffsetIndex
|
|
10191
|
+
};
|
|
10192
|
+
const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
|
|
10193
|
+
const errRest = {
|
|
10194
|
+
status: false
|
|
10195
|
+
};
|
|
10196
|
+
Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then((status) => {
|
|
10197
|
+
if (!status) {
|
|
10198
|
+
return errRest;
|
|
10199
|
+
}
|
|
10200
|
+
let insertRest = Promise.resolve();
|
|
10201
|
+
if (treeConfig) {
|
|
10202
|
+
const dragList = XEUtils.toTreeArray([dragRow], {
|
|
10203
|
+
updated: true,
|
|
10204
|
+
children: mapChildrenField
|
|
10205
|
+
});
|
|
10206
|
+
$oldTable.handleCrossTableRowDragFinishEvent(evnt);
|
|
10207
|
+
if (prevDragRow) {
|
|
10208
|
+
dragRow[parentField] = prevDragRow[parentField];
|
|
10209
|
+
}
|
|
10210
|
+
else {
|
|
10211
|
+
dragRow[parentField] = null;
|
|
10212
|
+
}
|
|
10213
|
+
dragList.forEach(row => {
|
|
10214
|
+
row[childrenField] = undefined;
|
|
10215
|
+
row[mapChildrenField] = undefined;
|
|
10216
|
+
});
|
|
10217
|
+
if (prevDragRow) {
|
|
10218
|
+
if (prevDragPos === 'bottom') {
|
|
10219
|
+
insertRest = $xeTable.insertNextAt(dragList, prevDragRow);
|
|
10220
|
+
}
|
|
10221
|
+
else {
|
|
10222
|
+
insertRest = $xeTable.insertAt(dragList, prevDragRow);
|
|
10223
|
+
}
|
|
10224
|
+
}
|
|
10225
|
+
else {
|
|
10226
|
+
insertRest = $xeTable.insert(dragList);
|
|
10227
|
+
}
|
|
10228
|
+
}
|
|
10229
|
+
else {
|
|
10230
|
+
$oldTable.handleCrossTableRowDragFinishEvent(evnt);
|
|
10231
|
+
if (prevDragRow) {
|
|
10232
|
+
if (prevDragPos === 'bottom') {
|
|
10233
|
+
insertRest = $xeTable.insertNextAt(dragRow, prevDragRow);
|
|
10234
|
+
}
|
|
10235
|
+
else {
|
|
10236
|
+
insertRest = $xeTable.insertAt(dragRow, prevDragRow);
|
|
10237
|
+
}
|
|
10238
|
+
}
|
|
10239
|
+
else {
|
|
10240
|
+
insertRest = $xeTable.insert(dragRow);
|
|
10241
|
+
}
|
|
10242
|
+
}
|
|
10243
|
+
dispatchEvent('row-insert-dragend', {
|
|
10244
|
+
oldRow,
|
|
10245
|
+
newRow: prevDragRow,
|
|
10246
|
+
dragRow,
|
|
10247
|
+
dragPos: prevDragPos,
|
|
10248
|
+
dragToChild: isDragToChildFlag,
|
|
10249
|
+
offsetIndex: dragOffsetIndex
|
|
10250
|
+
}, evnt);
|
|
10251
|
+
clearRowDragData();
|
|
10252
|
+
insertRest.then(() => {
|
|
10253
|
+
const { tableData } = reactData;
|
|
10254
|
+
const { fullAllDataRowIdData } = internalData;
|
|
10255
|
+
const oldRowid = getRowid($xeTable, dragRow);
|
|
10256
|
+
const oldRowRest = fullAllDataRowIdData[oldRowid];
|
|
10257
|
+
let dragRowHeight = 0;
|
|
10258
|
+
let rsIndex = -1;
|
|
10259
|
+
if (oldRowRest) {
|
|
10260
|
+
if (animation) {
|
|
10261
|
+
dragRowHeight = getCellRestHeight(oldRowRest, cellOpts, rowOpts, defaultRowHeight);
|
|
10262
|
+
}
|
|
10263
|
+
rsIndex = oldRowRest.$index;
|
|
10264
|
+
}
|
|
10265
|
+
const dragRangeList = rsIndex > -1 ? tableData.slice(rsIndex) : [];
|
|
10266
|
+
if (animation && dragRowHeight && dragRangeList.length) {
|
|
10267
|
+
const $xeGanttView = internalData.xeGanttView;
|
|
10268
|
+
let wrapperEl = el;
|
|
10269
|
+
if ($xeGantt && $xeGanttView) {
|
|
10270
|
+
const { refGanttContainerElem } = $xeGantt.getRefMaps();
|
|
10271
|
+
const ganttContainerElem = refGanttContainerElem.value;
|
|
10272
|
+
if (ganttContainerElem) {
|
|
10273
|
+
wrapperEl = ganttContainerElem;
|
|
10274
|
+
}
|
|
10275
|
+
}
|
|
10276
|
+
const dtClss = [];
|
|
10277
|
+
dragRangeList.forEach(row => {
|
|
10278
|
+
const rowid = getRowid($xeTable, row);
|
|
10279
|
+
dtClss.push(`.vxe-body--row[rowid="${rowid}"]`);
|
|
10280
|
+
if ($xeGantt) {
|
|
10281
|
+
dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`);
|
|
10282
|
+
}
|
|
10283
|
+
});
|
|
10284
|
+
const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
|
|
10285
|
+
moveRowAnimateToTb(dtTrList, -dragRowHeight);
|
|
10286
|
+
}
|
|
10287
|
+
});
|
|
10288
|
+
});
|
|
10289
|
+
}
|
|
10290
|
+
}
|
|
10291
|
+
},
|
|
10292
|
+
hideCrossTableRowDropClearStatus() {
|
|
10293
|
+
hideDropTip();
|
|
10294
|
+
},
|
|
9863
10295
|
handleRowDragDragendEvent(evnt) {
|
|
9864
10296
|
const { treeConfig } = props;
|
|
9865
10297
|
const { fullAllDataRowIdData, prevDragToChild } = internalData;
|
|
@@ -9868,7 +10300,16 @@ export default defineVxeComponent({
|
|
|
9868
10300
|
const { lazy } = treeOpts;
|
|
9869
10301
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
9870
10302
|
const { prevDragRow, prevDragPos } = internalData;
|
|
9871
|
-
|
|
10303
|
+
const rowDragOpts = computeRowDragOpts.value;
|
|
10304
|
+
const { isCrossTableDrag } = rowDragOpts;
|
|
10305
|
+
// 跨表拖拽
|
|
10306
|
+
if (isCrossTableDrag && crossTableDragRowObj) {
|
|
10307
|
+
const { $newTable } = crossTableDragRowObj;
|
|
10308
|
+
if ($newTable && $newTable.xID !== $xeTable.xID) {
|
|
10309
|
+
$newTable.handleCrossTableRowDragInsertEvent(evnt);
|
|
10310
|
+
return;
|
|
10311
|
+
}
|
|
10312
|
+
}
|
|
9872
10313
|
if (treeConfig && lazy && prevDragToChild) {
|
|
9873
10314
|
// 懒加载
|
|
9874
10315
|
const newRowid = getRowid($xeTable, prevDragRow);
|
|
@@ -9885,21 +10326,8 @@ export default defineVxeComponent({
|
|
|
9885
10326
|
else {
|
|
9886
10327
|
$xeTable.handleRowDragSwapEvent(evnt, true, dragRow, prevDragRow, prevDragPos, prevDragToChild);
|
|
9887
10328
|
}
|
|
9888
|
-
|
|
9889
|
-
|
|
9890
|
-
const { refGanttContainerElem } = $xeGantt.getRefMaps();
|
|
9891
|
-
const ganttContainerElem = refGanttContainerElem.value;
|
|
9892
|
-
if (ganttContainerElem) {
|
|
9893
|
-
wrapperEl = ganttContainerElem;
|
|
9894
|
-
}
|
|
9895
|
-
dtClss.push('.vxe-gantt-view--body-row', '.vxe-gantt-view--chart-row');
|
|
9896
|
-
}
|
|
9897
|
-
hideDropTip();
|
|
9898
|
-
clearRowDropOrigin();
|
|
9899
|
-
clearRowAnimate(wrapperEl, dtClss);
|
|
9900
|
-
internalData.prevDragToChild = false;
|
|
9901
|
-
reactData.dragRow = null;
|
|
9902
|
-
reactData.dragCol = null;
|
|
10329
|
+
clearRowDragData();
|
|
10330
|
+
clearCrossTableDragStatus();
|
|
9903
10331
|
},
|
|
9904
10332
|
handleRowDragDragoverEvent(evnt) {
|
|
9905
10333
|
const { treeConfig } = props;
|
|
@@ -9909,8 +10337,8 @@ export default defineVxeComponent({
|
|
|
9909
10337
|
const { lazy, transform, parentField } = treeOpts;
|
|
9910
10338
|
const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
|
|
9911
10339
|
const rowDragOpts = computeRowDragOpts.value;
|
|
9912
|
-
const { isPeerDrag, isCrossDrag, isToChildDrag } = rowDragOpts;
|
|
9913
|
-
if (!dragRow) {
|
|
10340
|
+
const { isPeerDrag, isCrossDrag, isToChildDrag, isCrossTableDrag } = rowDragOpts;
|
|
10341
|
+
if (!dragRow && !(isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj)) {
|
|
9914
10342
|
evnt.preventDefault();
|
|
9915
10343
|
return;
|
|
9916
10344
|
}
|
|
@@ -9919,16 +10347,38 @@ export default defineVxeComponent({
|
|
|
9919
10347
|
const rowid = trEl.getAttribute('rowid') || '';
|
|
9920
10348
|
const rest = fullAllDataRowIdData[rowid];
|
|
9921
10349
|
if (rest) {
|
|
10350
|
+
evnt.preventDefault();
|
|
9922
10351
|
const row = rest.row;
|
|
9923
10352
|
const rowid = getRowid($xeTable, row);
|
|
9924
10353
|
const rowRest = fullAllDataRowIdData[rowid];
|
|
9925
|
-
evnt.preventDefault();
|
|
9926
|
-
const { dragRow } = reactData;
|
|
9927
10354
|
const offsetY = evnt.clientY - trEl.getBoundingClientRect().y;
|
|
9928
10355
|
const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom';
|
|
9929
10356
|
internalData.prevDragToChild = !!(treeConfig && transform && (isCrossDrag && isToChildDrag) && isControlKey);
|
|
9930
10357
|
internalData.prevDragRow = row;
|
|
9931
10358
|
internalData.prevDragPos = dragPos;
|
|
10359
|
+
// 跨表拖拽
|
|
10360
|
+
if (isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj) {
|
|
10361
|
+
const { $oldTable, $newTable } = crossTableDragRowObj;
|
|
10362
|
+
if ($oldTable) {
|
|
10363
|
+
const oldTableReactData = $oldTable.reactData;
|
|
10364
|
+
if ($oldTable.xID === $xeTable.xID) {
|
|
10365
|
+
if ($newTable) {
|
|
10366
|
+
$newTable.hideCrossTableRowDropClearStatus();
|
|
10367
|
+
}
|
|
10368
|
+
reactData.isCrossDragRow = false;
|
|
10369
|
+
oldTableReactData.isCrossDragRow = false;
|
|
10370
|
+
crossTableDragRowObj.$newTable = null;
|
|
10371
|
+
}
|
|
10372
|
+
else {
|
|
10373
|
+
$oldTable.hideCrossTableRowDropClearStatus();
|
|
10374
|
+
oldTableReactData.isCrossDragRow = true;
|
|
10375
|
+
reactData.dragTipText = oldTableReactData.dragTipText;
|
|
10376
|
+
crossTableDragRowObj.$newTable = $xeTable;
|
|
10377
|
+
showDropTip(evnt, trEl, null, true, dragPos);
|
|
10378
|
+
return;
|
|
10379
|
+
}
|
|
10380
|
+
}
|
|
10381
|
+
}
|
|
9932
10382
|
if ($xeTable.eqRow(dragRow, row) ||
|
|
9933
10383
|
(isControlKey && treeConfig && lazy && row[hasChildField] && rowRest && !rowRest.treeLoaded) ||
|
|
9934
10384
|
(!isCrossDrag && treeConfig && transform && (isPeerDrag ? dragRow[parentField] !== row[parentField] : rest.level))) {
|
|
@@ -9948,7 +10398,7 @@ export default defineVxeComponent({
|
|
|
9948
10398
|
evnt.stopPropagation();
|
|
9949
10399
|
const { dragConfig } = props;
|
|
9950
10400
|
const rowDragOpts = computeRowDragOpts.value;
|
|
9951
|
-
const { trigger, dragStartMethod } = rowDragOpts;
|
|
10401
|
+
const { isCrossTableDrag, trigger, dragStartMethod } = rowDragOpts;
|
|
9952
10402
|
const { row } = params;
|
|
9953
10403
|
const dragEl = evnt.currentTarget;
|
|
9954
10404
|
const tdEl = trigger === 'cell' || trigger === 'row' ? dragEl : (_a = dragEl.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement;
|
|
@@ -9959,10 +10409,16 @@ export default defineVxeComponent({
|
|
|
9959
10409
|
trEl.draggable = false;
|
|
9960
10410
|
reactData.dragRow = null;
|
|
9961
10411
|
reactData.dragCol = null;
|
|
10412
|
+
clearCrossTableDragStatus();
|
|
9962
10413
|
hideDropTip();
|
|
9963
10414
|
return;
|
|
9964
10415
|
}
|
|
10416
|
+
if (isCrossTableDrag) {
|
|
10417
|
+
crossTableDragRowInfo.row = row;
|
|
10418
|
+
crossTableDragRowObj = { $oldTable: $xeTable, $newTable: null };
|
|
10419
|
+
}
|
|
9965
10420
|
reactData.dragRow = row;
|
|
10421
|
+
reactData.isCrossDragRow = false;
|
|
9966
10422
|
reactData.dragCol = null;
|
|
9967
10423
|
trEl.draggable = true;
|
|
9968
10424
|
updateRowDropOrigin(row);
|
|
@@ -10273,6 +10729,7 @@ export default defineVxeComponent({
|
|
|
10273
10729
|
internalData.prevDragToChild = false;
|
|
10274
10730
|
reactData.dragRow = null;
|
|
10275
10731
|
reactData.dragCol = null;
|
|
10732
|
+
clearCrossTableDragStatus();
|
|
10276
10733
|
},
|
|
10277
10734
|
handleHeaderCellDragDragoverEvent(evnt) {
|
|
10278
10735
|
const { dragCol } = reactData;
|
|
@@ -10351,12 +10808,14 @@ export default defineVxeComponent({
|
|
|
10351
10808
|
thEl.draggable = false;
|
|
10352
10809
|
reactData.dragRow = null;
|
|
10353
10810
|
reactData.dragCol = null;
|
|
10811
|
+
clearCrossTableDragStatus();
|
|
10354
10812
|
hideDropTip();
|
|
10355
10813
|
return;
|
|
10356
10814
|
}
|
|
10357
10815
|
reactData.dragCol = column;
|
|
10358
10816
|
reactData.dragRow = null;
|
|
10359
10817
|
thEl.draggable = true;
|
|
10818
|
+
clearCrossTableDragStatus();
|
|
10360
10819
|
updateColDropOrigin(column);
|
|
10361
10820
|
updateColDropTipContent(thEl);
|
|
10362
10821
|
dispatchEvent('column-dragstart', params, evnt);
|
|
@@ -10364,6 +10823,7 @@ export default defineVxeComponent({
|
|
|
10364
10823
|
handleHeaderCellDragMouseupEvent() {
|
|
10365
10824
|
clearColDropOrigin();
|
|
10366
10825
|
hideDropTip();
|
|
10826
|
+
clearCrossTableDragStatus();
|
|
10367
10827
|
reactData.dragRow = null;
|
|
10368
10828
|
reactData.dragCol = null;
|
|
10369
10829
|
},
|
|
@@ -11252,8 +11712,9 @@ export default defineVxeComponent({
|
|
|
11252
11712
|
const rTipSlot = rowDragSlots.tip || (dragConfig && dragConfig.slots ? dragConfig.slots.rowTip : null);
|
|
11253
11713
|
const columnDragSlots = columnDragOpts.slots || {};
|
|
11254
11714
|
const cTipSlot = columnDragSlots.tip;
|
|
11255
|
-
|
|
11256
|
-
|
|
11715
|
+
const dRow = dragRow || (rowDragOpts.isCrossTableDrag ? crossTableDragRowInfo.row : null);
|
|
11716
|
+
if (dRow && rTipSlot) {
|
|
11717
|
+
return callSlot(rTipSlot, { row: dRow });
|
|
11257
11718
|
}
|
|
11258
11719
|
if (dragCol && cTipSlot) {
|
|
11259
11720
|
return callSlot(cTipSlot, { column: dragCol });
|
|
@@ -11266,6 +11727,7 @@ export default defineVxeComponent({
|
|
|
11266
11727
|
const columnOpts = computeColumnOpts.value;
|
|
11267
11728
|
const rowDragOpts = computeRowDragOpts.value;
|
|
11268
11729
|
const columnDragOpts = computeColumnDragOpts.value;
|
|
11730
|
+
const dRow = dragRow || (rowDragOpts.isCrossTableDrag ? crossTableDragRowInfo.row : null);
|
|
11269
11731
|
if (rowOpts.drag || columnOpts.drag) {
|
|
11270
11732
|
return h('div', {
|
|
11271
11733
|
class: 'vxe-table--drag-wrapper'
|
|
@@ -11282,7 +11744,7 @@ export default defineVxeComponent({
|
|
|
11282
11744
|
'is--guides': columnDragOpts.showGuidesStatus
|
|
11283
11745
|
}]
|
|
11284
11746
|
}),
|
|
11285
|
-
(
|
|
11747
|
+
(dRow && rowDragOpts.showDragTip) || (dragCol && columnDragOpts.showDragTip)
|
|
11286
11748
|
? h('div', {
|
|
11287
11749
|
ref: refDragTipElem,
|
|
11288
11750
|
class: 'vxe-table--drag-sort-tip'
|
|
@@ -11294,7 +11756,7 @@ export default defineVxeComponent({
|
|
|
11294
11756
|
class: 'vxe-table--drag-sort-tip-status'
|
|
11295
11757
|
}, [
|
|
11296
11758
|
h('span', {
|
|
11297
|
-
class: ['vxe-table--drag-sort-tip-normal-status',
|
|
11759
|
+
class: ['vxe-table--drag-sort-tip-normal-status', dRow ? getIcon().TABLE_DRAG_STATUS_ROW : getIcon().TABLE_DRAG_STATUS_COLUMN]
|
|
11298
11760
|
}),
|
|
11299
11761
|
h('span', {
|
|
11300
11762
|
class: ['vxe-table--drag-sort-tip-sub-status', getIcon().TABLE_DRAG_STATUS_SUB_ROW]
|
|
@@ -11435,7 +11897,10 @@ export default defineVxeComponent({
|
|
|
11435
11897
|
ref: refScrollXSpaceElem,
|
|
11436
11898
|
class: 'vxe-table--scroll-x-space'
|
|
11437
11899
|
})
|
|
11438
|
-
])
|
|
11900
|
+
]),
|
|
11901
|
+
h('div', {
|
|
11902
|
+
class: 'vxe-table--scroll-x-handle-appearance'
|
|
11903
|
+
})
|
|
11439
11904
|
]),
|
|
11440
11905
|
h('div', {
|
|
11441
11906
|
ref: refScrollXRightCornerElem,
|
|
@@ -11465,7 +11930,10 @@ export default defineVxeComponent({
|
|
|
11465
11930
|
ref: refScrollYSpaceElem,
|
|
11466
11931
|
class: 'vxe-table--scroll-y-space'
|
|
11467
11932
|
})
|
|
11468
|
-
])
|
|
11933
|
+
]),
|
|
11934
|
+
h('div', {
|
|
11935
|
+
class: 'vxe-table--scroll-y-handle-appearance'
|
|
11936
|
+
})
|
|
11469
11937
|
]),
|
|
11470
11938
|
h('div', {
|
|
11471
11939
|
ref: refScrollYBottomCornerElem,
|
|
@@ -11543,6 +12011,7 @@ export default defineVxeComponent({
|
|
|
11543
12011
|
const { teleportToWrapperElem } = internalData;
|
|
11544
12012
|
const { leftList, rightList } = columnStore;
|
|
11545
12013
|
const loadingSlot = slots.loading;
|
|
12014
|
+
const rowDragOpts = computeRowDragOpts.value;
|
|
11546
12015
|
const tableTipConfig = computeTableTipConfig.value;
|
|
11547
12016
|
const validTipConfig = computeValidTipConfig.value;
|
|
11548
12017
|
const validOpts = computeValidOpts.value;
|
|
@@ -11562,6 +12031,11 @@ export default defineVxeComponent({
|
|
|
11562
12031
|
const columnDragOpts = computeColumnDragOpts.value;
|
|
11563
12032
|
const scrollbarXToTop = computeScrollbarXToTop.value;
|
|
11564
12033
|
const scrollbarYToLeft = computeScrollbarYToLeft.value;
|
|
12034
|
+
const { isCrossTableDrag } = rowDragOpts;
|
|
12035
|
+
const rwOns = {};
|
|
12036
|
+
if (isCrossTableDrag && !tableData.length) {
|
|
12037
|
+
rwOns.onDragover = $xeTable.handleCrossTableRowDragoverEmptyEvent;
|
|
12038
|
+
}
|
|
11565
12039
|
return h('div', {
|
|
11566
12040
|
ref: refElem,
|
|
11567
12041
|
class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
|
|
@@ -11621,10 +12095,7 @@ export default defineVxeComponent({
|
|
|
11621
12095
|
class: 'vxe-table-var-mini'
|
|
11622
12096
|
})
|
|
11623
12097
|
]),
|
|
11624
|
-
h('div', {
|
|
11625
|
-
key: 'tw',
|
|
11626
|
-
class: 'vxe-table--render-wrapper'
|
|
11627
|
-
}, scrollbarXToTop
|
|
12098
|
+
h('div', Object.assign({ key: 'tw', class: 'vxe-table--render-wrapper' }, rwOns), scrollbarXToTop
|
|
11628
12099
|
? [
|
|
11629
12100
|
renderScrollX(),
|
|
11630
12101
|
renderBody()
|
|
@@ -11939,15 +12410,32 @@ export default defineVxeComponent({
|
|
|
11939
12410
|
watch(mergeCellFlag, () => {
|
|
11940
12411
|
handleUpdateMergeBodyCells(props.mergeCells || []);
|
|
11941
12412
|
});
|
|
11942
|
-
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
|
+
});
|
|
11943
12430
|
watch(() => props.mergeFooterItems ? props.mergeFooterItems.length : -1, () => {
|
|
11944
|
-
|
|
12431
|
+
mergeFooteCellFlag.value++;
|
|
11945
12432
|
});
|
|
11946
12433
|
watch(() => props.mergeFooterItems, () => {
|
|
11947
|
-
|
|
12434
|
+
mergeFooteCellFlag.value++;
|
|
11948
12435
|
});
|
|
11949
|
-
watch(
|
|
11950
|
-
|
|
12436
|
+
watch(mergeFooteCellFlag, () => {
|
|
12437
|
+
const mFooterCells = props.mergeFooterCells || props.mergeFooterItems;
|
|
12438
|
+
handleUpdateMergeFooterCells(mFooterCells || []);
|
|
11951
12439
|
});
|
|
11952
12440
|
watch(computeRowGroupFields, (val) => {
|
|
11953
12441
|
handleUpdateRowGroup(val);
|
|
@@ -12028,6 +12516,7 @@ export default defineVxeComponent({
|
|
|
12028
12516
|
const currentColumnOpts = computeCurrentColumnOpts.value;
|
|
12029
12517
|
const keyboardOpts = computeKeyboardOpts.value;
|
|
12030
12518
|
const aggregateOpts = computeAggregateOpts.value;
|
|
12519
|
+
const rowDragOpts = computeRowDragOpts.value;
|
|
12031
12520
|
if (props.rowId) {
|
|
12032
12521
|
warnLog('vxe.error.delProp', ['row-id', 'row-config.keyField']);
|
|
12033
12522
|
}
|
|
@@ -12129,7 +12618,10 @@ export default defineVxeComponent({
|
|
|
12129
12618
|
}
|
|
12130
12619
|
}
|
|
12131
12620
|
if (treeConfig && rowOpts.drag && !treeOpts.transform) {
|
|
12132
|
-
errLog('vxe.error.notSupportProp', ['
|
|
12621
|
+
errLog('vxe.error.notSupportProp', ['row-config.drag', 'tree-config.transform=false', 'tree-config.transform=true']);
|
|
12622
|
+
}
|
|
12623
|
+
if (treeConfig && rowDragOpts.isCrossTableDrag && !rowDragOpts.isCrossDrag) {
|
|
12624
|
+
errLog('vxe.error.reqSupportProp', ['tree-config & row-drag-config.isCrossTableDrag', 'row-drag-config.isCrossDrag']);
|
|
12133
12625
|
}
|
|
12134
12626
|
if (props.dragConfig) {
|
|
12135
12627
|
warnLog('vxe.error.delProp', ['drag-config', 'row-drag-config']);
|