【Vue】登录注册界面制作

1. 创建vue项目

https://blog.csdn.net/m0_67930426/article/details/134816155?spm=1001.2014.3001.5502

2. 整合element-ui

https://blog.csdn.net/m0_67930426/article/details/134827986?spm=1001.2014.3001.5502 

 

在view目录下创建文件

本篇内容使用到了 v-model   @click   指令

具体用法可以参考 

https://blog.csdn.net/m0_67930426/article/details/134599378?spm=1001.2014.3001.5502

目录

Login.vue

Registery.vue

知识集锦 

el-form的model属性

el-from-item 的 prop 属性 

el-form的rules属性

el-form的ref属性

prefix-icon

show-password

表单校验

Login.vue中的

1. 

2.

3.


 

Login.vue

<template>
  <div class="login">
    <div  class="login-form"
            style="margin: 200px auto; background-color: #fff; width: 350px; height: 280px; padding: 20px; border-radius: 10px">
      <div style="margin: 20px 0; text-align: center; font-size: 24px"><b>登 录</b></div>

      <el-form :model="user" :rules="rules" ref="userForm">

        <el-form-item prop="username">
          <el-input size="medium" prefix-icon="el-icon-user" v-model="user.username"></el-input>
        </el-form-item>

        <el-form-item prop="password">
          <el-input size="medium" prefix-icon="el-icon-lock" show-password v-model="user.password"></el-input>
        </el-form-item>

        <el-form-item style="margin: 10px 0; text-align: right">
          <el-button type="warning" size="small" autocomplete="off" @click="$router.push('/register')">注册</el-button>
          <el-button type="primary" size="small" autocomplete="off" @click="login">登录</el-button>
        </el-form-item>

      </el-form>
    </div>
  </div>
</template>

<script>
import { setRoutes } from '@/router'

export default {
  name: 'Login',
  data () {
    return {
      user: {},
      rules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' },
          { min: 3, max: 10, message: '长度在 3 到 5 个字符', trigger: 'blur' }
        ],
        password: [
          { required: true, message: '请输入密码', trigger: 'blur' },
          { min: 1, max: 50, message: '长度在 1 到 20 个字符', trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    login () {
      this.$refs.userForm.validate((valid) => {
        if (valid) { // 表单校验合法
          this.request.post('/user/login', this.user).then(res => {
            if (res.code === '200') {
              localStorage.setItem('user', JSON.stringify(res.data)) // 存储用户信息到浏览器
              localStorage.setItem('menus', JSON.stringify(res.data.menus)) // 存储用户信息到浏览器
              // 动态设置当前用户的路由
              setRoutes()
              this.$message.success('登录成功')

              if (res.data.role === 'ROLE_STUDENT') {
                this.$router.push('/front/home')
              } else {
                this.$router.push('/')
              }
            } else {
              this.$message.error(res.msg)
            }
          })
        }
      })
    }
  }
}
</script>

<style scoped>

  .login {

    height: 100%;

    display: flex;
    justify-content: center;
    align-items: center;
    background: azure url('../assets/img.png') no-repeat fixed;
    background-size: 100% 100%;
  }

  .login-form {
    height: 350px;
    width: 600px;
    box-sizing: border-box;
    background-color: #fff;
    opacity: 0.8;
    padding: 20px 50px;
  }

</style>

Registery.vue

<template>
  <div class="wrapper">
    <div style="margin: 150px auto; background-color: #fff; width: 350px; height: 350px; padding: 20px; border-radius: 10px">
      <div style="margin: 20px 0; text-align: center; font-size: 24px"><b>注 册</b></div>
      <el-form :model="user" :rules="rules" ref="userForm">
        <el-form-item prop="username">
          <el-input placeholder="请输入账号" size="medium" prefix-icon="el-icon-user" v-model="user.username"></el-input>
        </el-form-item>
        <el-form-item prop="password">
          <el-input placeholder="请输入密码" size="medium" prefix-icon="el-icon-lock" show-password v-model="user.password"></el-input>
        </el-form-item>
        <el-form-item prop="confirmPassword">
          <el-input placeholder="请确认密码" size="medium" prefix-icon="el-icon-lock" show-password v-model="user.confirmPassword"></el-input>
        </el-form-item>
        <el-form-item style="margin: 5px 0; text-align: right">
          <el-button type="primary" size="small"  autocomplete="off" @click="login">注册</el-button>
          <el-button type="warning" size="small"  autocomplete="off" @click="$router.push('/login')">返回登录</el-button>
        </el-form-item>
      </el-form>
    </div>
  </div>
</template>

<script>
export default {
  // eslint-disable-next-line vue/multi-word-component-names
  name: 'Login',
  data () {
    return {
      user: {},
      rules: {
        username: [
          { required: true, message: '请输入用户名', trigger: 'blur' },
          { min: 3, max: 10, message: '长度在 3 到 5 个字符', trigger: 'blur' }
        ],
        password: [
          { required: true, message: '请输入密码', trigger: 'blur' },
          { min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur' }
        ],
        confirmPassword: [
          { required: true, message: '请输入密码', trigger: 'blur' },
          { min: 1, max: 20, message: '长度在 1 到 20 个字符', trigger: 'blur' }
        ],
      }
    }
  },
  methods: {
    login () {
      this.$refs.userForm.validate((valid) => {
        if (valid) { // 表单校验合法
          if (this.user.password !== this.user.confirmPassword) {
            this.$message.error('两次输入的密码不一致')
            return false
          }
          this.request.post('/user/register', this.user).then(res => {
            if (res.code === '200') {
              this.$message.success('注册成功')
            } else {
              this.$message.error(res.msg)
            }
          })
        }
      });
    }
  }
}
</script>

<style>
  .wrapper {
    height: 100vh;
    background-image: linear-gradient(to bottom right, #FC466B , #3F5EFB);
    overflow: hidden;
  }
</style>

 

点击注册

 

知识集锦 

el-form的model属性

 

el-from-item 的 prop 属性 

el-from-item 的 prop 属性必须与 el-input 中需要校验的表单属性一致

el-form的rules属性

校验规则

 此处对应的是

 

el-form的ref属性

表单验证

此处对应

 

prefix-icon

图标显示

 

 element-ui

https://element.eleme.cn/#/zh-CN/component/icon

show-password

输入密码的时候会隐藏起来

对比一下不使用show-password

 

 

通过对比效果一目了然

表单校验

Login.vue中的

 methods: {
    login () {
      this.$refs.userForm.validate((valid) => {
        if (valid) { // 表单校验合法
          this.request.post('/user/login', this.user).then(res => {
            if (res.code === '200') {
              localStorage.setItem('user', JSON.stringify(res.data)) // 存储用户信息到浏览器
              localStorage.setItem('menus', JSON.stringify(res.data.menus)) // 存储用户信息到浏览器
              // 动态设置当前用户的路由
              setRoutes()
              this.$message.success('登录成功')

              if (res.data.role === 'ROLE_STUDENT') {
                this.$router.push('/front/home')
              } else {
                this.$router.push('/')
              }
            } else {
              this.$message.error(res.msg)
            }
          })
        }
      })
    }
  }

1. 

 if (valid)

 如果表单校验合法,就执行下一步

这里的表单校验合法是指

这一部分校验通过

2.

this.request.post('/user/login', this.user).then(res => 

这里的 ' /user/login ' 对应后端控制层里的登录接口 

this.user  即在input 输入的账号和密码

总的来说,使用request.post方法向后端发送请求,并提交表单数据

3.

  if (res.code === '200') {

http请求成功的响应值

请求成功,执行后面的操作

例如,将用户信息存储到浏览器

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/231894.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

飞天使-linux操作的一些技巧与知识点3

http工作原理 http1.0 协议 使用的是短连接&#xff0c;建立一次tcp连接&#xff0c;发起一次http的请求&#xff0c;结束&#xff0c;tcp断开 http1.1 协议使用的是长连接&#xff0c;建立一次tcp的连接&#xff0c;发起多次http的请求&#xff0c;结束&#xff0c;tcp断开ngi…

企业快递账单管理教程

快递账单管理怎么做&#xff0c;才能更高效&#xff1f;想要回答这个问题&#xff0c;首先我们要了解现如今企业快递账单管理的大致有哪些方式&#xff1a; 1、纸质化管理 纸质化管理现在虽然少见&#xff0c;但是我们应该挺熟悉。在电子面单面试之前&#xff0c;企业快递账单…

go学习笔记(17)Blob and ArrayBuffer

最近在学习go websocket的时候&#xff0c;在学习实验过程遇到一个比较奇怪问题。为什么我的数据返回是blob&#xff0c;而不是arrayBuffer&#xff1f;百思不得其解。 直到同事打包的时候微信小游戏遇到了一个报错。FileReader不支持。 经过在社区查询&#xff0c;官方答复是…

链表OJ—环形链表||

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 1、环形链表题目&#xff1a; 2、方法讲解&#xff1a; 图文解析&#xff1a; 代码实现&#xff1a; 其他的两种情况&#xff1a; 总结 前言 世上有两种耀眼的光芒…

leetcode刷题日志-54螺旋矩阵

思路&#xff1a; 上下左右设置四个边界 每走完一行或者一列&#xff0c;移动相应边界&#xff0c;当左边界大于右边界&#xff0c;或者上边界大于下边界时&#xff0c;结束 代码如下&#xff1a; class Solution {public List<Integer> spiralOrder(int[][] matrix) {…

temu我的订单在哪里看

在Temu平台上购物是一件令人愉快的事情&#xff0c;但有时候我们可能会忘记如何查看我们的订单。在本文中&#xff0c;我们将逐步介绍如何在Temu平台上查看您的订单&#xff0c;以便您可以轻松管理您的购物记录。 先给大家推荐一款拼多多/temu运营工具——多多情报通多多情报通…

【Vulnhub 靶场】【Hackable: III】【简单 - 中等】【20210602】

1、环境介绍 靶场介绍&#xff1a;https://www.vulnhub.com/entry/hackable-iii,720/ 靶场下载&#xff1a;https://download.vulnhub.com/hackable/hackable3.ova 靶场难度&#xff1a;简单 - 中等 发布日期&#xff1a;2021年06月02日 文件大小&#xff1a;1.6 GB 靶场作者&…

4_CSS选择器进阶

day04_CSS选择器应用 Objective&#xff08;本课目标&#xff09; 掌握复合选择器掌握后代选择器掌握并集选择器掌握标签显示模式和转换掌握CSS背景 1. CSS复合选择器 1.1 后代选择器&#xff08;重点&#xff09; 作用&#xff1a;用来选择元素或元素组的子孙后代 案例 -…

Abaqus Creat Field Output

1、获取应力不变量 s2f33_S.getScalarField(invariantMISES) 2、获得应力分量 s2f33_S.getScalarField(componentLabel"S11") 参考&#xff1a; https://www.eng-tips.com/viewthread.cfm?qid469545

深化适老化服务——建行江门市分行成功打造首家“适老化”服务示范网点

新金融时代&#xff0c;银行物理网点要更好发挥客户面对面接触、情感交互、场景引流、生态建设等功能&#xff0c;开展特色网点建设转型势在必行。 近日&#xff0c;建行江门市分行恩平锦江支行“适老化”服务示范网点开业。走进锦江支行网点大堂&#xff0c;“暖阳港湾”四个…

SAP 批量修改IDOC内容

近第三方系统出现一个问题&#xff0c;导致IDOC发过来的数据都是错误的&#xff0c;但是因为某些原因&#xff0c;无法在第三方系统中重新发起&#xff0c;故需要批量修改IDOC的内容&#xff0c;并且重新在SAP中发起入站 经了解SAP提供了标准的事务代码可以进行简单的IDOC内容…

2023年9月8日 Go生态洞察:gopls的扩展与Go生态系统的成长

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

更改Android Studio的.android和.gradle文件夹默认位置

一、首先关闭Android Studio&#xff0c; 二、目标位置新建文件夹 这一步&#xff0c;为了省去麻烦&#xff0c;我并没有直接在我的目标位置新建文件夹&#xff0c;而是把C盘下的.android和.gradle文件夹整个复制过来&#xff0c;和SDK都在同一目录下&#xff0c;感觉这样可以…

Qt之实现文字滚动效果

一.效果 二.实现 roller.h #ifndef ROLLER_H #define ROLLER_H#include <QWidget> #include <QPaintEvent> #include <QShowEvent> #include <QHideEvent> #include <QTimer>class Roller : public QWidget { public:explicit Roller(QWidget …

【序列化】概念及二叉树序列化、反序列化的两种方式

序列化是什么&#xff1f;为什么需要序列化&#xff1f; 前言&#xff1a; &#xff08;1&#xff09;进程想要运行&#xff0c;就要向操作系统申请内存空间&#xff0c;进程对数据的所有操作都是在内存空间中完成的。内存中有一部分数据很重要&#xff0c;我们希望将这些数据存…

Java基础-java.util.Scanner接收用户输入

目录 1. 导入所需要的jar包2. 编写代码运行3. 输出运行结果 1. 导入所需要的jar包 import java.util.Scanner;2. 编写代码运行 public class ScannerDemo {public static void main(String[] args) {/** 使用Scanner接收用户键盘输入的数据* 1. 导包&#xff1a;告诉程序去JD…

springboot077基于SpringBoot的汽车票网上预订系统

springboot077基于SpringBoot的汽车票网上预订系统 源码获取&#xff1a; https://docs.qq.com/doc/DUXdsVlhIdVlsemdX

零基础学Python第七天||字符串(4)

字符串的内容的确不少&#xff0c;甚至都有点啰嗦了。但是&#xff0c;本节依然还要继续&#xff0c;就是因为在编程实践中&#xff0c;经常会遇到有关字符串的问题&#xff0c;而且也是很多初学者容易迷茫的。 字符串格式化输出 什么是格式化&#xff1f;在维基百科中有专门…

jsp使用 分页专用工具

分页器&#xff0c;根据过来的参数计算当着页应当从哪一条记录开始显示&#xff0c;并且显示到哪。 PageUtils [pageSize5, currIndex1, totalCount166, totalPage34, startPosition0] PageUtils [pageSize5, currIndex5, totalCount166, totalPage34, startPosition20] PageUt…

深度学习基础介绍

定义&#xff1a; 深度学习是机器学习领域中一个新的研究方向&#xff0c;被引入机器学习使其更接近于最初的目标&#xff0c;即人工智能AI&#xff0c; Artifical Intelligence。 深度学习是学习样本数据的内在规律和表示层次&#xff0c;这些学习过程中获得的信息对诸如文字…