概述
首先项目初始化+安装element-ui、在之前的文章当中已经介绍的很详细
vue+element实现单选多选 答题的打分demo(从0-1全过程)_benlalagang的博客-CSDN博客_element 答题系统答题: vue+element答题demo 包含单选 多选 判断、打分页面https://blog.csdn.net/benlalagang/article/details/125927798之后我们进行下列步骤的操作
布局页面
没有什么难度、login页面默认宽高都是页面的100%,登录盒子定位left:50%,top:50%,再返回自身的50% transform: translate(-50%,-50%);
获取表单数据
登录盒子用到组件 el-form el-form-item el-input 根据官网固定用法 v-model 数据双向绑定 便于获取数据post 到服务器 这里还有一个小点:组件库提供的表单预计验证
组件data种定义好:
LoginRules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
password: [
{ min: 6, max: 16, message: '长度在 6 到 16 个字符', trigger: 'blur' },
{ required: true, message: '请输入登录密码', trigger: 'blur' }
]
}
required 必填 min max最大值最小值 message 未通过验证时提示的消息 trigger 触发方式
el-from 绑定 :rules="LoginRules"
el-form-item 使用具体的prop="username"
<template>
<div id="login">
<div class="login-box">
<div class="avatar-box">
<img src="http://www.wsg3096.com/gangback/pub/ava.jpg" alt="">
</div>
<el-form id="login-form" :model="loginPost" :rules="LoginRules" ref="login">
<el-form-item prop="username">
<el-input prefix-icon="iconfont icon-user"
placeholder="请输入用户名"
v-model="loginPost.username"></el-input>
</el-form-item>
<el-form-item prop="password">
<el-input prefix-icon="iconfont icon-3702mima"
type="password"
v-model="loginPost.password"
placeholder="请输入密码"></el-input>
</el-form-item>
<el-form-item class="btns">
<el-button type="primary" @click="loginIn">登录</el-button>
<el-button plain @click="loginRs">重置</el-button>
</el-form-item>
</el-form>
</div>
</div>
</template>
<script>
export default {
name: 'login',
data () {
return {
loginPost: {
username: '',
password: ''
},
LoginRules: {
username: [
{ required: true, message: '请输入用户名', trigger: 'blur' }
],
password: [
{ min: 6, max: 16, message: '长度在 6 到 16 个字符', trigger: 'blur' },
{ required: true, message: '请输入登录密码', trigger: 'blur' }
]
}
}
},
methods: {
loginRs () {
// 点击重置按钮 重置登录表单 resetFields()ele重置方法 用refs找到这个表单
// console.log(this.$refs)
this.$refs.login.resetFields()
},
loginIn () {
// 点击登录按钮 先看验证结果 通过预验证后 再发起POST请求 valid返回布尔值
// async额森特在前 await额威特在内 简化promise 再用对象结构 接收data
this.$refs.login.validate(async valid => {
if (!valid) return
const { data: res } = await this.$http.post(
'login',
this.loginPost
)
if (res.meta.status !== 200) return this.$Msg.error('登录失败!')
await this.$Msg.success('登录成功!')
/*
*将登录成功的令牌 存到 浏览器会话存储当中(只在打开期间生效)
* 再跳转路由到首页
* */
window.sessionStorage.setItem('token', res.data.token)
// 这里因为是异步 所以this 划线了 但是效果没有影响
await this.$router.push('/home')
})
}
}
}
</script>
<style lang="less" scoped>
#login{
background: url("http://www.wsg3096.com/articleSystem/assets/img/index1.jpg") no-repeat center;
width: 100%;
height: 100%;
position: relative;
}
.login-box{
width: 450px;
height: 300px;
background: white;
border-radius: 6px;
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%,-50%);
box-shadow: 2px 8px 20px rgba(30,30,30,0.3);
}
.avatar-box{
height: 130px;
width: 130px;
border: 1px solid #eee;
border-radius: 50%;
padding: 10px;
box-shadow: 0 0 10px #ddd;
position: absolute;
left: 50%;
transform: translate(-50%,-50%);
background: #fff;
img{
width: 100%;
height: 100%;
border-radius: 50%;
background: #eee;
}
}
.btns{
display: flex;
justify-content: flex-end;
}
#login-form{
box-sizing: border-box;
padding: 100px 20px 0px;
}
</style>
在router种使用导航守卫加以验证
// 挂载路由导航守卫
router.beforeEach((to, from, next) => {
/** to 将要访问的路径
* from 代表从哪个路径跳转而来
* next 表示放行
* **/
if (to.path === '/login') return next()// 去访问登录页面 直接放行
const tokenStr = window.sessionStorage.getItem('token')
if (!tokenStr) return next('/login')// 访问其他页面 检验有没有 token 没有就跳转到 login
next()
})
最后
以上就是懵懂乐曲为你收集整理的Vue+element 登录业务实现的全部内容,希望文章能够帮你解决Vue+element 登录业务实现所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复