NavMenu.vue 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <template>
  2. <div id="main_left" :class="!$store.state.navStatus ? 'small_main_left' : ''">
  3. <el-menu
  4. :collapse-transition="false"
  5. :default-active="$route.path"
  6. @open="handleOpen"
  7. @close="handleClose"
  8. :collapse="!$store.state.navStatus"
  9. router
  10. >
  11. <template v-for="menu in backstageAsyncRouter">
  12. <Menu
  13. v-if="menu.menuType == 1 && menu.children.length > 0 && menu.visible == 1 && menu.status == 1"
  14. :key="menu.parentid + '-' + menu.systemfunctionid"
  15. :menu="menu"
  16. ></Menu>
  17. <el-menu-item v-if="menu.menuType == 2 && menu.visible == 1 && menu.status == 1" :index="menu.path">
  18. <i :class="menu.meta.icon"></i>
  19. <span slot="title">{{ menu.meta.title }}</span>
  20. </el-menu-item>
  21. </template>
  22. </el-menu>
  23. </div>
  24. </template>
  25. <script>
  26. import Menu from "./menu.vue";
  27. import { mapGetters } from "vuex";
  28. export default {
  29. components: { Menu },
  30. data() {
  31. return {};
  32. },
  33. computed: { ...mapGetters(["backstageAsyncRouter"]) },
  34. methods: {
  35. handleOpen(key, keyPath) {
  36. // console.log(this.$route);
  37. },
  38. handleClose(key, keyPath) {
  39. // console.log(key, keyPath);
  40. },
  41. },
  42. };
  43. </script>
  44. <style lang="scss" scoped>
  45. ::-webkit-scrollbar {
  46. width: 3px !important;
  47. }
  48. #main_left {
  49. flex-shrink: 0;
  50. overflow: auto;
  51. width: 210px;
  52. border-right: 1px solid #e6e6e6;
  53. transition: all 0.2s;
  54. }
  55. ::v-deep .el-menu {
  56. border-right: none;
  57. }
  58. .small_main_left {
  59. width: 65px !important;
  60. }
  61. </style>