Skip to content

Commit 77080a1

Browse files
committedFeb 17, 2025
fix(grid): [grid] 修复非扩展行和扩展行之间拖拽和表格外拖拽bug
1 parent 38803a5 commit 77080a1

File tree

2 files changed

+11
-7
lines changed

2 files changed

+11
-7
lines changed
 

‎packages/vue/src/grid/src/body/src/body.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -608,7 +608,7 @@ function renderRowExpanded(args) {
608608
'tr',
609609
{
610610
class: 'tiny-grid-body__expanded-row',
611-
key: `expand_${rowid}${rowIndex}`,
611+
key: `expand_${rowid}`,
612612
on: trOn
613613
},
614614
[

‎packages/vue/src/grid/src/dragger/src/rowDrop.ts

+10-6
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import { findTree } from '@opentiny/vue-renderless/grid/static/'
2626
import Modal from '@opentiny/vue-modal'
2727
import GlobalConfig from '../../config'
2828
import { isVue2 } from '@opentiny/vue-common'
29+
import { getRowUniqueId } from '../../table/src/strategy'
2930

3031
function handleIfScrollYLoadTruthy({ isScrollYLoad, _vm, selfRow, prevTrElem, targetTrElem }) {
3132
if (!isScrollYLoad) {
@@ -59,21 +60,23 @@ export const createHandlerOnEnd = ({ _vm, refresh }) => {
5960
}
6061
const options = { children: (_vm.treeConfig || {}).children || 'children' }
6162
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
6467
// 这里优先使用用户通过props传递过来的表格数据,所以拖拽后会改变原始数据
6568
const tableTreeData = _vm.data || _vm.tableData
6669
const selfRow = _vm.getRowNode(targetTrElem).item
6770
const selfNode = findTree(tableTreeData, (row) => row === selfRow, options)
6871
const isScrollYLoad = _vm.scrollYLoad
72+
const rowIdKey = _vm.$props.rowId
6973
if (!isScrollYLoad) {
74+
selfNode.item[rowIdKey] = getRowUniqueId()
7075
if (prevTrElem) {
71-
if (prevTrElem.classList.contains('tiny-grid-body__expanded-row')) {
72-
prevTrElem = prevTrElem.previousElementSibling
73-
}
7476
// 移动到节点
7577
const prevRow = _vm.getRowNode(prevTrElem).item
7678
const prevNode = findTree(tableTreeData, (row) => row === prevRow, options)
79+
prevNode.item[rowIdKey] = getRowUniqueId()
7780
if (findTree(selfRow[options.children], (row) => prevRow === row, options)) {
7881
// 错误的移动
7982
const oldTrElem = wrapperElem.children[event.oldIndex]
@@ -94,7 +97,8 @@ export const createHandlerOnEnd = ({ _vm, refresh }) => {
9497
prevNode.items.splice(prevNode.index + (selfNode.index < prevNode.index ? 0 : 1), 0, currRow)
9598
prevNode.items = [].concat(prevNode.items)
9699
}
97-
} else {
100+
// 过滤表格外拖拽
101+
} else if (nextEl && nextEl.classList.contains('tiny-grid-body__row')) {
98102
// 移动到第一行
99103
const currRow = selfNode.items.splice(selfNode.index, 1)[0]
100104
tableTreeData.unshift(currRow)

0 commit comments

Comments
 (0)