12.实现主页的基本布局

1.主页的页面布局

1.1选择页面布局

前往Element官网Container布局容器部分,寻找需要的页面布局,复制对应的代码到主页中。
在这里插入图片描述
在这里插入图片描述
对应代码:

<el-container>
  <el-header>Header</el-header>
  <el-container>
    <el-aside width="200px">Aside</el-aside>
    <el-main>Main</el-main>
  </el-container>
</el-container>

1.2对主页布局进行宽高设置

因为页面容器高度不会自动撑满整个页面,因此需要进行class和高度设置。

在这里插入图片描述
小知识:每个element标签,比如el-container,在浏览器中会以class的形式展示,因此可以通过.el-container对该类标签进行css设置,其他标签同理。但是如果有多个相同类名的标签,则需要再设置class类,避免样式的冲突。
在这里插入图片描述

2.el-header内容和样式

头部内容通常包括图标,标题和按钮或者链接,如图:
在这里插入图片描述
使用弹性布局即可,

<el-header>
  <div>
    <img src="../assets/logo.jpg" width="50px" height="50px" alt />
    <span>电商后台管理系统</span>
  </div>
  <el-button type="info" @click="logout">退出</el-button>
</el-header>
.el-header {
  background-color: #373d41;
  display: flex;
  justify-content: space-between;
  padding-left: 0;
  align-items: center;
  color: #ffffff;
  font-size: 20px;
  > div {
    display: flex;
    align-items: center;
    span {
      margin-left: 15px;
    }
  }
}

3.侧边栏内容和样式

3.1侧边栏基本结构

侧边栏直接使用elemen官网的navMenu导航菜单,找到合适的组件进行改造
在这里插入图片描述

<!-- 侧边栏 -->
<el-aside width="200px">
  <el-menu background-color="#545c64" text-color="#fff" active-text-color="#ffd04b">
    <el-submenu index="1">
      <template slot="title">
        <i class="el-icon-location"></i>
        <span>导航一</span>
      </template>
      <el-menu-item index="1-4-1">
        <template slot="title">
          <i class="el-icon-location"></i>
          <span>导航一</span>
        </template>
      </el-menu-item>
    </el-submenu>
  </el-menu>
</el-aside>

在这里插入图片描述
这样,一个基本的侧边栏结构就算完成了。

3.2侧边栏menu数据获取

3.2.1设置axios拦截器,挂载Authorization字段

查看后台项目api接口文档,
在这里插入图片描述
在这里插入图片描述
因为登录后的内容接口属于需要授权的API,因此必须在请求头中使用 Authorization 字段提供 token 令牌。
返回前端项目,在main.js添加拦截器,在请求头挂载Authorization ,这样需要权限的API在登录后就可以直接使用了。
在这里插入图片描述

//设置拦截器,登录时会自动执行(挂载Authorization,有权限的请求就能请求成功了)
axios.interceptors.request.use(config => {
  // console.log(config)
  config.headers.Authorization = window.sessionStorage.getItem('token')
  // 在最后必须要返回 config
  return config
})

打开控制台,查看Network,可以看到,登录前Headers中并没有 Authorization 字段
在这里插入图片描述
登录时,因为我们设置了拦截器,Headers中添加Authorization 字段,但是此时该字段为null。
在这里插入图片描述
在登录后,sessionStorage中的token才被赋值到Headers中的Authorization 字段。可以在进行获取menu数据或者其他需要Authorization 字段的请求中看到该字段的值。

3.2.2请求菜单数据

首先在data中设置menuList数组,用于存储请求的数据。在created函数中放置一个getMenuList方法用于获取menu数据
在这里插入图片描述
随后在methods中设置getMenuList方法
在这里插入图片描述

async getMenuList() {
  const { data: res } = await this.$http.get('menus')
  if (res.meta.status !== 200) return this.$message.error(res.meta.msg)
  this.menuList = res.data
  console.log(res)
},

可以看到Headers中的Authorization 字段已经获取了token,
在这里插入图片描述
在这里插入图片描述

3.3侧边栏内容和样式设置

内容:

 <!-- 侧边栏 -->
      <el-aside :width="isCollapse?'64px':'200px'">
        <div class="toggle-button" @click="toggleCollapse">|||</div>
        <!-- 侧边栏菜单区域 -->
        <el-menu
          background-color="#545c64"
          text-color="#fff"
          active-text-color="#4a7bcf"
          unique-opened
          :collapse="isCollapse"
          :collapse-transition="false"
        >
          <!-- 一级菜单 -->
          <el-submenu :index="item.id + ''" v-for="item in menuList" :key="item.id">
            <!-- 一级菜单的模板区域 -->
            <template slot="title">
              <!-- 图标 -->
              <i :class="iconsObj[item.id]"></i>
              <!-- 文本 -->
              <span>{{item.authName}}</span>
            </template>
            <!-- 二级菜单 -->
            <el-menu-item
              :index="subItem.id + ''"
              v-for="subItem in item.children"
              :key="subItem.id"
            >
              <template slot="title">
                <!-- 图标 -->
                <i class="el-icon-menu"></i>
                <!-- 文本 -->
                <span>{{subItem.authName}}</span>
              </template>
            </el-menu-item>
          </el-submenu>
        </el-menu>
      </el-aside>

样式:

.el-aside {
  background-color: rgb(84, 92, 100);
  .el-menu {
    // height: 100%;
    border-right: none;
  }
}
.el-icon {
  margin-right: 10px;
}
.toggle-button {
  background-color: rgb(84, 92, 100);
  color: #fff;
  text-align: center;
  font-size: 10px;
  height: 24px;
  line-height: 24px;
  letter-spacing: 0.1em;
  cursor: pointer;
}

methods中的侧边栏折叠方法

// 点击按钮,切换侧边栏的折叠和展开
toggleCollapse() {
  this.isCollapse = !this.isCollapse
}

根据item.id设置对应图标:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Sheldon一蓑烟雨任平生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值