vue2.0+element搭建后台系统(2)

vue

vue2.0+element搭建后台系统(2)登录拦截

接上一篇,今天的主要目的是配置登录。

准备

vue-router有一个beforeEach,可以在所有路由执行之前,先执行这个方法。所以可以基于这个来实现验证是否登录。
sec/components/login.vue

<template>

<div class="login-page-container">

<el-form :model="ruleForm2" :rules="rules2" ref="ruleForm2" label-position="left" label-width="0px" class="demo-ruleForm login-container">

<h3 class="title">系统登录</h3>

<el-form-item prop="account">

<el-input type="text" v-model="ruleForm2.account" auto-complete="off" placeholder="账号"></el-input>

</el-form-item>

<el-form-item prop="checkPass">

<el-input type="password" v-model="ruleForm2.checkPass" auto-complete="off" placeholder="密码"></el-input>

</el-form-item>

<el-checkbox v-model="checked" checked class="remember">记住密码</el-checkbox>

<el-form-item style="width:100%;">

<el-button type="primary" style="width:100%;" @click="handleSubmit2" :loading="logining">登录</el-button>

</el-form-item>

</el-form>

</div>

</template>

<script>

export default {

props: {

},

data () {

return {

logining: false,

ruleForm2: {

account: 'admin',

checkPass: '123456'

},

rules2: {

account: [{

required: true,

message: '请输入账号',

trigger: 'blur'

}

// { validator: validaePass }

],

checkPass: [{

required: true,

message: '请输入密码',

trigger: 'blur'

}

// { validator: validaePass2 }

]

},

checked: true

}

},

methods: {

handleSubmit2 (ev) {

var _this = this

_this.$refs.ruleForm2.validate((valid) => {

if (valid) {

_this.logining = true

var loginParams = {

username: this.ruleForm2.account,

password: this.ruleForm2.checkPass

}

if (loginParams.username === 'admin' && loginParams.password === '123456') {

_this.logining = false

sessionStorage.setItem('user', JSON.stringify(loginParams))

_this.$router.push({ path: '/' })

} else {

_this.logining = false

_this.$alert('用户名或密码错误!', '提示信息', {

confirmButtonText: '确定'

})

}

} else {

console.log('error submit!!')

return false

}

})

}

}

}

</script>

<style scoped>

.login-container {

-webkit-border-radius: 5px;

border-radius: 5px;

-moz-border-radius: 5px;

background-clip: padding-box;

margin: 180px auto;

width: 350px;

padding: 35px 35px 15px;

background: #fff;

border: 1px solid #eaeaea;

box-shadow: 0 0 25px #cac6c6;

}

label.el-checkbox.remember {

margin: 0px 0px 35px 0px;

}

</style>

配置路由
router/index.js

import Vue from 'vue'

import Router from 'vue-router'

import home from '@/components/home'

import login from '@/components/login'

Vue.use(Router)

export default new Router({

routes: [

{

path: '/login',

name: 'login',

component: login

},

{

path: '/',

name: 'home',

component: home

}

]

})

更改入口文件
src/main.js

// The Vue build version to load with the `import` command

// (runtime-only or standalone) has been set in webpack.base.conf with an alias.

import Vue from 'vue'

import App from './App'

import router from './router'

import ElementUI from 'element-ui'

import 'element-ui/lib/theme-chalk/index.css'

Vue.use(ElementUI)

Vue.config.productionTip = false

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

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

sessionStorage.removeItem('user')

}

let user = JSON.parse(sessionStorage.getItem('user'))

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

next({

path: '/login'

})

} else {

next()

}

})

/* eslint-disable no-new */

new Vue({

el: '#app',

router,

components: { App },

template: '<App/>'

})

启动项目:

npm run dev

已经可以看到效果了

输入账号密码:

admin/123456

可以进入主页。

以上是 vue2.0+element搭建后台系统(2) 的全部内容, 来源链接: utcz.com/z/377715.html

回到顶部