美文网首页
侧边栏菜单与头部布局

侧边栏菜单与头部布局

作者: amanohina | 来源:发表于2021-03-01 17:47 被阅读0次

布局容器

通过Element的Container布局容器进行初始布局。
项目需要的布局风格为示例中倒数第二个,所以我们要拷贝下来对应的结构

该项目所需要的结构
<!-- layout/index.vue -->
<template>
  <el-container>
    <!-- 侧边栏 -->
    <el-aside width="200px">Aside</el-aside>
    <el-container>
      <!-- 头部 -->
      <el-header>Header</el-header>
      <!-- 主体 -->
      <el-main>Main</el-main>
    </el-container>
  </el-container>
</template>

Element组件具有与组件名相同的类名,所以可以用来设置样式

  • 容器高度通过vh来设置,1vh=1%的视口高度;设置最小宽度防止窗口尺寸变化导致内容堆叠
  • 内部区域根据Element颜色设置或者自行选择
<!-- layout/index.vue -->
<style lang="scss" scoped>
  .el-container {
    height: 100vh;
    min-width: 980px;
  }
  .el-aside {
    background-color: #d3dce6;
  }
  .el-header {
    background-color: #b3c0d1;
  }
  .el-main {
    background-color: #e9eef3;
  }
</style>

侧边栏菜单

通过Element的NavMenu创建侧边栏
找到NavMenu的侧栏中自定义颜色示例的结构

<template>
  <div class="app-aside">
    <!-- default-active属性是默认激活第几项,第一项因为是可以下拉的,不会被选中所以不会变色 -->
    <el-menu
      default-active="1"
      class="el-menu-vertical-demo"
      @open="handleOpen"
      @close="handleClose"
      background-color="#545c64"
      text-color="#fff"
      active-text-color="#ffd04b"
    >
    <!-- el-submenu,表示有子菜单的标签 -->
      <el-submenu index="1">
        <template slot="title">
          <i class="el-icon-location"></i>
          <span>导航一</span>
        </template>
        <el-menu-item-group>
          <template slot="title">分组一</template>
          <el-menu-item index="1-1">选项1</el-menu-item>
          <el-menu-item index="1-2">选项2</el-menu-item>
        </el-menu-item-group>
        <el-menu-item-group title="分组2">
          <el-menu-item index="1-3">选项3</el-menu-item>
        </el-menu-item-group>
        <el-submenu index="1-4">
          <template slot="title">选项4</template>
          <el-menu-item index="1-4-1">选项1</el-menu-item>
        </el-submenu>
      </el-submenu>
      <el-menu-item index="2">
        <i class="el-icon-menu"></i>
        <span slot="title">导航二</span>
      </el-menu-item>
      <!-- 附带disabled属性表示不可选 -->
      <el-menu-item index="3" disabled>
        <i class="el-icon-document"></i>
        <span slot="title">导航三</span>
      </el-menu-item>
      <el-menu-item index="4">
        <i class="el-icon-setting"></i>
        <span slot="title">导航四</span>
      </el-menu-item>
    </el-menu>
  </div>
</template>

<script>
export default {
  name: 'AppAside'
}
</script>

<style lang = "scss" scoped>
.app-aside {
    height: 100%;
    .el-menu {
        height: 100%;
        border-right: 0 none;
    }
}
</style>

这些标签各自都是什么含义,从文档中都是可以看到的

例图

将layout中的侧边栏设置为AppAside组件,保存在layout/components/中
随后将之前的侧边栏菜单组件代码放入
初始结构中<el-menu>设置了open和close事件,不需要的话可以删除掉

@open = "handleOpen"
@close = "handleClose"

在layout中引入AppAside组件



根据我们自身的项目所需修改结构,调整功能

  • <el-menu-item>代表的是没有子项的菜单
  • <el-submenu>代表的则是有子项的菜单
  • 操作的时候如果为了优化美观之类的设置两个<submenu>不能同时展开,设置方式是给<el-menu>添加unique-opened属性,可以查阅Element文档得知
  • 还有一点:当我们点击列表项的时候,应该进行路由操作,我们可以使用文档的NavMenu的router功能
    • 使用的方法:给<el-menu>设置router属性,就可以使用vue-router模式了
    • 该模式激活之后以index属性作为path进行路由跳转
      全部设置完毕啦,最终代码为:
// /layout/components/AppAside.vue
<template>
  <div class="app-aside">
    <!-- 导航菜单组件 -->
    <el-menu
      default-active="1"
      class="el-menu-vertical-demo"
      background-color="#545c64"
      text-color="#fff"
      active-text-color="#ffd04b"
      unique-opened
      router
      >
      <!-- 具有子菜单的选项 -->
      <el-submenu index="1">
        <template slot="title">
          <i class="el-icon-location"></i>
          <span>权限管理</span>
        </template>
          <el-menu-item index="/role">
          <i class="el-icon-document"></i>
            <span>角色列表</span>
          </el-menu-item>
          <el-menu-item index="/menu">
          <i class="el-icon-document"></i>
            <span>菜单列表</span>
          </el-menu-item>
          <el-menu-item index="/resource">
          <i class="el-icon-document"></i>
            <span>资源列表</span>
          </el-menu-item>
      </el-submenu>
      <!-- 没有子菜单的选项 -->
      <el-menu-item index="/course">
        <i class="el-icon-menu"></i>
        <span slot="title">课程管理</span>
      </el-menu-item>
      <el-menu-item index="/user">
        <i class="el-icon-document"></i>
        <span slot="title">用户管理</span>
      </el-menu-item>
      <el-submenu index="4">
        <template slot="title">
          <i class="el-icon-setting"></i>
          <span slot="title">广告管理</span>
        </template>
        <el-menu-item index="/advert">
          <i class="el-icon-document"></i>
          <span>广告列表</span>
        </el-menu-item>
        <el-menu-item index="/advert-space">
          <i class="el-icon-document"></i>
          <span>广告位列表</span>
        </el-menu-item>
      </el-submenu>
    </el-menu>
  </div>
</template>

<script>
export default {
  name: 'AppAside'
}
</script>

<style lang="scss" scoped>
.app-aside {
  height: 100%;
  .el-menu {
    height: 100%;
    border-right: 0 none;
  }
}
</style>

路由切换设置成功了,那么接下来就是在layout组件中设置子路由的出口就可以完成了

<template>
  <el-container>
    <!-- 侧边栏 -->
    <el-aside width="200px">
      <!-- 侧边栏组件 -->
      <app-aside></app-aside>
    </el-aside>
    <el-container>
      <!-- 头部 -->
      <el-header>Header</el-header>
      <!-- 主体 -->
      <el-main>
        <!-- 子路由的出口 -->
        <router-view></router-view>
      </el-main>
    </el-container>
  </el-container>
</template>

头部

头部分为左侧导航和右侧用户菜单


如图所示

首先,将头部封装成AppHeader组件,保存到layout/components/中

<template>
  <div class="app-header"></div>
</template>

<script>
export default {
  name: 'AppHeader'
}
</script>

<style lang="sass" scoped>

</style>

在layout中引入AppHeader组件

`<template>
  <el-container>
    <!-- 侧边栏 -->
    <el-aside width="200px">
      <!-- 侧边栏组件 -->
      <app-aside></app-aside>
    </el-aside>
    <el-container>
      <!-- 头部 -->
      <el-header>
        <!-- 头部组件 -->
        <app-header></app-header>
      </el-header>
      <!-- 主体 -->
      <el-main>
        <!-- 子路由的出口 -->
        <router-view></router-view>
      </el-main>
    </el-container>
  </el-container>
</template>

<script>
// 引入侧边栏组件
import AppAside from './components/AppAside'
import AppHeader from './components/AppHeader'

export default {
  name: 'Layout',
  components: {
    AppAside,
    AppHeader
  }
}
</script>

头部-左侧

左侧使用Element面包屑导航

<!-- AppHeader.vue -->
<template>
  <div class="app-header">
    <el-breadcrumb separator="/">
      <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
      <el-breadcrumb-item><a href="/">活动管理</a></el-breadcrumb-item>
      <el-breadcrumb-item>活动列表</el-breadcrumb-item>
      <el-breadcrumb-item>活动详情</el-breadcrumb-item>
    </el-breadcrumb>
  </div>
</template>

修改背景色(目的是防止箭头颜色和背景颜色混淆)

// layout/index.vue
.el-header {
  background-color : #fff;
}

设置头部内容垂直居中

//AppHeader.vue
<style lang="scss" scoped>
.app-header {
  height: 100%;
  display: flex;
  align-items: center; //设置垂直居中
}
</style>

头部-右侧

使用Element的下拉菜单来设置

<!-- 右侧下拉菜单 -->
    <el-dropdown>
      <span class="el-dropdown-link">
        下拉菜单<i class="el-icon-arrow-down el-icon--right"></i>
      </span>
      <el-dropdown-menu slot="dropdown">
        <el-dropdown-item>黄金糕</el-dropdown-item>
        <el-dropdown-item>狮子头</el-dropdown-item>
        <el-dropdown-item>螺蛳粉</el-dropdown-item>
        <el-dropdown-item disabled>双皮奶</el-dropdown-item>
        <el-dropdown-item divided>蚵仔煎</el-dropdown-item>
      </el-dropdown-menu>
    </el-dropdown>

设置左右显示

justify-content: space-between;

将下拉菜单文字更改为Element的Avatar组件

 <!-- 用户头像,使用了Avatar组件 -->
        <el-avatar
        :size="30"
        src="https://cube.elemecdn.com/3/7c/3ea6beec64369c2642b92c6726f1epng.png">
        </el-avatar>

设置头像与侧箭头垂直居中

.el-dropdown-link {
      display: flex;
      align-items: center;
  }

最后,修改下拉菜单的内容与结构,divided用于设置分割线

<el-dropdown-menu slot="dropdown">
        <el-dropdown-item>用户信息</el-dropdown-item>
        <el-dropdown-item divided>登出</el-dropdown-item>
      </el-dropdown-menu>
</el-dropdown>

相关文章

网友评论

      本文标题:侧边栏菜单与头部布局

      本文链接:https://www.haomeiwen.com/subject/ncdifltx.html