App.vue 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. <template>
  2. <el-config-provider :locale="locale" :size="assemblySize" :button="buttonConfig">
  3. <router-view></router-view>
  4. </el-config-provider>
  5. </template>
  6. <script setup lang="ts">
  7. import { useI18n } from 'vue-i18n'
  8. import { getBrowserLang } from '@/utils'
  9. import { useTheme } from '@/hooks/useTheme'
  10. import { ElConfigProvider } from 'element-plus'
  11. import { LanguageType } from './stores/interface'
  12. import { useGlobalStore } from '@/stores/modules/global'
  13. import en from 'element-plus/es/locale/lang/en'
  14. import zhCn from 'element-plus/es/locale/lang/zh-cn'
  15. const globalStore = useGlobalStore()
  16. // 初始化主题
  17. const { initTheme } = useTheme()
  18. initTheme()
  19. // init language
  20. const i18n = useI18n()
  21. onMounted(() => {
  22. const language = globalStore.language ?? getBrowserLang()
  23. i18n.locale.value = language
  24. globalStore.setGlobalState('language', language as LanguageType)
  25. })
  26. // element language
  27. const locale = computed(() => {
  28. if (globalStore.language == 'zh') return zhCn
  29. if (globalStore.language == 'en') return en
  30. return getBrowserLang() == 'zh' ? zhCn : en
  31. })
  32. // element assemblySize
  33. const assemblySize = computed(() => globalStore.assemblySize)
  34. // element button config
  35. const buttonConfig = reactive({ autoInsertSpace: false })
  36. </script>