三、Home 组件处理

布局 Home 组件基本结构

这里我们可以使用 Element 组件库中的 Container 布局容器 实现基本结构。

src/components/home/home.vue

  1. <template>
  2. <el-container class="container">
  3. <el-header class="header">Header</el-header>
  4. <el-container class="container">
  5. <el-aside class="aside" width="200px">Aside</el-aside>
  6. <el-main class="main">Main</el-main>
  7. </el-container>
  8. </el-container>
  9. </template>
  10. <script>
  11. export default {
  12. data () {
  13. return {}
  14. }
  15. }
  16. </script>
  17. <style>
  18. .header {
  19. background-color: #b3c1cd;
  20. }
  21. .container, .aside, .main, .aside .nav-menu {
  22. height: 100%;
  23. }
  24. .aside {
  25. background-color: #d4dfe4;
  26. }
  27. .main {
  28. background-color: #eaeef1;
  29. }
  30. </style>

布局侧边栏

src/components/home/home.vue

  1. <template>
  2. <el-container class="container">
  3. <el-header class="header">Header</el-header>
  4. <el-container class="container">
  5. <el-aside class="aside" width="200px">
  6. <el-menu
  7. default-active="2"
  8. class="nav-menu"
  9. unique-opened="true"
  10. @open="handleOpen"
  11. @close="handleClose"
  12. background-color="#545c64"
  13. text-color="#fff"
  14. active-text-color="#ffd04b">
  15. <el-submenu index="1">
  16. <template slot="title">
  17. <i class="el-icon-location"></i>
  18. <span>用户管理</span>
  19. </template>
  20. <el-menu-item index="1-1">用户列表</el-menu-item>
  21. </el-submenu>
  22. <el-submenu index="2">
  23. <template slot="title">
  24. <i class="el-icon-location"></i>
  25. <span>权限管理</span>
  26. </template>
  27. <el-menu-item index="2-1">角色列表</el-menu-item>
  28. <el-menu-item index="2-2">权限列表</el-menu-item>
  29. </el-submenu>
  30. <el-submenu index="3">
  31. <template slot="title">
  32. <i class="el-icon-location"></i>
  33. <span>商品管理</span>
  34. </template>
  35. <el-menu-item index="3-1">商品列表</el-menu-item>
  36. <el-menu-item index="3-2">分类参数</el-menu-item>
  37. <el-menu-item index="3-3">商品分类</el-menu-item>
  38. </el-submenu>
  39. <el-submenu index="4">
  40. <template slot="title">
  41. <i class="el-icon-location"></i>
  42. <span>订单管理</span>
  43. </template>
  44. <el-menu-item index="4-1">订单列表</el-menu-item>
  45. </el-submenu>
  46. <el-submenu index="5">
  47. <template slot="title">
  48. <i class="el-icon-location"></i>
  49. <span>数据统计</span>
  50. </template>
  51. <el-menu-item index="5-1">数据报表</el-menu-item>
  52. </el-submenu>
  53. </el-menu>
  54. </el-aside>
  55. <el-main class="main">Main</el-main>
  56. </el-container>
  57. </el-container>
  58. </template>

布局 Header 头部

这里我们使用的是 Element 组件库自带的 Layout 布局 来完成 Header 组件基本样式结构。

  1. <template>
  2. <el-container class="container">
  3. <el-header class="header">
  4. <el-row>
  5. <el-col :span="4">
  6. <img src="./logo.png" alt="黑马程序员">
  7. </el-col>
  8. <el-col :span="16">电商后台管理系统</el-col>
  9. <el-col :span="4">
  10. <a href="#">退出</a>
  11. </el-col>
  12. </el-row>
  13. </el-header>
  14. ... 代码略

处理用户退出

首先为顶部的退出按钮注册一个点击事件处理函数:

  1. <el-container class="container">
  2. <el-header class="header">
  3. <el-row>
  4. <el-col :span="4">
  5. <img src="./logo.png" alt="黑马程序员">
  6. </el-col>
  7. <el-col :span="16">电商后台管理系统</el-col>
  8. <el-col :span="4">
  9. <a @click.prevent="handleLogout" href="#">退出</a>
  10. </el-col>
  11. </el-row>
  12. </el-header>
  13. ... 代码略

methodshandleLogout 具体实现:

  1. // ... 代码略
  2. handleLogout () {
  3. this.$confirm('确认退出吗?', '退出提示', {
  4. confirmButtonText: '确定',
  5. cancelButtonText: '取消',
  6. type: 'warning'
  7. }).then(() => { // 用户点击 确定 执行这里
  8. // 1. 删除本地存储中的 token,也就是清除登陆状态
  9. window.localStorage.removeItem('token')
  10. // 2. 跳转到 /login
  11. this.$router.push('/login')
  12. this.$message({
  13. type: 'success',
  14. message: '退出成功!'
  15. })
  16. }).catch(() => { // 用户点击 取消 执行这里
  17. this.$message({
  18. type: 'info',
  19. message: '已取消退出'
  20. })
  21. })
  22. }
  23. // ... 代码略