index.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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
  6. :default-active="activeMenu"
  7. :collapse="isCollapse"
  8. :background-color="variables.menuBg"
  9. :text-color="variables.menuText"
  10. :unique-opened="true"
  11. :active-text-color="variables.menuActiveText"
  12. :collapse-transition="false"
  13. mode="vertical"
  14. >
  15. <template v-for="route in routes">
  16. <sidebar-item v-if="route.status" :key="route.path" :item="route" />
  17. </template>
  18. </el-menu>
  19. </el-scrollbar>
  20. </div>
  21. </template>
  22. <script>
  23. import { mapGetters } from 'vuex'
  24. import Logo from './Logo'
  25. import SidebarItem from './SidebarItem'
  26. import variables from '@/styles/variables.scss'
  27. export default {
  28. components: { SidebarItem, Logo },
  29. computed: {
  30. ...mapGetters(['sidebar', 'l1Path']),
  31. routes() {
  32. var l1 = this.$router.options.routes.concat(global.antRouter).find(item => item.path === this.l1Path)
  33. if (l1 && l1.children) {
  34. return l1.children
  35. } else {
  36. return []
  37. }
  38. },
  39. activeMenu() {
  40. const route = this.$route
  41. const { meta, path, fullUrl } = route
  42. if (meta.activeMenu) {
  43. return meta.activeMenu
  44. }
  45. return path
  46. },
  47. showLogo() {
  48. return this.$store.state.settings.sidebarLogo
  49. },
  50. variables() {
  51. return variables
  52. },
  53. isCollapse() {
  54. return !this.sidebar.opened
  55. }
  56. }
  57. }
  58. </script>