• 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'
        })
    }

    在 srcviewsloginindex.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 {
       350px;
      margin: 160px auto; /* 上下间距160px,左右自动居中*/
      background-color: rgb(255, 255, 255, 0.8); /* 透明背景色 */
      padding: 30px;
      border-radius: 20px; /* 圆角 */
    }
    
    /* 背景 */
    .login-container {
      position: absolute;
       100%;
      height: 100%;
      background: url("../../assets/login.png");
    }
    
    /* 标题 */
    .login-title {
      color: #303133;
      text-align: center;
    }
    </style> -->
  • 相关阅读:
    for循环中变量的作用域问题
    一个数与0进行按位或,能取整
    Spring中日志的使用(log4j)
    MyBatis实现动态语句操作
    MyBatis实现简单增删改查操作
    python计算2的平方根,并输出小数点后的第100万位数字
    Spring配置文件报错:Multiple annotations found at this line: - Element type "beans" must be followed by either attribute specifications, ">" or "/>". - Start tag of element <beans>
    python跳出多重循环
    python中的生成器(二)
    python中的生成器(一)
  • 原文地址:https://www.cnblogs.com/zouzou-busy/p/11745343.html
Copyright © 2020-2023  润新知