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.
- package/es/grid/src/grid.js +1 -1
- package/es/style.css +1 -1
- package/es/table/module/edit/hook.js +55 -17
- package/es/table/src/emits.js +2 -0
- package/es/table/src/store.js +8 -0
- package/es/table/src/table.js +322 -36
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/lib/grid/src/grid.js +1 -1
- package/lib/grid/src/grid.min.js +1 -1
- package/lib/index.umd.js +91 -34
- package/lib/index.umd.min.js +1 -1
- package/lib/style.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/emits.js +1 -1
- package/lib/table/src/emits.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 +24 -15
- package/lib/table/src/table.min.js +1 -1
- package/lib/ui/index.js +1 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/package.json +2 -2
- package/packages/grid/src/grid.ts +1 -1
- package/packages/table/module/edit/hook.ts +55 -19
- package/packages/table/src/emits.ts +2 -0
- package/packages/table/src/store.ts +14 -0
- package/packages/table/src/table.ts +325 -33
- /package/es/{iconfont.1756083655214.ttf → iconfont.1756272578850.ttf} +0 -0
- /package/es/{iconfont.1756083655214.woff → iconfont.1756272578850.woff} +0 -0
- /package/es/{iconfont.1756083655214.woff2 → iconfont.1756272578850.woff2} +0 -0
- /package/lib/{iconfont.1756083655214.ttf → iconfont.1756272578850.ttf} +0 -0
- /package/lib/{iconfont.1756083655214.woff → iconfont.1756272578850.woff} +0 -0
- /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'
|
|
@@ -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
|
-
|
|
313
|
+
isCrossDragRow: false,
|
|
306
314
|
dragRow: null,
|
|
307
|
-
|
|
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 (
|
|
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 ((
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
10037
|
-
|
|
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 (
|
|
11433
|
-
return callSlot(rTipSlot, { row:
|
|
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
|
-
(
|
|
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',
|
|
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(),
|
|
@@ -12240,6 +12528,7 @@ export default defineVxeComponent({
|
|
|
12240
12528
|
const currentColumnOpts = computeCurrentColumnOpts.value
|
|
12241
12529
|
const keyboardOpts = computeKeyboardOpts.value
|
|
12242
12530
|
const aggregateOpts = computeAggregateOpts.value
|
|
12531
|
+
const rowDragOpts = computeRowDragOpts.value
|
|
12243
12532
|
|
|
12244
12533
|
if (props.rowId) {
|
|
12245
12534
|
warnLog('vxe.error.delProp', ['row-id', 'row-config.keyField'])
|
|
@@ -12344,7 +12633,10 @@ export default defineVxeComponent({
|
|
|
12344
12633
|
}
|
|
12345
12634
|
}
|
|
12346
12635
|
if (treeConfig && rowOpts.drag && !treeOpts.transform) {
|
|
12347
|
-
errLog('vxe.error.notSupportProp', ['
|
|
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'])
|
|
12348
12640
|
}
|
|
12349
12641
|
if (props.dragConfig) {
|
|
12350
12642
|
warnLog('vxe.error.delProp', ['drag-config', 'row-drag-config'])
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|