Vue3.0项目实战(二)——大事件管理系统登录注册功能实现

news/2024/9/19 1:18:58/ 标签: 前端, vue.js, javascript

目录

1. 登录注册页面 [element-plus 表单 & 表单校验]

1.1 注册登录 静态结构 & 基本切换

2. 注册功能

2.1 实现注册校验

2.2 注册前的预校验

2.3 封装 api 实现注册功能

3. 登录功能

3.1 实现登录校验

3.2 登录前的预校验 & 登录成功


1. 登录注册页面 [element-plus 表单 & 表单校验]

功能需求说明:
  • 注册登录 静态结构 & 基本切换
  • 注册功能 (校验 + 注册)
  • 登录功能 (校验 + 登录 + 存token)

1.1 注册登录 静态结构 & 基本切换

① 安装 element-plus 图标库

  • pnpm i @element-plus/icons-vue

② 静态结构准备

  • Layout 布局组件

    • el-row 表示一行,一行分为 24 份

    • :span="12" 代表一行中,占 12 份

    • :span="6" 代表一行中,占 6 份

    • :offset="3" 代表在一行中,左侧 margin 份数

  • Form 表单

  • Icon 图标

javascript"><script setup>
import { User, Lock } from '@element-plus/icons-vue'
import { ref } from 'vue'
const isRegister = ref(true)
</script><template><el-row class="login-page"><el-col :span="12" class="bg"></el-col><el-col :span="6" :offset="3" class="form"><el-form ref="form" size="large" autocomplete="off" v-if="isRegister"><el-form-item><h1>注册</h1></el-form-item><el-form-item><el-input :prefix-icon="User" placeholder="请输入用户名"></el-input></el-form-item><el-form-item><el-input:prefix-icon="Lock"type="password"placeholder="请输入密码"></el-input></el-form-item><el-form-item><el-input:prefix-icon="Lock"type="password"placeholder="请输入再次密码"></el-input></el-form-item><el-form-item><el-button class="button" type="primary" auto-insert-space>注册</el-button></el-form-item><el-form-item class="flex"><el-link type="info" :underline="false" @click="isRegister = false">← 返回</el-link></el-form-item></el-form><el-form ref="form" size="large" autocomplete="off" v-else><el-form-item><h1>登录</h1></el-form-item><el-form-item><el-input :prefix-icon="User" placeholder="请输入用户名"></el-input></el-form-item><el-form-item><el-inputname="password":prefix-icon="Lock"type="password"placeholder="请输入密码"></el-input></el-form-item><el-form-item class="flex"><div class="flex"><el-checkbox>记住我</el-checkbox><el-link type="primary" :underline="false">忘记密码?</el-link></div></el-form-item><el-form-item><el-button class="button" type="primary" auto-insert-space>登录</el-button></el-form-item><el-form-item class="flex"><el-link type="info" :underline="false" @click="isRegister = true">注册 →</el-link></el-form-item></el-form></el-col></el-row>
</template><style lang="scss" scoped>
.login-page {height: 100vh;background-color: #fff;.bg {background: url('@/assets/logo2.png') no-repeat 60% center / 240px auto,url('@/assets/login_bg.jpg') no-repeat center / cover;border-radius: 0 20px 20px 0;}.form {display: flex;flex-direction: column;justify-content: center;user-select: none;.title {margin: 0 auto;}.button {width: 100%;}.flex {width: 100%;display: flex;justify-content: space-between;}}
}
</style>

2. 注册功能

2.1 实现注册校验

【需求】注册页面基本校验

  • 用户名非空,长度校验 5-10位

  • 密码非空,长度校验 6-15 位

  • 再次输入密码,非空,长度校验 6-15 位

  • 【进阶】再次输入密码需要自定义校验规则,和密码框值一致(可选)

① model 属性绑定 form 数据对象

② v-model 绑定 form 数据对象的子属性

③ rules 配置校验规则

整个表单的校验规则

  • 1. 非空校验 required: true, message 消息提示,trigger 触发校验的时机 blur 或者是 change
  • 2. 长度校验 min: xxx, max: xxx
  • 3. 正则校验 pattern: 正则校验 \S 非空字符
  • 4. 自定义校验 => 自定义校验规则函数  validator
    • validator(rule, value, callback)
      • (1) rule 当前校验规则相关的信息
      • (2) value 所校验的表单元素目前的表单值
      • (3) callback 无论成功还是失败,都需要 callback 回调函数
        • callback() 校验成功
        • callback(new Error(错误消息)) 校验失败
javascript">const rules = {username: [{ required: true, message: '请输入用户名', trigger: 'blur' },{ min: 5, max: 10, message: '用户名必须是 5-10 位字符', trigger: 'blur' }],password: [{ required: true, message: '请输入密码', trigger: 'blur' },{pattern: /^\S{6,15}$/,message: '密码必须是 6-15 位的非空字符',trigger: 'blur'}],repassword: [{ required: true, message: '请输入密码', trigger: 'blur' },{pattern: /^\S{6,15}$/,message: '密码必须是 6-15 位的非空字符',trigger: 'blur'},{validator: (rule, value, callback) => {// 判断的 value 和当前 form 中收集的 password 是否一致if (value !== formModel.value.password) {callback(new Error('两次输入的密码不一致'))} else {callback() // 校验通过,也需要执行 callback}},trigger: 'blur'}]
}

④ prop 绑定校验规则

2.2 注册前的预校验

需求:

  • 点击注册按钮,注册之前,需要先校验

① 通过 ref 获取到 表单组件

② 注册之前进行校验

validate对整个表单的内容进行验证。 接收一个回调函数,或返回 PromiseFunction

2.3 封装 api 实现注册功能

需求:

  • 封装注册api,进行注册,注册成功切换到登录

① 新建 api/user/user.js 封装

② 在 api/inde.js 下统一导出管理

③  页面中调用

3. 登录功能

3.1 实现登录校验

【需求说明】给输入框添加表单校验

  • 用户名不能为空,用户名必须是5-10位的字符,失去焦点 和 修改内容时触发校验

  • 密码不能为空,密码必须是6-15位的字符,失去焦点 和 修改内容时触发校验

操作步骤:

① model 属性绑定 form 数据对象,直接绑定之前提供好的数据对象即可

② rules 配置校验规则,共用注册的规则即可

③ v-model 绑定 form 数据对象的子属性

④ prop 绑定校验规则

⑤ 切换的时候重置

3.2 登录前的预校验 & 登录成功

【需求说明1】登录之前的预校验

  • 登录请求之前,需要对用户的输入内容,进行校验

  • 校验通过才发送请求

【需求说明2】登录功能

  • 封装登录API,点击按钮发送登录请求

  • 登录成功存储token,存入pinia 和 持久化本地storage

  • 跳转到首页,给提示

【测试账号】

  • 登录的测试账号: shuaipeng

  • 登录测试密码: 123456

实现步骤:

① 注册事件,进行登录前的预校验 (获取到组件调用方法)

② 封装接口 API

③ 调用方法将 token 存入 pinia 并 自动持久化本地


http://www.ppmy.cn/news/1516776.html

相关文章

Go反射四讲---第三讲:如何使用反射操作函数,获取函数的相关信息?

反射-函数 这是我们反射四讲的第三讲&#xff0c;本次给大家讲解如何使用反射处理函数相关的操作。 在这一部分&#xff0c;向大家展示如何输出方法的信息并执行调用。 输出信息&#xff0c;包含方法名&#xff0c;方法参数&#xff0c;返回值。 最后&#xff0c;如何使用反…

【小趴菜前端实习日记4】

el-table数据更新视图不更新的问题、el-dialog居中展示、el-form表单验证之对象属性验证、vue2过滤器 一、el-table数据更新视图不更新的问题二、el-dialog居中展示三、el-form表单验证之对象属性验证四、vue2过滤器 一、el-table数据更新视图不更新的问题 手动触发元素更新&a…

Linux:Socket网络编程

目录 1. 理解源 IP 地址和目的 IP 地址 2&#xff1a;认识端口号 3&#xff1a;端口号范围划分 4&#xff1a;理解源端口号和目的端口号 5&#xff1a;理解Socket(套接字) 6&#xff1a;两个传输协议 &#xff08;TCP/UDP&#xff09; 6.1&#xff1a;User Datagram Prot…

打卡55天------图论(并查集)

图论这里我学的不是很好&#xff0c;作为一名JavaScript前端开发工程师&#xff0c;我能说我基本上在工作中都没用到过吗&#xff1f; 一、并查集理论基础 这个说句实话&#xff0c;我平常工作很少用到&#xff0c;上学的时候好像也没学过&#xff0c;可能我只是本科生吧&…

USB3.2 摘录(10)

系列文章目录 USB3.2 摘录&#xff08;一&#xff09; USB3.2 摘录&#xff08;二&#xff09; USB3.2 摘录&#xff08;三&#xff09; USB3.2 摘录&#xff08;四&#xff09; USB3.2 摘录&#xff08;五&#xff09; USB3.2 摘录&#xff08;六&#xff09; USB3.2 摘录&…

如何使用双重IP代理实现更安全的网络访问

在进行网络爬虫或其他需要隐匿真实IP的操作时&#xff0c;单一的代理IP有时并不能完全满足我们的需求。为了进一步提高安全性和隐私保护&#xff0c;我们可以使用双重IP代理。本文将详细介绍如何使用Java实现双重IP代理&#xff0c;帮助你在网络环境中更加游刃有余。 什么是双重…

神经网络—卷积层

1.讲解 Conv2d out_channels 参数为2时&#xff0c;会生成两个卷积核&#xff0c;分别与输入进行卷积。得到的两个输出为输出 新生成的卷积核和原来的卷积核不一定相同 in_channels (int) – Number of channels in the input image out_channels (int) – Number of channels…

秋招突击——8/21——知识补充——计算机网络——cookie、session和token

文章目录 引言正文Cookie——客户端存储和管理Session——服务端存储和管理Token补充签名和加密的区别常见的加密算法和签名算法 面试题1、HTTP用户后续的操作&#xff0c;服务端如何知道属于同一个用户&#xff1f;如果服务端是一个集群机器怎么办&#xff1f;2、如果禁用了Co…

在线英语学习小程序App源码开发技术探讨

引言 随着信息技术的飞速发展和全球化进程的加快&#xff0c;英语学习已经成为越来越多人的日常需求。传统的纸质材料和课堂教学已经无法满足现代人灵活、高效的学习需求。因此&#xff0c;开发一款在线英语学习小程序App成为了一个热门话题。本文将从技术角度探讨在线英语学习…

Ruby遇上GUI:探索Ruby桌面应用开发的新天地

标题&#xff1a;Ruby遇上GUI&#xff1a;探索Ruby桌面应用开发的新天地 在编程语言的多彩世界中&#xff0c;Ruby以其简洁和优雅著称&#xff0c;常被用于Web开发。然而&#xff0c;Ruby的潜力远不止于此&#xff0c;它同样能够在桌面应用开发领域大放异彩。本文将带您深入了…

从安装Docker到打包迁移MySQL的完整指南

从安装Docker到打包迁移MySQL的完整指南 每一天过得充实&#xff0c;眼中无迷茫&#xff0c;心中无烦恼。日子就会充满希望&#xff0c;岁月就会洒满清欢。 这篇文章将带你从零开始&#xff0c;在CentOS服务器上安装Docker、使用Docker部署MySQL数据库&#xff0c;并打包和迁移…

云计算day30

1. 配置⼀主⼆从mysql57 1. mycat对mysql8不完全⽀持 2. mysql8主从问题不⼤ get_pub_key1 1. gtids事务复制 2. 删除/etc/my.cnf 3. 同步data⽂件需要先停⽤mysql服务&#xff0c;删除data⽬录中的 auto.cnf 4. gtid模式以及经典模式都需要锁表 flush tables with rea…

给房子“养老”,你准备好了吗?

文&#xff5c;琥珀食酒社 作者 | 积溪 真崩不住了啊 一觉醒来 朋友圈被房屋养老金刷屏了 有人说买房如买“爹”&#xff0c;真的好费钱 有的说咱自己的养老还没着落呢 未来还得给房子养老&#xff1f; 当然&#xff0c;这事已经被辟谣了 说公共账户不需要咱老百姓额外…

0x03 ShowDoc 文件上传漏洞(CNVD-2020-26585)复现

参考&#xff1a;ShowDoc文件上传漏洞&#xff08;CNVD-2020-26585&#xff09;_showdoc漏洞-CSDN博客 一、fofa 搜索使用该工具的网站 网络空间测绘&#xff0c;网络空间安全搜索引擎&#xff0c;网络空间搜索引擎&#xff0c;安全态势感知 - FOFA网络空间测绘系统 "S…

【Linux】第十六章 高级IO (五种IO模型+fcntl)

文章目录 五种 IO 模型异步IO 和 同步IO同步通信 和 异步通信同步通信 和 同步与互斥fcntl-设置非阻塞IO测试 IO主要分为两步&#xff1a; 第一步是等&#xff0c;即等待IO条件就绪。第二步是拷贝&#xff0c;也就是当IO条件就绪后将数据拷贝到内存或外设。 让IO变得高效&…

排序算法(冒泡、插入、选择、快排、归并)原理动画及Python、Java实现

排序算法&#xff08;冒泡、插入、选择、快排、归并&#xff09;原理动画及Python、Java实现 1 冒泡排序1.1 原理1.2 Python、Java实现 2 插入排序2.1 原理2.2 Python、Java实现 3 选择排序3.1 原理3.2 Python、Java实现 4 快速排序4.1 原理4.2 Python、Java实现 5 归并排序5.1…

【十四届蓝桥杯省赛C++试卷】

一、选择题 第一题 C 中&#xff0c; bool 类型的变量占用字节数为&#xff08; &#xff09;。 A 、 1 B 、 2 C 、 3 D 、 4 答案&#xff1a;A 解析&#xff1a;&#xff08;C 中 bool 类型与 char 类型一样&#xff0c;都需要1 byte。一些其他类型的占用字节数&…

streeapptest 工具编译看 + 测试rk3568

首先来了解一下 stressappteset 网上的资料 压力测试不就是 内存的接口测试吗&#xff1f; 网上找了些资料&#xff0c;基本没有这个工具对于 磁盘网络的测试。 我的理解&#xff0c;压力测试应该指的就是 CPU内存的测试吧。 然后是 关于这个 软件的编译。 首先是下载 git c…

JavaScript(28)——正则表达式

定义正则表达式语法&#xff1a; const 变量名 /表达式/ 判断是否有符合规则的字符串&#xff1a; test()方法 用来查看正则表达式与指定的字符串是否匹配 语法&#xff1a; regObj.test(被检测的字符串) //返回布尔值 regObj.exec(字符串) //返回的是数组 <script>…

docker的部署及基本用法

目录​​​​​​​ 1 docker 介绍 1.1 什么是docker&#xff1f; 1.2 docker在企业中的应用场景 1.3 docker与虚拟化的对比 1.4 docker的优势 1.5 容器工作方式 2 部署docker 2.1 配置软件仓库 2.2 docker 安装 2.3 配置docker 镜像加速器 2.4 启动服务 2.5 激活内核网络选项…