Home.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. <!--
  2. * @Description:
  3. * @Version: 1.0
  4. * @Autor: zhuyijun
  5. * @Date: 2021-11-21 18:27:01
  6. * @LastEditTime: 2021-11-21 22:36:07
  7. -->
  8. <template>
  9. <!-- 头部区域 -->
  10. <el-container class="home-container">
  11. <el-header>
  12. <div>
  13. <img src="../assets/heima.png"
  14. alt="电商后台管理系统">
  15. <span>电商后台管理系统</span>
  16. </div>
  17. <el-button type="info"
  18. @click="logout">注销</el-button>
  19. </el-header>
  20. <!-- 页面主题区 -->
  21. <el-container>
  22. <!-- 侧边栏 -->
  23. <el-aside :width="isCollapse ?'64px':'200px'">
  24. <div class="toggle-button"
  25. @click="toggleCollapse">|||</div>
  26. <!-- 侧边栏菜单区
  27. :router="true" 可以将index当做路径
  28. -->
  29. <el-menu background-color="
  30. #333744"
  31. text-color="#fff"
  32. active-text-color="#409EFF"
  33. unique-opened
  34. :collapse="isCollapse"
  35. :collapse-transition="false"
  36. :router="true"
  37. :default-active="activePath">
  38. <!-- 一级菜单 -->
  39. <el-submenu :index="'/'+item.path"
  40. v-for="item in menuList"
  41. :key="item.id+''">
  42. <!-- 一级菜单模板区 -->
  43. <template slot="title">
  44. <!-- 图标 -->
  45. <i :class="iconsObj[item.id+'']"></i>
  46. <span> {{item.authName}}</span>
  47. </template>
  48. <!-- 二级菜单 -->
  49. <el-menu-item :index="'/'+subItem.path"
  50. v-for="subItem in item.children"
  51. :key="subItem.id+''"
  52. @click="saveNavState('/'+subItem.path)">
  53. <!-- 二级菜单模板区 -->
  54. <template slot="title">
  55. <!-- 图标 -->
  56. <i class="el-icon-menu"></i>
  57. <span>{{subItem.authName}}</span>
  58. </template>
  59. </el-menu-item>
  60. </el-submenu>
  61. </el-menu>
  62. </el-aside>
  63. <!-- 右侧主体 -->
  64. <el-main>
  65. <!-- 路由占位符 -->
  66. <router-view></router-view>
  67. </el-main>
  68. </el-container>
  69. </el-container>
  70. </template>
  71. <script>
  72. export default ({
  73. data () {
  74. return {
  75. menuList: {},
  76. iconsObj: {
  77. '125': 'el-icon-s-custom',
  78. '103': 'el-icon-s-management',
  79. '101': 'el-icon-s-shop',
  80. '102': 'el-icon-tickets',
  81. '145': 'el-icon-data-line'
  82. },
  83. isCollapse: false,
  84. activePath: ''
  85. }
  86. },
  87. created () {
  88. this.getMenuList()
  89. this.activePath = window.sessionStorage.getItem('activePath')
  90. },
  91. methods: {
  92. logout () {
  93. window.sessionStorage.clear()
  94. this.$router.push('/login')
  95. },
  96. // 获取所有的菜单
  97. async getMenuList () {
  98. const { data: res } = await this.$http.get('menus')
  99. if (res.meta.status !== 200) return this.$message.error(res.meta.msg)
  100. // this.$message.success(res.meta.msg)
  101. this.menuList = res.data
  102. // console.log(res)
  103. },
  104. // 折叠和展开
  105. toggleCollapse () {
  106. this.isCollapse = !this.isCollapse
  107. },
  108. saveNavState (activePath) {
  109. window.sessionStorage.setItem('activePath', activePath)
  110. this.activePath = activePath
  111. }
  112. }
  113. })
  114. </script>
  115. <style lang="less" scoped>
  116. .home-container {
  117. height: 100%;
  118. }
  119. .el-header {
  120. background-color: #373d41;
  121. display: flex;
  122. justify-content: space-between;
  123. padding-left: 0;
  124. align-items: center;
  125. color: #fff;
  126. font-size: 20px;
  127. }
  128. .el-header > div {
  129. display: flex;
  130. align-items: center;
  131. }
  132. .el-header > div > span {
  133. margin-left: 15px;
  134. }
  135. .el-aside {
  136. background-color: #333744;
  137. text-align: center;
  138. margin-left: 0;
  139. }
  140. .el-aside .el-menu {
  141. border-right: none;
  142. }
  143. .el-main {
  144. background-color: #eaedf1;
  145. }
  146. .el-submenu i {
  147. margin-right: 10px;
  148. }
  149. .toggle-button {
  150. background-color: #4a5064;
  151. font-size: 10px;
  152. line-height: 24px;
  153. color: #fff;
  154. text-align: center;
  155. letter-spacing: 0.2em;
  156. cursor: pointer;
  157. }
  158. </style>