index.vue 1.1 KB

123456789101112131415161718192021222324252627282930313233343536
  1. <template>
  2. <div :class="{ 'has-logo': showLogo }">
  3. <logo v-if="showLogo" :collapse="isCollapse" />
  4. <el-scrollbar wrap-class="scrollbar-wrapper">
  5. <el-menu :default-active="activeMenu" :collapse="isCollapse" :unique-opened="false" :collapse-transition="false" mode="vertical">
  6. <sidebar-item v-for="route in routes" :key="route.path" :item="route" :base-path="route.path" :is-collapse="isCollapse" />
  7. </el-menu>
  8. </el-scrollbar>
  9. </div>
  10. </template>
  11. <script setup lang="ts">
  12. import { computed } from 'vue'
  13. import { useRoute } from 'vue-router'
  14. import SidebarItem from './SidebarItem.vue'
  15. import Logo from './Logo.vue'
  16. import variables from '@/styles/variables.module.scss'
  17. import useStore from '@/store'
  18. const { permission, setting, app } = useStore()
  19. const route = useRoute()
  20. const routes = computed(() => permission.routes)
  21. const showLogo = computed(() => setting.sidebarLogo)
  22. const isCollapse = computed(() => !app.sidebar.opened)
  23. const activeMenu = computed(() => {
  24. const { meta, path } = route
  25. // if set path, the sidebar will highlight the path you set
  26. if (meta.activeMenu) {
  27. return meta.activeMenu as string
  28. }
  29. return path
  30. })
  31. </script>