index.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <script lang="ts" setup>
  2. import { useLayoutMode } from "@/hooks/useLayoutMode"
  3. import logo from "@/assets/layouts/logo.png?url"
  4. import logoText1 from "@/assets/layouts/logo-text-1.png?url"
  5. import logoText2 from "@/assets/layouts/logo-text-2.png?url"
  6. interface Props {
  7. collapse?: boolean
  8. }
  9. const props = withDefaults(defineProps<Props>(), {
  10. collapse: true
  11. })
  12. const { isLeft, isTop } = useLayoutMode()
  13. </script>
  14. <template>
  15. <div class="layout-logo-container" :class="{ collapse: props.collapse, 'layout-mode-top': isTop }">
  16. <transition name="layout-logo-fade">
  17. <router-link v-if="props.collapse" key="collapse" to="/">
  18. <img :src="logo" class="layout-logo" />
  19. </router-link>
  20. <router-link v-else key="expand" to="/">
  21. <img :src="!isLeft ? logoText2 : logoText1" class="layout-logo-text" />
  22. </router-link>
  23. </transition>
  24. </div>
  25. </template>
  26. <style lang="scss" scoped>
  27. .layout-logo-container {
  28. position: relative;
  29. width: 100%;
  30. height: var(--v3-header-height);
  31. line-height: var(--v3-header-height);
  32. text-align: center;
  33. overflow: hidden;
  34. .layout-logo {
  35. display: none;
  36. }
  37. .layout-logo-text {
  38. height: 100%;
  39. vertical-align: middle;
  40. }
  41. }
  42. .layout-mode-top {
  43. height: var(--v3-navigationbar-height);
  44. line-height: var(--v3-navigationbar-height);
  45. }
  46. .collapse {
  47. .layout-logo {
  48. width: 32px;
  49. height: 32px;
  50. vertical-align: middle;
  51. display: inline-block;
  52. }
  53. .layout-logo-text {
  54. display: none;
  55. }
  56. }
  57. </style>