Skip to content

Commit 2fb6814

Browse files
authoredFeb 19, 2025
fix(grid): [grid] Fix bug where dragging and dropping in the expanded state of the table cannot render correctly (#2901)
* fix(grid): [grid] 修复表格展开状态下拖拽无法正确渲染bug * fix(grid): [grid] 根据检视意见修复 * fix(grid): [grid] 修复非扩展行和扩展行之间拖拽和表格外拖拽bug * fix(grid): [grid] 去除rowid用户设置的意外情况 * fix(grid): [grid] 优化更新性能,只强制更新拖拽行dom
1 parent 4c19d7e commit 2fb6814

File tree

2 files changed

+22
-3
lines changed

2 files changed

+22
-3
lines changed
 

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

+15-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,8 @@ import { generateFixedClassName } from '../../table/src/utils/handleFixedColumn'
4545
const isOperateMouse = ($table) =>
4646
$table._isResize || ($table.lastScrollTime && Date.now() < $table.lastScrollTime + $table.optimizeOpts.delayHover)
4747

48+
let renderRowFlag = false
49+
4850
// 解决静态扫描驼峰变量问题
4951
const classMap = {
5052
colEdit: 'col__edit',
@@ -542,6 +544,17 @@ function renderRow(args) {
542544
return
543545
}
544546

547+
let key = rowid
548+
if (row._isDraging) {
549+
// 防止数据多次刷新导致key回归rowid
550+
_vm.$nextTick(() => {
551+
delete row._isDraging
552+
})
553+
if (renderRowFlag) {
554+
key = `${rowid}${rowKey}`
555+
}
556+
}
557+
545558
rows.push(
546559
h(
547560
'tr',
@@ -564,7 +577,7 @@ function renderRow(args) {
564577
attrs: {
565578
'data-rowid': rowid
566579
},
567-
key: rowKey || treeConfig ? rowid : $rowIndex,
580+
key,
568581
on: trOn
569582
},
570583
tableColumn.map((column, $columnIndex) => {
@@ -732,6 +745,7 @@ function renderRows({ h, _vm, $table, $seq, rowLevel, tableData, tableColumn, se
732745
// 如果是树形表格,则会递归渲染已展开行的子节点
733746
renderRowTree(args, renderRows)
734747
})
748+
renderRowFlag = !renderRowFlag
735749

736750
return rows
737751
}

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

+7-2
Original file line numberDiff line numberDiff line change
@@ -59,11 +59,15 @@ export const createHandlerOnEnd = ({ _vm, refresh }) => {
5959
}
6060
const options = { children: (_vm.treeConfig || {}).children || 'children' }
6161
const targetTrElem = event.item
62-
const { parentNode: wrapperElem, previousElementSibling: prevTrElem } = targetTrElem
62+
const { parentNode: wrapperElem, previousElementSibling: prevEl, nextElementSibling: nextEl } = targetTrElem
63+
// 获取真实的上一个拖拽元素
64+
let prevTrElem =
65+
prevEl && prevEl.classList.contains('tiny-grid-body__row') ? prevEl : prevEl && prevEl.previousElementSibling
6366
// 这里优先使用用户通过props传递过来的表格数据,所以拖拽后会改变原始数据
6467
const tableTreeData = _vm.data || _vm.tableData
6568
const selfRow = _vm.getRowNode(targetTrElem).item
6669
const selfNode = findTree(tableTreeData, (row) => row === selfRow, options)
70+
selfRow._isDraging = true
6771
const isScrollYLoad = _vm.scrollYLoad
6872
if (!isScrollYLoad) {
6973
if (prevTrElem) {
@@ -90,7 +94,8 @@ export const createHandlerOnEnd = ({ _vm, refresh }) => {
9094
prevNode.items.splice(prevNode.index + (selfNode.index < prevNode.index ? 0 : 1), 0, currRow)
9195
prevNode.items = [].concat(prevNode.items)
9296
}
93-
} else {
97+
// 过滤表格外拖拽
98+
} else if (nextEl && nextEl.classList.contains('tiny-grid-body__row')) {
9499
// 移动到第一行
95100
const currRow = selfNode.items.splice(selfNode.index, 1)[0]
96101
tableTreeData.unshift(currRow)

0 commit comments

Comments
 (0)