diff --git a/src/App.vue b/src/App.vue index 3506e848..8b8c558d 100644 --- a/src/App.vue +++ b/src/App.vue @@ -28,7 +28,7 @@ import { useGlobalOfflineStatus, type ConnectionFailureReason } from '@/composab const LOGIN_WALLPAPER_ROUTE = '/login' const BACKGROUND_CROSSFADE_DURATION_MS = 1500 -const WINDOW_BLUR_RENDER_THROTTLE_DELAY_MS = 180_000 +const WINDOW_BLUR_RENDER_THROTTLE_DELAY_MS = 60_000 const MEDIA_DENSE_OPTICAL_DEFER_MS = 1_600 // 生效主题 diff --git a/src/components/dialog/GlassSettingsDialog.vue b/src/components/dialog/GlassSettingsDialog.vue index 4f252f26..09ee8546 100644 --- a/src/components/dialog/GlassSettingsDialog.vue +++ b/src/components/dialog/GlassSettingsDialog.vue @@ -88,6 +88,16 @@ function updateQuality(value: unknown) { previewGlassSettings({ glassQuality: option.value }) } +/** 将当前草稿恢复为玻璃主题默认值并立即预览。 */ +function resetSettings() { + draftAppearance.value = 'clear' + draftQuality.value = 'css' + previewGlassSettings({ + glassAppearance: draftAppearance.value, + glassQuality: draftQuality.value, + }) +} + /** 一次提交当前预览,持久化后关闭不会发生视觉回跳。 */ async function saveSettings() { if (isSaving.value) return @@ -111,19 +121,16 @@ onScopeDispose(cancelGlassPreview) diff --git a/src/components/dialog/TransparencySettingsDialog.vue b/src/components/dialog/TransparencySettingsDialog.vue index d1a9bcd9..61278a02 100644 --- a/src/components/dialog/TransparencySettingsDialog.vue +++ b/src/components/dialog/TransparencySettingsDialog.vue @@ -29,6 +29,7 @@ const emit = defineEmits<{ const visible = computed({ get: () => props.modelValue, set: value => { + if (!value) cancelTransparencySettings() emit('update:modelValue', value) if (!value) emit('close') }, @@ -38,6 +39,7 @@ const { adjustTransparency, backgroundBlur, backgroundPosterOpacity, + cancelTransparencySettings, currentPresetLevel, onBackgroundBlurChange, onBackgroundPosterOpacityChange, @@ -45,10 +47,28 @@ const { onGlassQualityChange, onOpacityChange, resetTransparencySettings, + saveTransparencySettings, transparencyBlur, transparencyGlassQuality, transparencyOpacity, } = useTransparencySettings() + +/** 父级控制弹窗生命周期时,未保存关闭仍需恢复持久化设置。 */ +watch( + () => props.modelValue, + (value, previous) => { + if (!value && previous) cancelTransparencySettings() + }, +) + +/** 保存当前透明度预览,随后关闭面板。 */ +function saveSettings() { + saveTransparencySettings() + visible.value = false +} + +// 弹窗的任意未保存销毁路径都应恢复持久化快照。 +onScopeDispose(cancelTransparencySettings)