Main.vue 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. <template>
  2. <div class="fillcontain">
  3. <frame-top></frame-top>
  4. <transition name="el-fade-in">
  5. <div class="navbar-static-side" v-show="isShowMenu">
  6. <el-menu style="min-height: 100%;" router @select="selectMenu">
  7. <template v-for="(item) in menus">
  8. <el-submenu v-if="item.children&&item.children.length>0" :key="item.menuId" :index=" 'p' + item.menuId">
  9. <template slot="title">
  10. <i :class="item.avatar"></i>
  11. <span>{{item.menuName}}</span>
  12. </template>
  13. <template v-for="(sub) in item.children">
  14. <el-menu-item :index="sub.menuUrl" :key="sub.menuId">{{sub.menuName}}</el-menu-item>
  15. </template>
  16. </el-submenu>
  17. <el-menu-item v-else :key="item.menuId" :index="item.menuUrl"><i :class="item.avatar"></i>{{item.menuName}}</el-menu-item>
  18. </template>
  19. </el-menu>
  20. </div>
  21. </transition>
  22. <div class="page-wrapper">
  23. <navMenu ref="navMenuForm"></navMenu>
  24. <keep-alive>
  25. <router-view></router-view>
  26. </keep-alive>
  27. </div>
  28. </div>
  29. </template>
  30. <script>
  31. import frameTop from '../components/FrameTop'
  32. import {baseUrl, ajax} from '@/common/biConfig'
  33. import navMenu from '@/components/NavMenu'
  34. import $ from 'jquery'
  35. import "jstree";
  36. import "jstree/dist/themes/default/style.min.css";
  37. export default {
  38. data(){
  39. return {
  40. isShowMenu:true,
  41. menus:[]
  42. }
  43. },
  44. components: {
  45. frameTop,navMenu
  46. },
  47. mounted(){
  48. let ts = this;
  49. ajax({
  50. type:"GET",
  51. data:{},
  52. url:"frame/Menus.action",
  53. success:function(resp){
  54. ts.menus = resp.rows;
  55. }
  56. }, ts);
  57. },
  58. computed: {
  59. },
  60. methods: {
  61. selectMenu(index){
  62. let m = null;
  63. this.menus.forEach(element => { //第一层
  64. if(element.children && element.children.length > 0){
  65. $(element.children).each((a,b)=>{ //第二层
  66. if(b.children && b.children.length > 0){
  67. $(b.children).each((c,d)=>{ //第三层
  68. if(d.menuUrl === index){
  69. m = d;
  70. return false;
  71. }
  72. });
  73. }else if(b.menuUrl === index){
  74. m = b;
  75. return false;
  76. }
  77. });
  78. }else if(element.menuUrl === index){
  79. m = element;
  80. return false;
  81. }
  82. });
  83. this.$refs['navMenuForm'].menuAdd(m);
  84. }
  85. },
  86. watch: {
  87. }
  88. }
  89. </script>
  90. <style lang="less" scoped>
  91. .navbar-static-side {
  92. position: fixed;
  93. width: 220px;
  94. height: 100%;
  95. }
  96. .page-wrapper {
  97. position: inherit;
  98. margin: 0 0 0 220px;
  99. height: calc(100% - 51px);
  100. overflow: auto;
  101. width: calc(100% - 220px);
  102. }
  103. @media (max-width: 512px) {
  104. .navbar-static-side {
  105. display: none;
  106. }
  107. .page-wrapper {
  108. margin: 0px;
  109. }
  110. }
  111. .el-menu-item {
  112. color: #0064b2;
  113. i {
  114. color: #0064b2;
  115. margin-right: 3px;
  116. }
  117. }
  118. .el-submenu__title {
  119. color: #0064b2;
  120. i {
  121. color: #0064b2;
  122. margin-right: 3px;
  123. }
  124. span {
  125. color: #0064b2;
  126. }
  127. }
  128. </style>