后端

sidebar.vue 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <template>
  2. <aside class="site-sidebar">
  3. <div class="site-sidebar__inner">
  4. <el-menu
  5. :default-active="menuNavActive"
  6. :collapse="$store.state.sidebarCollapse"
  7. class="site-sidebar__menu"
  8. background-color="#545c64"
  9. text-color="#fff"
  10. active-text-color="#ffd04b">
  11. <el-menu-item index="1-1" @click="$router.push({ name: 'home' })">
  12. <i class="site-sidebar__menu-icon fa fa-home"></i>
  13. <span slot="title">首页</span>
  14. </el-menu-item>
  15. <sub-menu-nav
  16. v-for="menuNav in $store.state.menuNavList"
  17. :key="menuNav.menuId"
  18. :menu-nav="menuNav">
  19. </sub-menu-nav>
  20. </el-menu>
  21. </div>
  22. </aside>
  23. </template>
  24. <script>
  25. import SubMenuNav from '@/components/sub-menu-nav'
  26. import API from '@/api'
  27. import { mapMutations } from 'vuex'
  28. import { getRouteNameByUrl } from '@/utils'
  29. import isEmpty from 'lodash/isEmpty'
  30. export default {
  31. data () {
  32. return {
  33. menuNavActive: '1-1'
  34. }
  35. },
  36. components: {
  37. SubMenuNav
  38. },
  39. watch: {
  40. $route: 'routeHandle'
  41. },
  42. created () {
  43. this.getMenuNavList().then(() => {
  44. this.routeHandle(this.$route)
  45. })
  46. },
  47. methods: {
  48. // 获取菜单导航列表 / 权限
  49. getMenuNavList () {
  50. return API.menu.nav().then(({data}) => {
  51. if (data && data.code === 0) {
  52. this.UPDATE_MENU_NAV_LIST(data.menuList)
  53. sessionStorage.setItem('permissions', JSON.stringify(data.permissions || '[]'))
  54. } else {
  55. this.UPDATE_MENU_NAV_LIST([])
  56. sessionStorage.setItem('permissions', '[]')
  57. }
  58. })
  59. },
  60. // 路由操作
  61. routeHandle (route) {
  62. if (/^\/n\/.*$/.test(route.path)) {
  63. var tab = this.$store.state.contentTabs.filter(item => item.name === route.name)[0]
  64. // tab不存在, 先添加
  65. if (isEmpty(tab)) {
  66. var menuNav = this.getMenuNavByRouteName(route.name, this.$store.state.menuNavList)
  67. if (!isEmpty(menuNav)) {
  68. tab = {
  69. id: menuNav.menuId,
  70. name: route.name,
  71. title: menuNav.name,
  72. type: (window.SITE_CONFIG.nestIframeRouteNameList || []).indexOf(route.name) !== -1 ? 'iframe' : 'module',
  73. url: menuNav.url
  74. }
  75. this.ADD_CONTENT_TAB(tab)
  76. }
  77. }
  78. this.menuNavActive = tab.id + ''
  79. this.UPDATE_CONTENT_TABS_ACTIVE_NAME({ name: route.name })
  80. }
  81. },
  82. // 获取菜单导航, 根据路由名称
  83. getMenuNavByRouteName (name, menuNavList) {
  84. for (var i = 0; i < menuNavList.length; i++) {
  85. if (menuNavList[i].list && menuNavList[i].list.length >= 1) {
  86. return this.getMenuNavByRouteName(name, menuNavList[i].list)
  87. } else {
  88. if (getRouteNameByUrl(menuNavList[i].url) === name) {
  89. return menuNavList[i]
  90. }
  91. }
  92. }
  93. },
  94. ...mapMutations(['UPDATE_MENU_NAV_LIST', 'ADD_CONTENT_TAB', 'UPDATE_CONTENT_TABS_ACTIVE_NAME'])
  95. }
  96. }
  97. </script>