

<template><div><!-- 头部 --><Header></Header><!-- 左侧菜单 --><Asider></Asider><!-- 内容显示区域 --><router-view></router-view></div></template><script>import Asider from '@/components/Asider'import Header from '@/components/Header'export default {components:{Asider,Header}}</script>
1、左侧菜单编写

<template><div class="sidebar"><el-menuclass="sidebar-el-menu":default-active="onRoutes":collapse="collapse"background-color="#334256"text-color="#ffffff"active-text-color="#20a0ff"router><template v-for="item in items"><template><el-menu-item :index="item.index" :key="item.index"><i :class="item.icon"></i>{{item.title}}</el-menu-item></template></template></el-menu></div></template><script>import bus from "../assets/js/bus"export default {data(){return{collapse: false,items:[{icon: 'el-icon-document', //表示选项图标index: 'Info', //表示跳转到哪个路由title: '系统首页' //表示选项的标题},{icon: 'el-icon-document',index: 'Consumer',title: '用户管理'},{icon: 'el-icon-document',index: 'Singer',title: '歌手管理'},{icon: 'el-icon-document',index: 'SongList',title: '歌单管理'},]}},computed:{onRoutes(){return this.$route.path.replace('/',''); //表示默认选中哪个路由,让其处于选中状态}},created(){//通过Bus进行组件间的通信,来折叠侧边栏//接收Header头部传过来的信息,判断collapse是否为true,来折叠侧边栏bus.$on('collapse',msg =>{this.collapse = msg})}}</script><style scoped>.sidebar {display: block;position: absolute;left: 0;top: 70px;bottom: 0;background-color: #334256;overflow-y: scroll;}.sidebar::-webkit-scrollbar{width: 0;}.sidebar-el-menu:not(.el-menu--collapse){width: 150px;}.sidebar >ul {height: 100%;}</style>
:default-active=”onRoutes” 表示默认选中哪个路由 :collapse=”collapse” 表示当collapse为true时,打开选项卡,否则,关闭选项卡 router 表示跳到哪个路由,与index一起搭配使用
2、头部菜单编写

<template><div class="header"><!-- 折叠图片 --><div class="collapse-btn" @click="collapseChange"><i class="el-icon-menu"></i></div><div class="logo">music后台管理</div><div class="header-right"><div class="btn-fullscreen" @click="handleFullScreen"><el-tooltip :content="fullscreen?`取消全屏`:`全屏`" placement="bottom"><i class="el-icon-rank"></i></el-tooltip></div><div class="user-avator"><img src="../assets/img/user.jpg"/></div><el-dropdown class="user-name" trigger="click" @command="handleCommand"><span class="el-dropdown-link">{{userName}}<i class="el-icon-caret-bottom"></i></span><el-dropdown-menu slot="dropdown"><el-dropdown-item command="logout">退出登录</el-dropdown-item></el-dropdown-menu></el-dropdown></div></div></template><script>import bus from "../assets/js/bus";export default {data(){return{collapse: false,fullscreen:false}},computed:{//获取用户名userName(){return localStorage.getItem('userName');}},methods:{//侧边栏折叠collapseChange(){this.collapse = !this.collapse;bus.$emit('collapse',this.collapse);},//全屏事件handleFullScreen(){if(this.fullscreen){if(document.exitFullscreen){document.exitFullscreen();}else if(document.webkitCancelFullScreen){ //safari 、Chromedocument.webkitCancelFullScreen();}else if (document.mozCancelFullScreen){ //firefoxdocument.mozCancelFullScreen();}else if(document.msExitFullScreen){ //iedocument.msExitFullScreen();}}else{let element = document.documentElement;if(element.requestFullscreen){element.requestFullscreen();}else if(element.webkitRequestFullScreen){ //safari 、Chromeelement.webkitRequestFullScreen();}else if(element.mozRequestFullScreen){ //firefoxelement.mozRequestFullScreen();}else if (element.msRequestFullScreen){ //ieelement.msRequestFullScreen();}}this.fullscreen = !this.fullscreen;},//退出登录handleCommand(command){if(command == "logout"){localStorage.removeItem('userName');this.$router.push("/");}}}}</script><style scoped>.header{position: relative;background-color: #253041;box-sizing: border-box;width: 100%;height: 70px;font-size: 22px;color: #ffffff;}.collapse-btn{float: left;padding: 0 21px;cursor: pointer;line-height: 70px;}.header .logo{float: left;line-height: 70px;}.header-right{float: right;padding-right: 50px;display:flex;height: 70px;align-items: center;}.btn-fullscreen{transform: rotate(45deg);margin-right: 5px;font-size: 24px;}.user-avator{margin-left: 20px;}.user-avator img{display: block;width: 40px;height: 40px;border-radius: 50%;}.user-name{margin-left: 10px;}.el-dropdown-link{color: #ffffff;cursor: pointer;}</style>
2.1 侧边栏折叠
:collapse=”collapse” 表示当collapse为true时,打开选项卡,否则,关闭选项卡
<!-- 折叠图片 --><div class="collapse-btn" @click="collapseChange"><i class="el-icon-menu"></i></div>
//侧边栏折叠collapseChange(){this.collapse = !this.collapse;bus.$emit('collapse',this.collapse);},
当点击侧边栏折叠图标时,发送一个侧边栏折叠事件总线,给父组件及其他组件调用。
通过this.$emit(‘事件名称’,值); 进行通知其他组件进行侧边栏的折叠
created(){//通过Bus进行组件间的通信,来折叠侧边栏bus.$on('collapse',msg =>{this.collapse = msg})}
其他组件,通过this.$on(‘事件名称保持一致’,回调函数就是传过来的值),来接收组件间的通信;
2.2 全屏事件
<div class="btn-fullscreen" @click="handleFullScreen"><el-tooltip :content="fullscreen?`取消全屏`:`全屏`" placement="bottom"><i class="el-icon-rank"></i></el-tooltip></div>
//全屏事件handleFullScreen(){if(this.fullscreen){ //表示当前全屏状态,需要退出全屏if(document.exitFullscreen){document.exitFullscreen();}else if(document.webkitCancelFullScreen){ //safari 、Chromedocument.webkitCancelFullScreen();}else if (document.mozCancelFullScreen){ //firefoxdocument.mozCancelFullScreen();}else if(document.msExitFullScreen){ //iedocument.msExitFullScreen();}}else{ //表示当前退出全屏状态,需要打开全屏let element = document.documentElement;if(element.requestFullscreen){element.requestFullscreen();}else if(element.webkitRequestFullScreen){ //safari 、Chromeelement.webkitRequestFullScreen();}else if(element.mozRequestFullScreen){ //firefoxelement.mozRequestFullScreen();}else if (element.msRequestFullScreen){ //ieelement.msRequestFullScreen();}}this.fullscreen = !this.fullscreen;},
document.exitFullscreen() 表示退出全屏; element.mozRequestFullScreen() 表示打开全屏;
2.3 获取登录的用户名
computed:{//获取用户名userName(){return localStorage.getItem('userName');}},
2.4 退出登录
<div class="user-avator"><img src="../assets/img/user.jpg"/></div><el-dropdown class="user-name" trigger="click" @command="handleCommand"><span class="el-dropdown-link"><!-- 用户名 -->{{userName}}<i class="el-icon-caret-bottom"></i></span><el-dropdown-menu slot="dropdown"><el-dropdown-item command="logout">退出登录</el-dropdown-item></el-dropdown-menu></el-dropdown>
//退出登录handleCommand(command){if(command == "logout"){//移除本地客户端存储的用户名localStorage.removeItem('userName');//跳转到登录页面this.$router.push("/");}}
3、Home主页面编写

<template><div><!-- 头部 --><Header></Header><!-- 左侧菜单 --><Asider></Asider><!-- 内容显示区域 --><div class="content-box" :class="{'content-collapse':collapse}"><router-view></router-view></div></div></template><script>import Asider from '@/components/Asider'import Header from '@/components/Header'import bus from "../assets/js/bus";export default {components:{Asider,Header},data(){return {collapse: false}},created(){//通过Bus进行组件间的通信,来折叠侧边栏bus.$on('collapse',msg =>{this.collapse = msg})}}</script>
:class=”{‘content-collapse’:collapse}” 表示当点击折叠侧边栏的时候,内容显示区域也随之侧边栏折叠改变而改变
4、编写内容显示Page页面


配置路由
export default new Router({routes: [{path: '/',component: resolve => require(['../pages/Login.vue'], resolve)},{path: '/Home',component: resolve => require(['../components/Home.vue'], resolve),children:[{path: '/Info',name : '后台首页',component: resolve => require(['../pages/InfoPage.vue'], resolve)},{path: '/Consumer',name : '用户管理页面',component: resolve => require(['../pages/ConsumerPage.vue'], resolve)},{path: '/Singer',name : '歌手页面',component: resolve => require(['../pages/SingerPage.vue'], resolve)},{path: '/SongList',name : '歌单页面',component: resolve => require(['../pages/SongListPage.vue'], resolve)}]},]})

