前端页面图片滑动验证

开源项目地址:monoplasty/vue3-slide-verify

安装命令: 

npm install --save vue3-slide-verify

在登录页面添加代码: 

<template>
<!-- 登录验证码对话框 -->
<el-dialog v-model="dialogVisible" title="验证码" width="500"><div><slide-verify ref="block" :slider-text="'向右拖动--->'" :accuracy="3" :imgs="imgArr" @again="onAgain"@success="onSuccess" @fail="onFail" @refresh="onRefresh"></slide-verify><!-- <el-button type="primary" @click="handleClick">刷新图片</el-button> --><div>{{ msg }}</div></div>
</el-dialog>
</template>

引入验证码类型:

import SlideVerify from 'vue3-slide-verify';
import "vue3-slide-verify/dist/style.css";

登录页面完整代码:

<template><el-card class="mylogin" style="max-width: 400px"><template #header><div class="card-header"><img src="@/assets/login.png"></div></template><!-- hide-required-asterisk:在Element UI中隐藏必填项的红色星号 --><el-form ref="loginFormRef" :model="loginForm" :rules="rules" hide-required-asterisk label-width="60"style="max-width: 600px"><el-form-item label="用户名" prop="username"><el-input v-model="loginForm.username" placeholder="请输入用户名" clearable /></el-form-item><el-form-item label="密码" prop="password"><el-input type="password" placeholder="请输入密码" show-password v-model="loginForm.password" clearable /></el-form-item><el-form-item><el-button color="#626aef" type="primary" @click="loginSubmit">登录</el-button><el-button color="#626aef" plain @click="resetSubmit">重置</el-button></el-form-item></el-form></el-card><!-- 登录验证码对话框 --><!-- accuracy灵敏度:默认取值范围为 [1, 10] --><el-dialog v-model="dialogVisible" title="验证码" width="500"><div><slide-verify ref="block" :slider-text="'向右拖动--->'" :accuracy="3" :imgs="imgArr" @again="onAgain"@success="onSuccess" @fail="onFail" @refresh="onRefresh"></slide-verify><!-- <el-button type="primary" @click="handleClick">刷新图片</el-button> --><div>{{ msg }}</div></div></el-dialog></template><script setup>
import { ref, reactive, onMounted } from 'vue'
import { get, post } from '@/myaxios'
import router from '@/router'
import { ElMessage } from 'element-plus'// 引入验证码类型
import SlideVerify from 'vue3-slide-verify';
import "vue3-slide-verify/dist/style.css";const dialogVisible = ref(false)const imgArr = reactive(['https://monoplasty.github.io/vue3-slide-verify/assets/img4.708137a5.jpg','https://monoplasty.github.io/vue3-slide-verify/assets/img5.96696b7b.jpg','https://monoplasty.github.io/vue3-slide-verify/assets/img2.3217378f.jpg','https://monoplasty.github.io/vue3-slide-verify/assets/img2.3217378f.jpg'
])const msg = ref("");
const block = ref();const onAgain = () => {msg.value = "检测到非人为操作的哦! try again";// 刷新block.value.refresh();
};const onSuccess = async (times) => {msg.value = `登录成功, 耗时${(times / 1000).toFixed(1)}s`;dialogVisible.value = false// 关闭对话框并刷新图片block.value.refresh();// 校验通过再提交let resp = await post('/login', loginForm)// 根据结果处理服务端响应if (resp.data.returnCode == 20010) {// 成功,弹绿窗 跳页面ElMessage.success(resp.data.returnMsg)// 存用户信息let loginUserStr = JSON.stringify(resp.data.returnData)console.log(loginUserStr);// 存入sessionStoragesessionStorage.setItem('loginUser', loginUserStr)// 跳页面router.push('/main')} else if (resp.data.returnCode == 20011) {ElMessage.error(resp.data.returnMsg)} else if (resp.data.returnCode == 20012) {ElMessage.info(resp.data.returnMsg)} else if (resp.data.returnCode == 20013) {ElMessage.warning(resp.data.returnMsg)}
};const onFail = () => {msg.value = "验证不通过";
};const onRefresh = () => {msg.value = "点击了刷新小图标";
};const handleClick = () => {// 刷新block.value.refresh();msg.value = "";
};// 获得登录的表单对象 可以调用表单的函数
const loginFormRef = ref()// 登录功能
// 登录数据表单
const loginForm = reactive({username: '测试1',password: 'abc123'
})// 登录提交,向后端发送请求
const loginSubmit = async () => {// 校验通过才能向后端发送请求loginFormRef.value.validate(async (valid) => {if (valid) {dialogVisible.value = true} else {console.log('error submit!')}})
}// 表单校验
const rules = reactive({username: [{ required: true, message: '请输入用户名', trigger: 'blur' }],password: [{ required: true, message: '请输入密码', trigger: 'blur' },{ min: 6, max: 8, message: '密码长度为6-8位之间', trigger: 'blur' },],
})// 重置按钮
const resetSubmit = () => {loginFormRef.value.resetFields()
}
</script><style scoped>
.mylogin {margin: 15% auto;/* transparent:透明色 */background-color: #adaef3;
}
</style>

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

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

相关文章

pyhton 批量往PDF文件指定位置里面填写数据

pyhton 批量往PDF文件指定位置里面填写数据 import PyPDF2 from PyPDF2 import PdfReader, PdfWriterdef modify_pdf(input_pdf_path, output_pdf_path, page_number, x, y, text):reader PdfReader(input_pdf_path)writer PdfWriter()for page in reader.pages:writer.add_p…

MySQL迁移SQLite 借助PYTHON脚本

使用 Python 脚本将 MySQL 数据库迁移到 SQLite 是一种灵活且强大的方法。 下面是一个基本的脚本示例&#xff0c;使用 pandas 和 sqlite3 库来实现这一过程。 这个脚本假设你已经安装了 pandas 和 mysql-connector-python 库。 步骤 安装必要的库: 如果尚未安装&#xff…

CAPL如何设置或修改CANoe TCP/IP协议栈的底层配置

在CANoe中创建网络节点作为以太网主机时,可以给其配置独立的TCP/IP Stack。 配置的协议栈有一些底层配置参数可以在界面上设置或修改,比如: MTU上图中MTU显示500只是图形界面显示错误,正确值是1500。 TCP延迟确认这些参数也可以通过CAPL动态配置,甚至CAPL还可以配置很多界…

县城楼市踩踏式降价,或现2字头,率先回归月薪一平方的合理价格

在一二线城市都在欢呼10月份、11月份成交量回升&#xff0c;楼价回稳的时候&#xff0c;广东一些县城却先顶不住了&#xff0c;大举降价&#xff0c;显示出县城楼市房价率先回归月薪一平方的合理水平&#xff0c;这将对全国楼市产生巨大影响。 据了解这个县城的楼价此前较为稳定…

【前端面试题】书、定位问题、困难

看过什么书 《JavaScript 高级程序设计&#xff08;第 4 版&#xff09;》&#xff08;作者&#xff1a;Matt Frisbie&#xff09; 这是一本深入学习 JavaScript 语言的经典书籍。它详细地涵盖了 JavaScript 的高级特性&#xff0c;包括原型链、闭包、异步编程等复杂概念。以闭…

利用Docker分层构建优化镜像大小

合适docker镜像文件大小不仅影响容器启动效率&#xff0c;也影响资源占用效率。本文介绍如何利用分层方式构建docker镜像&#xff0c;采用多种方式避免镜像文件太大而影响性能。 Docker 镜像大小优化的重要性 资源利用效率 较小的镜像文件在存储和传输过程中占用更少的空间和带…

深度学习面试相关-2024.12.15记录

深度学习 面试相关- 2024.12.15记录 目录 深度学习 面试相关- 2024.12.15记录整体常问问题1数学基础1.1 概率统计1.2 线代 2机器学习算法2.1 深度学习算法2.2 机器学习算法 整体常问问题 https://www.nowcoder.com/discuss/353154899112304640 1数学基础 1.1 概率统计 htt…

大模型呼出机器人能够解决哪些问题?

大模型呼出机器人能够解决哪些问题&#xff1f; 原作者&#xff1a;开源呼叫中心FreeIPCC&#xff0c;其Github&#xff1a;https://github.com/lihaiya/freeipcc 大模型呼出机器人作为现代科技在客户服务领域的创新应用&#xff0c;能够解决多个方面的问题&#xff0c;以下是…

Python面试常见问题及答案4

一、内存管理相关 问题&#xff1a;Python中的垃圾回收机制是如何工作的&#xff1f; 答案&#xff1a;Python主要使用引用计数来进行垃圾回收&#xff0c;当对象的引用计数为0时&#xff0c;该对象就会被垃圾回收器回收。此外&#xff0c;Python还有一个循环垃圾收集器来处理循…

从零用java实现 小红书 springboot vue uniapp (2)主页优化

前言 移动端演示 http://8.146.211.120:8081/#/ 前面的文章我们基本完成了主页的布局 今天我们具体的去进行实现 并且分享我开发时遇到的问题 首先先看效果 java仿小红书主页 实现效果为 1.顶端全屏切换 2.上划加载更多 3.下拉当前页整体刷新 顶端全屏切换我们选择 gui-switch…

idea 配置 git .gitignore文件配置

.gitignore 内容 .idea/ *.iml target/ *.class *.log .iml在idea项目里面创建一个.gitignore名字的文件&#xff0c;然后把这个文件提交到git上。我一般是放到.idea同级目录。 我遇到了几种情况这个文件配置了但是不生效的情况 第一种 Git的缓存可能会导致配置不生效。尝试…

linux 下nmcli命令使用方法

1、nmcli 是 NetworkManager Command Line Interface 的缩写。 详细解释 NetworkManager: 是 Linux 上常用的网络管理工具&#xff0c;负责管理有线、无线、VPN 等网络连接。 Command Line Interface (CLI): 意味着 nmcli 是 NetworkManager 的命令行界面工具&#xff0c;提…

双指针---移动0

常见的双指针有两种形式&#xff0c;⼀种是对撞指针&#xff0c;⼀种是快慢指针。 这里写自定义目录标题 题目链接 [移动0](https://leetcode.cn/problems/move-zeroes/description/)问题分析代码解决 题目链接 移动0 问题分析 在本题中&#xff0c;我们可以⽤⼀个 cur 指针来…

《智能体开发实战(高阶)》四、系统化的日志周报智能体开发计划

智能体扩展与完善规划 为了将前几个章节的智能体逐步扩展为支持整个公司团队使用的高效工具,以下是分阶段的完善与扩写规划。每个阶段旨在提升功能覆盖范围、处理能力和用户体验,并为企业提供实际价值。 阶段一:基础功能完善 目标:巩固现有功能,提升健壮性和适用性。 支…

linux从frame buffer中将qt界面拷贝出来放到u盘的操作方法

使用的是gsnap工具&#xff0c;源码可以在百度上搜,以Imx6为例的使用方法 rootimx6qsabresd:~# rootimx6qsabresd:~# rootimx6qsabresd:~# df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 289293 197510 76423 73% / devtmpfs …

Python+OpenCV系列:滤波器的魔力

滤波器是图像处理领域中不可或缺的工具。无论是去除噪声、锐化图像还是提取特征&#xff0c;滤波器都扮演着重要角色。本篇将从简单到复杂&#xff0c;带你快速掌握 PythonOpenCV 中的滤波器使用技巧。 什么是滤波器&#xff1f; 滤波器是一种对图像像素值进行计算、平滑或增强…

Android 使用 Gson + OkHttp 实现 API 的常规使用(个人心得)

学习笔记 一、依赖和权限的添加 网络权限: 在 Android 中进行网络请求时,必须声明权限,确保应用具有访问互联网的能力。 <uses-permission android:name="android.permission.INTERNET"/> 依赖项: 确保在 build.gradle 中添加以下依赖: dependencies …

人工智能的历史概况和脉络

人工智能( AI ) 的历史始于古代&#xff0c;当时有神话、故事和谣言称&#xff0c;人工生物被工匠大师赋予了智慧或意识。从古代到现在&#xff0c;对逻辑和形式推理的研究直接导致了20 世纪 40 年代可编程数字计算机的发明&#xff0c;这是一种基于抽象数学推理的机器。这种设…

基于Arduino的智能太阳能追光系统设计(论文+源码)

1系统方案设计 本次的设基于Arduino的智能太阳能追光系统的设计&#xff0c;整体结构如图2.1所示。整个系统包括Arduino开发板&#xff0c;按键模块&#xff0c;太阳能板&#xff0c;X轴电机,Y轴电机&#xff0c;电池充电模块&#xff0c;电源模块&#xff0c;四路光照检测模块…

Volta——开箱即用的Node.js 版本管理工具

Volta volta 是一个较新的 Node.js 版本管理器&#xff0c;旨在简化 Node.js 和其他工具的安装和管理&#xff0c;在 2019 年出世&#xff0c;仍在积极开发中。Volta 采用了与 nvm 不同的方法&#xff1a;它不是管理 Node.js 的多个版本&#xff0c;而是管理项目及其依赖项。当…