main-sidebar-sub-menu.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. <template>
  2. <el-submenu
  3. v-if="menu.children.length >= 1"
  4. :index="menu.id"
  5. :popper-append-to-body="false"
  6. >
  7. <template slot="title">
  8. <div
  9. :class="
  10. $store.state.sidebarMenuActiveName.indexOf(menu.name) > -1 ? 'on' : ''
  11. "
  12. >
  13. <svg class="icon-svg aui-sidebar__menu-icon" aria-hidden="true">
  14. <use :xlink:href="`#${menu.icon}`"></use>
  15. </svg>
  16. <span>{{ menu.name }}</span>
  17. </div>
  18. </template>
  19. <sub-menu
  20. v-for="item in menu.children"
  21. :key="item.id"
  22. :menu="item"
  23. ></sub-menu>
  24. </el-submenu>
  25. <el-menu-item
  26. v-else
  27. :index="menu.id"
  28. @click="gotoRouteHandle(menu.id, menu.name)"
  29. >
  30. <svg class="icon-svg aui-sidebar__menu-icon" aria-hidden="true" v-if="menu.icon">
  31. <use :xlink:href="`#${menu.icon}`"></use>
  32. </svg>
  33. <span>{{ menu.name }}</span>
  34. </el-menu-item>
  35. </template>
  36. <script>
  37. import SubMenu from "./main-sidebar-sub-menu";
  38. export default {
  39. name: "sub-menu",
  40. props: {
  41. menu: {
  42. type: Object,
  43. required: true,
  44. },
  45. },
  46. components: {
  47. SubMenu,
  48. },
  49. created() {
  50. this.$store.state.currentMenuId = localStorage.getItem("currentMenuId");
  51. },
  52. mounted() {},
  53. methods: {
  54. // 通过menuId与动态(菜单)路由进行匹配跳转至指定路由
  55. gotoRouteHandle(menuId, menuName) {
  56. var route = window.SITE_CONFIG["dynamicMenuRoutes"].filter(
  57. (item) => item.meta.menuId === menuId
  58. )[0];
  59. if (route) {
  60. if (this.$router.history.current.meta.title != route.meta.title) {
  61. this.$router.push({ name: route.name });
  62. } else {
  63. this.$store.state.currentPayWorryRecord="";
  64. this.$store.state.contentIsNeedRefresh = true;
  65. this.$nextTick(() => {
  66. this.$store.state.contentIsNeedRefresh = false;
  67. });
  68. }
  69. }
  70. this.$store.state.sidebarMenuActiveName = [];
  71. this.$store.state.sidebarMenuActiveName.push(route.meta.title);
  72. this.$store.state.currentMenuId = menuId;
  73. localStorage.setItem("currentMenuId", menuId);
  74. },
  75. },
  76. };
  77. </script>
  78. <style>
  79. .el-menu-item:hover,.el-submenu__title:hover,.el-menu-item.is-active,.aui-sidebar__menu .el-submenu.is-active > .el-submenu__title{
  80. background: rgba(118,30,106,0.06) !important;
  81. }
  82. .el-menu-item:hover span,.el-menu-item:hover svg,.el-submenu__title:hover span,.el-submenu__title:hover svg,.el-menu-item.is-active,.aui-sidebar__menu .el-submenu.is-active > .el-submenu__title{
  83. color: #761E6A !important;
  84. }
  85. </style>
  86. <style lang="scss" scoped>
  87. ::v-deep .el-menu-item {
  88. padding-left: 30px!important;
  89. }
  90. .onws {
  91. background-color: #e9f0ff;
  92. color: #2e69eb !important;
  93. }
  94. .el-submenu__title:hover {
  95. .on {
  96. background-color: #e9f0ff;
  97. color: #2e69eb !important;
  98. }
  99. }
  100. </style>