| <script lang="ts" setup> | |
| import { onMounted, ref } from 'vue'; | |
| import { useAppStore } from './store'; | |
| import { useI18n } from 'vue-i18n'; | |
| import { AppSettings, ToolBar } from './components'; | |
| const { t, locale } = useI18n(); | |
| const appStore = useAppStore(); | |
| const showSettings = ref(false); | |
| function followSystemLanguage() { | |
| const lan = window.navigator.language; | |
| if (!appStore.language) { | |
| if (lan.includes('zh')) appStore.updateLanguage('zh'); | |
| else if (lan.includes('ptBR')) appStore.updateLanguage('ptBR'); | |
| else appStore.updateLanguage('en'); | |
| } | |
| locale.value = appStore.language ?? 'en'; | |
| } | |
| onMounted(() => { | |
| followSystemLanguage(); | |
| document.title = t('title'); | |
| if (appStore.theme) appStore.updateTheme(appStore.theme); | |
| else { | |
| if (window.matchMedia('(prefers-color-scheme: dark)').matches) { | |
| document.documentElement.setAttribute('theme-mode', 'dark'); | |
| appStore.updateTheme('dark'); | |
| } else { | |
| document.documentElement.removeAttribute('theme-mode'); | |
| appStore.updateTheme('light'); | |
| } | |
| } | |
| }); | |
| </script> | |
| <template> | |
| <div class="size-full w-full dark:bg-black"> | |
| <ToolBar @show="showSettings = true" /> | |
| <AppSettings v-model="showSettings" /> | |
| <router-view /> | |
| </div> | |
| </template> | |