diff --git a/web/src/components/Index.vue b/web/src/components/Index.vue index a9c9d4c..d7ff290 100644 --- a/web/src/components/Index.vue +++ b/web/src/components/Index.vue @@ -25,6 +25,34 @@ const isUserMenuOpen = ref(false) const userAccount = ref('管理员') const siteConfig = ref({}) +// 主题:明暗模式 +const getInitialTheme = (): 'light' | 'dark' => { + try { + const stored = localStorage.getItem('theme') as 'light' | 'dark' | null + if (stored === 'light' || stored === 'dark') return stored + const systemDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches + return systemDark ? 'dark' : 'light' + } catch { + return 'light' + } +} + +const theme = ref<'light' | 'dark'>(getInitialTheme()) + +const applyTheme = (next: 'light' | 'dark') => { + theme.value = next + if (next === 'dark') { + document.documentElement.classList.add('dark') + } else { + document.documentElement.classList.remove('dark') + } + try { localStorage.setItem('theme', next) } catch {} +} + +const toggleTheme = () => { + applyTheme(theme.value === 'dark' ? 'light' : 'dark') +} + // 从JWT中解析用户名 const parseJwtUsername = (token: string): string => { try { @@ -255,14 +283,14 @@ const siteTitle = computed(() => {