正式页面开发-登录注册页面

devtools/2025/3/4 5:14:08/

整体路由设计:

  • 登录和注册的切换是切换组件或者是切换内容(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钩子函数,然后创建一个实例(也就是钩子函数创建出来的对象)。


http://www.ppmy.cn/devtools/164075.html

相关文章

RabbitMQ 学习路线与知识总结

以下是 RabbitMQ 学习路线与知识总结,结合 Mermaid 生成的脑图,帮助你系统掌握核心概念和实战技巧。 编程相关书籍分享:https://blog.csdn.net/weixin_47763579/article/details/145855793 DeepSeek使用技巧pdf资料分享:https://blog.csdn.net/weixin_47763579/article/det…

开源模型应用落地-glm模型小试-glm-4-9b-chat-vLLM集成(四)

一、前言 GLM-4是智谱AI团队于2024年1月16日发布的基座大模型&#xff0c;旨在自动理解和规划用户的复杂指令&#xff0c;并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等&#xff0c;支持128K的上下文窗口&#xff0c;使其在长文本处理和精度召回方面表现优异&a…

基于vue框架的游戏博客网站设计iw282(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。

系统程序文件列表 项目功能&#xff1a;用户,博客信息,资源共享,游戏视频,游戏照片 开题报告内容 基于FlaskVue框架的游戏博客网站设计开题报告 一、项目背景与意义 随着互联网技术的飞速发展和游戏产业的不断壮大&#xff0c;游戏玩家对游戏资讯、攻略、评测等内容的需求日…

开箱即用!一个功能丰富的 AI 语音工具箱!

当我们处理大量音频文件时&#xff0c;往往需要语音识别、转录甚至语音合成等多款工具协作完成工具。 这时候&#xff0c;要是有一款工具能够一站式解决从语音识别到语音合成的一切需求就好。 今天&#xff0c;我在 GitHub 上就发现了一款可本地部署的多功能 AI 语音工具箱&a…

部署Joplin私有云服务器postgres版-docker compose

我曾经使用过一段时间 Joplin&#xff0c;官方版本是收费的&#xff0c;而我更倾向于将数据掌握在自己手中。因此&#xff0c;在多次权衡后&#xff0c;我决定自己搭建 Joplin 服务器并进行尝试。 个人搭建的版本与数据库直连&#xff0c;下面是使用 Docker Compose 配置数据库…

【数据分析】上市公司市场势力数据测算+dofile(1992-2023年)

市场势力通常指的是公司在市场中的相对竞争力和定价能力。具有较强市场势力的公司通常能够控制价格、影响市场规则&#xff0c;并在竞争中占据主导地位。A股公司市场势力数据是对中国资本市场中公司竞争力的深入分析&#xff0c;A股市场中&#xff0c;公司市场势力的强弱不仅影…

UGUI优化

UGUI优化指南 1. Draw Call优化 1.1 合批&#xff08;Batching&#xff09; 使用相同材质的UI元素会自动合批确保UI元素在同一层级&#xff08;相同的Canvas&#xff09;避免使用不必要的Mask和RectMask2D&#xff0c;它们会打断合批尽量使用同一图集&#xff08;Atlas&…

渗透第二次作业

1、seacmsv9报错注入出管理员账号密码 注入漏洞的文件路径:seacmsv9.1\upload\comment\api\index.php 注入点&#xff1a;&$rlist 经源代码分析,可用以下语句注入&#xff0c;得到用户名&#xff1a; http://127.0.0.1/seacmsv9.1/upload/comment/api/index.php?gid1&…