Logo.vue 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <template>
  2. <div class="app-logo" @click="handleGoHome">
  3. <img :src="logo" />
  4. <div v-if="show" class="logo-title ml-1 ellipsis">{{ globSetting.title }}</div>
  5. </div>
  6. </template>
  7. <script lang="ts">
  8. import { defineComponent, PropType, ref, watch } from 'vue';
  9. // hooks
  10. import { useSetting } from '/@/hooks/core/useSetting';
  11. import { PageEnum } from '/@/enums/pageEnum';
  12. import logo from '/@/assets/images/logo.png';
  13. import { useTimeout } from '/@/hooks/core/useTimeout';
  14. import { useGo } from '/@/hooks/web/usePage';
  15. export default defineComponent({
  16. name: 'Logo',
  17. props: {
  18. showTitle: {
  19. type: Boolean as PropType<boolean>,
  20. default: true,
  21. },
  22. },
  23. setup(props) {
  24. const { globSetting } = useSetting();
  25. const go = useGo();
  26. function handleGoHome() {
  27. go(PageEnum.BASE_HOME);
  28. }
  29. const showRef = ref<boolean>(!!props.showTitle);
  30. watch(
  31. () => props.showTitle,
  32. (show: boolean) => {
  33. if (show) {
  34. useTimeout(() => {
  35. showRef.value = show;
  36. }, 280);
  37. } else {
  38. showRef.value = show;
  39. }
  40. }
  41. );
  42. return {
  43. handleGoHome,
  44. globSetting,
  45. show: showRef,
  46. logo,
  47. };
  48. },
  49. });
  50. </script>
  51. <style lang="less" scoped>
  52. @import (reference) '../design/index.less';
  53. .app-logo {
  54. display: flex;
  55. justify-content: center;
  56. align-items: center;
  57. cursor: pointer;
  58. .logo-title {
  59. display: none;
  60. font-family: Georgia, serif;
  61. font-size: 16px;
  62. .respond-to(medium,{
  63. display: block;
  64. });
  65. }
  66. }
  67. </style>