EelementUI 搭建项目框架+页面路由跳转
一、整体布局示意图、总体布局 Main.vue组件、index.js总路由
1、Main.vue 组件,所有框架组件的父组件
<template>
<div id="main">
<!-- 头部 -->
<!-- 高为80px -->
<el-header style="padding:0px; height: 80px;">
<!-- 直接写死头部组件(因为:这块区域只显示头部组件) -->
<Header></Header>
</el-header>
<!-- 侧边、内容区 -->
<!-- 宽为100%,高为,100%减去头部的高, calc:计算函数,减号两边必须要有一个空格-->
<el-container style="width:100%;height:calc(100% - 80px);">
<!-- 侧边栏 -->
<!-- 宽为12%,高为100% -->
<el-aside style="width: 12%; height: 100%;">
<!-- 直接写死侧边栏组件(因为:这块区域只显侧边栏组件) -->
<Aside></Aside>
</el-aside>
<!-- 内容显示区:(首页、用户管理) -->
<!-- 宽为88%,高为100% -->
<el-main style="padding:0px; width: 88%; height: 100%;">
<!-- 这里不能单独写,首页组件或用户管理组件 ,因为需要来回切换,不能写死-->
<router-view></router-view>
</el-main>
</el-container>
</div>
</template>
<script>
//导入首页组件
import Header from "../components/Header.vue";
//导入侧边栏组件
import Aside from "@/components/Aside.vue";
//导出组件,可以使其他组件导入本组件
export default {
name: 'main',
//导入相应组件后注册组件
components: {
Header,
Aside,
}
}
</script>
<style>
#main {
margin: 0px;
padding: 0px;
height: 100%;
width: 100%;
}
.el-header {
width: 100%;
height: 200px;
padding: 0px;
}
</style>
2、index.js 总路由配置文件,所有能路径的组件,都要在这里配置。
import Vue from 'vue'
import VueRouter from 'vue-router'
Vue.use(VueRouter)
const routes = [
{
path: '/',
name: 'Main',
component: () => import('../views/Main.vue'),
redirect:"/home",
children:[
{
path: 'home',
name: 'Home',
component: () => import('../pages/home/Home.vue'),
},
{
path: 'user',
name: 'User',
component: () => import('../pages/user/User.vue'),
},
]
},
{
path:"/login",
name:"Login",
component:()=>import('../views/login/login.vue')
}
]
const router = new VueRouter({
routes
})
export default router
二、框架组件(头部、侧边栏)
1、Header.vue 头部组件
<template>
<!-- logo和文字 -->
<div class="header">
<a href="#">
<span class="company">商品管理系统</span>
</a>
<!-- 下拉菜单-->
<div>
<el-dropdown @command="handleCommand">
<!-- 绑定指令,在methods里定义-->
<span class="el-dropdown-link">
<!-- 您好 -->
<div class="demo-type">
<div>
<el-avatar src="https://cube.elemecdn.com/0/88/03b0d39583f48206768a7534e55bcpng.png">
</el-avatar>
</div>
</div>
</span>
<el-dropdown-menu slot="dropdown">
<!-- icon是修改图标 ,command是点击后传给方法的值-->
<el-dropdown-item icon="el-icon-edit" command="个人信息">个人信息</el-dropdown-item>
<!-- 在调用方法时一定要按照格式:@click.native=“” 书写-->
<!-- quitLogin() 方法,退出登陆-->
<el-dropdown-item icon="el-icon-s-operation" command="欢迎下来光临!" @click.native="quitLogin()">退出登录</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<!-- 下拉菜单结束-->
</div>
</template>
<script>
export default {
name: 'Header',
methods: {
handleCommand(command) {
this.$message(`${command}`)
},
quitLogin(){
//通过在 index.js 中为登陆组件写的路由名字,进行路由的跳转
this.$router.push('Login');
}
},
}
</script>
2、Aside.vue 侧边栏组件
<template>
<div id="aside">
<el-row class="tac">
<el-col :span="24" style="border-right: solid 1px #FFFFFF;">
<!-- min-height:calc(100vh - 80px); 是通过设置最小高度,100vh代表试图的总高(100%),减去头部视图的高 -->
<!-- default-active :默认高亮的按钮 -->
<!-- router 路由 -->
<el-menu style="min-height: calc(100vh - 80px);" default-active="home" class="el-menu-vertical-demo" router
@open="handleOpen" @close="handleClose">
<!-- index='home' : 表示跳转的组件路由,这里跳转的是主页的组件路由,名字是在 index.js 里面设置的 -->
<el-menu-item index="home">
<i class="el-icon-s-home"></i>
<span slot="title">首页</span>
</el-menu-item>
<!-- index='home' : 表示跳转的组件路由,这里跳转的是用户的组件路由 -->
<el-menu-item index="user">
<i class="el-icon-s-custom"></i>
<span slot="title">用户管理</span>
</el-menu-item>
</el-menu>
</el-col>
</el-row>
</div>
</template>
<script>
export default {
name: 'Aside',
methods: {
handleOpen(key, keyPath) {
console.log(key, keyPath);
},
handleClose(key, keyPath) {
console.log(key, keyPath);
}
}
}
</script>
<style>
#aside {
height: 100%;
border-right: solid 1px rgb(173, 173, 173);
}
</style>
三、展示区域组件和登陆组件
1、Home.vue 首页组件
点击侧边栏的首页跳转这里
<template>
<h1>
这是首页组件
</h1>
</template>
<script>
export default{
name:"Home"
}
</script>
2、User.vue 用户管理组件
点击侧边栏的用户管理跳转到这里
<template>
<h1>
这是用户管理组件
</h1>
</template>
<script>
export default{
name:"User"
}
</script>
3、登陆组件
点击头部的退出登陆按钮,跳转到这里。
<template>
<h1>
这是登陆组件
</h1>
</template>
<script>
export default{
name:"Login"
}
</script>
|