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://mengxuegu.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> -->

猜你喜欢

转载自www.cnblogs.com/zouzou-busy/p/11745343.html
今日推荐