From e967fa34a9c76cc6aeca49d57d67f9a8ce268374 Mon Sep 17 00:00:00 2001 From: Baobhan Sith <80159437+Heavrnl@users.noreply.github.com> Date: Sat, 17 May 2025 08:40:05 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=99=A8=E8=8F=9C=E5=8D=95=E4=B8=8D=E4=BC=9A?= =?UTF-8?q?=E8=87=AA=E5=8A=A8=E6=B6=88=E5=A4=B1=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/components/FileManagerContextMenu.vue | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/packages/frontend/src/components/FileManagerContextMenu.vue b/packages/frontend/src/components/FileManagerContextMenu.vue index 1c01670..1c832d1 100644 --- a/packages/frontend/src/components/FileManagerContextMenu.vue +++ b/packages/frontend/src/components/FileManagerContextMenu.vue @@ -110,6 +110,25 @@ watch( { deep: true, immediate: true } // immediate 确保初始状态(如果isVisible为true)也设置正确 ); +// 点击其他地方自动关闭菜单 +const handleClickOutside = (event: MouseEvent) => { + if (contextMenuRef.value && !contextMenuRef.value.contains(event.target as Node)) { + emit('close-request'); + } +}; + +watch(() => props.isVisible, (newValue) => { + if (newValue) { + document.addEventListener('click', handleClickOutside, { capture: true }); + } else { + document.removeEventListener('click', handleClickOutside, { capture: true }); + } +}, { immediate: true }); + +onUnmounted(() => { + document.removeEventListener('click', handleClickOutside, { capture: true }); +}); + // 隐藏菜单的逻辑由 useFileManagerContextMenu 中的全局点击监听器处理 // 但我们仍然需要触发菜单项的 action,并通知父组件关闭菜单 const emit = defineEmits(['item-click', 'close-request']); // 添加 close-request