正式页面开发-登录注册页面
整体路由设计:
- 登录和注册的切换是切换组件或者是切换内容(v-if和 v-else),因为点击两个之间路径是没有变化的。也就是登录和注册共用同一个路由。登录是独立的一级路由。
- 登录之后进到首页,有三个大模块:文章分类,文章管理,个人中心。首页架子也是一级路由,点到三个模块一级个人中心中的其他模块也是一样都是二级路由



在 views文件夹中 新建四个文件夹,分别存放登录页,首页架子,文章,用户四个部分路由,根据各个文件夹有多少文件再新建 vue 文件

在router 中配置路由规则

在 APP.vue中写上路由出口


登陆注册页面:页面之间切换用 v-if 和 v-else

删除之前 app.vue中的代码,只留下简单地架构即可

登陆注册页面需要用到一些图标,所以首先安装图标库

笔记中 cv 静态结构代码


el-row搭配 el-col来实现板块划分,一行分为 24份数,el-col中通过 :span="份数"来实现板块占据的份数,offset =""来实现与左侧的margin。
右侧的登录页面通过 el-form 表单来总实现,el-form-item表示表单中每个小部分,注册字样,输入用户名,输入密码 ,再次输入密码,注册字样,返回字样。
el-form-item中有输入框 el-input,图标 :prefix-icon=""
el-form-item中有返回键 el-link,点击事件则将 isRegister布尔值改为 false




<script setup>
import { User, Lock } from '@element-plus/icons-vue'
import { ref } from 'vue'
const isRegister = ref(true)
</script><template><!-- el-row配合 el-col组合,el-row表示一行,一行分成24份el-col标识列 (1):span="12" 代表在一行中,占12份(50%)(2) :span="6" 代表在一行中,占6份(25%)(3) :offset="3" 代表在一行中,左侧margin份数--><el-row class="login-page"><el-col :span="12" class="bg"></el-col><el-col :span="6" :offset="3" class="form"><!-- 因为其中都是表单,所以直接 el-form(整个表单组件)el-form-item 表单的一行 (一个表单域中)el-input 表单元素(输入开给你)--><!-- 注册相关表单 --><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>
登陆注册页面功能

表单校验
:model = "ruleForm",ruleForm绑定的是 form 对象(下面定义的 reluForm是ts写法),它是用来收集当前表单中全部表单数据



在线演示:黑马程序员-大事件
接口文档: 登录 - 黑马程序员-大事件
接口根路径: http://big-event-vue-api-t.itheima.net
了解了四大块之后,接下来就是首先创建一个ruleForm对象,从接口文档中创建相应字段。将其绑定到注册代码段的 el-form 中


接下来是创建整个表单的校验规则:
新建校验规则 rules,里边写上 用于提交的form对象的三个数据的校验规则,例如username
然后将 form对象相应的属性绑定到相应的输入框中
并且在输入框对应的 el-form-item中配置prop
(如果希望是实时校验,将 trigger值改为 change)

除了username的非空校验和长度校验之外,还有password的非空校验和正则校验


自定义校验,原则是因为以上三个校验都无法满足。
再次输入密码不光是要满足非空和正则校验,还要校验是否和原本输入的一致





正式进行注册提交之前,还要进行预校验,也就是没有输入东西的时候是不能进行注册的。
点击注册按钮的时候还要对表单内容进行校验,通过之后才能进行注册提交请求。
调用 element-plus 中的 form 的方法 validate,要使用这个方法那么就先要拿到 form 组件实例

先定义一个 form ,然后 与需要获取的那个做绑定。因为注册和登录都需要验证,所以两个都绑定,也不必担心两个重名,因为 v-if 和 v-else 则证明了这两个每次只会出现一次


预校验之后进行注册请求:
在api 文件夹中新建 user.js文件



在使用 ElMessage时,虽然以往类似能直接使用 el-row之类的标签,是因为原来配置的自动导入。现在因为 eslint中没有关于此的配置,所以直接使用 ElMessage 是错误的,所以要在 eslintrc.cjs中进行配置



登录功能(校验+登录+存token)
共用 formModel ,因为登录中也需要 username和password,然后将其在 登录部分的 el-form中 :model="formModel" 绑定。规则也共用,: rules = "rules"绑定规则
v-model 绑定 form 数据对象子属性
prop绑定校验规则


登录 和 注册 两个切换的时候,输入框中的内容能带入到另外一个里面去,所以在切换的时候要将表单信息进行重置

点击登录的时候也要进行预校验

要完成登录还要封装对应的 api 接口


调用方式与 注册接口调用方式一样

需要将请求回来的结果接收,并调用 stores文件夹中用户模块 user.js中的setToken方法将请求结果存入本地。因为stores 文件夹中的各模块已经导入到 其下的index.js中,所以只需要在index.js中进行按需导入即可。导进来之后要要 创建一个实例(所说的实例也就是通过构造函数创建的对象),也就是对象,然后才能访问其中的 setToken 方法
登录成功之后是要进行跳转到首页的,这里按需导入 vue-router库中的 useRouter钩子函数,然后创建一个实例(也就是钩子函数创建出来的对象)。

相关文章:
正式页面开发-登录注册页面
整体路由设计: 登录和注册的切换是切换组件或者是切换内容(v-if和 v-else),因为点击两个之间路径是没有变化的。也就是登录和注册共用同一个路由。登录是独立的一级路由。登录之后进到首页,有三个大模块:文章分类&…...
Spring项目-抽奖系统(实操项目-用户管理接口)(END)
^__^ (oo)\______ (__)\ )\/\ ||----w | || || 一:前言: 活动创建及展示博客链接:Spring项目-抽奖系统(实操项目-用户管理接口)(THREE)-CSDN博客 上一次完成了活动的创建和活动的展示,接下来就是重头戏—…...
Kafka面试题及原理
1. 消息可靠性(不丢失) 使用Kafka在消息的收发过程都会出现消息丢失,Kafka分别给出了解决方案 生产者发送消息到Brocker丢失消息在Brocker中存储丢失消费者从Brocker 幂等方案:【分布式锁、数据库锁(悲观锁、乐观锁…...
Jenkinsfile流水线构建教程
前言 Jenkins 是目前使用非常广泛的自动化流程的执行工具, 我们目前的一些自动化编译, 自动化测试都允许在 Jenkins 上面. 在 Jenkins 的术语里面, 一些自动化工作联合起来称之为流水线, 比如拉取代码, 编译, 运行自动化测试等. 本文的主要目的是引导你快速熟悉 Jenkinsfile …...
CSS—text文本、font字体、列表list、表格table、表单input、下拉菜单select
目录 1.文本 2.字体 3.列表list a.无序列表 b.有序列表 c.定义列表 4.表格table a.内容 b.合并单元格 3.表单input a.input标签 b.单选框 c.上传文件 4.下拉菜单 1.文本 属性描述color设置文本颜色。direction指定文本的方向 / 书写方向。letter-spacing设置字符…...
API接口:企业名称、注册号、统一社会信用代码、企业类型、成立日期和法定代表人等数据 API 接口使用指南
API接口:企业名称、注册号、统一社会信用代码、企业类型、成立日期和法定代表人等数据 API 接口使用指南 本文详细介绍一种基于 Web 搜索方式实现的企业信息查询接口,适用于数据补全、企业资质验证、信息查询等场景。文章内容涵盖接口功能、请求参数、返…...
在.net中,async/await的理解
一、什么是同步?什么是异步? 在.net中,async 和 await 是两个关键字,async 关键字用于声明一个方法是异步方法,该方法可以包含一个或多个 await 表达式。await 关键字是用于在异步方法中等待一个任务(Task…...
水果识别系统 | BP神经网络水果识别系统,含GUI界面(Matlab)
使用说明 代码下载:BP神经网络水果识别系统,含GUI界面(Matlab) BP神经网络水果识别系统 一、引言 1.1、研究背景及意义 在当今科技迅速发展的背景下,人工智能技术尤其是在图像识别领域的应用日益广泛。水果识别作为…...
40岁开始学Java:Java中单例模式(Singleton Pattern),适用场景有哪些?
在Java中,单例模式(Singleton Pattern)用于确保一个类只有一个实例,并提供全局访问点。以下是详细的实现方式、适用场景及注意事项: 一、单例模式的实现方式 1. 饿汉式(Eager Initialization) …...
李宏毅机器学习课程学习笔记04 | 浅谈机器学习-宝可梦、数码宝贝分类器
文章目录 案例:宝可梦、数码宝贝分类器第一步:需要定义一个含有未知数的function第二步:loss of a function如何Sample Training Examples > 如何抽样可以得到一个较好的结果如何权衡模型的复杂程度 Tradeoff of Model Complexity todo 这…...
C++11中的右值引用和完美转发
C11中的右值引用和完美转发 右值引用 右值引用是 C11 引入的一种新的引用类型,用 && 表示。它主要用于区分左值和右值,并且可以实现移动语义,避免不必要的深拷贝,提高程序的性能。左值通常是可以取地址的表达式…...
Redis详解(实战 + 面试)
目录 Redis 是单线程的!为什么 Redis-Key(操作redis的key命令) String 扩展字符串操作命令 数字增长命令 字符串范围range命令 设置过期时间命令 批量设置值 string设置对象,但最好使用hash来存储对象 组合命令getset,先get然后在set Hash hash命令: h…...
ISP CIE-XYZ色彩空间
1. 颜色匹配实验 1931年,CIE综合了前人实验数据,统一采用700nm(红)、546.1nm(绿)、435.8nm(蓝)作为标准三原色波长,绘制了色彩匹配函数,如下图。选定这些波…...
【强化学习笔记1】从强化学习的基本概念到近端策略优化(PPO)
好久没有更新了。最近想学习一下强化学习,本系列是李宏毅老师强化学习的课程笔记。 1. Policy-based Model 1.1 Actor 在policy-based model中,主要的目的就是训练一个actor。 对于一个episode(例如,玩一局游戏)&…...
Deepseek对ChatGPT的冲击?
从测试工程师的视角来看,DeepSeek对ChatGPT的冲击主要体现在**测试场景的垂直化需求与通用模型局限性之间的博弈**。以下从技术适配性、效率优化、风险控制及未来趋势四个维度展开分析: --- ### **一、技术适配性:垂直领域能力决定工具选择…...
STM32中的ADC
目录 一:什么是ADC 二:ADC的用途 三:STM32F103ZET6的ADC 3.1ADC对应的引脚 3.2ADC时钟 3.3ADC的工作模式 编辑3.4ADC校准 3.5ADC转换结构和实际电压的换算 四:ADC配置步骤 五:两个重要的函数 一:…...
开启AI短剧新纪元!SkyReels-V1/A1双剑合璧!昆仑万维开源首个面向AI短剧的视频生成模型
论文链接:https://arxiv.org/abs/2502.10841 项目链接:https://skyworkai.github.io/skyreels-a1.github.io/ Demo链接:https://www.skyreels.ai/ 开源地址:https://github.com/SkyworkAI/SkyReels-A1 https://github.com/Skywork…...
【uniapp】在UniApp中实现持久化存储:安卓--生成写入数据为jsontxt
在移动应用开发中,数据存储是一个至关重要的环节。对于使用UniApp开发的Android应用来说,缓存(Cache)是一种常见的数据存储方式,它能够提高应用的性能和用户体验。然而,缓存数据在用户清除缓存或清除应用数…...
大白话React第十一章React 相关的高级特性以及在实际项目中的应用优化
假设我们已经对 React 前端框架的性能和可扩展性评估有了一定了解,接下来的阶段可以深入学习 React 相关的高级特性以及在实际项目中的应用优化,以下是详细介绍及代码示例: 1. React 高级特性的深入学习 1.1 React 并发模式(Con…...
java容器 LIst、set、Map
Java容器中的List、Set、Map是核心数据结构,各自适用于不同的场景 一、List(有序、可重复) List接口代表有序集合,允许元素重复和通过索引访问,主要实现类包括: ArrayList 底层结构:动态数组…...
使用IDEA如何隐藏文件或文件夹
选择file -> settings 选择Editor -> File Types ->Ignored Files and Folders (忽略文件和目录) 点击号就可以指定想要隐藏的文件或文件夹...
DOM HTML:深入理解与高效运用
DOM HTML:深入理解与高效运用 引言 随着互联网的飞速发展,前端技术逐渐成为软件开发中的关键部分。DOM(文档对象模型)和HTML(超文本标记语言)是前端开发中的基石。本文将深入探讨DOM和HTML的概念、特性以及在实际开发中的应用,帮助读者更好地理解和使用这两项技术。 …...
形象生动讲解Linux 虚拟化 I/O
用现实生活的比喻和简单例子来解释 Linux 虚拟化 I/O,就像给朋友讲故事一样。 虚拟化 I/O 要解决什么问题? 想象你有一栋大房子(物理服务器),想把它分割成多个小公寓(虚拟机)出租。每个租客&…...
git从零学起
从事了多年java开发,一直在用svn进行版本控制,如今更换了公司,使用的是git进行版本控制,所以打算记录一下git学习的点滴,和大家一起分享。 百度百科: Git(读音为/gɪt/)是一个开源…...
汽车低频发射天线介绍
汽车低频PKE天线是基于RFID技术的深度研究及产品开发应用的一种天线,在汽车的智能系统中发挥着重要作用,以下是关于它的详细介绍: 移动管家PKE低频天线结构与原理 结构:产品一般由一个高Q值磁棒天线和一个高压电容组成ÿ…...
【Java分布式】Nacos注册中心
Nacos注册中心 SpringCloudAlibaba 也推出了一个名为 Nacos 的注册中心,相比 Eureka 功能更加丰富,在国内受欢迎程度较高。 官网:https://nacos.io/zh-cn/ 集群 Nacos就将同一机房内的实例划分为一个集群,一个服务可以包含多个集…...
【C++】ImGui:极简化的立即模式GUI开发
如果你是GUI开发的新手,或想试试轻量级、易集成的GUI库,ImGui(即时模式图形用户界面)是个不错的选择。它以简洁的API、跨平台的兼容性和卓越的性能,受到许多开发者的喜爱。无论是为C项目添加调试界面,还是构…...
5G学习笔记之BWP
我们只会经历一种人生,我们选择的人生。 参考:《5G NR标准》、《5G无线系统指南:如微见著,赋能数字化时代》 目录 1. 概述2. BWP频域位置3. 初始与专用BWP4. 默认BWP5. 切换BWP 1. 概述 在LTE的设计中,默认所有终端均能处理最大2…...
1. 搭建前端+后端开发框架
1. 说明 本篇博客主要介绍网页开发中,搭建前端和后端开发框架的具体步骤,框架中所使用的技术栈如下: 前端:VUE Javascript 后端:Python Flask Mysql 其中MySQL主要用来存储需要的数据,在本文中搭建基本…...
深入浅出:插入排序算法完全解析
1. 什么是插入排序? 插入排序(Insertion Sort)是一种简单的排序算法,其基本思想与我们整理扑克牌的方式非常相似。我们将扑克牌从第二张开始依次与前面已排序的牌进行比较,将其插入到合适的位置,直到所有牌…...
