From caef6eca67ead64fa6076ad85409683f01314f6a Mon Sep 17 00:00:00 2001 From: jxxghp Date: Tue, 2 Jun 2026 22:44:53 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=90=8C=E6=AD=A5=E4=B8=BB=E9=A2=98?= =?UTF-8?q?=E5=AE=9A=E5=88=B6=E5=99=A8=E7=8A=B6=E6=80=81=E5=88=B0=E6=A0=B9?= =?UTF-8?q?=E8=8A=82=E7=82=B9=EF=BC=8C=E4=BC=98=E5=8C=96=E5=85=A8=E5=B1=80?= =?UTF-8?q?=E6=82=AC=E6=B5=AE=E6=8C=89=E9=92=AE=E4=BD=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/@core/scss/_misc.scss | 2 +- src/components/ThemeCustomizer.vue | 342 ++++++++++++++++---------- src/composables/useThemeCustomizer.ts | 7 + src/styles/common.scss | 23 ++ 4 files changed, 241 insertions(+), 133 deletions(-) diff --git a/src/@core/scss/_misc.scss b/src/@core/scss/_misc.scss index 578c82bd..002dca37 100644 --- a/src/@core/scss/_misc.scss +++ b/src/@core/scss/_misc.scss @@ -22,8 +22,8 @@ code { %blurry-bg { position: relative; - isolation: isolate; box-shadow: 0 1px 3px rgba(0, 0, 0, 4%), 0 1px 2px rgba(0, 0, 0, 2%); + isolation: isolate; @media (width >= 1280px) and (hover: hover) { background: rgba(var(--v-theme-background), 1); diff --git a/src/components/ThemeCustomizer.vue b/src/components/ThemeCustomizer.vue index 889c9a3c..fa5e6e9c 100644 --- a/src/components/ThemeCustomizer.vue +++ b/src/components/ThemeCustomizer.vue @@ -40,6 +40,29 @@ const drawer = computed({ set: value => emit('update:modelValue', value), }) +// 将主题定制器打开状态同步到根节点,供全局悬浮按钮避让右侧面板。 +function syncThemeCustomizerOpenState(isOpen: boolean) { + if (typeof document === 'undefined') return + + if (isOpen) { + document.documentElement.setAttribute('data-theme-customizer-open', 'true') + document.body.setAttribute('data-theme-customizer-open', 'true') + + return + } + + document.documentElement.removeAttribute('data-theme-customizer-open') + document.body.removeAttribute('data-theme-customizer-open') +} + +// 组件卸载时清理根节点状态,避免路由切换后悬浮按钮继续保持让位。 +function clearThemeCustomizerOpenState() { + syncThemeCustomizerOpenState(false) +} + +watch(drawer, syncThemeCustomizerOpenState, { immediate: true }) +onScopeDispose(clearThemeCustomizerOpenState) + const customizerContainer = computed(() => (appMode.value ? VDialog : VNavigationDrawer)) const customizerContainerProps = computed(() => { @@ -133,148 +156,158 @@ async function handleResetSettings() {