Vue实战开发--后台管理系统Vue+Element ui(5)

这一节 我们对资源样式进行整合,在src下assets下放入images、less文件夹,可以通过我的附件进行下载,或者通过链接网盘链接下载,随后布局Header,并且引入vuex实现侧边栏展开收起功能。本节课完成效果图如下:

项目资源:https://pan.baidu.com/s/1BbbjR5MgeVm4XVP7FQzJlA 提取码:9xnb

1.载入样式文件

在main.js中引入,注意目录不要错。

2.Header布局

在components文件夹下新建CommonHeader.vue文件,Header也是公共组件,除了登录注册页面任何页面都有Aside和Header组件。

我们使用element ui里的el-button标签,el-button里的图标是一个属性icon,为el-button设定三个属性 plain、icon、size。下拉菜单用Dropdown。更改Dropdown的span标签将图片改成我们的user.png。图片在script代码中使用require动态载入。下拉菜单有两项,分别是个人中心和退出。

//CommonHeader.vue文件

<template>
  <header>
    <div class="l-content">
      <el-button plain icon="el-icon-menu" size="mini"></el-button>
      <!-- 面包屑,鼠标经过变暗 -->
      <h3 style="color: #fff">首页</h3>
    </div>
    <div class="r-content">
      <el-dropdown trigger="click" size="mini" >
        <span>
          <img class="user" :src="userImg">
        </span>
        <el-dropdown-menu slot="dropdown">
          <el-dropdown-item>个人中心</el-dropdown-item>
          <el-dropdown-item>退出</el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
    </div>
  </header>
</template>

<script>
export default ({
    data() {
        return{
            //动态引入图片
            userImg:require('../assets/images/user.png')
        }
    },
})
</script>

 这里分为两个盒子l-content、r-content。采用flex样式设计。

//CommonHeader.vue样式

<style lang="less" scoped>
    header{
        display: flex;
        height: 100%;
        justify-content: space-between;
        align-items: center;
    }
    .l-content{
        display: flex;
        align-items: center;
        .el-button{
            margin-right: 20px;
        }
    }
    .r-content{
        .user{
            width: 40px;
            left: 40px;
            border-radius: 50%;
        }
    }
</style>

在Main中引入CommonHeader.vue组件,这三句即可。

 3.按钮展开收起功能实现

这里有一个重要点,CommonAside组件中侧边栏展开跟isCollapse的值有关,false为展开,true为收起。而按钮是CommonHeader组件中的元素,这里涉及到兄弟组件中的通信,用vuex实现(重要!!!)

安装依赖npm i vuex@3.6.2。在跟目录新建store文件夹。在main.js中引入,引入的不是包而是store中的项目文件,并在Vue实例中加入store属性。

import store from '../store/index'

new Vue({
  store,
  router,
  render: h => h(App),
}).$mount('#app')

在store中新建index.js文件,引入vue和vuex,将vuex进行全局注入vue.use(Vuex)。创建Vuex.Store()实例,放入modules。存放会使用到的模块,这里使用到tab模块。这里引入tab并使用。

import Vue from 'vue'
import Vuex from 'vuex'
import tab from './tab'

Vue.use(Vuex)

export default new Vuex.Store({
    modules:{
        tab
    }
})

在store下新建tab.js文件,定义一个state,里面存放isCollapse的状态,默认是false,改变state需要定义mutations属性。在mutations属性中需要定义一个方法,collapseMenu方法,对isCollapse属性进行取反。

export default{
    state:{
        isCollapse:false
    },
    mutations:{
        collapseMenu(state){
            state.isCollapse = !state.isCollapse
        }
    }
}

在CommonAside中computed下新建isCollapse(),return state.iscollapse的状态。$store需要在全局注入的情况下才可以使用。

isCollapse(){
    return this.$store.state.tab.isCollapse
}

将原本写死的isCollapse注释掉。

接下来开始绑定button,在CommonHeader的el-botton标签下添加事件绑定,@click="handleMenu"。在methods中添加handleMenu方法

<el-button
@click="handleMenu"
plain icon="el-icon-menu"
size="mini"></el-button>
methods:{
      handleMenu(){
        this.$store.commit('collapseMenu')
      }
    }

至此,完成左侧导航栏的展开与收起。收起是会出现bug,出现字数太多无法过行的情况,这里对h3标签进行简单处理,使用三元表达式判断isCollapse的值是否是true,是1为收起,显示“后台”,是0显示完整名称。

<!-- <h3>通用后台管理系统</h3> -->
<h3>{{isCollapse ? '后台' : '通用后台管理系统'}}</h3>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值