Header Aside Main &l_后台管理系统首页">
当前位置:   article > 正文

后台管理系统——02首页布局_后台管理系统首页

后台管理系统首页

续上01,接下来实现layout.vue的基本布局

layout.vue

  1. <template>
  2. <div class="home">
  3. <el-container>
  4. <el-header>Header</el-header>
  5. <el-container>
  6. <el-aside width="200px">Aside</el-aside>
  7. <el-main>Main</el-main>
  8. </el-container>
  9. </el-container>
  10. </div>
  11. </template>
  12. <script>
  13. // @ is an alias to /src
  14. export default {
  15. name: 'layout',
  16. }
  17. </script>
  18. <style>
  19. .el-header {
  20. background-color: #B3C0D1;
  21. color: #333;
  22. text-align: center;
  23. line-height: 60px;
  24. }
  25. .el-aside {
  26. background-color: #D3DCE6;
  27. color: #333;
  28. text-align: center;
  29. line-height: 200px;
  30. position: absolute;
  31. top: 60px;
  32. bottom: 0;
  33. }
  34. .el-main {
  35. background-color: #E9EEF3;
  36. color: #333;
  37. text-align: center;
  38. line-height: 160px;
  39. position: absolute;
  40. top: 60px;
  41. left: 200px;
  42. right: 0;
  43. bottom: 0;
  44. }
  45. body > .el-container {
  46. margin-bottom: 40px;
  47. }
  48. .el-container:nth-child(5) .el-aside,
  49. .el-container:nth-child(6) .el-aside {
  50. line-height: 260px;
  51. }
  52. .el-container:nth-child(7) .el-aside {
  53. line-height: 320px;
  54. }
  55. </style>

效果:

 测试一下是否可以分开滚动


制作header的导航栏

 这里用到了bootstrap4中的mr-auto

  1. <template>
  2. <div class="home">
  3. <el-container>
  4. <el-header>
  5. <div class="flex mr-auto ">
  6. <h2 class="tit">WEB ADMIN</h2>
  7. <i class="el-icon-s-fold" @click="menucollapse"></i>
  8. </div>
  9. <el-menu
  10. :default-active="activeIndex2"
  11. class="el-menu-demo"
  12. mode="horizontal"
  13. @select="handleSelect"
  14. background-color="#545c64"
  15. text-color="#fff"
  16. active-text-color="#ffd04b"
  17. >
  18. <el-menu-item index="1">处理中心</el-menu-item>
  19. <el-submenu index="2">
  20. <template slot="title">我的工作台</template>
  21. <el-menu-item index="2-1">选项1</el-menu-item>
  22. <el-menu-item index="2-2">选项2</el-menu-item>
  23. <el-menu-item index="2-3">选项3</el-menu-item>
  24. <el-submenu index="2-4">
  25. <template slot="title">选项4</template>
  26. <el-menu-item index="2-4-1">选项1</el-menu-item>
  27. <el-menu-item index="2-4-2">选项2</el-menu-item>
  28. <el-menu-item index="2-4-3">选项3</el-menu-item>
  29. </el-submenu>
  30. </el-submenu>
  31. <el-menu-item index="3" disabled>消息中心</el-menu-item>
  32. <el-menu-item index="4"
  33. ><a href="https://www.ele.me" target="_blank"
  34. >订单管理</a
  35. ></el-menu-item
  36. >
  37. </el-menu>
  38. </el-header>
  39. </div>
  40. </template>
  41. <script>
  42. export default {
  43. name: "layout",
  44. data() {
  45. return {
  46. activeIndex: "1",
  47. activeIndex2: "1",
  48. };
  49. },
  50. methods: {
  51. handleSelect(key, keyPath) {
  52. console.log(key, keyPath);
  53. },
  54. },
  55. };
  56. </script>
  57. <style>
  58. .el-header {
  59. background-color: #545c64;
  60. color: #333;
  61. text-align: center;
  62. line-height: 60px;
  63. display: flex;
  64. }
  65. .el-aside {
  66. background-color: #d3dce6;
  67. color: #333;
  68. text-align: center;
  69. /* position: absolute;
  70. top: 60px;
  71. bottom: 0; */
  72. }
  73. .el-main {
  74. background-color: #e9eef3;
  75. color: #333;
  76. /* padding: 0 20px; */
  77. text-align: center;
  78. /* position: absolute;
  79. top: 60px;
  80. left: 200px;
  81. right: 0;
  82. bottom: 0; */
  83. }
  84. .flex {
  85. display: flex;
  86. align-items: center;
  87. color: #fff;
  88. cursor: pointer;
  89. }
  90. </style>

添加图片:

  1. <el-submenu index="2">
  2. <template slot="title">
  3. <el-avatar
  4. size="small"
  5. src="https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png"
  6. ></el-avatar>
  7. admin
  8. </template>
  9. <el-menu-item index="2-1">设置</el-menu-item>
  10. <el-menu-item index="2-2">退出</el-menu-item>
  11. </el-submenu>

把数据结构中的数据放入对应的位置上

数据结构:

  1. navBar: {
  2. active: "0",
  3. list: [
  4. {
  5. name: "首页",
  6. subActive: "0",
  7. submenu: [
  8. {
  9. icon: "el-icon-s-home",
  10. name: "后台首页",
  11. pathname: "index",
  12. },
  13. {
  14. icon: "el-icon-s-claim",
  15. name: "商品列表",
  16. pathname: "shop_goods_list",
  17. },
  18. ],
  19. },
  20. {
  21. name: "商品",
  22. subActive: "0",
  23. submenu: [
  24. {
  25. icon: "el-icon-s-claim",
  26. name: "商品列表",
  27. pathname: "shop_goods_list",
  28. },
  29. ],
  30. },
  31. {
  32. name: "订单",
  33. },
  34. {
  35. name: "会员",
  36. },
  37. {
  38. name: "设置",
  39. },
  40. ],
  41. },

 遍历数据结构,取出中间的name

<el-menu-item index="1" v-for="(item, index) in navBar.list" :key="index">{{item.name}}</el-menu-item>
  1. <el-menu
  2. :default-active="navBar.active"
  3. class="el-menu-demo"
  4. mode="horizontal"
  5. @select="handleSelect"
  6. background-color="#545c64"
  7. text-color="#fff"
  8. active-text-color="#ffd04b"
  9. >

完整布局代码: 

  1. <template>
  2. <div class="home">
  3. <el-container>
  4. <el-header>
  5. <div class="flex mr-auto">
  6. <h2 class="tit">WEB ADMIN</h2>
  7. <!-- 这里设置一个点击事件用来切换侧边栏的效果 -->
  8. <i class="el-icon-s-operation" @click="menucollapse"></i>
  9. </div>
  10. <el-menu
  11. :default-active="navBar.active"
  12. class="el-menu-demo"
  13. mode="horizontal"
  14. @select="handleSelect"
  15. background-color="#545c64"
  16. text-color="#fff"
  17. active-text-color="#ffd04b"
  18. >
  19. <el-menu-item
  20. :index="index | numToString"
  21. v-for="(item, index) in navBar.list"
  22. :key="index"
  23. >{{ item.name }}</el-menu-item
  24. >
  25. <el-submenu index="100">
  26. <template slot="title">
  27. <el-avatar
  28. size="small"
  29. src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png"
  30. ></el-avatar>
  31. admin
  32. </template>
  33. <el-menu-item index="2-1">设置</el-menu-item>
  34. <el-menu-item index="2-2">退出</el-menu-item>
  35. </el-submenu>
  36. </el-menu>
  37. </el-header>
  38. <el-container style="height: 100%">
  39. <!-- 获取他的动态高度,如果开启了collapse收起,那么就缩小成64px,展开就放大200px -->
  40. <!-- :width="collapse ? '64px' : '200px'" style="height: 100%" -->
  41. <el-aside width="auto">
  42. <!-- default-active:gg当前激活菜单的 index -->
  43. <el-menu
  44. :default-active="slideMenuActive"
  45. :collapse="collapse"
  46. class="el-menu-vertical-demo"
  47. active-text-color="#008080"
  48. @select="submenuSelect"
  49. >
  50. <el-menu-item
  51. :index="i | numToString"
  52. v-for="(item2, i) in submenus"
  53. :key="i"
  54. >
  55. <i :class="item2.icon"></i>
  56. <span slot="title">{{ item2.name }}</span>
  57. </el-menu-item>
  58. </el-menu>
  59. </el-aside>
  60. <el-main>
  61. <p v-for="j in 100" :key="j">{{ j }}</p>
  62. </el-main>
  63. </el-container>
  64. </el-container>
  65. </div>
  66. </template>
  67. <script>
  68. // 混入
  69. import common from "@/common/mixins/common.js";
  70. export default {
  71. name: "layout",
  72. mixins: [common],
  73. data() {
  74. return {
  75. collapse: false,
  76. navBar: {
  77. active: "0",
  78. list: [
  79. {
  80. name: "首页",
  81. subActive: "0",
  82. submenu: [
  83. {
  84. icon: "el-icon-s-home",
  85. name: "后台首页",
  86. pathname: "index",
  87. },
  88. {
  89. icon: "el-icon-s-claim",
  90. name: "商品列表",
  91. pathname: "shop_goods_list",
  92. },
  93. ],
  94. },
  95. {
  96. name: "商品",
  97. subActive: "0",
  98. submenu: [
  99. {
  100. icon: "el-icon-s-claim",
  101. name: "商品列表",
  102. pathname: "shop_goods_list",
  103. },
  104. ],
  105. },
  106. {
  107. name: "订单",
  108. },
  109. {
  110. name: "会员",
  111. },
  112. {
  113. name: "设置",
  114. },
  115. ],
  116. },
  117. };
  118. },
  119. methods: {
  120. // 点击图标进行切换
  121. menucollapse() {
  122. this.collapse = !this.collapse;
  123. },
  124. // 头部索引切换
  125. handleSelect(key, keyPath) {
  126. // 把获取到的索引给到active进行绑定
  127. this.navBar.active = key;
  128. console.log(this.navBar.active);
  129. this.slideMenuActive = "0";
  130. console.log(this.slideMenuActive);
  131. },
  132. // 侧边栏导航切换
  133. submenuSelect(key, keyPath) {
  134. console.log(key, keyPath);
  135. this.slideMenuActive = key;
  136. },
  137. },
  138. computed: {
  139. submenus() {
  140. // 每次点击的list列表项 例如点击首页:
  141. // [ { "icon": "el-icon-s-claim", "name": "商品列表", "pathname": "shop_goods_list" } ]
  142. return this.navBar.list[this.navBar.active].submenu || [];
  143. },
  144. slideMenuActive: {
  145. get() {
  146. return this.navBar.list[this.navBar.active].subActive || "0";
  147. },
  148. set(val) {
  149. this.navBar.list[this.navBar.active].subActive = val;
  150. },
  151. },
  152. },
  153. };
  154. </script>
  155. <style>
  156. .home{
  157. height: 100%;
  158. }
  159. .el-container{
  160. height: 100%;
  161. overflow: hidden;
  162. }
  163. .el-menu-vertical-demo:not(.el-menu--collapse) {
  164. width: 200px;
  165. min-height: 400px;
  166. }
  167. .el-header {
  168. background-color: #545c64;
  169. color: #333;
  170. text-align: center;
  171. line-height: 60px;
  172. display: flex;
  173. }
  174. .el-aside {
  175. background-color: #d3dce6;
  176. color: #333;
  177. text-align: center;
  178. /* position: absolute;
  179. top: 60px;
  180. bottom: 0; */
  181. }
  182. .el-main {
  183. background-color: #e9eef3;
  184. color: #333;
  185. padding: 0 20px;
  186. text-align: center;
  187. /* position: absolute;
  188. top: 60px;
  189. left: 200px;
  190. right: 0;
  191. bottom: 0; */
  192. }
  193. .flex {
  194. display: flex;
  195. align-items: center;
  196. color: #fff;
  197. cursor: pointer;
  198. }
  199. .tit {
  200. font-size: 24px;
  201. line-height: 60px;
  202. margin-right: 40px;
  203. }
  204. .el-menu{
  205. height: 100%;
  206. }
  207. </style>

效果:

 注意事项:

参数说明类型可选值默认值
collapse是否水平折叠收起菜单(仅在 mode 为 vertical 时可用)booleanfalse
事件名称说明回调参数
select菜单激活回调index: 选中菜单项的 index, indexPath: 选中菜单项的 index path

 |  在vue里是一个管道符号,前面为你要过滤的值,后面是过滤器,所谓过滤就是你筛选后的值

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/775268
推荐阅读
相关标签