App.vue 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <script setup lang="ts">
  2. import useSettingsStore from '@/store/modules/settings'
  3. import hotkeys from 'hotkeys-js'
  4. import Provider from './ui-provider/index.vue'
  5. import eventBus from './utils/eventBus'
  6. const route = useRoute()
  7. const settingsStore = useSettingsStore()
  8. const { auth } = useAuth()
  9. const isAuth = computed(() => {
  10. return route.matched.every((item) => {
  11. return auth(item.meta.auth ?? '')
  12. })
  13. })
  14. // 设置网页 title
  15. watch([
  16. () => settingsStore.settings.app.enableDynamicTitle,
  17. () => settingsStore.title,
  18. ], () => {
  19. if (settingsStore.settings.app.enableDynamicTitle && settingsStore.title) {
  20. const title = typeof settingsStore.title === 'function' ? settingsStore.title() : settingsStore.title
  21. document.title = `${title} - ${import.meta.env.VITE_APP_TITLE}`
  22. }
  23. else {
  24. document.title = import.meta.env.VITE_APP_TITLE
  25. }
  26. }, {
  27. immediate: true,
  28. deep: true,
  29. })
  30. onMounted(() => {
  31. settingsStore.setMode(document.documentElement.clientWidth)
  32. window.addEventListener('resize', () => {
  33. settingsStore.setMode(document.documentElement.clientWidth)
  34. })
  35. hotkeys('alt+i', () => {
  36. eventBus.emit('global-system-info-toggle')
  37. })
  38. })
  39. </script>
  40. <template>
  41. <Provider>
  42. <RouterView v-slot="{ Component }">
  43. <component :is="Component" v-if="isAuth" />
  44. <NotAllowed v-else />
  45. </RouterView>
  46. <SystemInfo />
  47. </Provider>
  48. </template>