index.vue 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. <template>
  2. <header style="background: url('img/header_bg.png') no-repeat;background-size: 100% 100%;" class="adminui-header">
  3. <div class="adminui-header-left">
  4. <div class="logo-bar" @click="$router.push('/')">
  5. <img class="logo" src="img/menu_logo.png">
  6. <span>{{ $CONFIG.APP_NAME }}</span>
  7. </div>
  8. </div>
  9. <div class="adminui-header-right">
  10. <userbar></userbar>
  11. </div>
  12. </header>
  13. <section class="aminui-wrapper">
  14. <div v-if="!ismobile" :class="['aminui-side', menuIsCollapse && 'isCollapse']">
  15. <div class="adminui-side-scroll">
  16. <el-scrollbar>
  17. <el-menu :default-active="active" router :collapse="menuIsCollapse" :unique-opened="$CONFIG.MENU_UNIQUE_OPENED">
  18. <NavMenu :navMenus="menu"></NavMenu>
  19. </el-menu>
  20. </el-scrollbar>
  21. </div>
  22. <div class="adminui-side-bottom" @click="$store.commit('TOGGLE_menuIsCollapse')">
  23. <el-icon><el-icon-expand v-if="menuIsCollapse" /><el-icon-fold v-else /></el-icon>
  24. <template v-if="!menuIsCollapse">收起</template>
  25. </div>
  26. </div>
  27. <Side-m v-if="ismobile"></Side-m>
  28. <div class="aminui-body el-container">
  29. <div class="adminui-main" id="adminui-main">
  30. <router-view v-slot="{ Component }">
  31. <keep-alive :include="this.$store.state.keepAlive.keepLiveRoute">
  32. <component :is="Component" :key="$route.fullPath" v-if="$store.state.keepAlive.routeShow" />
  33. </keep-alive>
  34. </router-view>
  35. </div>
  36. </div>
  37. </section>
  38. </template>
  39. <script>
  40. import SideM from "./components/sideM.vue";
  41. import NavMenu from "./components/NavMenu.vue";
  42. import userbar from "./components/userbar.vue";
  43. export default {
  44. name: "index",
  45. components: {
  46. SideM,
  47. NavMenu,
  48. userbar
  49. },
  50. data() {
  51. return {
  52. menu: [],
  53. active: ""
  54. }
  55. },
  56. computed:{
  57. ismobile() {
  58. return this.$store.state.global.ismobile;
  59. },
  60. menuIsCollapse() {
  61. return this.$store.state.global.menuIsCollapse;
  62. }
  63. },
  64. created() {
  65. this.onLayoutResize();
  66. window.addEventListener("resize", this.onLayoutResize);
  67. if (!this.$TOOL.data.get("USER_INFO")) {
  68. this.$TOOL.cookie.remove("TOKEN");
  69. return this.$router.replace({ path: "/login" });
  70. }
  71. this.menu = this.filterUrl(this.$TOOL.data.get("MENU"));
  72. this.showThis();
  73. },
  74. watch: {
  75. $route() {
  76. this.showThis();
  77. }
  78. },
  79. methods: {
  80. onLayoutResize() {
  81. this.$store.commit("SET_ismobile", document.body.clientWidth < 992);
  82. },
  83. // 路由监听高亮
  84. showThis() {
  85. this.$nextTick(()=> this.active = this.$route.fullPath);
  86. this.$store.commit("setRouteShow", true);
  87. },
  88. filterUrl(map) {
  89. let newMap = [];
  90. map && map.forEach(item => {
  91. item.meta = item.meta ? item.meta : {};
  92. // 处理隐藏
  93. if (item.hidden) return false;
  94. // 递归循环
  95. if (item.children && item.children.length > 0) item.children = this.filterUrl(item.children);
  96. newMap.push(item);
  97. });
  98. return newMap;
  99. }
  100. }
  101. }
  102. </script>