index.vue 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. <template>
  2. <div :class="{'has-logo':showLogo}">
  3. <logo
  4. v-if="showLogo"
  5. :collapse="isCollapse" />
  6. <el-scrollbar wrap-class="scrollbar-wrapper">
  7. <el-menu
  8. :default-active="activeMenu"
  9. :collapse="isCollapse"
  10. :background-color="variables.menuBg"
  11. :text-color="variables.menuText"
  12. :unique-opened="false"
  13. :active-text-color="variables.menuActiveText"
  14. :collapse-transition="false"
  15. @select="onMenuItemSelect"
  16. mode="vertical"
  17. >
  18. <sidebar-item
  19. v-for="route in permission_routes"
  20. :key="route.path"
  21. :item="route"
  22. :activeMenu="activeMenu"
  23. :selectedItemIndex="selectedItemIndex"
  24. :base-path="route.path" />
  25. </el-menu>
  26. </el-scrollbar>
  27. <div class="version-view" v-if="!isCollapse">{{appName + " &nbsp;" + appVersion}}</div>
  28. </div>
  29. </template>
  30. <script>
  31. import { mapGetters } from 'vuex'
  32. import Logo from './Logo'
  33. import SidebarItem from './SidebarItem'
  34. import variables from '@/styles/variables.scss'
  35. import { getAuthRoutes } from '@/utils/auth'
  36. import permission from '@/utils/permission'
  37. import settings from '../../../settings'
  38. export default {
  39. components: { SidebarItem, Logo },
  40. created() {
  41. },
  42. data() {
  43. return {
  44. appName: settings.title,
  45. appVersion: settings.version,
  46. selectedItemIndex: '',
  47. }
  48. },
  49. methods: {
  50. filterRoutes(routes) {
  51. routes.forEach((route) => {
  52. const authRoute = this.authRoutesList.find(
  53. authRoute => (authRoute.resourcePath === route.path)
  54. )
  55. if (authRoute) {
  56. route.hidden = false
  57. if (route.meta) {
  58. route.meta.onlyView = authRoute.onlyView
  59. } else {
  60. route.meta = { onlyView: authRoute.onlyView }
  61. }
  62. } else {
  63. route.hidden = true
  64. }
  65. if (route.children) {
  66. this.filterRoutes(route.children)
  67. }
  68. })
  69. },
  70. onMenuItemSelect(index) {
  71. this.selectedItemIndex = index
  72. }
  73. },
  74. computed: {
  75. ...mapGetters([
  76. 'permission_routes',
  77. 'sidebar'
  78. ]),
  79. activeMenu() {
  80. const route = this.$route
  81. const { meta, path } = route
  82. // if set path, the sidebar will highlight the path you set
  83. if (meta.activeMenu) {
  84. return meta.activeMenu
  85. }
  86. return path
  87. },
  88. showLogo() {
  89. return this.$store.state.settings.sidebarLogo
  90. },
  91. variables() {
  92. return variables
  93. },
  94. isCollapse() {
  95. return !this.sidebar.opened
  96. }
  97. }
  98. }
  99. </script>
  100. <style scoped>
  101. .version-view {
  102. left: 0;
  103. right: 0;
  104. bottom: 0;
  105. z-index: 1;
  106. height: 18px;
  107. color: #cecece;
  108. font-size: 12px;
  109. text-align: center;
  110. position: absolute;
  111. }
  112. </style>