main-sidebar-sub-menu.vue 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. <template>
  2. <el-submenu
  3. v-if="menu.list && menu.list.length >= 1"
  4. :index="menu.menuId + ''"
  5. :popper-class="'site-sidebar--' + sidebarLayoutSkin + '-popper'">
  6. <template slot="title">
  7. <icon-svg :name="menu.icon || ''" class="site-sidebar__menu-icon"></icon-svg>
  8. <span>{{ menu.name }}</span>
  9. </template>
  10. <sub-menu
  11. v-for="item in menu.list"
  12. :key="item.menuId"
  13. :menu="item"
  14. :dynamicMenuRoutes="dynamicMenuRoutes">
  15. </sub-menu>
  16. </el-submenu>
  17. <el-menu-item v-else :index="menu.menuId + ''" @click="gotoRouteHandle(menu)">
  18. <icon-svg :name="menu.icon || ''" class="site-sidebar__menu-icon"></icon-svg>
  19. <span>{{ menu.name }}</span>
  20. </el-menu-item>
  21. </template>
  22. <script>
  23. import SubMenu from './main-sidebar-sub-menu'
  24. export default {
  25. name: 'sub-menu',
  26. props: {
  27. menu: {
  28. type: Object,
  29. required: true
  30. },
  31. dynamicMenuRoutes: {
  32. type: Array,
  33. required: true
  34. }
  35. },
  36. components: {
  37. SubMenu
  38. },
  39. computed: {
  40. sidebarLayoutSkin: {
  41. get () { return this.$store.state.common.sidebarLayoutSkin }
  42. }
  43. },
  44. methods: {
  45. // 通过menuId与动态(菜单)路由进行匹配跳转至指定路由
  46. gotoRouteHandle (menu) {
  47. var route = this.dynamicMenuRoutes.filter(item => item.meta.menuId === menu.menuId)
  48. if (route.length >= 1) {
  49. this.$router.push({ name: route[0].name })
  50. }
  51. }
  52. }
  53. }
  54. </script>