pageLeft.vue 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <template>
  2. <div id="pageLeft" :class="{leftClose:!leftIsOpen}">
  3. <div class="leftContainer" v-if="leftIsOpen">
  4. <div class="topContainer">
  5. <div class="logoDiv">
  6. <img :src="logoUrl" class="logoImg" />
  7. </div>
  8. <div class="middDiv">
  9. <i class="el-icon-fa-bars fa fa-bars" @click="toggleLeft"></i>
  10. </div>
  11. </div>
  12. <div class="menuDiv">
  13. <el-menu
  14. text-color="#fff"
  15. active-text-color="#ffd04b"
  16. background-color="#364150"
  17. router
  18. >
  19. <el-menu-item-group v-for="menu in menus" :key="menu.id">
  20. <template slot="title">
  21. <span v-text="menu.name"></span>
  22. </template>
  23. <leftMenu
  24. :menu="subMenu"
  25. v-for="subMenu in menu.children"
  26. :key="subMenu.id"
  27. :index="subMenu.id"
  28. :leftIsOpen="leftIsOpen"
  29. ></leftMenu>
  30. </el-menu-item-group>
  31. </el-menu>
  32. </div>
  33. </div>
  34. <div class="leftContainer" v-if="!leftIsOpen">
  35. <div class="topContainer">
  36. <div class="middDiv middDivClose">
  37. <i class="el-icon-fa-bars fa fa-bars el-icon-fa-barsClose" @click="toggleLeft"></i>
  38. </div>
  39. </div>
  40. <div class="menuDiv">
  41. <el-menu
  42. text-color="#fff"
  43. active-text-color="#ffd04b"
  44. background-color="#364150"
  45. router
  46. >
  47. <el-menu-item-group v-for="menu in menus" :key="menu.id">
  48. <leftMenu
  49. :menu="subMenu"
  50. v-for="subMenu in menu.children"
  51. :key="subMenu.id"
  52. :index="subMenu.id"
  53. :leftIsOpen="leftIsOpen"
  54. ></leftMenu>
  55. </el-menu-item-group>
  56. </el-menu>
  57. </div>
  58. </div>
  59. </div>
  60. </template>
  61. <script>
  62. import { mapState } from "vuex";
  63. import leftMenu from "./leftMenu";
  64. export default {
  65. props: [],
  66. data() {
  67. return {
  68. leftIsOpen: true,
  69. logoUrl: require("@/assets/images/logo.png"),
  70. };
  71. },
  72. computed: {
  73. ...mapState(["menus"]),
  74. },
  75. methods: {
  76. toggleLeft: function () {
  77. this.leftIsOpen = !this.leftIsOpen;
  78. },
  79. },
  80. created() {},
  81. mounted() {},
  82. components: {
  83. leftMenu,
  84. },
  85. };
  86. </script>
  87. <style scoped>
  88. #pageLeft {
  89. width: 235px;
  90. height: 100%;
  91. }
  92. .leftClose{
  93. width:64px !important;
  94. }
  95. .leftContainer {
  96. display: flex;
  97. flex-direction: column;
  98. height: 100%;
  99. }
  100. .topContainer {
  101. background: #2b3643;
  102. height: 50px;
  103. display: flex;
  104. flex-direction: row;
  105. align-items: center;
  106. }
  107. .menuDiv {
  108. flex: 1;
  109. background: #364150;
  110. overflow: auto;
  111. }
  112. .logoImg {
  113. height: 18px;
  114. margin-left: 20px;
  115. }
  116. .el-icon-fa-bars {
  117. font-family: FontAwesome !important;
  118. font-size: inherit;
  119. font-style: normal;
  120. font-weight: 400;
  121. font-variant: normal;
  122. text-transform: none;
  123. line-height: 1;
  124. vertical-align: baseline;
  125. display: inline-block;
  126. -webkit-font-smoothing: antialiased;
  127. -moz-osx-font-smoothing: grayscale;
  128. color: #ffffff;
  129. margin-left: 88px;
  130. cursor: pointer;
  131. }
  132. .el-icon-fa-barsClose{
  133. margin-left: 0;
  134. }
  135. .logoDiv {
  136. flex: 1;
  137. }
  138. .middDiv {
  139. flex: 1;
  140. }
  141. .middDivClose{
  142. text-align: center;
  143. }
  144. .el-menu-item-group__title span {
  145. font-size: 14px !important;
  146. color: #68707b;
  147. font-weight: bold;
  148. }
  149. </style>