登录页添加验证码

登录页添加验证码

  1. 引入验证码页面组件:ValidCode.vue
<template><div class="ValidCodeContent" style=""><divclass="ValidCode disabled-select":style="`width:${width}; height:${height}`"@click="refreshCode"><spanv-for="(item, index) in codeList":key="index":style="getStyle(item)">{{ item.code }}</span></div><div class="kbq" @click="refreshCode">看不清</div></div>
</template><script>
export default {name: 'validCode',props: {width: {type: String,default: '100px',},height: {type: String,default: '40px',},length: {type: Number,default: 4,},},data() {return {codeList: [],}},mounted() {this.createdCode()},methods: {refreshCode() {this.createdCode()},createdCode() {let len = this.length,codeList = [],chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz0123456789',charsLen = chars.length// 生成for (let i = 0; i < len; i++) {let rgb = [Math.round(Math.random() * 220),Math.round(Math.random() * 240),Math.round(Math.random() * 200),]codeList.push({code: chars.charAt(Math.floor(Math.random() * charsLen)),color: `rgb(${rgb})`,fontSize: `1${[Math.floor(Math.random() * 1 + 9)]}px`,padding: `${[Math.floor(Math.random() * 2 + 4)]}px`,transform: `rotate(${Math.floor(Math.random() * 90) - Math.floor(Math.random() * 90)}deg)`,})}// 指向this.codeList = codeList// 将当前数据派发出去this.$emit('update:value', codeList.map((item) => item.code).join(''))},getStyle(data) {return `color: ${data.color}; font-size: ${data.fontSize}; padding: ${data.padding}; transform: ${data.transform};`},},
}
</script><style scoped>
.ValidCodeContent {display: flex;flex-direction: row;justify-content: center;margin-left: 20px;
}
.ValidCode {display: flex;justify-content: center;align-items: center;cursor: pointer;background: #eaeaea;
}.ValidCode > span {display: inline-block;
}.kbq {width: 60px;height: 40px;line-height: 40px;/* color: #002082; */color: #ed7610;margin-left: 10px;cursor: pointer;font-size: 16px;font-family: simhei;
}
</style>
  1. 登录页 login.vue
<template><div id="loginPage" class="subpage applogin" :style="getStyle()"><el-form ref="LoginData" :model="loginData" label-width="0px" style="padding-top: 35px;width:90%;margin-left: auto;margin-right: auto;" class="loginForm"><el-form-item><el-input :input-style="{ height: '40px !important', lineHeight: '50px',color:'#333' }" type="text" v-model="loginData.userName"autocomplete="off" placeholder="请输入用户名" class="username"  /></el-form-item><el-form-item><el-input :input-style="{ height: '40px !important', lineHeight: '50px',color:'#333' }" class="password" type="password"v-model="loginData.password" autocomplete="off" placeholder="请输入密码" show-password  /></el-form-item><el-form-item prop="validCode" style="display: flex"><div style="display: flex"><div class="loginBodyItem validCode"><div></div><el-input :input-style="{ height: '40px !important', lineHeight: '50px',color:'#333' }" type="text" v-model="inputValidCode"autocomplete="off" placeholder="请输入验证码" class="valid"  /></div><ValidCode class="validCode" v-model:value="validCode"></ValidCode></div></el-form-item><el-form-item><el-button style="background:#0147eb !important;" color="#0147eb" @click="login" dark="true" v-preventReClick>&nbsp;&nbsp;</el-button></el-form-item></el-form></div>
</template>
<script>import ValidCode from './ValidCode.vue';
export default {data: function() {return {validCode: '',inputValidCode: '',loginData: {"userName": "","password": ""},}},methods:{login: async function() {let data = JSON.parse(JSON.stringify(this.loginData));if (!data.userName) {this.$message({type: "warning",message: "请输入用户名"});return;}if (!data.password) {this.$message({type: "warning",message: "请输入密码"});return;}if (this.inputValidCode.toLocaleLowerCase() == '') {this.$message({type: "warning",message: "请输入验证码"});return} else {if ( this.inputValidCode.toLocaleLowerCase() !==  this.validCode.toLocaleLowerCase() ) {this.$message({type: "warning",message: "验证码输入有误"});return} else {}}let res = await FrameWork.SendGet(url, formData);....}},components: {ValidCode}}
</script>
<style scoped="scoped">/deep/.validCode {float: left;margin-top: 10px;}
</style>

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

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

相关文章

手把手教你写 Compose 动画 -- 状态转移型动画 API:animate*AsState()

Jetpack Compose 提供了一系列功能强大且可扩展的 API&#xff0c;可用于在应用界面中轻松实现各种动画效果。这一系列文章会逐个介绍所有的动画 API&#xff0c;通过最直观的 Demo 示例&#xff0c;手把手教你怎么写动画以及带你了解动画背后的原理。 &#x1f4d1; 手把手教你…

Unreal Engine(UE5)中构建离线地图服务

1. 首先需要用到3个软件&#xff0c;Unreal Engine&#xff0c;gis office 和 bigemap离线服务器 Unreal Engine下载地址:点击前往下载页面 Gis office下载地址:点击前往下载页面 Bigemap离线服务器 下载地址: 点击前往下载页面 Unreal Engine用于数字孪生项目开发&#x…

计算机网络、浏览器面试题

浏览器从输入url到呈现发生了什么 1、根据输入的网址解析域名到对应的ip地址&#xff0c;查找顺序&#xff1a; 浏览器缓存、操作系统缓存、路由器缓存、DNS 服务器&#xff08;记录这域名和ip地址的映射&#xff09;、根服务器。 2、找到ip地址需要先建立TCP链接 客户端发送 …

4种方法用Python批量实现多Excel多Sheet合并

目录 方法一&#xff1a;使用pandas库 方法二&#xff1a;使用openpyxl库 方法三&#xff1a;使用xlrd和xlwt库 方法四&#xff1a;使用os和glob库 在数据处理中&#xff0c;经常需要将多个Excel文件中的多个工作表进行合并。以下介绍了4种方法&#xff0c;使用Python批量实…

开发安全之:Path Manipulation

Overview 攻击者可以控制 file_get_contents() 文件系统路径参数&#xff0c;借此访问或修改原本受保护的文件。 Details 当满足以下两个条件时&#xff0c;就会产生 path manipulation 错误&#xff1a; 1.攻击者能够指定某一文件系统操作中所使用的路径。 2. 攻击者可以…

js数组长度不够补0 且 够的话则截取到期望长度

当我们需要处理数组的长度不够的情况时&#xff0c;可以通过补0来完成&#xff1b;数组长度够的情况下&#xff0c;需要截取期望的长度。 在示例代码中&#xff0c;我们定义了一个函数padArrZeroSubLength 它接受两个参数&#xff1a;原始数组和期望的长度。 1&#xff09;函…

【Android】为什么在子线程中更新UI不会抛出异常

转载请注明来源&#xff1a;https://blog.csdn.net/devnn/article/details/135638486 前言 众所周知&#xff0c;Android App在子线程中是不允许更新UI的&#xff0c;否则会抛出异常&#xff1a; android.view.ViewRootImpl$CalledFromWrongThreadException: Only the origin…

【Ubuntu18.04安装Labelme】

Ubuntu18.04安装Labelme 1 安装Anaconda并创建conda环境2 安装依赖3 安装Labelme4 安装验证 1 安装Anaconda并创建conda环境 Anaconda3安装教程&#xff1a;https://blog.csdn.net/dally2/article/details/108206234 "ctrlaltt"快捷键打开终端&#xff0c;创建conda…

数据机房中智能小母线与列头柜方案的对比分析

0引言 近年来&#xff0c;我国信息技术行业发展十分迅猛&#xff0c;得益于国家政策的大力支持&#xff0c;政府金融、互联网公司、运营商等客户都在不断地新建和升级数据中心&#xff0c;以匹配其数据业务的增长速度。我国数据中心IT市场一直保持着连续快速增长的态势。国内数…

橘子学Mybatis07之Mybatis关于缓存的设计

很逆天的一件事是&#xff0c;我上一次发mybatis是在2022年10月15号&#xff0c;然后直到今天才开始总结下一篇Mybatis的东西。一年里面忙成那啥了&#xff0c;而且重心都投入在了Elasticsearch的学习上面&#xff0c;基本一年下来都在搞ES&#xff0c;并且考下了ECE认证&#…

【Poco库源码解析】Poco库中的通知

1、介绍 PocoPocoPoco 中的通知&#xff0c;是消息源通过中间载体将消息发送给观察者&#xff0c;通知可以分为 同步通知和异步通知。 下图是同步通知&#xff0c;消息发送流程&#xff1a; 2.同步通知 2.1 消息 class Notification: public RefCountedObject { public:ty…

生产环境LVM磁盘扩容

使用df -Th 命令查看磁盘信息 ,可以看到当前LVM逻辑卷容量是38G [rootZ ~]# df -TH 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root xfs 38G 2.4G 36G 7% / devtmpfs devtmpfs 1.1G 0 1.1G …

使用屏幕捕捉API:一站式解决屏幕录制需求

随着科技的发展&#xff0c;屏幕捕捉API技术逐渐成为一种热门的录屏方法。本文将详细介绍屏幕捕捉API技术的原理、应用场景以及如何利用这一技术为用户提供便捷、高效的录屏体验。 在线录屏 | 一个覆盖广泛主题工具的高效在线平台(amd794.com) https://amd794.com/recordscre…

sql递归查询处理树状结构数据,适用于sqlserver和oracle

在工作中用到根据某个组织的ID&#xff0c;查询当前所有的上级&#xff0c;并按层级返回 递归语法&#xff1a; 以with开头&#xff0c;再以2个查询用 union all连接&#xff0c;且2个查询列表字段和类型返回必须一致 向上查询数据&#xff0c;oo是最终返回的表&#xff0c;…

win10系统的hiberfil.sys如何删除

C盘莫名其妙地出现了一个叫hiberfil.sys的文件。我一看&#xff0c;好家伙&#xff0c;6个多G&#xff0c;让我本就所剩无几的C盘空间再次雪上加霜&#xff01; 然后我就研究了一下。 hiberfil.sys是什么&#xff1f; 该文件用于将计算机处于休眠状态时的所有内容保存到硬盘…

Windows安装WSL2精简版教程

文章目录 一、安装WSL二、更改WSL的存放路径/备份WSL三、安装WSL Terminall四、WSL界面&#xff1a;xlaunch五、WSL1升级WSL2六、WSL2与VMware兼容问题七、更改手动导入的wsl的默认登录用户参考 一、安装WSL 步骤1 - 启用适用于 Linux 的 Windows 子系统&#xff1a; 需要先启…

目录恢复软件

DMDE(DM Disk Editor and Data Recovery Software)软件是一款用于搜索、编辑和恢复磁盘数据的工具。 性能简介 支持的操作系统:Windows、macOS、Linux、DOS便携式运行,无需安装支持 NTFS、FAT12/16、FAT32、exFAT、ReFS、Ext2/Ext3/Ext4、btrfs、HFS+/HFSX、APFS对文件系统…

.NET分库分表:高性能分页(mycat之外的选择)

&#x1f3c6;作者&#xff1a;科技、互联网行业优质创作者 &#x1f3c6;专注领域&#xff1a;.Net技术、软件架构、人工智能、数字化转型、DeveloperSharp、微服务、工业互联网、智能制造 &#x1f3c6;欢迎关注我&#xff08;Net数字智慧化基地&#xff09;&#xff0c;里面…

【USTC】verilog 习题练习 21-25

21 基于端口名称的实例化 题目描述 创建一 verilog 电路&#xff0c;实现对模块 mod_a 基于端口名称的实例化&#xff0c;如下图所示&#xff1a; 其中mod_a模块的代码为&#xff1a; module mod_a (output out1,output out2,input in1,input in2,input in3,in…

边缘计算AI智能分析网关V4客流统计算法的概述

客流量统计AI算法是一种基于人工智能技术的数据分析方法&#xff0c;通过机器学习、深度学习等算法&#xff0c;实现对客流量的实时监测和统计。该算法主要基于机器学习和计算机视觉技术&#xff0c;其基本流程包括图像采集、图像预处理、目标检测、目标跟踪和客流量统计等步骤…