PageSidebar.vue 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <div id='page-sidebar-wrapper' class='page-sidebar-wrapper'>
  3. <el-scrollbar tag="div" wrapClass="content-scrollbar">
  4. <el-menu
  5. :collapse='sidebarClosed'
  6. :default-active='sidebarSelected'
  7. @open='handleOpen'
  8. @close='handleClose'
  9. @select='menuSelect'
  10. background-color='#364150'
  11. text-color='#fff'
  12. active-text-color='#ffd04b'
  13. unique-opened
  14. router
  15. class='sidebar-menu'
  16. >
  17. <template v-for='menu in menus'>
  18. <el-submenu v-if='menu.menuChildrens && menu.menuChildrens.length' :index='menu.url' :key='menu.id' class='sidebar-menu-submenu'>
  19. <template slot='title'>
  20. <i v-if='menu.icon' :class='"iconfont "+ menu.icon'></i>
  21. <span>{{menu.name}}</span>
  22. </template>
  23. <template v-for='submenu in menu.menuChildrens'>
  24. <el-submenu v-if='submenu.menuChildrens && submenu.menuChildrens.length' :index='submenu.url' :key='submenu.id' class='sidebar-menu-submenu'>
  25. <template slot='title'>
  26. <i v-if='submenu.icon' :class='"iconfont "+ submenu.icon'></i>
  27. <span>{{submenu.name}}</span>
  28. </template>
  29. <template v-for='threemenu in submenu.menuChildrens'>
  30. <el-menu-item :index='threemenu.url' :key='threemenu.id' class='sidebar-menu-item'>
  31. <i v-if='threemenu.icon' :class='"iconfont "+ threemenu.icon'></i>
  32. <span slot='title'>{{threemenu.name}}</span>
  33. </el-menu-item>
  34. </template>
  35. </el-submenu>
  36. <el-menu-item v-else :index='submenu.url' :key='submenu.id' class='sidebar-menu-item'>
  37. <i v-if='submenu.icon' :class='"iconfont "+ submenu.icon'></i>
  38. <span slot='title'>{{submenu.name}}</span>
  39. </el-menu-item>
  40. </template>
  41. </el-submenu>
  42. <el-menu-item v-else :index='menu.url' class='sidebar-menu-item'
  43. :disabled="menu.disabled"
  44. :key='menu.url'
  45. >
  46. <i v-if='menu.icon' :class='"iconfont "+ menu.icon'></i>
  47. <span slot='title'>{{menu.name}}</span>
  48. </el-menu-item>
  49. </template>
  50. </el-menu>
  51. </el-scrollbar>
  52. </div>
  53. </template>
  54. <script>
  55. import { mapActions, mapGetters, mapMutations } from 'vuex'
  56. import frameworkApi from '@/api/framework'
  57. export default {
  58. name: 'PageSidebar',
  59. props: [],
  60. data() {
  61. return {}
  62. },
  63. computed: {
  64. ...mapGetters('layout', ['sidebarClosed', 'sidebarSelected', 'permissions', 'menus']),
  65. /**
  66. * 加载本地获取系统菜单
  67. */
  68. // ...mapGetters('layout', ['sidebarClosed', 'sidebarSelected', 'permissions']),
  69. // menus() {
  70. // // console.log(this.permissions)
  71. // let menus = frameworkApi.getMenus(this.permissions)
  72. // // console.log('sidebar menus ', menus)
  73. // return menus
  74. // }
  75. },
  76. methods: {
  77. ...mapMutations('layout', ['setSidebarSelected']),
  78. handleOpen(val) {
  79. // console.log('handleOpen------------- ', val)
  80. },
  81. handleClose(val) {
  82. // console.log('handleClose------------- ', val)
  83. },
  84. menuSelect(index, indexPath) {
  85. this.setSidebarSelected(index)
  86. // console.log('menu select ', index, indexPath)
  87. }
  88. },
  89. created() {
  90. // console.log('--------------------- PageSidebar created')
  91. // console.log('***********************************menus ', JSON.parse(JSON.stringify(this.menus)))
  92. },
  93. mounted() {},
  94. components: {}
  95. }
  96. </script>