vxe-table 4.16.0-beta.8 → 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 (42) hide show
  1. package/es/grid/src/grid.js +1 -1
  2. package/es/locale/lang/en-US.js +12 -12
  3. package/es/style.css +1 -1
  4. package/es/table/module/edit/hook.js +55 -17
  5. package/es/table/src/emits.js +2 -0
  6. package/es/table/src/store.js +8 -0
  7. package/es/table/src/table.js +327 -36
  8. package/es/ui/index.js +1 -1
  9. package/es/ui/src/log.js +1 -1
  10. package/lib/grid/src/grid.js +1 -1
  11. package/lib/grid/src/grid.min.js +1 -1
  12. package/lib/index.umd.js +91 -34
  13. package/lib/index.umd.min.js +1 -1
  14. package/lib/locale/lang/en-US.js +12 -12
  15. package/lib/locale/lang/en-US.min.js +1 -1
  16. package/lib/locale/lang/en-US.umd.js +12 -12
  17. package/lib/style.css +1 -1
  18. package/lib/table/module/edit/hook.js +54 -15
  19. package/lib/table/module/edit/hook.min.js +1 -1
  20. package/lib/table/src/emits.js +1 -1
  21. package/lib/table/src/emits.min.js +1 -1
  22. package/lib/table/src/store.js +15 -0
  23. package/lib/table/src/store.min.js +1 -0
  24. package/lib/table/src/table.js +24 -15
  25. package/lib/table/src/table.min.js +1 -1
  26. package/lib/ui/index.js +1 -1
  27. package/lib/ui/index.min.js +1 -1
  28. package/lib/ui/src/log.js +1 -1
  29. package/lib/ui/src/log.min.js +1 -1
  30. package/package.json +2 -2
  31. package/packages/grid/src/grid.ts +1 -1
  32. package/packages/locale/lang/en-US.ts +12 -12
  33. package/packages/table/module/edit/hook.ts +55 -19
  34. package/packages/table/src/emits.ts +2 -0
  35. package/packages/table/src/store.ts +14 -0
  36. package/packages/table/src/table.ts +330 -33
  37. /package/es/{iconfont.1755775667994.ttf → iconfont.1756272578850.ttf} +0 -0
  38. /package/es/{iconfont.1755775667994.woff → iconfont.1756272578850.woff} +0 -0
  39. /package/es/{iconfont.1755775667994.woff2 → iconfont.1756272578850.woff2} +0 -0
  40. /package/lib/{iconfont.1755775667994.ttf → iconfont.1756272578850.ttf} +0 -0
  41. /package/lib/{iconfont.1755775667994.woff → iconfont.1756272578850.woff} +0 -0
  42. /package/lib/{iconfont.1755775667994.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'
@@ -40,6 +41,11 @@ const customStorageKey = 'VXE_CUSTOM_STORE'
40
41
  const maxYHeight = 5e6
41
42
  const maxXWidth = 5e6
42
43
 
44
+ let crossTableDragRowObj: {
45
+ $oldTable: VxeTableConstructor & VxeTablePrivateMethods
46
+ $newTable: (VxeTableConstructor & VxeTablePrivateMethods) | null
47
+ } | null = null
48
+
43
49
  export default defineVxeComponent({
44
50
  name: 'VxeTable',
45
51
  props: tableProps,
@@ -62,6 +68,8 @@ export default defineVxeComponent({
62
68
 
63
69
  const { computeSize } = useFns.useSize(props)
64
70
 
71
+ const crossTableDragRowInfo = getCrossTableDragRowInfo()
72
+
65
73
  const reactData = reactive<TableReactData>({
66
74
  // 低性能的静态列
67
75
  staticColumns: [],
@@ -302,9 +310,9 @@ export default defineVxeComponent({
302
310
 
303
311
  isCustomStatus: false,
304
312
 
305
- isDragRowMove: false,
313
+ isCrossDragRow: false,
306
314
  dragRow: null,
307
- isDragColMove: false,
315
+ isCrossDragCol: false,
308
316
  dragCol: null,
309
317
  dragTipText: '',
310
318
 
@@ -2318,22 +2326,27 @@ export default defineVxeComponent({
2318
2326
  emptyPlaceholderElem.style.height = bodyWrapperElem ? `${bodyWrapperElem.offsetHeight - osbHeight}px` : ''
2319
2327
  }
2320
2328
 
2329
+ const scrollbarXConf = scrollbarOpts.x || {}
2321
2330
  const scrollbarXToTop = computeScrollbarXToTop.value
2331
+ const scrollbarYConf = scrollbarOpts.y || {}
2322
2332
  const scrollbarYToLeft = computeScrollbarYToLeft.value
2323
2333
 
2324
2334
  let xScrollbarVisible = overflowX ? 'visible' : 'hidden'
2325
- if ($xeGanttView) {
2335
+ if (scrollbarXConf.visible === 'visible' || $xeGanttView) {
2326
2336
  osbHeight = scrollbarHeight
2327
2337
  xScrollbarVisible = 'visible'
2328
- } else if (scrollbarOpts.x && scrollbarOpts.x.visible === false) {
2338
+ } else if (scrollbarXConf.visible === 'hidden' || scrollbarXConf.visible === false) {
2329
2339
  osbHeight = 0
2330
2340
  xScrollbarVisible = 'hidden'
2331
2341
  }
2332
2342
 
2333
2343
  let yScrollbarVisible = overflowY ? 'visible' : 'hidden'
2334
- if ((scrollbarOpts.y && scrollbarOpts.y.visible === false) || ($xeGanttView && !scrollbarYToLeft)) {
2344
+ if ((scrollbarYConf.visible === 'hidden' || scrollbarYConf.visible === false) || ($xeGanttView && !scrollbarYToLeft)) {
2335
2345
  osbWidth = 0
2336
2346
  yScrollbarVisible = 'hidden'
2347
+ } else if (scrollbarYConf.visible === 'visible') {
2348
+ osbWidth = scrollbarWidth
2349
+ yScrollbarVisible = 'visible'
2337
2350
  }
2338
2351
 
2339
2352
  let tbHeight = 0
@@ -5079,7 +5092,9 @@ export default defineVxeComponent({
5079
5092
  }
5080
5093
  }
5081
5094
  }
5082
- return $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true)
5095
+ const rest = $xeTable.handleRowDragSwapEvent(null, true, dragRow, prevDragRow, dragPos || defPos, dragToChild === true)
5096
+ clearRowDragData()
5097
+ return rest
5083
5098
  },
5084
5099
  /**
5085
5100
  * 获取表格的全量列
@@ -7776,12 +7791,18 @@ export default defineVxeComponent({
7776
7791
  }
7777
7792
  }
7778
7793
 
7794
+ const clearCrossTableDragStatus = () => {
7795
+ crossTableDragRowObj = null
7796
+ crossTableDragRowInfo.row = null
7797
+ }
7798
+
7779
7799
  const clearDragStatus = () => {
7780
7800
  const { dragRow, dragCol } = reactData
7781
7801
  if (dragRow || dragCol) {
7782
7802
  clearColDropOrigin()
7783
7803
  clearRowDropOrigin()
7784
7804
  hideDropTip()
7805
+ clearCrossTableDragStatus()
7785
7806
  reactData.dragRow = null
7786
7807
  reactData.dragCol = null
7787
7808
  }
@@ -7973,6 +7994,25 @@ export default defineVxeComponent({
7973
7994
  }
7974
7995
  }
7975
7996
 
7997
+ const clearRowDragData = () => {
7998
+ let wrapperEl = refElem.value
7999
+ const dtClss = ['.vxe-body--row']
8000
+ if ($xeGantt) {
8001
+ const { refGanttContainerElem } = $xeGantt.getRefMaps()
8002
+ const ganttContainerElem = refGanttContainerElem.value
8003
+ if (ganttContainerElem) {
8004
+ wrapperEl = ganttContainerElem
8005
+ }
8006
+ dtClss.push('.vxe-gantt-view--body-row', '.vxe-gantt-view--chart-row')
8007
+ }
8008
+ hideDropTip()
8009
+ clearRowDropOrigin()
8010
+ clearRowAnimate(wrapperEl, dtClss)
8011
+ internalData.prevDragToChild = false
8012
+ reactData.dragRow = null
8013
+ reactData.dragCol = null
8014
+ }
8015
+
7976
8016
  /**
7977
8017
  * 处理显示 tooltip
7978
8018
  * @param {Event} evnt 事件
@@ -10010,6 +10050,218 @@ export default defineVxeComponent({
10010
10050
  }
10011
10051
  return Promise.resolve(errRest)
10012
10052
  },
10053
+ /**
10054
+ * 处理跨表拖拽完成
10055
+ */
10056
+ handleCrossTableRowDragFinishEvent (evnt) {
10057
+ const { tableData } = reactData
10058
+ const { fullAllDataRowIdData } = internalData
10059
+ const rowOpts = computeRowOpts.value
10060
+ const cellOpts = computeCellOpts.value
10061
+ const defaultRowHeight = computeDefaultRowHeight.value
10062
+ const rowDragOpts = computeRowDragOpts.value
10063
+ const { animation, isCrossTableDrag } = rowDragOpts
10064
+ const treeOpts = computeTreeOpts.value
10065
+ const { mapChildrenField } = treeOpts
10066
+ const el = refElem.value
10067
+ if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
10068
+ const { row: dragRow } = crossTableDragRowInfo
10069
+ if (dragRow) {
10070
+ const dragRowid = getRowid($xeTable, dragRow)
10071
+ const dragRowRest = fullAllDataRowIdData[dragRowid]
10072
+ let dragRowHeight = 0
10073
+ let rsIndex = -1
10074
+ if (dragRowRest) {
10075
+ if (animation) {
10076
+ dragRowHeight = getCellRestHeight(dragRowRest, cellOpts, rowOpts, defaultRowHeight)
10077
+ }
10078
+ rsIndex = dragRowRest.$index
10079
+ }
10080
+ const dragRangeList = rsIndex > -1 && rsIndex < tableData.length - 1 ? tableData.slice(rsIndex + 1) : []
10081
+ const dragList = XEUtils.toTreeArray([dragRow], {
10082
+ updated: true,
10083
+ children: mapChildrenField
10084
+ })
10085
+ $xeTable.remove(dragList).then(() => {
10086
+ if (animation && dragRowHeight && dragRangeList.length) {
10087
+ const $xeGanttView = internalData.xeGanttView
10088
+ let wrapperEl = el
10089
+ if ($xeGantt && $xeGanttView) {
10090
+ const { refGanttContainerElem } = $xeGantt.getRefMaps()
10091
+ const ganttContainerElem = refGanttContainerElem.value
10092
+ if (ganttContainerElem) {
10093
+ wrapperEl = ganttContainerElem
10094
+ }
10095
+ }
10096
+
10097
+ const dtClss: string[] = []
10098
+ dragRangeList.forEach(row => {
10099
+ const rowid = getRowid($xeTable, row)
10100
+ dtClss.push(`.vxe-body--row[rowid="${rowid}"]`)
10101
+ if ($xeGantt) {
10102
+ dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`)
10103
+ }
10104
+ })
10105
+ const dtTrList = wrapperEl.querySelectorAll<HTMLElement>(dtClss.join(','))
10106
+ moveRowAnimateToTb(dtTrList, dragRowHeight)
10107
+ }
10108
+ })
10109
+ dispatchEvent('row-remove-dragend', {
10110
+ row: dragRow
10111
+ }, evnt)
10112
+ clearRowDragData()
10113
+ clearCrossTableDragStatus()
10114
+ }
10115
+ }
10116
+ },
10117
+ /**
10118
+ * 处理跨表拖至新的空表
10119
+ */
10120
+ handleCrossTableRowDragoverEmptyEvent (evnt) {
10121
+ const { tableData } = reactData
10122
+ const rowDragOpts = computeRowDragOpts.value
10123
+ const { isCrossTableDrag } = rowDragOpts
10124
+ if (isCrossTableDrag && crossTableDragRowObj && !tableData.length) {
10125
+ const { $oldTable } = crossTableDragRowObj
10126
+ if ($oldTable && $oldTable.xID !== $xeTable.xID) {
10127
+ evnt.preventDefault()
10128
+ crossTableDragRowObj.$newTable = $xeTable
10129
+ internalData.prevDragRow = null
10130
+ }
10131
+ }
10132
+ },
10133
+ /**
10134
+ * 处理跨表拖插入
10135
+ */
10136
+ handleCrossTableRowDragInsertEvent (evnt) {
10137
+ const { treeConfig } = props
10138
+ const { prevDragRow, prevDragPos, prevDragToChild } = internalData
10139
+ const rowDragOpts = computeRowDragOpts.value
10140
+ const { animation, isSelfToChildDrag, isCrossTableDrag, dragEndMethod, dragToChildMethod } = rowDragOpts
10141
+ const rowOpts = computeRowOpts.value
10142
+ const cellOpts = computeCellOpts.value
10143
+ const defaultRowHeight = computeDefaultRowHeight.value
10144
+ const treeOpts = computeTreeOpts.value
10145
+ const { parentField, mapChildrenField } = treeOpts
10146
+ const childrenField = treeOpts.children || treeOpts.childrenField
10147
+ // 跨表拖拽
10148
+ if (isCrossTableDrag && crossTableDragRowObj && crossTableDragRowInfo) {
10149
+ const { row: oldRow } = crossTableDragRowInfo
10150
+ const { $oldTable } = crossTableDragRowObj
10151
+ const el = refElem.value
10152
+ if ($oldTable && oldRow) {
10153
+ const dragRow = oldRow
10154
+ let dragOffsetIndex = -1
10155
+ if (prevDragRow) {
10156
+ dragOffsetIndex = prevDragPos === 'bottom' ? 1 : 0
10157
+ }
10158
+ const dragParams = {
10159
+ oldRow: dragRow,
10160
+ newRow: prevDragRow,
10161
+ dragRow,
10162
+ dragPos: prevDragPos as 'top' | 'bottom',
10163
+ dragToChild: !!prevDragToChild,
10164
+ offsetIndex: dragOffsetIndex as 0 | 1
10165
+ }
10166
+ const isDragToChildFlag = isSelfToChildDrag && dragToChildMethod ? dragToChildMethod(dragParams) : prevDragToChild
10167
+ const errRest = {
10168
+ status: false
10169
+ }
10170
+ Promise.resolve(dragEndMethod ? dragEndMethod(dragParams) : true).then((status) => {
10171
+ if (!status) {
10172
+ return errRest
10173
+ }
10174
+ let insertRest: Promise<any> = Promise.resolve()
10175
+ if (treeConfig) {
10176
+ const dragList = XEUtils.toTreeArray([dragRow], {
10177
+ updated: true,
10178
+ children: mapChildrenField
10179
+ })
10180
+ $oldTable.handleCrossTableRowDragFinishEvent(evnt)
10181
+ if (prevDragRow) {
10182
+ dragRow[parentField] = prevDragRow[parentField]
10183
+ } else {
10184
+ dragRow[parentField] = null
10185
+ }
10186
+ dragList.forEach(row => {
10187
+ row[childrenField] = undefined
10188
+ row[mapChildrenField] = undefined
10189
+ })
10190
+ if (prevDragRow) {
10191
+ if (prevDragPos === 'bottom') {
10192
+ insertRest = $xeTable.insertNextAt(dragList, prevDragRow)
10193
+ } else {
10194
+ insertRest = $xeTable.insertAt(dragList, prevDragRow)
10195
+ }
10196
+ } else {
10197
+ insertRest = $xeTable.insert(dragList)
10198
+ }
10199
+ } else {
10200
+ $oldTable.handleCrossTableRowDragFinishEvent(evnt)
10201
+ if (prevDragRow) {
10202
+ if (prevDragPos === 'bottom') {
10203
+ insertRest = $xeTable.insertNextAt(dragRow, prevDragRow)
10204
+ } else {
10205
+ insertRest = $xeTable.insertAt(dragRow, prevDragRow)
10206
+ }
10207
+ } else {
10208
+ insertRest = $xeTable.insert(dragRow)
10209
+ }
10210
+ }
10211
+ dispatchEvent('row-insert-dragend', {
10212
+ oldRow,
10213
+ newRow: prevDragRow,
10214
+ dragRow,
10215
+ dragPos: prevDragPos as any,
10216
+ dragToChild: isDragToChildFlag,
10217
+ offsetIndex: dragOffsetIndex
10218
+ }, evnt)
10219
+ clearRowDragData()
10220
+
10221
+ insertRest.then(() => {
10222
+ const { tableData } = reactData
10223
+ const { fullAllDataRowIdData } = internalData
10224
+ const oldRowid = getRowid($xeTable, dragRow)
10225
+ const oldRowRest = fullAllDataRowIdData[oldRowid]
10226
+ let dragRowHeight = 0
10227
+ let rsIndex = -1
10228
+ if (oldRowRest) {
10229
+ if (animation) {
10230
+ dragRowHeight = getCellRestHeight(oldRowRest, cellOpts, rowOpts, defaultRowHeight)
10231
+ }
10232
+ rsIndex = oldRowRest.$index
10233
+ }
10234
+ const dragRangeList = rsIndex > -1 ? tableData.slice(rsIndex) : []
10235
+ if (animation && dragRowHeight && dragRangeList.length) {
10236
+ const $xeGanttView = internalData.xeGanttView
10237
+ let wrapperEl = el
10238
+ if ($xeGantt && $xeGanttView) {
10239
+ const { refGanttContainerElem } = $xeGantt.getRefMaps()
10240
+ const ganttContainerElem = refGanttContainerElem.value
10241
+ if (ganttContainerElem) {
10242
+ wrapperEl = ganttContainerElem
10243
+ }
10244
+ }
10245
+
10246
+ const dtClss: string[] = []
10247
+ dragRangeList.forEach(row => {
10248
+ const rowid = getRowid($xeTable, row)
10249
+ dtClss.push(`.vxe-body--row[rowid="${rowid}"]`)
10250
+ if ($xeGantt) {
10251
+ dtClss.push(`.vxe-gantt-view--body-row[rowid="${rowid}"]`, `.vxe-gantt-view--chart-row[rowid="${rowid}"]`)
10252
+ }
10253
+ })
10254
+ const dtTrList = wrapperEl.querySelectorAll<HTMLElement>(dtClss.join(','))
10255
+ moveRowAnimateToTb(dtTrList, -dragRowHeight)
10256
+ }
10257
+ })
10258
+ })
10259
+ }
10260
+ }
10261
+ },
10262
+ hideCrossTableRowDropClearStatus () {
10263
+ hideDropTip()
10264
+ },
10013
10265
  handleRowDragDragendEvent (evnt) {
10014
10266
  const { treeConfig } = props
10015
10267
  const { fullAllDataRowIdData, prevDragToChild } = internalData
@@ -10018,7 +10270,16 @@ export default defineVxeComponent({
10018
10270
  const { lazy } = treeOpts
10019
10271
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
10020
10272
  const { prevDragRow, prevDragPos } = internalData
10021
- let wrapperEl = refElem.value
10273
+ const rowDragOpts = computeRowDragOpts.value
10274
+ const { isCrossTableDrag } = rowDragOpts
10275
+ // 跨表拖拽
10276
+ if (isCrossTableDrag && crossTableDragRowObj) {
10277
+ const { $newTable } = crossTableDragRowObj
10278
+ if ($newTable && $newTable.xID !== $xeTable.xID) {
10279
+ $newTable.handleCrossTableRowDragInsertEvent(evnt)
10280
+ return
10281
+ }
10282
+ }
10022
10283
  if (treeConfig && lazy && prevDragToChild) {
10023
10284
  // 懒加载
10024
10285
  const newRowid = getRowid($xeTable, prevDragRow)
@@ -10033,21 +10294,8 @@ export default defineVxeComponent({
10033
10294
  } else {
10034
10295
  $xeTable.handleRowDragSwapEvent(evnt, true, dragRow, prevDragRow, prevDragPos, prevDragToChild)
10035
10296
  }
10036
- const dtClss = ['.vxe-body--row']
10037
- if ($xeGantt) {
10038
- const { refGanttContainerElem } = $xeGantt.getRefMaps()
10039
- const ganttContainerElem = refGanttContainerElem.value
10040
- if (ganttContainerElem) {
10041
- wrapperEl = ganttContainerElem
10042
- }
10043
- dtClss.push('.vxe-gantt-view--body-row', '.vxe-gantt-view--chart-row')
10044
- }
10045
- hideDropTip()
10046
- clearRowDropOrigin()
10047
- clearRowAnimate(wrapperEl, dtClss)
10048
- internalData.prevDragToChild = false
10049
- reactData.dragRow = null
10050
- reactData.dragCol = null
10297
+ clearRowDragData()
10298
+ clearCrossTableDragStatus()
10051
10299
  },
10052
10300
  handleRowDragDragoverEvent (evnt) {
10053
10301
  const { treeConfig } = props
@@ -10057,8 +10305,8 @@ export default defineVxeComponent({
10057
10305
  const { lazy, transform, parentField } = treeOpts
10058
10306
  const hasChildField = treeOpts.hasChild || treeOpts.hasChildField
10059
10307
  const rowDragOpts = computeRowDragOpts.value
10060
- const { isPeerDrag, isCrossDrag, isToChildDrag } = rowDragOpts
10061
- if (!dragRow) {
10308
+ const { isPeerDrag, isCrossDrag, isToChildDrag, isCrossTableDrag } = rowDragOpts
10309
+ if (!dragRow && !(isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj)) {
10062
10310
  evnt.preventDefault()
10063
10311
  return
10064
10312
  }
@@ -10067,16 +10315,37 @@ export default defineVxeComponent({
10067
10315
  const rowid = trEl.getAttribute('rowid') || ''
10068
10316
  const rest = fullAllDataRowIdData[rowid]
10069
10317
  if (rest) {
10318
+ evnt.preventDefault()
10070
10319
  const row = rest.row
10071
10320
  const rowid = getRowid($xeTable, row)
10072
10321
  const rowRest = fullAllDataRowIdData[rowid]
10073
- evnt.preventDefault()
10074
- const { dragRow } = reactData
10075
10322
  const offsetY = evnt.clientY - trEl.getBoundingClientRect().y
10076
10323
  const dragPos = offsetY < trEl.clientHeight / 2 ? 'top' : 'bottom'
10077
10324
  internalData.prevDragToChild = !!(treeConfig && transform && (isCrossDrag && isToChildDrag) && isControlKey)
10078
10325
  internalData.prevDragRow = row
10079
10326
  internalData.prevDragPos = dragPos
10327
+ // 跨表拖拽
10328
+ if (isCrossTableDrag && (!treeConfig || isCrossDrag) && crossTableDragRowObj) {
10329
+ const { $oldTable, $newTable } = crossTableDragRowObj
10330
+ if ($oldTable) {
10331
+ const oldTableReactData = $oldTable.reactData
10332
+ if ($oldTable.xID === $xeTable.xID) {
10333
+ if ($newTable) {
10334
+ $newTable.hideCrossTableRowDropClearStatus()
10335
+ }
10336
+ reactData.isCrossDragRow = false
10337
+ oldTableReactData.isCrossDragRow = false
10338
+ crossTableDragRowObj.$newTable = null
10339
+ } else {
10340
+ $oldTable.hideCrossTableRowDropClearStatus()
10341
+ oldTableReactData.isCrossDragRow = true
10342
+ reactData.dragTipText = oldTableReactData.dragTipText
10343
+ crossTableDragRowObj.$newTable = $xeTable
10344
+ showDropTip(evnt, trEl, null, true, dragPos)
10345
+ return
10346
+ }
10347
+ }
10348
+ }
10080
10349
  if ($xeTable.eqRow(dragRow, row) ||
10081
10350
  (isControlKey && treeConfig && lazy && row[hasChildField] && rowRest && !rowRest.treeLoaded) ||
10082
10351
  (!isCrossDrag && treeConfig && transform && (isPeerDrag ? dragRow[parentField] !== row[parentField] : rest.level))
@@ -10096,7 +10365,7 @@ export default defineVxeComponent({
10096
10365
  evnt.stopPropagation()
10097
10366
  const { dragConfig } = props
10098
10367
  const rowDragOpts = computeRowDragOpts.value
10099
- const { trigger, dragStartMethod } = rowDragOpts
10368
+ const { isCrossTableDrag, trigger, dragStartMethod } = rowDragOpts
10100
10369
  const { row } = params
10101
10370
  const dragEl = evnt.currentTarget as HTMLElement
10102
10371
  const tdEl = trigger === 'cell' || trigger === 'row' ? dragEl : dragEl.parentElement?.parentElement as HTMLElement
@@ -10107,10 +10376,16 @@ export default defineVxeComponent({
10107
10376
  trEl.draggable = false
10108
10377
  reactData.dragRow = null
10109
10378
  reactData.dragCol = null
10379
+ clearCrossTableDragStatus()
10110
10380
  hideDropTip()
10111
10381
  return
10112
10382
  }
10383
+ if (isCrossTableDrag) {
10384
+ crossTableDragRowInfo.row = row
10385
+ crossTableDragRowObj = { $oldTable: $xeTable, $newTable: null }
10386
+ }
10113
10387
  reactData.dragRow = row
10388
+ reactData.isCrossDragRow = false
10114
10389
  reactData.dragCol = null
10115
10390
  trEl.draggable = true
10116
10391
  updateRowDropOrigin(row)
@@ -10435,6 +10710,7 @@ export default defineVxeComponent({
10435
10710
  internalData.prevDragToChild = false
10436
10711
  reactData.dragRow = null
10437
10712
  reactData.dragCol = null
10713
+ clearCrossTableDragStatus()
10438
10714
  },
10439
10715
  handleHeaderCellDragDragoverEvent (evnt) {
10440
10716
  const { dragCol } = reactData
@@ -10513,12 +10789,14 @@ export default defineVxeComponent({
10513
10789
  thEl.draggable = false
10514
10790
  reactData.dragRow = null
10515
10791
  reactData.dragCol = null
10792
+ clearCrossTableDragStatus()
10516
10793
  hideDropTip()
10517
10794
  return
10518
10795
  }
10519
10796
  reactData.dragCol = column
10520
10797
  reactData.dragRow = null
10521
10798
  thEl.draggable = true
10799
+ clearCrossTableDragStatus()
10522
10800
  updateColDropOrigin(column)
10523
10801
  updateColDropTipContent(thEl)
10524
10802
  dispatchEvent('column-dragstart', params, evnt)
@@ -10526,6 +10804,7 @@ export default defineVxeComponent({
10526
10804
  handleHeaderCellDragMouseupEvent () {
10527
10805
  clearColDropOrigin()
10528
10806
  hideDropTip()
10807
+ clearCrossTableDragStatus()
10529
10808
  reactData.dragRow = null
10530
10809
  reactData.dragCol = null
10531
10810
  },
@@ -11428,9 +11707,10 @@ export default defineVxeComponent({
11428
11707
  const rTipSlot = rowDragSlots.tip || (dragConfig && dragConfig.slots ? dragConfig.slots.rowTip : null)
11429
11708
  const columnDragSlots = columnDragOpts.slots || {}
11430
11709
  const cTipSlot = columnDragSlots.tip
11710
+ const dRow = dragRow || (rowDragOpts.isCrossTableDrag ? crossTableDragRowInfo.row : null)
11431
11711
 
11432
- if (dragRow && rTipSlot) {
11433
- return callSlot(rTipSlot, { row: dragRow })
11712
+ if (dRow && rTipSlot) {
11713
+ return callSlot(rTipSlot, { row: dRow })
11434
11714
  }
11435
11715
  if (dragCol && cTipSlot) {
11436
11716
  return callSlot(cTipSlot, { column: dragCol })
@@ -11444,6 +11724,7 @@ export default defineVxeComponent({
11444
11724
  const columnOpts = computeColumnOpts.value
11445
11725
  const rowDragOpts = computeRowDragOpts.value
11446
11726
  const columnDragOpts = computeColumnDragOpts.value
11727
+ const dRow = dragRow || (rowDragOpts.isCrossTableDrag ? crossTableDragRowInfo.row : null)
11447
11728
 
11448
11729
  if (rowOpts.drag || columnOpts.drag) {
11449
11730
  return h('div', {
@@ -11461,7 +11742,7 @@ export default defineVxeComponent({
11461
11742
  'is--guides': columnDragOpts.showGuidesStatus
11462
11743
  }]
11463
11744
  }),
11464
- (dragRow && rowDragOpts.showDragTip) || (dragCol && columnDragOpts.showDragTip)
11745
+ (dRow && rowDragOpts.showDragTip) || (dragCol && columnDragOpts.showDragTip)
11465
11746
  ? h('div', {
11466
11747
  ref: refDragTipElem,
11467
11748
  class: 'vxe-table--drag-sort-tip'
@@ -11473,7 +11754,7 @@ export default defineVxeComponent({
11473
11754
  class: 'vxe-table--drag-sort-tip-status'
11474
11755
  }, [
11475
11756
  h('span', {
11476
- class: ['vxe-table--drag-sort-tip-normal-status', dragRow ? getIcon().TABLE_DRAG_STATUS_ROW : getIcon().TABLE_DRAG_STATUS_COLUMN]
11757
+ class: ['vxe-table--drag-sort-tip-normal-status', dRow ? getIcon().TABLE_DRAG_STATUS_ROW : getIcon().TABLE_DRAG_STATUS_COLUMN]
11477
11758
  }),
11478
11759
  h('span', {
11479
11760
  class: ['vxe-table--drag-sort-tip-sub-status', getIcon().TABLE_DRAG_STATUS_SUB_ROW]
@@ -11731,6 +12012,7 @@ export default defineVxeComponent({
11731
12012
  const { teleportToWrapperElem } = internalData
11732
12013
  const { leftList, rightList } = columnStore
11733
12014
  const loadingSlot = slots.loading
12015
+ const rowDragOpts = computeRowDragOpts.value
11734
12016
  const tableTipConfig = computeTableTipConfig.value
11735
12017
  const validTipConfig = computeValidTipConfig.value
11736
12018
  const validOpts = computeValidOpts.value
@@ -11750,6 +12032,11 @@ export default defineVxeComponent({
11750
12032
  const columnDragOpts = computeColumnDragOpts.value
11751
12033
  const scrollbarXToTop = computeScrollbarXToTop.value
11752
12034
  const scrollbarYToLeft = computeScrollbarYToLeft.value
12035
+ const { isCrossTableDrag } = rowDragOpts
12036
+ const rwOns: Record<string, any> = {}
12037
+ if (isCrossTableDrag && !tableData.length) {
12038
+ rwOns.onDragover = $xeTable.handleCrossTableRowDragoverEmptyEvent
12039
+ }
11753
12040
  return h('div', {
11754
12041
  ref: refElem,
11755
12042
  class: ['vxe-table', 'vxe-table--render-default', `tid_${xID}`, `border--${tableBorder}`, `sx-pos--${scrollbarXToTop ? 'top' : 'bottom'}`, `sy-pos--${scrollbarYToLeft ? 'left' : 'right'}`, {
@@ -11811,7 +12098,8 @@ export default defineVxeComponent({
11811
12098
  ]),
11812
12099
  h('div', {
11813
12100
  key: 'tw',
11814
- class: 'vxe-table--render-wrapper'
12101
+ class: 'vxe-table--render-wrapper',
12102
+ ...rwOns
11815
12103
  }, scrollbarXToTop
11816
12104
  ? [
11817
12105
  renderScrollX(),
@@ -12192,6 +12480,11 @@ export default defineVxeComponent({
12192
12480
  })
12193
12481
 
12194
12482
  onDeactivated(() => {
12483
+ const { filterStore } = reactData
12484
+ if (filterStore.visible) {
12485
+ $xeTable.clearFilter()
12486
+ }
12487
+ $xeTable.closeTooltip()
12195
12488
  internalData.isActivated = false
12196
12489
  tablePrivateMethods.preventEvent(null, 'deactivated', { $table: $xeTable })
12197
12490
  })
@@ -12235,6 +12528,7 @@ export default defineVxeComponent({
12235
12528
  const currentColumnOpts = computeCurrentColumnOpts.value
12236
12529
  const keyboardOpts = computeKeyboardOpts.value
12237
12530
  const aggregateOpts = computeAggregateOpts.value
12531
+ const rowDragOpts = computeRowDragOpts.value
12238
12532
 
12239
12533
  if (props.rowId) {
12240
12534
  warnLog('vxe.error.delProp', ['row-id', 'row-config.keyField'])
@@ -12339,7 +12633,10 @@ export default defineVxeComponent({
12339
12633
  }
12340
12634
  }
12341
12635
  if (treeConfig && rowOpts.drag && !treeOpts.transform) {
12342
- errLog('vxe.error.notSupportProp', ['column-config.drag', 'tree-config.transform=false', 'tree-config.transform=true'])
12636
+ errLog('vxe.error.notSupportProp', ['row-config.drag', 'tree-config.transform=false', 'tree-config.transform=true'])
12637
+ }
12638
+ if (treeConfig && rowDragOpts.isCrossTableDrag && !rowDragOpts.isCrossDrag) {
12639
+ errLog('vxe.error.reqSupportProp', ['tree-config & row-drag-config.isCrossTableDrag', 'row-drag-config.isCrossDrag'])
12343
12640
  }
12344
12641
  if (props.dragConfig) {
12345
12642
  warnLog('vxe.error.delProp', ['drag-config', 'row-drag-config'])