From 3bb4dd9b23f2eb210730af2696cb256d125bb9de Mon Sep 17 00:00:00 2001 From: Mars <3361409208a@gmail.com> Date: Thu, 2 Jul 2026 11:49:16 +0800 Subject: [PATCH] =?UTF-8?q?fix(player):=20=E4=BF=AE=E5=A4=8D=E9=A1=B6?= =?UTF-8?q?=E9=83=A8=E8=AF=AD=E8=A8=80/=E4=BD=99=E9=A2=9D/=E5=A4=B4?= =?UTF-8?q?=E5=83=8F=E4=B8=8B=E6=8B=89=20hover=20=E9=97=B4=E9=9A=99?= =?UTF-8?q?=E5=AF=BC=E8=87=B4=E8=8F=9C=E5=8D=95=E6=8F=90=E5=89=8D=E5=85=B3?= =?UTF-8?q?=E9=97=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 新增 useHoverDropdown,为下拉菜单增加延迟关闭与透明桥接层,鼠标可从触发按钮顺利移入下拉卡片。 --- .../player/src/components/CashBalanceChip.vue | 28 ++++++++++--- apps/player/src/components/LocaleSwitcher.vue | 23 +++++++--- apps/player/src/components/UserAvatarMenu.vue | 23 +++++++--- .../src/composables/useHoverDropdown.ts | 42 +++++++++++++++++++ 4 files changed, 98 insertions(+), 18 deletions(-) create mode 100644 apps/player/src/composables/useHoverDropdown.ts diff --git a/apps/player/src/components/CashBalanceChip.vue b/apps/player/src/components/CashBalanceChip.vue index 925f6ea..2bbb89f 100644 --- a/apps/player/src/components/CashBalanceChip.vue +++ b/apps/player/src/components/CashBalanceChip.vue @@ -4,11 +4,12 @@ import { useRouter } from 'vue-router'; import { useI18n } from 'vue-i18n'; import { formatMoney } from '../utils/localeDisplay'; import { usePlayerProfile } from '../composables/usePlayerProfile'; +import { useHoverDropdown } from '../composables/useHoverDropdown'; const { locale, t } = useI18n(); const { profileRaw, refreshProfile } = usePlayerProfile(); const router = useRouter(); -const open = ref(false); +const { open, openHover, scheduleClose, closeNow } = useHoverDropdown(); const root = ref(null); const wallet = computed(() => profileRaw.value?.wallet ?? null); @@ -44,7 +45,12 @@ function toggle() { } function close() { - open.value = false; + closeNow(); +} + +function onMouseEnter() { + openHover(); + void refreshProfile(); } function goRecharge() { @@ -53,7 +59,7 @@ function goRecharge() { } function onOutsideClick(e: Event) { - if (!root.value?.contains(e.target as Node)) open.value = false; + if (!root.value?.contains(e.target as Node)) closeNow(); } onMounted(() => { @@ -71,8 +77,8 @@ onUnmounted(() => {