码桶

发现社区成员的开源项目

App.vue3.9 KB
<script setup lang="ts">
import { NConfigProvider, NMessageProvider, darkTheme, type GlobalThemeOverrides } from 'naive-ui'
import { computed, onMounted } from 'vue'
import { useAppStore } from '@/stores/app'
import AppHeader from '@/components/layout/AppHeader.vue'
import AppFooter from '@/components/layout/AppFooter.vue'

const appStore = useAppStore()
const theme = computed(() => appStore.isDark ? darkTheme : null)

onMounted(() => {
  appStore.initTheme()
})

const lightOverrides: GlobalThemeOverrides = {
  common: {
    primaryColor: '#000000',
    primaryColorHover: '#1A1A1A',
    primaryColorPressed: '#000000',
    primaryColorSuppl: '#3B82F6',
    borderRadius: '6px',
    borderRadiusSmall: '4px',
    fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
    fontFamilyMono: "'Geist Mono', 'JetBrains Mono', 'SF Mono', Menlo, monospace",
    fontSize: '14px',
    textColor1: '#000000',
    textColor2: '#000000',
    textColor3: '#666666',
    dividerColor: '#EAEAEA',
    hoverColor: '#F5F5F5',
    borderColor: '#EAEAEA',
    bodyColor: '#FAFAFA',
    cardColor: '#FFFFFF',
    inputColor: '#F5F5F5',
  },
  Button: {
    borderRadiusMedium: '6px',
    borderRadiusLarge: '6px',
    fontWeight: '500',
    fontWeightStrong: '500',
    textColorPrimary: '#FFFFFF',
    colorPrimary: '#000000',
    colorHoverPrimary: '#1A1A1A',
    colorPressedPrimary: '#000000',
    colorFocusPrimary: '#000000',
    borderPrimary: '1px solid #000000',
    borderHoverPrimary: '1px solid #1A1A1A',
    borderPressedPrimary: '1px solid #000000',
    borderFocusPrimary: '1px solid #000000',
    rippleColorPrimary: 'rgba(0, 0, 0, 0.1)',
  },
  Card: { borderRadius: '6px' },
  Tooltip: { borderRadius: '6px' },
  Pagination: { borderRadius: '4px' },
}

const darkOverrides: GlobalThemeOverrides = {
  common: {
    primaryColor: '#FFFFFF',
    primaryColorHover: '#EDEDED',
    primaryColorPressed: '#FFFFFF',
    primaryColorSuppl: '#3B82F6',
    borderRadius: '6px',
    borderRadiusSmall: '4px',
    fontFamily: "'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif",
    fontFamilyMono: "'Geist Mono', 'JetBrains Mono', 'SF Mono', Menlo, monospace",
    fontSize: '14px',
    textColor1: '#EDEDED',
    textColor2: '#EDEDED',
    textColor3: '#A1A1A1',
    dividerColor: '#262626',
    hoverColor: '#1A1A1A',
    borderColor: '#262626',
    bodyColor: '#000000',
    cardColor: '#0A0A0A',
    modalColor: '#0A0A0A',
    popoverColor: '#111111',
    tableColor: '#0A0A0A',
    inputColor: '#1A1A1A',
    actionColor: '#1A1A1A',
  },
  Button: {
    borderRadiusMedium: '6px',
    borderRadiusLarge: '6px',
    fontWeight: '500',
    fontWeightStrong: '500',
    textColorPrimary: '#000000',
    colorPrimary: '#FFFFFF',
    colorHoverPrimary: '#EDEDED',
    colorPressedPrimary: '#FFFFFF',
    colorFocusPrimary: '#FFFFFF',
    borderPrimary: '1px solid #FFFFFF',
    borderHoverPrimary: '1px solid #EDEDED',
    borderPressedPrimary: '1px solid #FFFFFF',
    borderFocusPrimary: '1px solid #FFFFFF',
    rippleColorPrimary: 'rgba(255, 255, 255, 0.1)',
  },
  Card: { borderRadius: '10px', color: '#0A0A0A' },
  Tooltip: { borderRadius: '6px', color: '#1A1A1A', textColor: '#EDEDED' },
  Pagination: { borderRadius: '4px' },
}

const themeOverrides = computed(() => appStore.isDark ? darkOverrides : lightOverrides)
</script>

<template>
  <NConfigProvider :theme="theme" :theme-overrides="themeOverrides">
    <NMessageProvider>
      <div class="min-h-screen flex flex-col overflow-x-hidden" style="background: var(--bg-body)">
        <AppHeader />
        <main class="flex-1">
          <router-view v-slot="{ Component }">
            <Transition name="fade" mode="out-in">
              <component :is="Component" />
            </Transition>
          </router-view>
        </main>
        <AppFooter />
      </div>
    </NMessageProvider>
  </NConfigProvider>
</template>