android系统定制开发Vue+ELementUI主页布局----侧边栏布局(el-aside)

第一节Login.vueandroid系统定制开发登录表单知识:

 

具体地址:


 

目录


一、android系统定制开发布满整个页面

如图所示,android系统定制开发当我们使用UIandroid系统定制开发库中的组件之后,android系统定制开发发现我们导入的组件并android系统定制开发不能布满全局,现在我们应该想办法解决

经过我们的筛选,我们发现是因为el-container的原因没有布满全屏,现在我们应该来修改一下

而且这个container就是我们Home.vue组件中最外层的container。

 

因为最外层的container比较特殊,我们特别的给她一个类名

  1. <el-container class="home-container">
  2. <!--头部 -->
  3. <el-header>Header</el-header>
  4. <!-- 页面主体区 嵌套容器 包裹 AsideMain -->
  5. <el-container>
  6. <!-- 左侧 -->
  7. <el-aside width="200px">Aside</el-aside>
  8. <!-- 主体 -->
  9. <el-main>Main</el-main>
  10. </el-container>
  11. </el-container>
  1. <style scoped lang="less">
  2. // 标签的名字就是类的名字
  3. .home-container{
  4. height: 100%;
  5. }
  6. .el-header{
  7. background-color: #373D41;
  8. }
  9. .el-aside{
  10. background-color: #333744;
  11. }
  12. .el-main{
  13. background-color: #EAEDF1;
  14. }
  15. </style>

最终完成我们需要的效果

二、主页Header布局

  1. <template>
  2. <el-container class="home-container">
  3. <!--头部 -->
  4. <el-header>
  5. <div>
  6. <img src="../assets/heima.png" alt="">
  7. <span>电商后台管理系统</span>
  8. </div>
  9. <!-- 退出按钮 -->
  10. <el-button type="info" @click="logout">退出</el-button>
  11. </el-header>
  12. <!-- 页面主体区 嵌套容器 包裹 Aside与Main -->
  13. <el-container>
  14. <!-- 左侧 -->
  15. <el-aside width="200px">Aside</el-aside>
  16. <!-- 主体 -->
  17. <el-main>Main</el-main>
  18. </el-container>
  19. </el-container>
  20. </template>
  21. <script >
  22. export default{
  23. name:'Home',
  24. methods:{
  25. // 退出操作
  26. logout(){
  27. // 清空token
  28. window.sessionStorage.clear()
  29. // 将登录页面转入到登录界面
  30. this.$router.push('/login')
  31. }
  32. }
  33. }
  34. </script>
  35. <style scoped lang="less">
  36. // 标签的名字就是类的名字
  37. .home-container{
  38. height: 100%;
  39. }
  40. .el-header{
  41. background-color: #373D41;
  42. display: flex;
  43. justify-content: space-between;
  44. padding-left: 0px;
  45. // 居中
  46. align-items:center;
  47. // 文本颜色
  48. color:#fff;
  49. // 文字大小
  50. font-size: 20px;
  51. // 给header中嵌套的div进行样式改造
  52. // 子代选择器
  53. >div{
  54. display:flex;
  55. // 纵向居中
  56. align-items:center;
  57. // 在给div中的span改造样式
  58. >span{
  59. margin-left: 20px;
  60. }
  61. }
  62. }
  63. .el-aside{
  64. background-color: #333744;
  65. }
  66. .el-main{
  67. background-color: #EAEDF1;
  68. }
  69. </style>

三、主页左侧带单布局

我们要实现的效果就是下图中的效果 :

  其中一级菜单要用<el-submenu>标签,二级菜单要在一级菜单内,要使用<el-menu-item>

其中一级菜单使用<el-submenu>标签之后,还可以再在里面嵌套一个<el-submenu>标签标签作为二级菜单,再在二级菜单中加一个<el-menu-item>三级菜单

  在一级菜单或二级菜单中涉及标题的内容的时候可以使用span标签(指定菜单的文本)

  其中的i标签就是来指定图标选项(就是文字左侧的小图标),具体情况如下图所示

我们也可以通过template标签给菜单指定图标i和文本span

四、拦截器添加token,保证拥有获取数据的权限

复习链接:

config就是请求对象,具体内容如下所示

.request就是一个请求拦截器,使用use函数为请求拦截器挂载一个回调函数

在发送请求时,会优先调用use函数

return config就说明给请求头做了一个预处理

 下面的我们的操作要根据后台的API接口进行工作

 在main.js中做出添加拦截器的操作

五、发起请求获取左侧菜单数据

当我们一登录完成之后,就应该立即获取左侧菜单,在页面进行展示

下图是res对象中的各种值

代码:    暂时还没有效果图,等到渲染完成之后效果图一起展示

  1. export default{
  2. name:'Home',
  3. data(){
  4. return{
  5. // 左侧菜单数据
  6. menulist:[]
  7. }
  8. },
  9. created(){
  10. // 获取左侧所有菜单(我们自己定义的一个方法)
  11. this.getMenuList()
  12. },
  13. methods:{
  14. // 退出操作
  15. logout(){
  16. // 清空token
  17. window.sessionStorage.clear()
  18. // 将登录页面转入到登录界面
  19. this.$router.push('/login')
  20. },
  21. // 获取所有的左侧菜单
  22. async getMenuList(){
  23. const {data:res} = await this.$http.get('menus')
  24. if(res.meta.status !==200)
  25. return this.$message.error(res.meta.msg)
  26. //运行到这里说明成功了
  27. this.menulist = res.data
  28. }
  29. },
  30. }

六、左侧菜单UI绘制

我们在获取左侧侧边栏的数据的时候写过 this.menulist = res.data,且从下图中我们可以看出来,data就是一个一级菜单,通过children属性又嵌套了二级菜单,我们需要将其渲染到左侧侧边栏

我们将使用了两个for循环,第一个for循环遍历一级菜单,第二个for循环遍历二级菜单

  1. <el-menu background-color="#545c64" text-color="#fff" active-text-color="#ffd04b">
  2. <!-- 一级菜单 -->
  3. <!-- :index="item.id" 如果不这么写,当我们点击以及菜单的时候,所有的以及菜单都会打开
  4. 添加一个空白字符串的原因就是这个地方index只要字符串 -->
  5. <el-submenu :index="item.id+''" v-for="item in menulist" :key="item.id">
  6. <!-- 一级菜单的模板区域 -->
  7. <template slot="title">
  8. <!-- 图标 -->
  9. <i class="el-icon-location"></i>
  10. <!-- 一级导航名称 -->
  11. <span>{{item.authName}}</span>
  12. </template>
  13. <!-- 二级菜单 -->
  14. <el-menu-item :index="subItem.id+''" v-for="subItem in item.children" :key="subItem.id">
  15. <template slot="title">
  16. <!-- 图标 -->
  17. <i class="el-icon-location"></i>
  18. <!-- 一级导航名称 -->
  19. <span>{{subItem.authName}}</span>
  20. </template>
  21. </el-menu-item>
  22. </el-submenu>
  23. </el-menu>

6.1优化一级菜单

  1. <!--background-color="#333744" 导航栏背景颜色
  2. text-color="#fff" 一级菜单字体的颜色
  3. active-text-color="#ffd04b" 点击二级菜单之后显示的字体颜色-->
  4. <el-menu background-color="#333744" text-color="#fff" active-text-color="#409BFF">
  1. <!-- 一级菜单 -->
  2. <!-- :index="item.id" 如果不这么写,当我们点击以及菜单的时候,所有的以及菜单都会打开
  3. 添加一个空白字符串的原因就是这个地方index只要字符串 -->
  4. <el-submenu :index="item.id+''" v-for="item in menulist" :key="item.id">
  5. <!-- 一级菜单的模板区域 -->
  6. <template slot="title">
  7. <!-- 图标 -->
  8. <i :class="iconsObj[item.id]"></i>
  9. <!-- 一级导航名称 -->
  10. <span>{{item.authName}}</span>
  11. </template>
  1. // 一级菜单栏的图标
  2. iconsObj:{
  3. '125':'iconfont icon-user',
  4. '103':'iconfont icon-tijikongjian',
  5. '101':'iconfont icon-shangpin',
  6. '102':'iconfont icon-danju',
  7. '145':'iconfont icon-baobiao',
  8. }

 让图片离右侧的文字稍微远一点

  1. .iconfont{
  2. margin-right:10px;
  3. }

6.2当打开一个一级菜单后其他一级菜单关闭

在ELement-UI文档中我们发现有这么一个unique-opened,是否只保持一个子菜单展开

 unique-opened也可以写成 :unique-opened="true"

6.3实现左侧菜单的折叠与展开功能

翻看文档,发现有一个参数是collapse,可以完成我们的需求

记得是在<el-menu>标签上添加 :collapse="true"

但是为了完成我们的需求,我们不能单单的写成上面那个样子,我们可以写成一个函,如下面所示:

  1. // 默认是不折叠的
  2. isCollapse:false
  1. // 点击按钮,切换菜单的折叠与展开
  2. toggleCollapse(){
  3. this.isCollapse = !this.isCollapse
  4. }

 效果图:

但是此时的效果并不是那么的完美,下图是我在一瞬家抓拍的,这个动画效果很不及时,我们下面就把这个动画效果给取消

我们又了解到下面的属性

然后现在我们发现 其中卡顿的动画效果消失了,但是当我们折叠起来后,我们的el-aside侧边栏是固定的,导致左边栏并没有折叠起来,这怎么办呢?

很简单,改变最上面文本的样式,当折叠之后,动态获取宽度就好了

 我们将侧边栏的宽度进行修改,不再是固定的,宽度以我们下面的图标宽度为基准

  1. <!-- 侧边栏区域 -->
  2. <el-aside :width="isCollapse ?'64px':'200px'" >

最终实现效果

 

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发