Logo.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <script setup lang="ts">
  2. import { ref, watch, computed, onMounted, unref } from 'vue'
  3. import { useAppStore } from '@/store/modules/app'
  4. import { useDesign } from '@/hooks/web/useDesign'
  5. const { getPrefixCls } = useDesign()
  6. const prefixCls = getPrefixCls('logo')
  7. const appStore = useAppStore()
  8. const show = ref(true)
  9. const title = computed(() => appStore.getTitle)
  10. const layout = computed(() => appStore.getLayout)
  11. const collapse = computed(() => appStore.getCollapse)
  12. onMounted(() => {
  13. if (unref(collapse)) show.value = false
  14. })
  15. watch(
  16. () => collapse.value,
  17. (collapse: boolean) => {
  18. if (unref(layout) === 'topLeft' || unref(layout) === 'cutMenu') {
  19. show.value = true
  20. return
  21. }
  22. if (!collapse) {
  23. setTimeout(() => {
  24. show.value = !collapse
  25. }, 400)
  26. } else {
  27. show.value = !collapse
  28. }
  29. }
  30. )
  31. watch(
  32. () => layout.value,
  33. (layout) => {
  34. if (layout === 'top' || layout === 'cutMenu') {
  35. show.value = true
  36. } else {
  37. if (unref(collapse)) {
  38. show.value = false
  39. } else {
  40. show.value = true
  41. }
  42. }
  43. }
  44. )
  45. </script>
  46. <template>
  47. <div>
  48. <router-link
  49. :class="[
  50. prefixCls,
  51. layout !== 'classic' ? `${prefixCls}__Top` : '',
  52. 'flex !h-[var(--logo-height)] items-center cursor-pointer justify-center relative',
  53. 'dark:bg-[var(--el-bg-color)]'
  54. ]"
  55. to="/"
  56. >
  57. <img
  58. src="@/assets/imgs/logo.png"
  59. class="w-[calc(var(--logo-height)-10px)] h-[calc(var(--logo-height)-10px)]"
  60. />
  61. <div
  62. v-if="show"
  63. :class="[
  64. 'ml-10px text-16px font-700',
  65. {
  66. 'text-[var(--logo-title-text-color)]': layout === 'classic',
  67. 'text-[var(--top-header-text-color)]':
  68. layout === 'topLeft' || layout === 'top' || layout === 'cutMenu'
  69. }
  70. ]"
  71. >
  72. {{ title }}
  73. </div>
  74. </router-link>
  75. </div>
  76. </template>