App.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <div id="app">
  3. <WatermarkWrapper
  4. v-if="username"
  5. :isFixedScreen="isFixedScreen"
  6. position="fixed"
  7. width="100vw"
  8. height="100vh"
  9. :zIndex="999"
  10. :username="username"
  11. :realname="realname"
  12. />
  13. <Nav v-if="!isFixedScreen" />
  14. <div class="content" :class="{ 'fixed-screen': isFixedScreen }">
  15. <router-view />
  16. </div>
  17. </div>
  18. </template>
  19. <script setup lang="ts">
  20. import { useRoute } from 'vue-router';
  21. import { computed } from 'vue';
  22. import Nav from '@/components/Nav.vue';
  23. import WatermarkWrapper from '@/components/Waterwrapper.vue'
  24. import { storeToRefs } from 'pinia';
  25. import { useUserStore } from '@/store/modules/user';
  26. const userStore = useUserStore();
  27. const { getUserInfo } = storeToRefs(userStore);
  28. const username = computed(() => getUserInfo.value.username);
  29. const realname = computed(() => getUserInfo.value.realname);
  30. const route = useRoute();
  31. const isFixedScreen = computed(
  32. () => route.matched.some((r) => r.meta?.fixedScreen === true) || route.path.startsWith('/institute-safety'),
  33. );
  34. </script>
  35. <style scoped lang="scss">
  36. #app {
  37. display: flex;
  38. flex-direction: column;
  39. width: 100vw;
  40. height: 100vh;
  41. }
  42. .content {
  43. flex: 1;
  44. overflow-y: auto;
  45. overflow-x: hidden;
  46. display: flex;
  47. align-items: center;
  48. justify-content: center;
  49. &.fixed-screen {
  50. overflow-y: hidden;
  51. }
  52. }
  53. @font-face {
  54. font-family: 'YouSheBiaoTiYuan';
  55. src: url('@/assets/fonts/YouSheBiaoTiYuan.otf');
  56. }
  57. @font-face {
  58. font-family: 'DINAlternate';
  59. src: url('@/assets/fonts/DINAlternate-Bold.ttf');
  60. }
  61. </style>