vue3实现简单登录页面

使用 Vue3 + ts + scss + element-plus 实现简单的用户登录界面,登录方式包括:手机验证码登录、手机账号密码登录、扫码登录,效果如下图所示:效果示意图
详细代码:
模版部分

<template><div class="login"><div class="container"><div class="content"><h4>{{ title }}登录</h4><div class="qr-code-area" v-if="loginType === 'qrcode'"><img src="@/assets/myblog.png" alt="myblog-qrcode" /></div><div v-else class="account-area"><el-form ref="formRef" :rules="loginRules" :model="loginForm" label-width="auto":hide-required-asterisk="true"><el-form-item label="手机号" prop="account"><el-input v-model="loginForm.account" placeholder="请输入手机号码"><template #prepend>+86</template></el-input></el-form-item><el-form-item v-if="loginType === 'password'" prop="password" label="密码"><el-input v-model="loginForm.password" placeholder="请输入密码"></el-input></el-form-item><el-form-item v-if="loginType === 'vetifycode'" prop="vetifycode" label="验证码"><el-input v-model="loginForm.verifyCode" placeholder="请输入六位验证码" maxlength="6"><template #append><el-button type="primary" @click="handleSendVerifyCode">获取验证码</el-button></template></el-input></el-form-item></el-form><router-link class="forget-area" v-if="loginType === 'password'" to="">忘记密码</router-link><div class="operation-area"><el-button class="submit-btn" type="primary" @click="handleLogin">登录</el-button></div></div><div class="change-login-type"><div :class="['login-type', loginType === 'vetifycode' && 'active']" @click="loginType = 'vetifycode'">手机号</div><div :class="['login-type', loginType === 'password' && 'active']" @click="loginType = 'password'">账号密码</div><div :class="['login-type', loginType === 'qrcode' && 'active']" @click="loginType = 'qrcode'">二维码</div></div></div></div></div>
</template>

js部分

<script lang="ts" setup>
import { ElMessage } from 'element-plus';
import { computed, reactive, ref, watch } from 'vue';const loginRules = {account: [{ required: true, message: '请输入手机号码', trigger: 'blur' },{ pattern: /^1\d{10}$/, message: "请输入正确的手机号码", trigger: "blur" }],password: [{ required: true, message: '请输入密码', trigger: 'blur' }],
}const formRef = ref<HTMLFormElement>(null);
const loginForm = reactive({account: '',password: '',verifyCode: ''
});
const loginType = ref<'password' | 'vetifycode' | 'qrcode'>('vetifycode');const title = computed(() => {switch (loginType.value) {case 'password':return '账号密码'case 'vetifycode':return '短信验证码'case 'qrcode':return '扫码'default:return ''}
})watch(loginType, () => {formRef?.value?.resetFields();
})const handleSendVerifyCode = () => {formRef.value.validateField('account', (valid: boolean) => {if (valid) {ElMessage.info('您的验证码为:005114')}})
}const handleLogin = () => {formRef.value.validate((vaild: boolean) => {if (vaild) {console.log('表单验证通过,提交接口验证信息')if (loginType.value === 'vetifycode' && loginForm.verifyCode !== '005114') {return ElMessage.error('验证码错误')}let message = '登录成功'if (loginForm.account) {message += ',登录的账号为' + loginForm.account;}if (loginForm.password) {message += ',登录的密码为' + loginForm.password;}if (loginForm.verifyCode) {message += ',登录的验证码为' + loginForm.verifyCode;}ElMessage.success(message)} else {console.log('验证失败');}})
}</script>

Scss部分

<style lang="scss" scoped>
%bg {background-repeat: no-repeat;background-size: cover;background-position: center;
}.login {min-height: 675px;height: 100vh;width: 100vw;display: flex;align-items: center;justify-content: center;background-image: url(@/assets/bg.jpg);@extend %bg;
}.container {width: 350px;
}.content {color: #fff;width: 300px;background-color: #fff;border: 1px solid #eee;padding: 20px;box-shadow: -15px 15px 15px rgba(6, 17, 47, 0.7);background: linear-gradient(230deg,rgba(53, 57, 74, 0) 0%,rgb(0, 0, 0) 100%);
}.account-area {margin-top: 50px;
}:deep(.el-form-item__label) {color: #fff;
}.qr-code-area {width: 200px;height: 200px;margin: 40px auto 20px auto;img {width: 100%;height: 100%;}
}.forget-area {float: right;font-size: 13px;line-height: 16px;color: #267EF0;
}.submit-btn {margin: 50px 0 30px 0;width: 100%;
}.change-login-type {display: flex;border-top: 1px solid #eee;justify-content: space-between;padding-top: 10px;.login-type {font-size: 12px;line-height: 16px;text-align: center;color: #fff;width: 25%;position: relative;&:hover {cursor: pointer;color: #267EF0;}}.active {color: #267EF0;}}
</style>

同志们,完整的登陆页面文件地址为:完整代码

欢迎大家有问题随时咨询奥,一起学习!

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

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

相关文章

阿里云Elasticsearch-趣味体验

阿里云Elasticsearch-趣味体验 什么是阿里云Elasticsearch阿里云Elasticsearch开通服务查看Elasticsearch实例配置Kibana公网IP登录Elasticsearch添加测试数据 Kibana数据分析查看数据字段筛选数据页面条件筛选KQL语法筛选保存搜索语句导出筛选结果指定列表展示字段写在最后 什…

(硬件05)电流检测中运放的“虚短”与“虚断”

本文目录 本篇前言知识点讲解软件仿真 本篇前言 运放&#xff0c;全称是运算放大器&#xff0c;一般的用法是用来发大电信号的&#xff0c;本篇讲解到的就是通过运算放大器将大电流流过采样电阻后的电压进行放大后输出给单片机的ADC&#xff0c;单片机根据ADC的值&#xff08…

Commons-Collections篇-CC7链

前言 和CC5反序列化链相似&#xff0c;CC7也是后半条LazyMap执行命令链不变&#xff0c;但是中间过程通过AbstractMap.equals()触发LazyMap.get()方法 环境 我们可以接着使用之前已经搭建好的环境&#xff0c;具体过程可以看CC1分析文章的环境安装部分 Commons-Collections篇…

leecode-动态规划-基础题目

一、简述 DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。 所以动态规划中每一个状态一定是由上一个状态推导出来的 重点&#xff1a;状态转移公式 二、一维 1、[509]斐波那契数 2、[70]爬楼梯 dp[i]可有dp[i-1]再爬一级台阶dp[i-2]再…

手表名表维修开单系统软件教程,佳易王钟表养护维护保养记录开单软件操作教程

手表名表维修开单系统软件教程&#xff0c;佳易王钟表养护维护保养记录开单软件操作教程 以下软件操作教程以&#xff0c;佳易王钟表养护维修管理系统软件为例说明 软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载 一、软件程序操作教程 1、佳易王钟表维…

第2章 信息技术知识

第2章 信息技术知识 本章简要叙述了信息技术相关基础知识&#xff0c;包含软件工程、面向对象系统分析与设计、应用集成技术、计算机网络技术和新一代信息技术内容。 2.1 软件工程 随着所开发软件的规模越来越大、复杂度越来越高&#xff0c;加之用户需求又并不十分明确&…

k8s上部署单节点apache-lotdb

一、yaml文件 使用的nfs的动态存储类&#xff0c;需要提前搭建。 # cat lotdb.yaml apiVersion: v1 kind: PersistentVolumeClaim metadata:name: logsnamespace: lotdb spec:storageClassName: "nfs-client"accessModes:- ReadWriteManyresources:requests:storag…

Spring Session 多服务Session共享

在新项目中需要开发单点登录功能&#xff0c;单点登录服务端提供方使用的是CAS技术&#xff0c;是根据Session来判断用户是否完成了登录操作的。Session是保存在服务器本地内存中的&#xff0c;而我的项目是需要多服务部署的&#xff0c;这就意味着会部署在不同的服务器中&…

中国百货业元宇宙转型:挑战与机遇并存

在数字化和科技创新的推动下&#xff0c;中国百货业正站在一个新的历史节点上。面对着电子商务的冲击和消费者需求的演变&#xff0c;传统百货业正在经历一场前所未有的转型。而元宇宙&#xff0c;这一全新概念的提出&#xff0c;为百货业的变革带来了无限的想象空间。 **百货…

淘宝商品历史价格查询(免费)

当前资料来源于网络&#xff0c;禁止用于商用&#xff0c;仅限于学习。 淘宝联盟里面就可以看到历史价格 并且没有加密 淘宝商品历史价格查询可以通过以下步骤进行&#xff1a; 先下载后&#xff0c;登录app注册账户 打开淘宝网站或淘宝手机App。在搜索框中输入你想要查询的商…

【Linux操作系统-测试】第二节.Linux 常用指令介绍(下)

文章目录 前言总结 前言 二、查看文件内容 2.1 cat 命令--查看文件内容 2.2 more 命令--分屏查看 2.3 grep 命令--过滤查看 三、linux其他常用命令 3.1 echo 命令--回显 3.2 clear 命令--清屏 3.3 >&#xff0c;>>重定向符号--输出重定向 3.4 管道符号--命令结果传递…

使用 Python 中的 `sklearn` 库实现 KNN 分类

Scikit-Learn 使用 Python 中的 sklearn 库实现 KNN 分类安装 sklearn 库导入库并准备数据使用 sklearn 实现 KNN 分类详细说明重点内容 使用 Python 中的 sklearn 库实现 KNN 分类 K最近邻&#xff08;K-Nearest Neighbors, KNN&#xff09;是一种简单且有效的分类算法。在 P…

【问题记录】Windows中Node的express无法直接识别

问题描述 在使用express_generator的时候windows平台中出现无法识别express命令的问题&#xff0c;另外就算添加了全局环境变量也没用。 问题解决 查看官方文档发现在node版本8之前的时候使用的是express&#xff0c;但是之后的版本使用npx&#xff0c;这个工具的出现主要想…

keil mdk注释插件合集格式、时间、日期注释

文章目录 一、前言二、安装步骤2.1 解压tools.zip2.2 tools 文件解释2.3 添加注释带keil 三、配置3.1 格式化代码3.2 文件注释3.3函数注释3.4 当前日期3.5 当前时间 四、编辑注释模板4.1 编辑函数注释模板4.2 编辑C文件注释模板4.3 编辑h文件注释模板 五、为注释功能添加快捷键…

在冰火岛买火车票

题目 小张无忌在冰火岛听了谢逊爷爷讲了许多少林寺的故事&#xff0c;非常仰慕少林寺这样的武学圣地。特别是藏经阁中收藏了大量武学秘籍&#xff0c;金刚指、易筋经、龙象波若功都非常想学。一有空&#xff0c;便缠着谢逊爷爷教他一招半式。今年暑假&#xff0c;张翠山夫妇想…

【Kubernetes安装】从零开始使用kubeadm命令工具部署K8S v1.28.2 集群

文章目录 一、虚拟机配置参数说明二、kubernetes v1.28.2版本介绍三、CentOS 7.9 系统初始化配置3.1 配置CentOS系统基础环境3.1.1 配置hosts3.1.2 永久关闭selinux3.1.3 关闭swap分区3.1.4 所有节点全部关闭防火墙3.1.5 配置ntp server同步时间3.1.6 添加kubernetes镜像源 3.2…

python的类中的super是做什么的

其实就是子类调用一下父类的构造函数(或者其他函数也行)。:   在 Python 中&#xff0c;super() 是一个用于调用父类&#xff08;或基类&#xff09;的方法。它通常在子类中使用&#xff0c;以便调用其父类的初始化方法或其他方法&#xff0c;从而确保父类的初始化代码在子类…

spring boot easyexcel

1.pom <!-- easyexcel 依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.1</version></dependency><dependency><groupId>org.projectlombok</group…

uniapp,app端使用echarts不兼容,可以使用iframe来使用echarts

可以新建文件夹 echarts&#xff0c;里面放echart.min.js文件,echarts.html文件生成echarts图&#xff0c;之所以用iframe不用webview&#xff0c;是因为webview容易出问题&#xff0c;最明显问题是层级问题。 <!DOCTYPE html> <html lang"en"> <hea…

Maven依赖 dependencyManagement、 dependencies、 dependency

在Maven项目构建工具中&#xff0c;“dependencies”、“dependencyManagement”和“dependency”这三个概念扮演着重要的角色&#xff0c;它们之间既有区别又有联系。以下是对这三个概念的详细解释以及它们之间的区别与联系&#xff1a; 一、基本概念 dependencies 定义&…