Vue--登录页面逻辑
添加Mock数据
前面我们使用elementUI实现了登录页面和简单的校验,现在使用接口的方式来实现登录的逻辑
使用EasyMock添加两个接口
因为要访问EasyMock 模拟接口, 所以要把 接口地址改一下,在 .env.development 文件中修改如下:
注意:改成你自已的EasyMock上的接口服务地址
# 使用 VUE_APP_ 开头的变量会被 webpack 自动加载,process.env.VUE_APP_xxx# 开发环境的前缀
VUE_APP_BASE_API = '/dev-api'
# 目标服务接口地址,是按照自己的环境来的,添加或更改服务后,需要重启服务
VUE_APP_SERVICE_URL = ' http://xuegu.com:7300/mock/5db437d92aa750460d4fce18'
改完后,重启下 npm run serve , 看下是否正常
当登录成功后,响应状态码 2000 和 token 值。token用来 认证
后面请求只要是成功的,状态码均为 2000, 这个是与后台接口的约定
- 请求URL: /user/login
- 请求方式: post
- 描述:登陆认证
mock.js 配置如下
{"code":2000,
"flag":true,
"message":"验证成功",
"data":{
"token":"admin"
}
}
添加响应用户信息模拟接口
- 请求URL: /user/info/{token}
- 请求方式: get
- 描述:响应用户信息
mock.js 配置:
{"code": 2000,
"flag": true,
"message": "成功获取用户信息",
"data": {
"id|1-10000": 1,
"name": "@cname",
"roles": ["manager"]
}
}
登录逻辑实现
src/api 下创建 login.js , 添加内容如下:
import request from '@/utils/request'// 导出的是普通成员函数
// 登录
export function login(username,password){
return request({
url: '/user/login',
method: 'post',
data: {
username,
password
}
})
}
// 获取用户信息
export function getUserInfo(token){
return request({
url: `/user/info/${token}`, // 反单引号,动态获取token值
method: 'get'
})
}
在 src\views\login\index.vue 的 submitForm 中进行逻辑处理.
1. 导入 import {login, getUserInfo} from '@/api/login'
2. 在 submitForm 函数进行登录判断和获取用户信息
<template><div class="login-container">
<el-form ref="form" :rules="rules" :model="form" label-width="80px" class="login-form">
<h2 class="login-title">管理系统</h2>
<el-form-item label="用户名" prop="username">
<el-input v-model="form.username"></el-input>
</el-form-item>
<el-form-item label="密码" prop="password">
<el-input v-model="form.password"></el-input>
</el-form-item>
<el-form-item>
<el-button type="primary" @click="submitForm('form')">登录</el-button>
</el-form-item>
</el-form>
</div>
</template>
<script>
import { login, getUserInfo } from "@/api/login"; // 导入登录和获取用户信息的方法
export default {
data() {
return {
form: {
username: "",
password: ""
},
rules: {
username: [
{ required: true, message: "用户名不能为空", trigger: "blur" },
{ min: 3, max: 10, message: "用户名3-5位", trigger: "blur" }
],
password: [
{ required: true, message: "密码不能为空", trigger: "blur" },
{ min: 3, max: 10, message: "密码3-5位", trigger: "blur" }
]
}
};
},
methods: {
submitForm(formName) {
this.$refs[formName].validate(valid => {
// console.log(valid) 验证通过为true,有一个不通过就是false
if (valid) {
// 提交表单给后台验证是否正确
login(this.form.username, this.form.password).then(response => {
const res = response.data;
console.log(res, res.flag, res.data.token, res.message);
if (res.flag) {
// 验证成功,通过token获取用户信息
getUserInfo(res.data.token).then(response => {
const resUser = response.data;
if (resUser.flag) {
// 获取到了用户信息
console.log("userInfo", resUser.data);
// 保存token和用户信息
localStorage.setItem(
"zz-mms-user",
JSON.stringify(resUser.data)
);
localStorage.setItem("zz-mms-token", res.data.token);
// 前往首页
this.$router.push("/");
} else {
// 使用elementui的消息提示
this.$message({
message: resUser.message,
type: "warning"
});
}
});
}else {
// 未通过,弹出警告
// 使用elementui的消息提示
this.$message({
message: res.message,
type: "warning"
});
}
});
} else {
// 验证未通过,弹出警告
// 使用elementui的消息提示
this.$message.error('验证未通过');
}
});
}
}
};
</script>
<style acoped>
.login-form {
width: 350px;
margin: 160px auto; /* 上下间距160px,左右自动居中*/
background-color: rgb(255, 255, 255, 0.8); /* 透明背景色 */
padding: 30px;
border-radius: 20px; /* 圆角 */
}
/* 背景 */
.login-container {
position: absolute;
width: 100%;
height: 100%;
background: url("../../assets/login.png");
}
/* 标题 */
.login-title {
color: #303133;
text-align: center;
}
</style> -->
以上是 Vue--登录页面逻辑 的全部内容, 来源链接: utcz.com/z/380316.html