From 7ec4df49953e9d678b462e776eb3fa8c7e1db279 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A9=99=E5=AD=90?= <126167116+caodachen@users.noreply.github.com> Date: Tue, 19 May 2026 13:40:50 +0800 Subject: [PATCH] fix: search-panel when ArrowUp and ArrowDown (#7922) --- .../src/widgets/global-search/search-panel.vue | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/effects/layouts/src/widgets/global-search/search-panel.vue b/packages/effects/layouts/src/widgets/global-search/search-panel.vue index 18ee1eed9..c51f1de8c 100644 --- a/packages/effects/layouts/src/widgets/global-search/search-panel.vue +++ b/packages/effects/layouts/src/widgets/global-search/search-panel.vue @@ -11,7 +11,12 @@ import { mapTree, traverseTreeValues, uniqueByField } from '@vben/utils'; import { VbenIcon, VbenScrollbar } from '@vben-core/shadcn-ui'; import { isHttpUrl } from '@vben-core/shared/utils'; -import { onKeyStroke, useLocalStorage, useThrottleFn } from '@vueuse/core'; +import { + onKeyStroke, + useEventListener, + useLocalStorage, + useThrottleFn, +} from '@vueuse/core'; defineOptions({ name: 'SearchPanel', @@ -34,6 +39,7 @@ const searchHistory = useLocalStorage( const activeIndex = ref(-1); const searchItems = shallowRef([]); const searchResults = ref([]); +const isNavigating = ref(false); const handleSearch = useThrottleFn(search, 200); @@ -116,6 +122,7 @@ function handleUp() { if (searchResults.value.length === 0) { return; } + isNavigating.value = true; activeIndex.value--; if (activeIndex.value < 0) { activeIndex.value = searchResults.value.length - 1; @@ -128,6 +135,7 @@ function handleDown() { if (searchResults.value.length === 0) { return; } + isNavigating.value = true; activeIndex.value++; if (activeIndex.value > searchResults.value.length - 1) { activeIndex.value = 0; @@ -143,6 +151,7 @@ function handleClose() { // Activate when the mouse moves to a certain line function handleMouseenter(e: MouseEvent) { + if (isNavigating.value) return; const index = (e.target as HTMLElement)?.dataset.index; activeIndex.value = Number(index); } @@ -221,6 +230,10 @@ onMounted(() => { // esc close onKeyStroke('Escape', handleClose); }); + +useEventListener('mousemove', () => { + isNavigating.value = false; +});