App.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. <template>
  2. <div id="app">
  3. <el-watermark class="viewport-watermark" :content="[username, realname]" :font="font" :width="90" :gap="[200, 200]">
  4. <Nav v-if="!isFixedScreen" />
  5. <div class="content" :class="{ 'fixed-screen': isFixedScreen }">
  6. <router-view />
  7. </div>
  8. </el-watermark>
  9. </div>
  10. </template>
  11. <script setup lang="ts">
  12. import { useRoute } from 'vue-router';
  13. import { computed, reactive } from 'vue';
  14. import { storeToRefs } from 'pinia';
  15. import { useUserStore } from '@/store/modules/user';
  16. import Nav from '@/components/Nav.vue';
  17. const userStore = useUserStore();
  18. const { getUserInfo } = storeToRefs(userStore);
  19. const username = computed(() => getUserInfo.value.username);
  20. const realname = computed(() => getUserInfo.value.realname);
  21. const font = reactive({
  22. color: 'rgba(0,0,0,.03)',
  23. });
  24. const route = useRoute();
  25. const isFixedScreen = computed(
  26. () => route.matched.some((r) => r.meta?.fixedScreen === true) || route.path.startsWith('/institute-safety'),
  27. );
  28. </script>
  29. <style scoped lang="scss">
  30. #app {
  31. display: flex;
  32. flex-direction: column;
  33. width: 100vw;
  34. height: 100vh;
  35. }
  36. .viewport-watermark {
  37. width: 100%;
  38. height: 100%;
  39. }
  40. .content {
  41. // height: 100%;
  42. height: calc(100vh - 78cpx);
  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. height: 100%;
  51. overflow-y: hidden;
  52. }
  53. }
  54. @font-face {
  55. font-family: 'YouSheBiaoTiYuan';
  56. src: url('@/assets/fonts/YouSheBiaoTiYuan.otf');
  57. }
  58. @font-face {
  59. font-family: 'DINAlternate';
  60. src: url('@/assets/fonts/DINAlternate-Bold.ttf');
  61. }
  62. </style>