vxe-table 4.16.0 → 4.16.1

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.
Files changed (37) hide show
  1. package/es/grid/src/grid.js +1 -1
  2. package/es/style.css +1 -1
  3. package/es/table/module/edit/hook.js +55 -17
  4. package/es/table/src/emits.js +2 -0
  5. package/es/table/src/store.js +8 -0
  6. package/es/table/src/table.js +322 -36
  7. package/es/ui/index.js +1 -1
  8. package/es/ui/src/log.js +1 -1
  9. package/lib/grid/src/grid.js +1 -1
  10. package/lib/grid/src/grid.min.js +1 -1
  11. package/lib/index.umd.js +91 -34
  12. package/lib/index.umd.min.js +1 -1
  13. package/lib/style.css +1 -1
  14. package/lib/table/module/edit/hook.js +54 -15
  15. package/lib/table/module/edit/hook.min.js +1 -1
  16. package/lib/table/src/emits.js +1 -1
  17. package/lib/table/src/emits.min.js +1 -1
  18. package/lib/table/src/store.js +15 -0
  19. package/lib/table/src/store.min.js +1 -0
  20. package/lib/table/src/table.js +24 -15
  21. package/lib/table/src/table.min.js +1 -1
  22. package/lib/ui/index.js +1 -1
  23. package/lib/ui/index.min.js +1 -1
  24. package/lib/ui/src/log.js +1 -1
  25. package/lib/ui/src/log.min.js +1 -1
  26. package/package.json +2 -2
  27. package/packages/grid/src/grid.ts +1 -1
  28. package/packages/table/module/edit/hook.ts +55 -19
  29. package/packages/table/src/emits.ts +2 -0
  30. package/packages/table/src/store.ts +14 -0
  31. package/packages/table/src/table.ts +325 -33
  32. /package/es/{iconfont.1756083655214.ttf → iconfont.1756272578850.ttf} +0 -0
  33. /package/es/{iconfont.1756083655214.woff → iconfont.1756272578850.woff} +0 -0
  34. /package/es/{iconfont.1756083655214.woff2 → iconfont.1756272578850.woff2} +0 -0
  35. /package/lib/{iconfont.1756083655214.ttf → iconfont.1756272578850.ttf} +0 -0
  36. /package/lib/{iconfont.1756083655214.woff → iconfont.1756272578850.woff} +0 -0
  37. /package/lib/{iconfont.1756083655214.woff2 → iconfont.1756272578850.woff2} +0 -0
@@ -8,6 +8,7 @@ import { createInternalData, getRowUniqueId, clearTableAllStatus, getColumnList,
8
8
  import { getSlotVNs } from '../../ui/src/vn';
9
9
  import { moveRowAnimateToTb, clearRowAnimate, moveColAnimateToLr, clearColAnimate } from './anime';
10
10
  import { warnLog, errLog } from '../../ui/src/log';
11
+ import { getCrossTableDragRowInfo } from './store';
11
12
  import Cell from './cell';
12
13
  import TableBodyComponent from './body';
13
14
  import TableHeaderComponent from './header';
@@ -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: [],
@@ -279,9 +282,9 @@ export default defineVxeComponent({
279
282
  resizeHeightFlag: 1,
280
283
  resizeWidthFlag: 1,
281
284
  isCustomStatus: false,
282
- isDragRowMove: false,
285
+ isCrossDragRow: false,
283
286
  dragRow: null,
284
- isDragColMove: false,
287
+ isCrossDragCol: false,
285
288
  dragCol: null,
286
289
  dragTipText: '',
287
290
  isDragResize: false,
@@ -2190,22 +2193,28 @@ export default defineVxeComponent({
2190
2193
  emptyPlaceholderElem.style.top = `${tHeaderHeight}px`;
2191
2194
  emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : '';
2192
2195
  }
2196
+ const scrollbarXConf = scrollbarOpts.x || {};
2193
2197
  const scrollbarXToTop = computeScrollbarXToTop.value;
2198
+ const scrollbarYConf = scrollbarOpts.y || {};
2194
2199
  const scrollbarYToLeft = computeScrollbarYToLeft.value;
2195
2200
  let xScrollbarVisible = overflowX ? 'visible' : 'hidden';
2196
- if ($xeGanttView) {
2201
+ if (scrollbarXConf.visible === 'visible' || $xeGanttView) {
2197
2202
  osbHeight = scrollbarHeight;
2198
2203
  xScrollbarVisible = 'visible';
2199
2204
  }
2200
- else if (scrollbarOpts.x && scrollbarOpts.x.visible === false) {
2205
+ else if (scrollbarXConf.visible === 'hidden' || scrollbarXConf.visible === false) {
2201
2206
  osbHeight = 0;
2202
2207
  xScrollbarVisible = 'hidden';
2203
2208
  }
2204
2209
  let yScrollbarVisible = overflowY ? 'visible' : 'hidden';
2205
- if ((scrollbarOpts.y && scrollbarOpts.y.visible === false) || ($xeGanttView && !scrollbarYToLeft)) {
2210
+ if ((scrollbarYConf.visible === 'hidden' || scrollbarYConf.visible === false) || ($xeGanttView && !scrollbarYToLeft)) {
2206
2211
  osbWidth = 0;
2207
2212
  yScrollbarVisible = 'hidden';
2208
2213
  }
2214
+ else if (scrollbarYConf.visible === 'visible') {
2215
+ osbWidth = scrollbarWidth;
2216
+ yScrollbarVisible = 'visible';
2217
+ }
2209
2218
  let tbHeight = 0;
2210
2219
  let bodyMaxHeight = 0;
2211
2220
  const bodyMinHeight = customMinHeight - tHeaderHeight - tFooterHeight - osbHeight;
@@ -4903,7 +4912,9 @@ export default defineVxeComponent({
4903
4912
  }
4904
4913
  }
4905
4914
  }
4906
- return $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
4915
+ const rest = $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true);
4916
+ clearRowDragData();
4917
+ return rest;
4907
4918
  },
4908
4919
  /**
4909
4920
  * 获取表格的全量列
@@ -7627,12 +7638,17 @@ export default defineVxeComponent({
7627
7638
  }
7628
7639
  }
7629
7640
  };
7641
+ const clearCrossTableDragStatus = () => {
7642
+ crossTableDragRowObj = null;
7643
+ crossTableDragRowInfo.row = null;
7644
+ };
7630
7645
  const clearDragStatus = () => {
7631
7646
  const { dragRow, dragCol } = reactData;
7632
7647
  if (dragRow || dragCol) {
7633
7648
  clearColDropOrigin();
7634
7649
  clearRowDropOrigin();
7635
7650
  hideDropTip();
7651
+ clearCrossTableDragStatus();
7636
7652
  reactData.dragRow = null;
7637
7653
  reactData.dragCol = null;
7638
7654
  }
@@ -7821,6 +7837,24 @@ export default defineVxeComponent({
7821
7837
  cdLineEl.style.display = '';
7822
7838
  }
7823
7839
  };
7840
+ const clearRowDragData = () => {
7841
+ let wrapperEl = refElem.value;
7842
+ const dtClss = ['.vxe-body--row'];
7843
+ if ($xeGantt) {
7844
+ const { refGanttContainerElem } = $xeGantt.getRefMaps();
7845
+ const ganttContainerElem = refGanttContainerElem.value;
7846
+ if (ganttContainerElem) {
7847
+ wrapperEl = ganttContainerElem;
7848
+ }
7849
+ dtClss.push('.vxe-gantt-view--body-row', '.vxe-gantt-view--chart-row');
7850
+ }
7851
+ hideDropTip();
7852
+ clearRowDropOrigin();
7853
+ clearRowAnimate(wrapperEl, dtClss);
7854
+ internalData.prevDragToChild = false;
7855
+ reactData.dragRow = null;
7856
+ reactData.dragCol = null;
7857
+ };
7824
7858
  /**
7825
7859
  * 处理显示 tooltip
7826
7860
  * @param {Event} evnt 事件
@@ -9860,6 +9894,221 @@ export default defineVxeComponent({
9860
9894
  }
9861
9895
  return Promise.resolve(errRest);
9862
9896
  },
9897
+ /**
9898
+ * 处理跨表拖拽完成
9899
+ */
9900
+ handleCrossTableRowDragFinishEvent(evnt) {
9901
+ const { tableData } = reactData;
9902
+ const { fullAllDataRowIdData } = internalData;
9903
+ const rowOpts = computeRowOpts.value;
9904
+ const cellOpts = computeCellOpts.value;
9905
+ const defaultRowHeight = computeDefaultRowHeight.value;
9906
+ const rowDragOpts = computeRowDragOpts.value;
9907
+ const { animation, isCrossTableDrag } = rowDragOpts;
9908
+ const treeOpts = computeTreeOpts.value;
9909
+ const { mapChildrenField } = treeOpts;
9910
+ const el = refElem.value;
9911
+ if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
9912
+ const { row: dragRow } = crossTableDragRowInfo;
9913
+ if (dragRow) {
9914
+ const dragRowid = getRowid($xeTable, dragRow);
9915
+ const dragRowRest = fullAllDataRowIdData[dragRowid];
9916
+ let dragRowHeight = 0;
9917
+ let rsIndex = -1;
9918
+ if (dragRowRest) {
9919
+ if (animation) {
9920
+ dragRowHeight = getCellRestHeight(dragRowRest, cellOpts, rowOpts, defaultRowHeight);
9921
+ }
9922
+ rsIndex = dragRowRest.$index;
9923
+ }
9924
+ const dragRangeList = rsIndex > -1 && rsIndex < tableData.length - 1 ? tableData.slice(rsIndex + 1) : [];
9925
+ const dragList = XEUtils.toTreeArray([dragRow], {
9926
+ updated: true,
9927
+ children: mapChildrenField
9928
+ });
9929
+ $xeTable.remove(dragList).then(() => {
9930
+ if (animation && dragRowHeight && dragRangeList.length) {
9931
+ const $xeGanttView = internalData.xeGanttView;
9932
+ let wrapperEl = el;
9933
+ if ($xeGantt && $xeGanttView) {
9934
+ const { refGanttContainerElem } = $xeGantt.getRefMaps();
9935
+ const ganttContainerElem = refGanttContainerElem.value;
9936
+ if (ganttContainerElem) {
9937
+ wrapperEl = ganttContainerElem;
9938
+ }
9939
+ }
9940
+ const dtClss = [];
9941
+ dragRangeList.forEach(row => {
9942
+ const rowid = getRowid($xeTable, row);
9943
+ dtClss.push(`.vxe-body--row[rowid="${rowid}"]`);
9944
+ if ($xeGantt) {
9945
+ dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`);
9946
+ }
9947
+ });
9948
+ const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
9949
+ moveRowAnimateToTb(dtTrList, dragRowHeight);
9950
+ }
9951
+ });
9952
+ dispatchEvent('row-remove-dragend', {
9953
+ row: dragRow
9954
+ }, evnt);
9955
+ clearRowDragData();
9956
+ clearCrossTableDragStatus();
9957
+ }
9958
+ }
9959
+ },
9960
+ /**
9961
+ * 处理跨表拖至新的空表
9962
+ */
9963
+ handleCrossTableRowDragoverEmptyEvent(evnt) {
9964
+ const { tableData } = reactData;
9965
+ const rowDragOpts = computeRowDragOpts.value;
9966
+ const { isCrossTableDrag } = rowDragOpts;
9967
+ if (isCrossTableDrag && crossTableDragRowObj && !tableData.length) {
9968
+ const { $oldTable } = crossTableDragRowObj;
9969
+ if ($oldTable && $oldTable.xID !== $xeTable.xID) {
9970
+ evnt.preventDefault();
9971
+ crossTableDragRowObj.$newTable = $xeTable;
9972
+ internalData.prevDragRow = null;
9973
+ }
9974
+ }
9975
+ },
9976
+ /**
9977
+ * 处理跨表拖插入
9978
+ */
9979
+ handleCrossTableRowDragInsertEvent(evnt) {
9980
+ const { treeConfig } = props;
9981
+ const { prevDragRow, prevDragPos, prevDragToChild } = internalData;
9982
+ const rowDragOpts = computeRowDragOpts.value;
9983
+ const { animation, isSelfToChildDrag, isCrossTableDrag, dragEndMethod, dragToChildMethod } = rowDragOpts;
9984
+ const rowOpts = computeRowOpts.value;
9985
+ const cellOpts = computeCellOpts.value;
9986
+ const defaultRowHeight = computeDefaultRowHeight.value;
9987
+ const treeOpts = computeTreeOpts.value;
9988
+ const { parentField, mapChildrenField } = treeOpts;
9989
+ const childrenField = treeOpts.children || treeOpts.childrenField;
9990
+ // 跨表拖拽
9991
+ if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
9992
+ const { row: oldRow } = crossTableDragRowInfo;
9993
+ const { $oldTable } = crossTableDragRowObj;
9994
+ const el = refElem.value;
9995
+ if ($oldTable && oldRow) {
9996
+ const dragRow = oldRow;
9997
+ let dragOffsetIndex = -1;
9998
+ if (prevDragRow) {
9999
+ dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0;
10000
+ }
10001
+ const dragParams = {
10002
+ oldRow: dragRow,
10003
+ newRow: prevDragRow,
10004
+ dragRow,
10005
+ dragPos: prevDragPos,
10006
+ dragToChild: !!prevDragToChild,
10007
+ offsetIndex: dragOffsetIndex
10008
+ };
10009
+ const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild;
10010
+ const errRest = {
10011
+ status: false
10012
+ };
10013
+ Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then((status) => {
10014
+ if (!status) {
10015
+ return errRest;
10016
+ }
10017
+ let insertRest = Promise.resolve();
10018
+ if (treeConfig) {
10019
+ const dragList = XEUtils.toTreeArray([dragRow], {
10020
+ updated: true,
10021
+ children: mapChildrenField
10022
+ });
10023
+ $oldTable.handleCrossTableRowDragFinishEvent(evnt);
10024
+ if (prevDragRow) {
10025
+ dragRow[parentField] = prevDragRow[parentField];
10026
+ }
10027
+ else {
10028
+ dragRow[parentField] = null;
10029
+ }
10030
+ dragList.forEach(row => {
10031
+ row[childrenField] = undefined;
10032
+ row[mapChildrenField] = undefined;
10033
+ });
10034
+ if (prevDragRow) {
10035
+ if (prevDragPos === 'bottom') {
10036
+ insertRest = $xeTable.insertNextAt(dragList, prevDragRow);
10037
+ }
10038
+ else {
10039
+ insertRest = $xeTable.insertAt(dragList, prevDragRow);
10040
+ }
10041
+ }
10042
+ else {
10043
+ insertRest = $xeTable.insert(dragList);
10044
+ }
10045
+ }
10046
+ else {
10047
+ $oldTable.handleCrossTableRowDragFinishEvent(evnt);
10048
+ if (prevDragRow) {
10049
+ if (prevDragPos === 'bottom') {
10050
+ insertRest = $xeTable.insertNextAt(dragRow, prevDragRow);
10051
+ }
10052
+ else {
10053
+ insertRest = $xeTable.insertAt(dragRow, prevDragRow);
10054
+ }
10055
+ }
10056
+ else {
10057
+ insertRest = $xeTable.insert(dragRow);
10058
+ }
10059
+ }
10060
+ dispatchEvent('row-insert-dragend', {
10061
+ oldRow,
10062
+ newRow: prevDragRow,
10063
+ dragRow,
10064
+ dragPos: prevDragPos,
10065
+ dragToChild: isDragToChildFlag,
10066
+ offsetIndex: dragOffsetIndex
10067
+ }, evnt);
10068
+ clearRowDragData();
10069
+ insertRest.then(() => {
10070
+ const { tableData } = reactData;
10071
+ const { fullAllDataRowIdData } = internalData;
10072
+ const oldRowid = getRowid($xeTable, dragRow);
10073
+ const oldRowRest = fullAllDataRowIdData[oldRowid];
10074
+ let dragRowHeight = 0;
10075
+ let rsIndex = -1;
10076
+ if (oldRowRest) {
10077
+ if (animation) {
10078
+ dragRowHeight = getCellRestHeight(oldRowRest, cellOpts, rowOpts, defaultRowHeight);
10079
+ }
10080
+ rsIndex = oldRowRest.$index;
10081
+ }
10082
+ const dragRangeList = rsIndex > -1 ? tableData.slice(rsIndex) : [];
10083
+ if (animation && dragRowHeight && dragRangeList.length) {
10084
+ const $xeGanttView = internalData.xeGanttView;
10085
+ let wrapperEl = el;
10086
+ if ($xeGantt && $xeGanttView) {
10087
+ const { refGanttContainerElem } = $xeGantt.getRefMaps();
10088
+ const ganttContainerElem = refGanttContainerElem.value;
10089
+ if (ganttContainerElem) {
10090
+ wrapperEl = ganttContainerElem;
10091
+ }
10092
+ }
10093
+ const dtClss = [];
10094
+ dragRangeList.forEach(row => {
10095
+ const rowid = getRowid($xeTable, row);
10096
+ dtClss.push(`.vxe-body--row[rowid="${rowid}"]`);
10097
+ if ($xeGantt) {
10098
+ dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`);
10099
+ }
10100
+ });
10101
+ const dtTrList = wrapperEl.querySelectorAll(dtClss.join(','));
10102
+ moveRowAnimateToTb(dtTrList, -dragRowHeight);
10103
+ }
10104
+ });
10105
+ });
10106
+ }
10107
+ }
10108
+ },
10109
+ hideCrossTableRowDropClearStatus() {
10110
+ hideDropTip();
10111
+ },
9863
10112
  handleRowDragDragendEvent(evnt) {
9864
10113
  const { treeConfig } = props;
9865
10114
  const { fullAllDataRowIdData, prevDragToChild } = internalData;
@@ -9868,7 +10117,16 @@ export default defineVxeComponent({
9868
10117
  const { lazy } = treeOpts;
9869
10118
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
9870
10119
  const { prevDragRow, prevDragPos } = internalData;
9871
- let wrapperEl = refElem.value;
10120
+ const rowDragOpts = computeRowDragOpts.value;
10121
+ const { isCrossTableDrag } = rowDragOpts;
10122
+ // 跨表拖拽
10123
+ if (isCrossTableDrag && crossTableDragRowObj) {
10124
+ const { $newTable } = crossTableDragRowObj;
10125
+ if ($newTable && $newTable.xID !== $xeTable.xID) {
10126
+ $newTable.handleCrossTableRowDragInsertEvent(evnt);
10127
+ return;
10128
+ }
10129
+ }
9872
10130
  if (treeConfig && lazy && prevDragToChild) {
9873
10131
  // 懒加载
9874
10132
  const newRowid = getRowid($xeTable, prevDragRow);
@@ -9885,21 +10143,8 @@ export default defineVxeComponent({
9885
10143
  else {
9886
10144
  $xeTable.handleRowDragSwapEvent(evnt, true, dragRow, prevDragRow, prevDragPos, prevDragToChild);
9887
10145
  }
9888
- const dtClss = ['.vxe-body--row'];
9889
- if ($xeGantt) {
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;
10146
+ clearRowDragData();
10147
+ clearCrossTableDragStatus();
9903
10148
  },
9904
10149
  handleRowDragDragoverEvent(evnt) {
9905
10150
  const { treeConfig } = props;
@@ -9909,8 +10154,8 @@ export default defineVxeComponent({
9909
10154
  const { lazy, transform, parentField } = treeOpts;
9910
10155
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField;
9911
10156
  const rowDragOpts = computeRowDragOpts.value;
9912
- const { isPeerDrag, isCrossDrag, isToChildDrag } = rowDragOpts;
9913
- if (!dragRow) {
10157
+ const { isPeerDrag, isCrossDrag, isToChildDrag, isCrossTableDrag } = rowDragOpts;
10158
+ if (!dragRow && !(isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj)) {
9914
10159
  evnt.preventDefault();
9915
10160
  return;
9916
10161
  }
@@ -9919,16 +10164,38 @@ export default defineVxeComponent({
9919
10164
  const rowid = trEl.getAttribute('rowid') || '';
9920
10165
  const rest = fullAllDataRowIdData[rowid];
9921
10166
  if (rest) {
10167
+ evnt.preventDefault();
9922
10168
  const row = rest.row;
9923
10169
  const rowid = getRowid($xeTable, row);
9924
10170
  const rowRest = fullAllDataRowIdData[rowid];
9925
- evnt.preventDefault();
9926
- const { dragRow } = reactData;
9927
10171
  const offsetY = evnt.clientY - trEl.getBoundingClientRect().y;
9928
10172
  const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom';
9929
10173
  internalData.prevDragToChild = !!(treeConfig && transform && (isCrossDrag && isToChildDrag) && isControlKey);
9930
10174
  internalData.prevDragRow = row;
9931
10175
  internalData.prevDragPos = dragPos;
10176
+ // 跨表拖拽
10177
+ if (isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj) {
10178
+ const { $oldTable, $newTable } = crossTableDragRowObj;
10179
+ if ($oldTable) {
10180
+ const oldTableReactData = $oldTable.reactData;
10181
+ if ($oldTable.xID === $xeTable.xID) {
10182
+ if ($newTable) {
10183
+ $newTable.hideCrossTableRowDropClearStatus();
10184
+ }
10185
+ reactData.isCrossDragRow = false;
10186
+ oldTableReactData.isCrossDragRow = false;
10187
+ crossTableDragRowObj.$newTable = null;
10188
+ }
10189
+ else {
10190
+ $oldTable.hideCrossTableRowDropClearStatus();
10191
+ oldTableReactData.isCrossDragRow = true;
10192
+ reactData.dragTipText = oldTableReactData.dragTipText;
10193
+ crossTableDragRowObj.$newTable = $xeTable;
10194
+ showDropTip(evnt, trEl, null, true, dragPos);
10195
+ return;
10196
+ }
10197
+ }
10198
+ }
9932
10199
  if ($xeTable.eqRow(dragRow, row) ||
9933
10200
  (isControlKey && treeConfig && lazy && row[hasChildField] && rowRest && !rowRest.treeLoaded) ||
9934
10201
  (!isCrossDrag && treeConfig && transform && (isPeerDrag ? dragRow[parentField] !== row[parentField] : rest.level))) {
@@ -9948,7 +10215,7 @@ export default defineVxeComponent({
9948
10215
  evnt.stopPropagation();
9949
10216
  const { dragConfig } = props;
9950
10217
  const rowDragOpts = computeRowDragOpts.value;
9951
- const { trigger, dragStartMethod } = rowDragOpts;
10218
+ const { isCrossTableDrag, trigger, dragStartMethod } = rowDragOpts;
9952
10219
  const { row } = params;
9953
10220
  const dragEl = evnt.currentTarget;
9954
10221
  const tdEl = trigger === 'cell' || trigger === 'row' ? dragEl : (_a = dragEl.parentElement) === null || _a === void 0 ? void 0 : _a.parentElement;
@@ -9959,10 +10226,16 @@ export default defineVxeComponent({
9959
10226
  trEl.draggable = false;
9960
10227
  reactData.dragRow = null;
9961
10228
  reactData.dragCol = null;
10229
+ clearCrossTableDragStatus();
9962
10230
  hideDropTip();
9963
10231
  return;
9964
10232
  }
10233
+ if (isCrossTableDrag) {
10234
+ crossTableDragRowInfo.row = row;
10235
+ crossTableDragRowObj = { $oldTable: $xeTable, $newTable: null };
10236
+ }
9965
10237
  reactData.dragRow = row;
10238
+ reactData.isCrossDragRow = false;
9966
10239
  reactData.dragCol = null;
9967
10240
  trEl.draggable = true;
9968
10241
  updateRowDropOrigin(row);
@@ -10273,6 +10546,7 @@ export default defineVxeComponent({
10273
10546
  internalData.prevDragToChild = false;
10274
10547
  reactData.dragRow = null;
10275
10548
  reactData.dragCol = null;
10549
+ clearCrossTableDragStatus();
10276
10550
  },
10277
10551
  handleHeaderCellDragDragoverEvent(evnt) {
10278
10552
  const { dragCol } = reactData;
@@ -10351,12 +10625,14 @@ export default defineVxeComponent({
10351
10625
  thEl.draggable = false;
10352
10626
  reactData.dragRow = null;
10353
10627
  reactData.dragCol = null;
10628
+ clearCrossTableDragStatus();
10354
10629
  hideDropTip();
10355
10630
  return;
10356
10631
  }
10357
10632
  reactData.dragCol = column;
10358
10633
  reactData.dragRow = null;
10359
10634
  thEl.draggable = true;
10635
+ clearCrossTableDragStatus();
10360
10636
  updateColDropOrigin(column);
10361
10637
  updateColDropTipContent(thEl);
10362
10638
  dispatchEvent('column-dragstart', params, evnt);
@@ -10364,6 +10640,7 @@ export default defineVxeComponent({
10364
10640
  handleHeaderCellDragMouseupEvent() {
10365
10641
  clearColDropOrigin();
10366
10642
  hideDropTip();
10643
+ clearCrossTableDragStatus();
10367
10644
  reactData.dragRow = null;
10368
10645
  reactData.dragCol = null;
10369
10646
  },
@@ -11252,8 +11529,9 @@ export default defineVxeComponent({
11252
11529
  const rTipSlot = rowDragSlots.tip || (dragConfig && dragConfig.slots ? dragConfig.slots.rowTip : null);
11253
11530
  const columnDragSlots = columnDragOpts.slots || {};
11254
11531
  const cTipSlot = columnDragSlots.tip;
11255
- if (dragRow && rTipSlot) {
11256
- return callSlot(rTipSlot, { row: dragRow });
11532
+ const dRow = dragRow || (rowDragOpts.isCrossTableDrag ? crossTableDragRowInfo.row : null);
11533
+ if (dRow && rTipSlot) {
11534
+ return callSlot(rTipSlot, { row: dRow });
11257
11535
  }
11258
11536
  if (dragCol && cTipSlot) {
11259
11537
  return callSlot(cTipSlot, { column: dragCol });
@@ -11266,6 +11544,7 @@ export default defineVxeComponent({
11266
11544
  const columnOpts = computeColumnOpts.value;
11267
11545
  const rowDragOpts = computeRowDragOpts.value;
11268
11546
  const columnDragOpts = computeColumnDragOpts.value;
11547
+ const dRow = dragRow || (rowDragOpts.isCrossTableDrag ? crossTableDragRowInfo.row : null);
11269
11548
  if (rowOpts.drag || columnOpts.drag) {
11270
11549
  return h('div', {
11271
11550
  class: 'vxe-table--drag-wrapper'
@@ -11282,7 +11561,7 @@ export default defineVxeComponent({
11282
11561
  'is--guides': columnDragOpts.showGuidesStatus
11283
11562
  }]
11284
11563
  }),
11285
- (dragRow && rowDragOpts.showDragTip) || (dragCol && columnDragOpts.showDragTip)
11564
+ (dRow && rowDragOpts.showDragTip) || (dragCol && columnDragOpts.showDragTip)
11286
11565
  ? h('div', {
11287
11566
  ref: refDragTipElem,
11288
11567
  class: 'vxe-table--drag-sort-tip'
@@ -11294,7 +11573,7 @@ export default defineVxeComponent({
11294
11573
  class: 'vxe-table--drag-sort-tip-status'
11295
11574
  }, [
11296
11575
  h('span', {
11297
- class: ['vxe-table--drag-sort-tip-normal-status', dragRow ? getIcon().TABLE_DRAG_STATUS_ROW : getIcon().TABLE_DRAG_STATUS_COLUMN]
11576
+ class: ['vxe-table--drag-sort-tip-normal-status', dRow ? getIcon().TABLE_DRAG_STATUS_ROW : getIcon().TABLE_DRAG_STATUS_COLUMN]
11298
11577
  }),
11299
11578
  h('span', {
11300
11579
  class: ['vxe-table--drag-sort-tip-sub-status', getIcon().TABLE_DRAG_STATUS_SUB_ROW]
@@ -11543,6 +11822,7 @@ export default defineVxeComponent({
11543
11822
  const { teleportToWrapperElem } = internalData;
11544
11823
  const { leftList, rightList } = columnStore;
11545
11824
  const loadingSlot = slots.loading;
11825
+ const rowDragOpts = computeRowDragOpts.value;
11546
11826
  const tableTipConfig = computeTableTipConfig.value;
11547
11827
  const validTipConfig = computeValidTipConfig.value;
11548
11828
  const validOpts = computeValidOpts.value;
@@ -11562,6 +11842,11 @@ export default defineVxeComponent({
11562
11842
  const columnDragOpts = computeColumnDragOpts.value;
11563
11843
  const scrollbarXToTop = computeScrollbarXToTop.value;
11564
11844
  const scrollbarYToLeft = computeScrollbarYToLeft.value;
11845
+ const { isCrossTableDrag } = rowDragOpts;
11846
+ const rwOns = {};
11847
+ if (isCrossTableDrag && !tableData.length) {
11848
+ rwOns.onDragover = $xeTable.handleCrossTableRowDragoverEmptyEvent;
11849
+ }
11565
11850
  return h('div', {
11566
11851
  ref: refElem,
11567
11852
  class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
@@ -11621,10 +11906,7 @@ export default defineVxeComponent({
11621
11906
  class: 'vxe-table-var-mini'
11622
11907
  })
11623
11908
  ]),
11624
- h('div', {
11625
- key: 'tw',
11626
- class: 'vxe-table--render-wrapper'
11627
- }, scrollbarXToTop
11909
+ h('div', Object.assign({ key: 'tw', class: 'vxe-table--render-wrapper' }, rwOns), scrollbarXToTop
11628
11910
  ? [
11629
11911
  renderScrollX(),
11630
11912
  renderBody()
@@ -12028,6 +12310,7 @@ export default defineVxeComponent({
12028
12310
  const currentColumnOpts = computeCurrentColumnOpts.value;
12029
12311
  const keyboardOpts = computeKeyboardOpts.value;
12030
12312
  const aggregateOpts = computeAggregateOpts.value;
12313
+ const rowDragOpts = computeRowDragOpts.value;
12031
12314
  if (props.rowId) {
12032
12315
  warnLog('vxe.error.delProp', ['row-id', 'row-config.keyField']);
12033
12316
  }
@@ -12129,7 +12412,10 @@ export default defineVxeComponent({
12129
12412
  }
12130
12413
  }
12131
12414
  if (treeConfig && rowOpts.drag && !treeOpts.transform) {
12132
- errLog('vxe.error.notSupportProp', ['column-config.drag', 'tree-config.transform=false', 'tree-config.transform=true']);
12415
+ errLog('vxe.error.notSupportProp', ['row-config.drag', 'tree-config.transform=false', 'tree-config.transform=true']);
12416
+ }
12417
+ if (treeConfig && rowDragOpts.isCrossTableDrag && !rowDragOpts.isCrossDrag) {
12418
+ errLog('vxe.error.reqSupportProp', ['tree-config & row-drag-config.isCrossTableDrag', 'row-drag-config.isCrossDrag']);
12133
12419
  }
12134
12420
  if (props.dragConfig) {
12135
12421
  warnLog('vxe.error.delProp', ['drag-config', 'row-drag-config']);
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 = "4.16.0";
3
+ export const version = "4.16.1";
4
4
  VxeUI.version = version;
5
5
  VxeUI.tableVersion = version;
6
6
  VxeUI.setConfig({
package/es/ui/src/log.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { VxeUI } from '@vxe-ui/core';
2
2
  const { log } = VxeUI;
3
- const version = `table v${"4.16.0"}`;
3
+ const version = `table v${"4.16.1"}`;
4
4
  export const warnLog = log.create('warn', version);
5
5
  export const errLog = log.create('error', version);
@@ -31,7 +31,7 @@ const {
31
31
  renderEmptyElement
32
32
  } = _ui.VxeUI;
33
33
  const tableComponentPropKeys = Object.keys(_props2.tableProps);
34
- const tableComponentMethodKeys = ['clearAll', 'syncData', 'updateData', 'loadData', 'reloadData', 'reloadRow', 'loadColumn', 'reloadColumn', 'getRowNode', 'getColumnNode', 'getRowIndex', 'getVTRowIndex', 'getVMRowIndex', 'getColumnIndex', 'getVTColumnIndex', 'getVMColumnIndex', 'setRow', 'createData', 'createRow', 'revertData', 'clearData', 'isRemoveByRow', 'isInsertByRow', 'isUpdateByRow', 'getColumns', 'getColumnById', 'getColumnByField', 'getTableColumn', 'getFullColumns', 'getData', 'getCheckboxRecords', 'getParentRow', 'getTreeRowChildren', 'getTreeParentRow', 'getRowSeq', 'getRowById', 'getRowid', 'getTableData', 'getFullData', 'setColumnFixed', 'clearColumnFixed', 'setColumnWidth', 'getColumnWidth', 'recalcRowHeight', 'setRowHeightConf', 'getRowHeightConf', 'setRowHeight', 'getRowHeight', 'hideColumn', 'showColumn', 'resetColumn', 'refreshColumn', 'refreshScroll', 'recalculate', 'closeTooltip', 'isAllCheckboxChecked', 'isAllCheckboxIndeterminate', 'getCheckboxIndeterminateRecords', 'setCheckboxRow', 'setCheckboxRowKey', 'isCheckedByCheckboxRow', 'isCheckedByCheckboxRowKey', 'isIndeterminateByCheckboxRow', 'isIndeterminateByCheckboxRowKey', 'toggleCheckboxRow', 'setAllCheckboxRow', 'getRadioReserveRecord', 'clearRadioReserve', 'getCheckboxReserveRecords', 'clearCheckboxReserve', 'toggleAllCheckboxRow', 'clearCheckboxRow', 'setCurrentRow', 'isCheckedByRadioRow', 'isCheckedByRadioRowKey', 'setRadioRow', 'setRadioRowKey', 'clearCurrentRow', 'clearRadioRow', 'getCurrentRecord', 'getRadioRecord', 'getCurrentColumn', 'setCurrentColumn', 'clearCurrentColumn', 'setPendingRow', 'togglePendingRow', 'hasPendingByRow', 'isPendingByRow', 'getPendingRecords', 'clearPendingRow', 'setFilterByEvent', 'sort', 'setSort', 'setSortByEvent', 'clearSort', 'clearSortByEvent', 'isSort', 'getSortColumns', 'closeFilter', 'isFilter', 'clearFilterByEvent', 'isActiveFilterByColumn', 'isRowExpandLoaded', 'clearRowExpandLoaded', 'reloadRowExpand', 'reloadRowExpand', 'toggleRowExpand', 'setAllRowExpand', 'setRowExpand', 'isExpandByRow', 'isRowExpandByRow', 'clearRowExpand', 'clearRowExpandReserve', 'getRowExpandRecords', 'getTreeExpandRecords', 'isTreeExpandLoaded', 'clearTreeExpandLoaded', 'reloadTreeExpand', 'reloadTreeChilds', 'toggleTreeExpand', 'setAllTreeExpand', 'setTreeExpand', 'isTreeExpandByRow', 'clearTreeExpand', 'clearTreeExpandReserve', 'getScroll', 'scrollTo', 'scrollToRow', 'scrollToColumn', 'clearScroll', 'updateFooter', 'updateStatus', 'setMergeCells', 'removeInsertRow', 'removeMergeCells', 'getMergeCells', 'clearMergeCells', 'setMergeFooterItems', 'removeMergeFooterItems', 'getMergeFooterItems', 'clearMergeFooterItems', 'getCustomStoreData', 'setRowGroupExpand', 'setAllRowGroupExpand', 'clearRowGroupExpand', 'isRowGroupExpandByRow', 'isRowGroupRecord', 'isAggregateRecord', 'isAggregateExpandByRow', 'getAggregateContentByRow', 'getAggregateRowChildren', 'setRowGroups', 'clearRowGroups', 'openTooltip', 'moveColumnTo', 'moveRowTo', 'getCellLabel', 'getCellElement', 'focus', 'blur', 'connect', 'connectToolbar'];
34
+ const tableComponentMethodKeys = ['clearAll', 'syncData', 'updateData', 'loadData', 'reloadData', 'reloadRow', 'loadColumn', 'reloadColumn', 'getRowNode', 'getColumnNode', 'getRowIndex', 'getVTRowIndex', 'getVMRowIndex', 'getColumnIndex', 'getVTColumnIndex', 'getVMColumnIndex', 'setRow', 'createData', 'createRow', 'revertData', 'clearData', 'isRemoveByRow', 'isInsertByRow', 'isUpdateByRow', 'getColumns', 'getColumnById', 'getColumnByField', 'getTableColumn', 'getFullColumns', 'getData', 'getCheckboxRecords', 'getParentRow', 'getTreeRowChildren', 'getTreeParentRow', 'getRowSeq', 'getRowById', 'getRowid', 'getTableData', 'getFullData', 'setColumnFixed', 'clearColumnFixed', 'setColumnWidth', 'getColumnWidth', 'recalcRowHeight', 'setRowHeightConf', 'getRowHeightConf', 'setRowHeight', 'getRowHeight', 'hideColumn', 'showColumn', 'resetColumn', 'refreshColumn', 'refreshScroll', 'recalculate', 'closeTooltip', 'isAllCheckboxChecked', 'isAllCheckboxIndeterminate', 'getCheckboxIndeterminateRecords', 'setCheckboxRow', 'setCheckboxRowKey', 'isCheckedByCheckboxRow', 'isCheckedByCheckboxRowKey', 'isIndeterminateByCheckboxRow', 'isIndeterminateByCheckboxRowKey', 'toggleCheckboxRow', 'setAllCheckboxRow', 'getRadioReserveRecord', 'clearRadioReserve', 'getCheckboxReserveRecords', 'clearCheckboxReserve', 'toggleAllCheckboxRow', 'clearCheckboxRow', 'setCurrentRow', 'isCheckedByRadioRow', 'isCheckedByRadioRowKey', 'setRadioRow', 'setRadioRowKey', 'clearCurrentRow', 'clearRadioRow', 'getCurrentRecord', 'getRadioRecord', 'getCurrentColumn', 'setCurrentColumn', 'clearCurrentColumn', 'setPendingRow', 'togglePendingRow', 'hasPendingByRow', 'isPendingByRow', 'getPendingRecords', 'clearPendingRow', 'setFilterByEvent', 'sort', 'setSort', 'setSortByEvent', 'clearSort', 'clearSortByEvent', 'isSort', 'getSortColumns', 'closeFilter', 'isFilter', 'clearFilterByEvent', 'isActiveFilterByColumn', 'isRowExpandLoaded', 'clearRowExpandLoaded', 'reloadRowExpand', 'reloadRowExpand', 'toggleRowExpand', 'setAllRowExpand', 'setRowExpand', 'isExpandByRow', 'isRowExpandByRow', 'clearRowExpand', 'clearRowExpandReserve', 'getRowExpandRecords', 'getTreeExpandRecords', 'isTreeExpandLoaded', 'clearTreeExpandLoaded', 'reloadTreeExpand', 'reloadTreeChilds', 'toggleTreeExpand', 'setAllTreeExpand', 'setTreeExpand', 'isTreeExpandByRow', 'clearTreeExpand', 'clearTreeExpandReserve', 'getScroll', 'scrollTo', 'scrollToRow', 'scrollToColumn', 'clearScroll', 'updateFooter', 'updateStatus', 'setMergeCells', 'removeInsertRow', 'removeMergeCells', 'getMergeCells', 'clearMergeCells', 'setMergeFooterItems', 'removeMergeFooterItems', 'getMergeFooterItems', 'clearMergeFooterItems', 'getCustomStoreData', 'setRowGroupExpand', 'setRowGroupExpandByField', 'setAllRowGroupExpand', 'clearRowGroupExpand', 'isRowGroupExpandByRow', 'isRowGroupRecord', 'isAggregateRecord', 'isAggregateExpandByRow', 'getAggregateContentByRow', 'getAggregateRowChildren', 'setRowGroups', 'clearRowGroups', 'openTooltip', 'moveColumnTo', 'moveRowTo', 'getCellLabel', 'getCellElement', 'focus', 'blur', 'connect', 'connectToolbar'];
35
35
  function createInternalData() {
36
36
  return {};
37
37
  }