index.vue 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <template>
  2. <div class="layout-logo" v-if="setShowLogo" @click="onThemeConfigChange">
  3. <img :src="logoMini" class="layout-logo-medium-img" />
  4. <span>{{ sysinfo.systemName }}</span>
  5. </div>
  6. <div class="layout-logo-size" v-else @click="onThemeConfigChange">
  7. <img :src="logoMini" class="layout-logo-size-img" />
  8. </div>
  9. </template>
  10. <script lang="ts">
  11. import { computed, defineComponent } from 'vue';
  12. import { useStore } from '/@/store/index';
  13. import logoMini from '/@/assets/logo-mini.svg';
  14. export default defineComponent({
  15. name: 'layoutLogo',
  16. data() {
  17. return {
  18. sysinfo: {
  19. buildVersion: '',
  20. systemName: '',
  21. buildTime: '',
  22. systemCopyright: '',
  23. },
  24. };
  25. },
  26. created() {
  27. this.sysinfo = JSON.parse(localStorage.sysinfo || '{}');
  28. },
  29. setup() {
  30. const store = useStore();
  31. // 获取布局配置信息
  32. const getThemeConfig = computed(() => {
  33. return store.state.themeConfig.themeConfig;
  34. });
  35. // 设置 logo 的显示。classic 经典布局默认显示 logo
  36. const setShowLogo = computed(() => {
  37. let { isCollapse, layout } = store.state.themeConfig.themeConfig;
  38. return !isCollapse || layout === 'classic' || document.body.clientWidth < 1000;
  39. });
  40. // logo 点击实现菜单展开/收起
  41. const onThemeConfigChange = () => {
  42. if (store.state.themeConfig.themeConfig.layout === 'transverse') return false;
  43. store.state.themeConfig.themeConfig.isCollapse = !store.state.themeConfig.themeConfig.isCollapse;
  44. };
  45. return {
  46. logoMini,
  47. setShowLogo,
  48. getThemeConfig,
  49. onThemeConfigChange,
  50. };
  51. },
  52. });
  53. </script>
  54. <style scoped lang="scss">
  55. .layout-logo {
  56. width: 220px;
  57. height: 50px;
  58. display: flex;
  59. align-items: center;
  60. justify-content: center;
  61. box-shadow: rgb(0 21 41 / 2%) 0px 1px 4px;
  62. // color: var(--el-color-primary);
  63. color: #ffff;
  64. font-size: 20px;
  65. cursor: pointer;
  66. animation: logoAnimation 0.3s ease-in-out;
  67. &:hover {
  68. span {
  69. color: var(--color-primary-light-2);
  70. }
  71. }
  72. &-medium-img {
  73. width: 35px;
  74. padding-right: 5px;
  75. }
  76. }
  77. .layout-logo-size {
  78. width: 100%;
  79. height: 50px;
  80. display: flex;
  81. cursor: pointer;
  82. animation: logoAnimation 0.3s ease-in-out;
  83. &-img {
  84. width: 20px;
  85. margin: auto;
  86. }
  87. &:hover {
  88. img {
  89. animation: logoAnimation 0.3s ease-in-out;
  90. }
  91. }
  92. }
  93. </style>