App.vue 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <template>
  2. <a-layout class="layout">
  3. <LayoutHeader />
  4. <a-layout-content>
  5. <div ref="contentRef" class="content">
  6. <div class="content-layout">
  7. <RouterView v-slot="{ Component }">
  8. <KeepAlive>
  9. <component :is="Component" />
  10. </KeepAlive>
  11. </RouterView>
  12. </div>
  13. </div>
  14. </a-layout-content>
  15. </a-layout>
  16. </template>
  17. <script lang="ts">
  18. import { defineComponent, onMounted, ref, provide } from 'vue'
  19. import LayoutHeader from '@/layout/header.vue'
  20. import { getImgSrc } from '@/utils/getImgSrc'
  21. import browser from '@/utils/browser'
  22. import { useLocale } from './locales/useLocale'
  23. import { LocaleType } from '#/config'
  24. import { useI18n } from './hook/useI18n'
  25. provide('getImgSrc', getImgSrc)
  26. export const contentRef = ref<HTMLDivElement>()
  27. export default defineComponent({
  28. name: 'App',
  29. components: {
  30. LayoutHeader
  31. },
  32. setup() {
  33. onMounted(() => {
  34. const { t } = useI18n()
  35. const websiteTitle = t('base.websiteTitle')
  36. document.title = websiteTitle
  37. })
  38. return { contentRef }
  39. }
  40. })
  41. </script>
  42. <style lang="scss" scoped>
  43. .content,
  44. .layout {
  45. height: 100%;
  46. }
  47. .content {
  48. overflow-y: auto;
  49. }
  50. </style>