Vue--登录页面逻辑

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

回到顶部