App.vue 829 B

123456789101112131415161718192021222324
  1. <script setup lang="ts">
  2. import { onMounted, watch } from 'vue'
  3. import LoadingScreen from '@/components/app/LoadingScreen.vue'
  4. import LoginView from '@/views/LoginView.vue'
  5. import { useAuthStore } from '@/stores/auth'
  6. import { useThemeStore } from '@/stores/theme'
  7. const auth = useAuthStore()
  8. const theme = useThemeStore()
  9. watch(() => theme.resolvedTheme, value => {
  10. document.documentElement.classList.toggle('dark', value === 'dark')
  11. document.documentElement.dataset.theme = value
  12. document.querySelector('meta[name="theme-color"]')?.setAttribute('content', value === 'dark' ? '#181817' : '#f8f8f6')
  13. }, { immediate: true })
  14. onMounted(() => auth.bootstrap())
  15. </script>
  16. <template>
  17. <LoadingScreen v-if="auth.status === 'checking'" />
  18. <LoginView v-else-if="!auth.isAuthenticated" />
  19. <RouterView v-else />
  20. </template>