diff --git a/src/pages/movement-supervision.vue b/src/pages/movement-supervision.vue index 084cd1d..ee1c233 100644 --- a/src/pages/movement-supervision.vue +++ b/src/pages/movement-supervision.vue @@ -50,6 +50,8 @@ const container = shallowRef(); const editor = shallowRef(); const storageLocationService = shallowRef(); const client = shallowRef(); +// 左侧边栏元素引用(用于 Ctrl/Cmd+F 聚焦搜索框) +const leftSiderEl = shallowRef(); // 依赖注入 provide(EDITOR_KEY, editor); @@ -255,6 +257,8 @@ onMounted(async () => { // 添加全局点击事件监听器,用于关闭右键菜单 document.addEventListener('click', handleGlobalClick); document.addEventListener('keydown', handleGlobalKeydown); + // 监听 Ctrl/Cmd+F 聚焦左侧搜索框 + document.addEventListener('keydown', focusFindKeydownHandler); }); onUnmounted(() => { @@ -273,6 +277,7 @@ onUnmounted(() => { // 移除全局事件监听器 document.removeEventListener('click', handleGlobalClick); document.removeEventListener('keydown', handleGlobalKeydown); + document.removeEventListener('keydown', focusFindKeydownHandler); }); //#endregion @@ -399,6 +404,31 @@ const handleGlobalClick = (event: MouseEvent) => { } }; +// 判断事件目标是否在可编辑区域(输入框/文本域/可编辑元素) +const isTypingElement = (el: EventTarget | null) => { + const node = el as HTMLElement | null; + if (!node) return false; + const tag = node.tagName?.toLowerCase(); + return tag === 'input' || tag === 'textarea' || node.isContentEditable === true; +}; + +// Ctrl/Cmd + F 快捷键聚焦左侧搜索输入框 +const focusFindKeydownHandler = (event: KeyboardEvent) => { + const isFindKey = event.key === 'f' || event.key === 'F'; + if ((event.ctrlKey || event.metaKey) && isFindKey && !isTypingElement(event.target)) { + const raw: any = leftSiderEl.value as any; + const sider: HTMLElement | null = (raw && raw.$el) ? (raw.$el as HTMLElement) : (raw as HTMLElement | null); + if (sider) { + const input = sider.querySelector('.search input, .search .ant-input') as HTMLInputElement | null; + if (input) { + event.preventDefault(); + input.focus(); + try { input.select?.(); } catch {} + } + } + } +}; + /** * 处理全局键盘事件,ESC键关闭右键菜单 * @param event 键盘事件 @@ -425,7 +455,7 @@ const handleGlobalKeydown = (event: KeyboardEvent) => { - + diff --git a/src/pages/scene-editor.vue b/src/pages/scene-editor.vue index ea69a0f..057a960 100644 --- a/src/pages/scene-editor.vue +++ b/src/pages/scene-editor.vue @@ -1,6 +1,6 @@