App.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <template>
  2. <el-config-provider :locale="locale" :size="assemblySize" :button="buttonConfig">
  3. <SimpleUploadOverlayHost />
  4. <router-view v-slot="{ Component }">
  5. <component :is="Component" :key="$route.fullPath" />
  6. </router-view>
  7. </el-config-provider>
  8. </template>
  9. <script setup lang="ts">
  10. import { onMounted, reactive, computed } from "vue";
  11. import { useI18n } from "vue-i18n";
  12. import { getBrowserLang } from "@/utils";
  13. import { useTheme } from "@/hooks/useTheme";
  14. import { ElConfigProvider } from "element-plus";
  15. import { LanguageType } from "./stores/interface";
  16. import { useGlobalStore } from "@/stores/modules/global";
  17. import en from "element-plus/es/locale/lang/en";
  18. import zhCn from "element-plus/es/locale/lang/zh-cn";
  19. import SimpleUploadOverlayHost from "@/components/popupLoading/SimpleUploadOverlayHost.vue";
  20. const globalStore = useGlobalStore();
  21. // init theme
  22. const { initTheme } = useTheme();
  23. initTheme();
  24. // init language
  25. const i18n = useI18n();
  26. onMounted(() => {
  27. const language = globalStore.language ?? getBrowserLang();
  28. i18n.locale.value = language;
  29. globalStore.setGlobalState("language", language as LanguageType);
  30. });
  31. // element language
  32. const locale = computed(() => {
  33. if (globalStore.language == "zh") return zhCn;
  34. if (globalStore.language == "en") return en;
  35. return getBrowserLang() == "zh" ? zhCn : en;
  36. });
  37. // element assemblySize
  38. const assemblySize = computed(() => globalStore.assemblySize);
  39. // element button config
  40. const buttonConfig = reactive({ autoInsertSpace: false });
  41. </script>