vue3+ts+elementplus写一个登录页面教程

news/2024/4/29 6:37:26/文章来源:https://blog.csdn.net/weixin_48998573/article/details/137053315

在这里插入图片描述

文章目录

  • 前言
    • 1. 安装 Vue CLI 和 TypeScript 支持
      • 2. 创建登录组件
  • 文章重点内容


前言

前期准备步骤:
创建一个使用 Vue 3 和 TypeScript 的登录页面涉及到多个步骤。以下是一个基本的教程,帮助你从头开始构建这样一个页面:

1. 安装 Vue CLI 和 TypeScript 支持

首先,你需要安装 Vue CLI 并配置它以支持 TypeScript。如果你还没有安装 Vue CLI,可以通过以下命令进行安装:

npm install -g @vue/cli  
# OR  
yarn global add @vue/cli

然后,你可以创建一个新的 Vue 3 项目并启用 TypeScript 支持:

vue create my-login-app

在创建过程中,选择 “Manually select features”,然后勾选 “TypeScript” 和其他你需要的特性(比如 Router、Linter/Formatter 等)。

2. 创建登录组件

在 src/views目录下创建一个新的 TypeScript 文件,比如 Login.vue。这个文件将包含你的登录表单和逻辑。

文章重点内容

页面样式:
在这里插入图片描述
页面代码:

		<div class="login-right-warp"><div class="login-right-warp-title">login</div><div class="login-right-warp-form"><div class="login-right-warp-form_title">用户名登录</div><el-form ref="ruleFormRef" style="max-width: 600px" :model="ruleForm" status-icon :rules="rules"label-width="auto" class="demo-ruleForm"><el-form-item prop="AccountNo"><el-input v-model="ruleForm.AccountNo" autocomplete="off" :prefix-icon="User"placeholder="请输入账号" /></el-form-item><el-form-item prop="AccountPwd"><el-input v-model="ruleForm.AccountPwd" type="password" autocomplete="off" :prefix-icon="Lock"placeholder="请输入密码" /></el-form-item><el-form-item prop="Code"><el-input v-model.number="ruleForm.Code" :prefix-icon="Promotion" class="login-content-code"placeholder="请输入验证码" /><span class="login-content-code-img" @click="generateCodeAsync()">{{ verificationCode.Code}}</span></el-form-item><el-form-item><el-button type="primary" @click="submitForm(ruleFormRef)">登录</el-button></el-form-item></el-form><div class="login-msg">* 温馨提示:建议使用谷歌、Microsoft Edge,版本 79.0.1072.62 及以上浏览器,360浏览器请使用极速模式</div></div></div>

script代码:

import { reactive, onMounted, ref } from 'vue';
import type { FormInstance, FormRules } from 'element-plus';
import { User, Lock, Promotion } from '@element-plus/icons-vue';
import { postLoginAsync, postGenerateCodeAsync } from '@/api/login';
import { useRouter } from 'vue-router';// 使用 Vue Router 的 useRouter 函数来获取 router 实例
const router = useRouter();const ruleFormRef = ref<FormInstance>();// 页面加载时
onMounted(() => {generateCodeAsync();
});const validateCodeKey = (rule: any, value: any, callback: any) => {if (value === '') {callback(new Error('请输入验证码'));} else {callback();}
};const validateAccountNo = (rule: any, value: any, callback: any) => {if (value === '') {callback(new Error('请输入账号'));} else {callback();}
};
const validateAccountPwd = (rule: any, value: any, callback: any) => {if (value === '') {callback(new Error('请输入密码'));} else {callback();}
};const ruleForm = reactive({AccountNo: '123',AccountPwd: '',CodeKey: '',Code: '',
});const verificationCode = reactive({CodeKey: '',Code: '',
});const rules = reactive<FormRules<typeof ruleForm>>({AccountNo: [{ validator: validateAccountNo, trigger: 'blur' }],AccountPwd: [{ validator: validateAccountPwd, trigger: 'blur' }],Code: [{ validator: validateCodeKey, trigger: 'blur' }],
});
const generateCodeAsync = () => {postGenerateCodeAsync().then((res: any) => {verificationCode.Code = res.Data.Code;verificationCode.CodeKey = res.Data.Key;ruleForm.CodeKey = res.Data.Key;});
};const submitForm = (formEl: FormInstance | undefined) => {if (!formEl) return;formEl.validate((valid) => {if (valid) {console.log('submit!');router.push('/home');} else {console.log('error submit!');return false;}});
};
</script>

样式代码:

.login {width: 100vw;height: 100vh;background: #fff;.login-left {.login-left-logo {display: flex;align-items: center;position: absolute;top: 50px;left: 80px;z-index: 1;animation: logoAnimation 0.3s ease;img {width: 100px;height: 64px;}.login-left-logo-text {display: flex;flex-direction: column;}.login-left-logo-text span {margin-left: 10px;font-size: 30px;font-weight: 700;color: #de2910;}.login-left-logo-text .login-left-logo-text-msg {font-size: 12px;color: #de2910;}}.login-left-img {width: 90%;margin: 70px 0 0px 10%;height: 90%;min-height: 500px;min-width: 500px;display: flex;justify-content: center;align-items: center;img {height: 500px;min-width: 500px;}}}.login-right {width: 650px;.login-right-warp {border: 1px solid #e76959;border-radius: 3px;width: 500px;height: 550px;position: relative;overflow: hidden;background-color: #fff;margin: auto;.login-right-warp-title {height: 130px;line-height: 130px;font-size: 32px;font-weight: 800;text-align: center;animation: logoAnimation 0.3s ease;animation-delay: 0.3s;color: #f00;}.login-right-warp-form {padding: 0 50px 50px;}.login-right-warp-form_title {color: #de2910;width: 100%;padding: 10px 0px;border-bottom: 1px solid #e4e7ed;position: relative;}.login-right-warp-form_title::after {content: '';position: absolute;width: 90px;height: 2px;background: #de2910;bottom: 0;left: 0px;}}.el-form {margin-top: 30px;}.el-input {width: 100%;height: 40px;}.el-button {width: 100%;height: 40px;border-radius: 20px;background: #de2910;border: #de2910;margin: 20px 0px;}.login-content-code {width: 70%;}.login-content-code-img {width: 25%;background-color: #fff;border: 1px solid rgb(220, 223, 230);height: 38px;border-radius: 5px;margin-left: 4.5%;line-height: 38px;text-align: center;cursor: pointer;}.login-msg {margin-top: 30px;color: #a8abb2;font-size: 12px;}}
}

您好,我是肥晨。
欢迎关注我获取前端学习资源,日常分享技术变革,生存法则;行业内幕,洞察先机。

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

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

相关文章

Spring Boot | SpringBoo“开发入门“

目录 : 1.SpringBoot的“介绍”SpringBoot”概述” &#xff1a;SpringBoot”简介“SpringBoot的“优点” 2. SpringBoot入门程序环境准备使用 “Maven”方式构建SpringBoot 项目使用“Spring Initializr”方式构建Spring Boot 项目 3. “单元测试” 和“热部署”单元测试热部署…

SUSE 15 SP5 一键安装 Oracle 19C(19.22)单机版

前言 Oracle 一键安装脚本&#xff0c;演示 SUSE 15 SP5 一键安装 Oracle 19C&#xff08;19.22&#xff09;单机版过程&#xff08;全程无需人工干预&#xff09;&#xff1a;&#xff08;脚本包括 ORALCE PSU/OJVM 等补丁自动安装&#xff09; ⭐️ 脚本下载地址&#xff1…

54、Qt/对话框、事件机制相关学习20240325

一、完善对话框&#xff0c;点击登录按钮&#xff0c;如果账号和密码匹配&#xff0c;则弹出信息对话框&#xff0c;给出提示”登录成功“&#xff0c;提供一个Ok按钮&#xff0c;用户点击Ok后&#xff0c;关闭登录界面&#xff0c;跳转到其他界面 如果账号和密码不匹配&#…

【计算机网络篇】数据链路层(4.2)可靠传输的实现机制

文章目录 &#x1f354;可靠传输的实现机制⭐停止 - 等待协议&#x1f5d2;️注意 &#x1f50e;停止 - 等待协议的信道利用率&#x1f5c3;️练习题 ⭐回退N帧协议&#x1f388;回退N帧协议的基本工作流程&#x1f50e;无传输差错的情况&#x1f50e;超时重传的情况&#x1f5…

Linux vim用法

在命令模式下&#xff0c;点i 进入输入模式 输入模式下&#xff1a;通过箭头可以实现左右上下移动 o是从新起下一行开始写 O是新起上一行开始写 $是到此行的末尾 0是到此行的开头 gg是到第一行 yy是复制此行&#xff0c;p是粘贴 dd是删除此行 u是撤销 Ctrl r是反向撤…

边缘计算网关在机械制造企业的应用效果和价值-天拓四方

随着智能制造行业的飞速发展&#xff0c;数据量的激增和实时性要求的提高&#xff0c;传统的数据处理方式已经难以满足生产需求。而边缘计算网关的出现&#xff0c;为智能制造行业带来了革命性的变化。下面&#xff0c;我们将通过一个具体案例展示边缘计算网关在智能制造行业的…

pycharm使用远程服务器的jupyter环境

1、确保服务器上安装了jupyter,如果没有&#xff0c;执行下面命令安装 pip install jupyter2、启动jupyter notebook服务 jupyter notebook --no-browser --port8888 --ip0.0.0.0 --allow-root表明在服务器的8888 端口上启动 Jupyter Notebook&#xff0c;并允许从任何 IP 地…

手动实现一个扩散模型DDPM

扩散模型是目前大部分AIGC生图模型的基座&#xff0c;其本质是用神经网络学习从高斯噪声逐步恢复图像的过程&#xff0c;本文用python代码从零开始构建了一个简单的扩散模型。 理论部分 DDPM(Denoising Diffusion Probabilistic Models) 是一种在生成对抗网络等技术的基础上发展…

阿里云OSS存储的视频如何加水印

OSS是不能进行视频添加水印的&#xff0c;可以图片添加水印。 您可以在视频点播中进行配置&#xff1a; https://help.aliyun.com/zh/vod/user-guide/video-watermarks?spma2c4g.11186623.0.i2 原来的业务代码都是使用python 对oss的 视频进行上传 的,上传的视频路径已经保存到…

小米汽车正式发布:开启智能电动新篇章

随着科技的不断进步&#xff0c;汽车产业正经历着前所未有的变革。智能电动汽车作为这一变革的重要方向&#xff0c;正吸引着越来越多的目光。在这个充满机遇和挑战的时代&#xff0c;小米汽车凭借其卓越的技术实力和深厚的市场底蕴&#xff0c;终于迈出了坚实的一步。今天&…

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议

计算机网络&#xff1a;传输控制协议&#xff08;Transmission Control Protocol-TCP协议&#xff09; 本文目的前置知识点TCP协议简介主要特性通信流程1. 建立连接的过程(三次握手&#xff0c;243)1.1 为什么要三次握手&#xff0c;两次不行吗&#xff1f; 2. 释放连接的过程(…

Java基础语法(二)

前言 Hello&#xff0c;大家好&#xff01;很开心与你们在这里相遇&#xff0c;我是一个喜欢文字、喜欢有趣的灵魂、喜欢探索一切有趣事物的女孩&#xff0c;想与你们共同学习、探索关于IT的相关知识&#xff0c;希望我们可以一路陪伴~ 1. 类型转换 1.1 自动类型转换 什么是自…

RabbitMQ3.x之三_RabbitMQ新建用户及开启远程访问

RabbitMQ3.x之三_RabbitMQ新建用户及开启远程访问 文章目录 RabbitMQ3.x之三_RabbitMQ新建用户及开启远程访问1. guest不能远程访问2. 创建专有用户远程访问RabbitMQ1. 创建用户2. 给用户分配tag(角色)3. 开启远程访问 3. 新用户远程登录 1. guest不能远程访问 在 RabbitMQ 中&…

网络爬虫框架Scrapy的入门使用

Scrapy的入门使用 Scrapy概述引擎&#xff08;Engine&#xff09;调度器&#xff08;Scheduler&#xff09;下载器&#xff08;Downloader&#xff09;SpiderItem Pipeline 基本使用安装scrapy创建项目定义Item数据模型对象创建爬虫(Spider)管道pipeline来保存数据启动爬虫 其他…

利用lidar生成深度图

前言 目前&#xff0c;深度图像的获取方法有&#xff1a;激光雷达深度成像法、计算机立体视觉成像、坐标测量机法、莫尔条纹法、结构光法等。针对深度图像的研究重点主要集中在以下几个方面&#xff1a;深度图像的分割技术&#xff0c;深度图像的边缘检测技术&#xff0c;基于…

python的神奇bug2

今天测试出一个很诡异的bug&#xff0c; 这个错误还真的很难发现 测试1 a [1,10,100] for i in a:print(i)if(i10):a[20,30,-1]一般来说我们在进行迭代时&#xff0c;a这个值时不能改动的&#xff0c;但是现在的问题时如果我不小心给改动了呢&#xff0c;结果如下 也就是说…

文本文件操作

大家好&#xff1a; 衷心希望各位点赞。 您的问题请留在评论区&#xff0c;我会及时回答。 文件操作 程序运行时&#xff0c;产生的数据都是临时数据&#xff0c;程序一旦运行结束都会被释放。通过文件可以将数据持久化。 C中对文件进行操作需要包含头文件<fstream> 文件…

关于深度学习的 PyTorch 项目如何上手分析?从什么地方切入?

文章目录 PyTorch 项目分析1.背景2.分析流程 PyTorch 项目分析 1.背景 当我们拿到一个 PyTorch 的深度学习项目时&#xff0c;应该怎么入手&#xff1f;怎么去查看代码&#xff1f; 2.分析流程 首先阅读对应项目的 README.md 文件。通过阅读 README.md &#xff0c;一般可以…

【Redis面试题】Redis 的大 Key 对持久化有什么影响?

目录 大 Key 对 AOF 日志的影响大 Key 对 AOF 重写和 RDB 的影响总结 Redis 的持久化方式有两种&#xff1a;AOF 日志和 RDB 快照。 所以接下来&#xff0c;针对这两种持久化方式具体分析分析。 大 Key 对 AOF 日志的影响 先说说 AOF 日志三种写回磁盘的策略 Redis 提供了 3 …

记录在项目中引用本地的npm包

1、先把需要的包下载下来&#xff0c;以Photo Sphere Viewer 为引用的npm包、项目以shpereRepo为例子 git clone https://github.com/mistic100/Photo-Sphere-Viewer2、拉下代码后修改之后执行 ./build.sh build.sh #!/usr/bin/env bashyarn run build targetDir"../sh…