elementui 搭建布局页面路由_vue+elementui搭建后台管理界面(2首页)

本文介绍了如何使用Vue和ElementUI搭建后台管理界面,包括会话存储、路由重定向、首页布局、路由配置以及自定义CSS。重点讲述了通过sessionStorage进行会话管理,使用vue-router的beforeEach实现未登录用户的重定向,并展示了如何创建容器组件,利用ElementUI的布局组件完成页面结构。同时,文章还提到了在router和App.vue中的配置,以及引入scss文件进行样式定制。
摘要由CSDN通过智能技术生成

1 会话存储

使用html5的 sessionStorage 对象临时保存会话

// 保存会话

sessionStorage.setItem('user', username)

// 删除会话

sessionStorage.removeItem('user', username)

2 将所有未登录会话重定向到 /login

用 vue-router 的 beforeEach 实现

beforeEach 方法接收三个参数:

to: Route: 即将要进入的目标 路由对象

from: Route: 当前导航正要离开的路由

next: Function: 一定要调用该方法来 resolve 这个钩子。执行效果依赖 next 方法的调用参数。

修改 src/main.js 加入

router.beforeEach((to, from, next) => {

if(to.path === '/login'){

sessionStorage.removeItem('user');

}

var user = sessionStorage.getItem('user');

if(!user && to.path !== '/login'){

next({

path: '/login'

})

}else{

next();

}

})

3 编写首页

使用 elementui 的布局容器

Aside

Header

Main

新建 src/container/Container.vue

:class="isCollapse ? 'app-side-collapsed' : 'app-side-expanded'">

class="el-menu-vertical-demo"

@open="handleOpen"

:collapse="isCollapse">

导航一

分组一

选项1

选项2

选项3

选项4

选项1

导航二

disabled>

导航三

导航四

@click.prevent="toggleSideBar">

class="el-menu-demo tab-page"

mode="horizontal"

@select="handleSelect"

active-text-color="#409EFF">

处理中心

我的工作台

选项1

选项2

选项3

选项4

选项1

选项2

选项3

disabled>消息中心

订单管理

:hide-on-click="false">

{{ username }}

我的消息

设置

@click.native="logout">退出登录

export default {

name: 'Container',

data() {

return {

username: '',

isCollapse: false

}

},

methods: {

toggleSideBar() {

this.isCollapse = !this.isCollapse

},

logout: function () {

this.$confirm('确认退出?', '提示', {})

.then(() => {

sessionStorage.removeItem('user');

this.$router.push('/login');

})

.catch(() => { });

},

handleOpen(key, keyPath) {

console.log(key, keyPath);

},

handleClose(key, keyPath) {

console.log(key, keyPath);

},

handleSelect(key, keyPath) {

console.log(key, keyPath);

},

},

mounted: function () {

let user = sessionStorage.getItem('user');

if (user) {

this.username = user;

}

},

}

4 在 router 导入容器组件

修改 src/router/index.js 为

import Vue from 'vue'

import Router from 'vue-router'

import Login from '@/views/TheLogin'

import Container from '@/container/Container'

Vue.use(Router)

export default new Router({

routes: [

{

path: '/',

name: 'Container',

component: Container

},

{

path: '/login',

name: 'Login',

component: Login

},

]

})

由于容器使用了自定义类,要取消默认的 css 和 图片渲染

再修改 src/App.vue :

export default {

name: 'App'

}

5 编写 css

此时的页面:

页面骨架已经搭好,接下来就是装饰

先安装 node-sass sass-loader 模块

npm install node-sass sass-loader --save-dev

新建 src/styles/index.scss

html {

height: 100%;

}

body {

position: relative;

top: 0;

left: 0;

margin: 0;

padding: 0;

-webkit-box-sizing: border-box;

box-sizing: border-box;

width: 100%;

height: 100%;

overflow: hidden;

}

.app {

$solidBorder: 1px solid #eee;

$sideCollapsedWidth: 66px;

$sideExpandedWidth: 230px;

font-family: "Helvetica Neue",Helvetica,"PingFang SC","Hiragino Sans GB","Microsoft YaHei","微软雅黑",Arial,sans-serif;

font-size: 1em;

width: 100%;

height: 100%;

min-width: 900px;

border: $solidBorder;

display: flex;

display: -webkit-flex;

flex-flow: row nowrap;

&-side {

width: 230px;

height: 100%;

font-weight: 700;

border-right: $solidBorder;

&-left {

background-color: rgb(238, 241, 246);

}

&-logo {

height: 60px;

text-align: center;

}

&-collapsed {

width: 66px!important;

}

&-expanded {

width: 230px!important;

}

}

&-header {

width: 100%;

height: 60px;

display: flex;

flex-flow: row nowrap;

justify-content: flex-start;

align-items: center;

border-bottom: $solidBorder;

&-userinfo {

position: absolute;

right: 0;

margin-right: 25px;

display: flex;

flex-flow: row nowrap;

height: 60px;

justify-content: flex-start;

align-items: center;

}

}

&-body {

font-size: 1em;

width: 100%;

height: 100%;

padding: 20px;

overflow-y: scroll;

}

&-footer {

width: 100%;

height: 60px;

}

}

.inline-block {

display: inline-block;

}

在 src/main.js 中引入该文件

import '@/styles/index.scss'

页面效果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值