抽象步骤条(2.0版本)

vue3 + router + ele-plus

猜猜看为什么使用组件库!

他呀的!查看密码要自己写,验证信息也要自己写,所以说会用组件库会轻松一点,,,

代码如下

<template><div class="main"><div class="steps"><ol><liv-for="(step, index) in steps":key="index":class="{ active: currentIndex === index, done: currentIndex > index }">{{ step }}</li></ol></div><el-form :model="form" :rules="rules" class="step-content"><div v-if="currentIndex === 0"><h3>请填写您需要找回密码的账号</h3><el-form-item class="step-content-button" label="账号:" prop="username"><el-input  v-model="form.username" type="text" required/></el-form-item></div><div v-else-if="currentIndex === 1"><h3>请填写您的完整邮箱</h3><el-form-item class="step-content-button" label="邮箱:" prop="email"><el-input v-model="form.email" type="email" required/></el-form-item></div><div v-else-if="currentIndex === 2"><h3>请输入您收到的验证码进行校验</h3><el-form-item class="step-content-button" label="验证码:" prop="code"><el-row :gutter="10"><el-col :span="17"><el-input v-model="form.code"></el-input></el-col><el-col :span="5"><el-button type="primary">发送验证码</el-button></el-col></el-row></el-form-item></div><div v-else-if="currentIndex === 3"><h3>请输入您的新密码进行重置。</h3><el-form-item class="step-content-button" label="新密码:" prop="password"><el-input v-model="form.password" type="password" required placeholder="新密码" show-password/></el-form-item><el-form-item label="确认新密码:" prop="password_repeat"><el-input v-model="form.password_repeat" type="password" required placeholder="确认新密码" show-password/></el-form-item></div></el-form><div class="step-button"><el-button @click="prevStep" :disabled="currentIndex === 0">上一步</el-button><el-button v-if="currentIndex === 0" type="primary" @click="nextStep">下一步</el-button><el-button v-if="currentIndex === 1" type="primary" @click="nextStep">下一步</el-button><el-button v-if="currentIndex === 2" type="primary" @click="nextStep">下一步</el-button><el-button v-if="currentIndex === 3" type="primary" @click="nextStep">修改密码</el-button></div></div>
</template><script setup>
import {reactive, ref} from 'vue';//可直接使用ele-plus中的步骤条代替!!!!!!
const steps = ['找回账号', '身份校验', '验证码校验', '密码重置'];
const currentIndex = ref(0);
// 定义一个 'nextStep' 函数,用于切换到下一个步骤
const nextStep = () => {if (currentIndex.value < steps.length - 1) {currentIndex.value++;}
};
// 定义一个 'prevStep' 函数,用于切换到上一个步骤
const prevStep = () => {if (currentIndex.value > 0) {currentIndex.value--;}
};const form = reactive({username: '',password: '',password_repeat: '',email: '',code: ''
})const validateUsername = (rule, value, callback) => {if (value === '') {callback(new Error('请输入用户名'))} else if(!/^[a-zA-Z0-9_]+$/.test(value)){callback(new Error('用户名由下划线,数字,字母组成'))} else {callback()}
}const validatePassword = (rule, value, callback) => {if (value === '') {callback(new Error('请再次输入密码'))} else if (value !== form.password) {callback(new Error("两次输入的密码不一致"))} else {callback()}
}const rules = {username: [{ validator: validateUsername, trigger: ['blur', 'change'] },{ min: 12, max: 16, message: '用户名的长度必须在12-16个字符之间', trigger: ['blur', 'change'] },],password: [{ message: '请输入密码', trigger: 'blur' },{ min: 12,  message: '密码的长度最低为12字符', trigger: ['blur', 'change'] }],password_repeat: [{ validator: validatePassword, trigger: ['blur', 'change'] },],email: [{ message: '请输入邮件地址', trigger: 'blur' },{type: 'email', message: '请输入合法的电子邮件地址', trigger: ['blur', 'change']}],code: [{ message: '请输入获取的验证码', trigger: 'blur' },]
}
</script><style scoped>
*{padding: 0;margin: 0;
}
/**/
.main{display: flex;flex-direction: column;align-items: center;
}.step-content{margin-top: 10vh; /* 与步骤条的垂直距离 */text-align: center; /* 水平居中文本 */
}.step-content-button{margin-top: 5vh; /* 与步骤条的垂直距离 */
}.step-button{margin-top: 2vh;
}/* step步骤条核心样式 */
.steps ol {--normal-color: #fff;  /* css变量,默认颜色  */--active-color: #428aea;  /* css变量,激活颜色  */display: flex;width: 70vw;margin-top: 15%; /* 调整步骤条垂直位置 */justify-content: space-between;counter-reset: order;  /* 定义CSS计数器 */
}/* 步骤项 */
.steps ol > li {flex: auto;display: inline-flex;align-items: center;counter-increment: order;color: var(--active-color);
}/* 去掉右边多余 */
.steps ol > li:last-child {flex: none;}/* 步骤编号(带圈数字) */
.steps ol> li::before {content: counter(order);flex-shrink: 0;width: 1.4em;line-height: 1.4em;margin-right: .5em;text-align: center;border-radius: 50%;border: 1px solid;
}/* 步骤项引导线 */
.steps ol> li:not(:last-child)::after {content: '';flex: 1;margin: 0 1em;border-bottom: 1px solid;opacity: .6;
}/* 步骤状态 */
.steps ol> .active {color: var(--active-color);}
.steps ol> .active::before {color: #fff;background: var(--active-color);border-color: var(--active-color);
}
.steps ol> .active::after,
.steps ol> .active ~ li {color: var(--normal-color);}
</style>

下个版本预告,

在点击下一步时,步骤条的数字会变成一个绿色的勾,添加微动画,添加更多的注释

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

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

相关文章

智能驾驶规划控制理论学习06-基于优化的规划方法之数值优化基础

目录 一、优化概念 1、一般优化问题 2、全局最优和局部最优 二、无约束优化 1、无约束优化概述 2、梯度方法 通用框架 线性搜索 回溯搜索 3、梯度下降 基本思想 实现流程 ​4、牛顿法 基本思想 实现流程 5、高斯牛顿法 6、LM法&#xff08;Le…

构建可视化工具选择策略

更多的信息总是意味着更好的结果吗&#xff1f;这完全取决于项目所处的环境。 以烘焙为例。当你做蛋糕时&#xff0c;你的原材料经历了许多化学变化和烹制过程。如果任何一个环节出现问题&#xff0c;蛋糕就做不好。但这并不意味着你需要理解食材在分子级别上发生了什么&#…

YOLO系列中的“data.yaml”详解!

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、data.yaml介绍 YOLO系列中的data.yaml文件包含了YOLO系列模型运行所需要的数据集路径、数据集中的类别数及标签。数据集路径可以用绝对路径也可以…

RISC-V特权架构 - 中断与异常概述

RISC-V特权架构 - 中断与异常概述 1 中断概述2 异常概述3 广义上的异常3.1 同步异常3.2 异步异常3.3 常见同步异常和异步异常 本文属于《 RISC-V指令集基础系列教程》之一&#xff0c;欢迎查看其它文章。 1 中断概述 中断&#xff08;Interrupt&#xff09;机制&#xff0c;即…

mapbox加载全球3D建筑

本案例使用Mapbox GL JavaScript库进行加载全球3D建筑。 文章目录 1. 引入 CDN 链接2. 创建地图3. 监听地图加载完成事件3.1. 获取地图的样式中的图层3.2. 查找图层3.3. 添加三维建筑图层 4. 演示效果5. 代码实现 1. 引入 CDN 链接 <!-- 1.引入CDN链接 --> <script sr…

bert 相似度任务训练简单版本,faiss 寻找相似 topk

目录 任务 代码 train.py predit.py faiss 最相似的 topk 数 任务 使用 bert-base-chinese 训练相似度任务&#xff0c;参考&#xff1a;微调BERT模型实现相似性判断 - 知乎 参考他上面代码&#xff0c;他使用的是 BertForNextSentencePrediction 模型&#xff0c;Bert…

基于springboot+vue实现民宿管理系统项目【项目源码+论文说明】

基于springbootvue民宿管理系统演示 摘要 伴随着我国旅游业的快速发展&#xff0c;民宿已成为最受欢迎的住宿方式之一。民宿借助互联网和移动设备的发展&#xff0c;展现出强大的生命力和市场潜力。民宿主要通过各种平台如携程、去哪儿、淘宝等在网络上销售线下住宿服务&#…

伪创新的迷惑手法-UMLChina建模知识竞赛第5赛季第6轮

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 参考潘加宇在《软件方法》和UMLChina公众号文章中发表的内容作答。在本文下留言回答。 只要最先答对前3题&#xff0c;即可获得本轮优胜。 如果有第4题&#xff0c;第4题为附加题&am…

Git入门学习笔记

Git 是一个非常强大的分布式版本控制工具&#xff01; 在下载好Git之后&#xff0c;鼠标右击就可以显示 Git Bash 和 Git GUI&#xff0c;Git Bash 就像是在电脑上安装了一个小型的 Linux 系统&#xff01; 1. 打开 Git Bash 2. 设置用户信息&#xff08;这是非常重要的&…

JS逆向进阶篇【去哪儿旅行登录】【下篇-逆向Bella参数JS加密逻辑Python生成】

目录&#xff1a; 每篇前言&#xff1a;引子——本篇目的1、 代码混淆和还原&#xff08;1&#xff09;单独替换&#xff1a;&#xff08;2&#xff09;整个js文件替换&#xff1a; 2、算法入口分析3、 深入分析&#xff08;0&#xff09;整体分析&#xff1a;&#xff08;1&am…

在K8S集群中部署SkyWalking

1. 环境准备 K8S 集群kubectlhelm 2. 为什么要部署SkyWalking&#xff1f; 我也不道啊&#xff0c;老板说要咱就得上啊。咦&#xff0c;好像可以看到服务的各项指标&#xff0c;像SLA&#xff0c;Apdex这些&#xff0c;主要是能够进行请求的链路追踪&#xff0c;bug排查的利…

stressapptest源码剖析:主函数main解析和sat类头文件分析

主函数main解析和sat类头文件分析 一、简介二、入口函数main.cc剖析三、SAT压力测试对象接口和数据结构总结 一、简介 stressapptest&#xff08;简称SAT&#xff09;是一种用于在Linux系统上测试系统稳定性和可靠性的工具&#xff0c;通过产生CPU、内存、磁盘等各种负载来测试…