fix: Fix menu drag and drop issue (#10962)

#10961
This commit is contained in:
2025-11-14 18:24:53 +08:00 committed by GitHub
parent 388458f759
commit 1afe84ed02
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -76,45 +76,30 @@ const allowDrag = (draggingNode: Node) => {
}; };
const allowDrop = (draggingNode: Node, dropNode: Node, type: AllowDropType) => { const allowDrop = (draggingNode: Node, dropNode: Node, type: AllowDropType) => {
const restricted = ['App-Menu', 'Setting-Menu'];
const isDraggingFirstLevel = draggingNode.level === 1;
const isDraggingSecondLevel = draggingNode.level === 2;
const isDropFirstLevel = dropNode.level === 1;
const isDropSecondLevel = dropNode.level === 2;
if (restricted.includes(draggingNode.data.label) && isDropSecondLevel) {
return false;
}
if (dropNode.data.label === 'Home-Menu') { if (dropNode.data.label === 'Home-Menu') {
return type !== 'prev' && type !== 'inner'; return type !== 'prev' && type !== 'inner';
} }
const label = draggingNode.data.label;
const restricted = ['App-Menu', 'Setting-Menu'];
const draggingHasChildren = draggingNode.childNodes?.length > 0;
const isDraggingTooDeep = draggingNode.level > 2;
const isDraggingFirstLevel = draggingNode.level === 1;
const isDropFirstLevel = dropNode.level === 1;
const isDropSecondLevel = dropNode.level === 2;
const dropHasChildren = dropNode.childNodes?.length > 0;
if (draggingNode.parent && draggingNode.parent.childNodes.length === 1) { if (draggingNode.parent && draggingNode.parent.childNodes.length === 1) {
return false; return false;
} }
if (isDropFirstLevel && dropHasChildren && !restricted.includes(label)) { if (
return type === 'inner' || type === 'prev' || type === 'next'; (isDraggingSecondLevel && isDropFirstLevel) ||
} (isDraggingFirstLevel && isDropSecondLevel && draggingNode.childNodes?.length === 0)
) {
if (isDraggingFirstLevel && draggingNode.childNodes?.length === 0 && dropNode.level !== 2) {
return type === 'prev' || type === 'next'; return type === 'prev' || type === 'next';
} }
if ( if ((isDropFirstLevel && isDraggingFirstLevel) || (isDropSecondLevel && isDraggingSecondLevel)) {
isDraggingFirstLevel &&
draggingNode.childNodes?.length > 0 &&
dropNode.level !== 2 &&
!restricted.includes(label)
) {
return type === 'inner' || type === 'prev' || type === 'next';
}
if (draggingHasChildren || isDraggingTooDeep) {
return false;
}
if (isDropSecondLevel && draggingNode.level === 2) {
return type === 'prev' || type === 'next'; return type === 'prev' || type === 'next';
} }