首页: http://localhost:8002/#/, 登录页面如下:

index.js文件中如下的路由配置,转过去看login.vue是如何实现的。
const routes = [
{
path: ‘/‘,
component: login
},
(这里一个问题: login.vue是如何与index.xml整到一起的呢:
login作为路由在Router中定义,而在App.vue中Router是参数,这样login就是App.vue的路由了; App.vue和index.html已经绑定了,并且在App.vue的模板中又又有<Router-View>标签,
所以就可以在index.html中看到login的内容了。)
login.vue代码如下:
<section>: HTML5中的新标签,定义了文档的某个区域。比如章节、头部、底部或者文档的其他区域。
v-show="true/false: VUE元素的隐藏和显示;
el-form: element的表单
rules: element-UI组件定义的规则,对规则进行校验,如果不满足,会有相应的提示信息等,其规则定义在下面:
rules: { username: [ { required: true, message: ‘请输入用户名‘, trigger: ‘blur‘ }, // 定义了username必填,提示的信息,以及触发条件 ], password: [ { required: true, message: ‘请输入密码‘, trigger: ‘blur‘ } ], },
ref: 表示是el-form的别名,或者叫引用,供其他地方使用:
如下的代码,在提交表单的时候,用的就是ref指定的名字。
<el-form-item> <el-button type="primary" @click="submitForm(‘loginForm‘)" class="submit_btn">登陆</el-button> </el-form-item>
placeholder:
v-if: 指令是条件渲染指令,它根据表达式的真假来删除和插入.
v-for: v-for指令基于一个数组渲染一个列表;
v-bind: 和某个值绑定
v-on : v-on指令用于给监听DOM事件;
<template>
<div class="login_page fillcontain">
<!--<transition name="form-fade" mode="in-out">-->
<section class="form_contianer" v-show="showLogin">
<div class="manage_tip">
<p>档案管理系统</p>
</div>
<el-form :model="loginForm" :rules="rules" ref="loginForm">
<el-form-item prop="username">
<el-input v-model="loginForm.username" placeholder="用户名"><span>dsfsf</span></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input type="password" placeholder="密码" v-model="loginForm.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm(‘loginForm‘)" class="submit_btn">登陆</el-button>
</el-form-item>
</el-form>
<!--<p class="tip">温馨提示:</p>-->
<!--<p class="tip">未登录过的新用户,自动注册</p>-->
<!--<p class="tip">注册过的用户可凭账号密码登录</p>-->
</section>
<!--</transition>-->
</div>
</template>
<script>
import {login, getAdminInfo} from ‘@/api/getData‘
import {mapActions, mapState} from ‘vuex‘
export default {
data(){
return {
loginForm: {
username: ‘‘,
password: ‘‘,
},
rules: {
username: [
{ required: true, message: ‘请输入用户名‘, trigger: ‘blur‘ },
],
password: [
{ required: true, message: ‘请输入密码‘, trigger: ‘blur‘ }
],
},
showLogin: false,
}
},
mounted(){
this.showLogin = true;
if (!this.adminInfo.id) {
this.getAdminData()
}
},
computed: {
...mapState([‘adminInfo‘]),
},
methods: {
...mapActions([‘getAdminData‘]),
async submitForm(formName) {
this.$refs[formName].validate(async (valid) => {
if (valid) {
const res = await login({user_name: this.loginForm.username, password: this.loginForm.password})
if (res.status == 1) {
this.$message({
type: ‘success‘,
message: ‘登录成功‘
});
this.$router.push(‘manage‘)
}else{
this.$message({
type: ‘error‘,
message: res.message
});
}
} else {
this.$notify.error({
title: ‘错误‘,
message: ‘请输入正确的用户名密码‘,
offset: 100
});
return false;
}
});
},
}
// watch: {
// adminInfo: function (newValue){
// if (newValue.id) {
// this.$message({
// type: ‘success‘,
// message: ‘检测到您之前登录过,将自动登录‘
// });
// this.$router.push(‘manage‘)
// }
// }
// }
}
</script>
<style lang="less" scoped>
@import ‘../style/mixin‘;
.login_page{
background-color: #324057;
}
.manage_tip{
position: absolute;
width: 100%;
top: -100px;
left: 0;
p{
font-size: 34px;
color: #fff;
}
}
.form_contianer{
.wh(320px, 210px);
.ctp(320px, 210px);
padding: 25px;
border-radius: 5px;
text-align: center;
background-color: #fff;
.submit_btn{
width: 100%;
font-size: 16px;
}
}
.tip{
font-size: 12px;
color: red;
}
.form-fade-enter-active, .form-fade-leave-active {
transition: all 1s;
}
.form-fade-enter, .form-fade-leave-active {
transform: translate3d(0, -50px, 0);
opacity: 0;
}
</style>