123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import type { GlobalThemeOverrides } from 'naive-ui'
- import { computed, watch } from 'vue'
- import { darkTheme, useOsTheme } from 'naive-ui'
- import { useAppStore } from '@/store'
- import { useBasicLayout } from '@/hooks/useBasicLayout'
- export function useTheme() {
- const appStore = useAppStore()
- const OsTheme = useOsTheme()
- const isDark = computed(() => {
- if (appStore.theme === 'auto')
- return OsTheme.value === 'dark'
- else
- return appStore.theme === 'dark'
- })
- const theme = computed(() => {
- return isDark.value ? darkTheme : undefined
- })
- const themeOverrides = computed<GlobalThemeOverrides>(() => {
- if (isDark.value) {
- return {
- common: {},
- }
- }
- return {}
- })
- const { isMobile } = useBasicLayout()
- watch(
- () => isDark.value,
- (dark) => {
- if (dark)
- document.documentElement.classList.add('dark')
- else
- document.documentElement.classList.remove('dark')
- },
- { immediate: true },
- )
- watch(
- () => isMobile.value,
- (dark) => {
- if (dark)
- document.documentElement.classList.add('is-mobile')
- else
- document.documentElement.classList.remove('is-mobile')
- },
- { immediate: true },
- )
- return { theme, themeOverrides }
- }
|