@@ -26,6 +26,7 @@ import { findTree } from '@opentiny/vue-renderless/grid/static/'
26
26
import Modal from '@opentiny/vue-modal'
27
27
import GlobalConfig from '../../config'
28
28
import { isVue2 } from '@opentiny/vue-common'
29
+ import { getRowUniqueId } from '../../table/src/strategy'
29
30
30
31
function handleIfScrollYLoadTruthy ( { isScrollYLoad, _vm, selfRow, prevTrElem, targetTrElem } ) {
31
32
if ( ! isScrollYLoad ) {
@@ -59,21 +60,23 @@ export const createHandlerOnEnd = ({ _vm, refresh }) => {
59
60
}
60
61
const options = { children : ( _vm . treeConfig || { } ) . children || 'children' }
61
62
const targetTrElem = event . item
62
- const { parentNode : wrapperElem , previousElementSibling } = targetTrElem
63
- let prevTrElem = previousElementSibling
63
+ const { parentNode : wrapperElem , previousElementSibling : prevEl , nextElementSibling : nextEl } = targetTrElem
64
+ // 获取真实的上一个拖拽元素
65
+ let prevTrElem =
66
+ prevEl && prevEl . classList . contains ( 'tiny-grid-body__row' ) ? prevEl : prevEl && prevEl . previousElementSibling
64
67
// 这里优先使用用户通过props传递过来的表格数据,所以拖拽后会改变原始数据
65
68
const tableTreeData = _vm . data || _vm . tableData
66
69
const selfRow = _vm . getRowNode ( targetTrElem ) . item
67
70
const selfNode = findTree ( tableTreeData , ( row ) => row === selfRow , options )
68
71
const isScrollYLoad = _vm . scrollYLoad
72
+ const rowIdKey = _vm . $props . rowId
69
73
if ( ! isScrollYLoad ) {
74
+ selfNode . item [ rowIdKey ] = getRowUniqueId ( )
70
75
if ( prevTrElem ) {
71
- if ( prevTrElem . classList . contains ( 'tiny-grid-body__expanded-row' ) ) {
72
- prevTrElem = prevTrElem . previousElementSibling
73
- }
74
76
// 移动到节点
75
77
const prevRow = _vm . getRowNode ( prevTrElem ) . item
76
78
const prevNode = findTree ( tableTreeData , ( row ) => row === prevRow , options )
79
+ prevNode . item [ rowIdKey ] = getRowUniqueId ( )
77
80
if ( findTree ( selfRow [ options . children ] , ( row ) => prevRow === row , options ) ) {
78
81
// 错误的移动
79
82
const oldTrElem = wrapperElem . children [ event . oldIndex ]
@@ -94,7 +97,8 @@ export const createHandlerOnEnd = ({ _vm, refresh }) => {
94
97
prevNode . items . splice ( prevNode . index + ( selfNode . index < prevNode . index ? 0 : 1 ) , 0 , currRow )
95
98
prevNode . items = [ ] . concat ( prevNode . items )
96
99
}
97
- } else {
100
+ // 过滤表格外拖拽
101
+ } else if ( nextEl && nextEl . classList . contains ( 'tiny-grid-body__row' ) ) {
98
102
// 移动到第一行
99
103
const currRow = selfNode . items . splice ( selfNode . index , 1 ) [ 0 ]
100
104
tableTreeData . unshift ( currRow )
0 commit comments