VUE 修改密码功能+密码强度校验

效果图
在这里插入图片描述

<template>
    <el-dialog
      title="修改密码"
      :visible.sync="dialog"
      :before-close="cancel"
      :close-on-click-modal="false"
      width="500px"
      :modal="false"
    >
    <el-form ref="form" :model="frm" :rules="frmRule" label-width="100px" style="width: 90%;margin: 0 auto;padding: 0;">
        <el-form-item label="原密码" prop="oldPasswd">
            <el-input type="password" v-model="frm.oldPasswd" @change="percentage=checkStrong(frm.oldPasswd)" autocomplete="new-password" placeholder="请输入原密码" style="width: 250px"/>
            
        </el-form-item>
        <el-form-item label="新密码" prop="newPasswd">
            <el-input type="password" v-model="frm.newPasswd" autocomplete="new-password" placeholder="请输入新密码 7-20 数字+字母" style="width: 250px"/>
            <el-progress style="width:300px" :percentage="checkStrong(frm.newPasswd)" :color="customColors" :format="format"></el-progress>
        </el-form-item>
        <el-form-item label="确认密码" prop="repeatPasswd">
            <el-input type="password" v-model="frm.repeatPasswd" autocomplete="new-password" placeholder="请输入确认密码" style="width: 250px"/>
            <el-progress style="width:300px" :percentage="checkStrong(frm.repeatPasswd)" :color="customColors" :format="format"></el-progress>
            <div class="ivu-form-item-notice-tip text-danger">{{serverError}}</div>
        </el-form-item>
    </el-form>
    <span slot="footer" class="dialog-footer">
        <el-button @click="cancel">取 消</el-button>
        <el-button type="primary" @click="ok">确 定</el-button>
    </span>
    </el-dialog>
</template>
<script>
import {mapState} from "vuex";
import store from "@/store";
import {getStore} from "@/util/store";
import regexp from '@/utils/regexp'

export default {
    data () {
        return {
            loading: false,
            serverError: '',
            frm: {
                oldPasswd: '',
                newPasswd: '',
                repeatPasswd: ''
            },
            percentage:0,
            customColors: [
                {color: '#f56c6c', percentage: 30},
                {color: '#e6a23c', percentage: 60},
                {color: '#5cb87a', percentage: 80},
                {color: '#5cb87a', percentage: 100}
            ],
            frmRule: {
                oldPasswd: [
                    { required: true, message: '密码不能为空' },
                    { type: 'string', min: 7, message: '密码最少7位' },
                    { type: 'string', max: 20, message: '密码至多20位' }
                ],
                newPasswd: [
                    { required: true, message: '密码不能为空' },
                    { type: 'string', min: 7, message: '密码最少7位' },
                    { type: 'string', max: 20, message: '密码至多20位' },
                    { validator: (rule, value, callback) => {
                        let v1 = 0
                        if (regexp.b01.test(value)) v1++  // b01: /[a-zA-Z]/, // 大小写字母
                        if (regexp.b02.test(value)) v1++  // b02: /[0-9]/, // 数字
                        if (v1 < 2) {return callback(new Error('密码需同时包含数字、字母!'))}
                        // if (!regexp.b04.test(value)) {return callback(new Error('只能包含数字、字母!'))}
                        this.$refs['form'].validateField('repeatPasswd')
                        callback();
                    } }
                ],
                repeatPasswd: [
                    { required: true, message: '密码不能为空' },
                    { validator: (rule, value, callback) => {
                        if (value !== this.frm.newPasswd) { return callback(new Error('两次输入不一致!')) }
                        callback()
                    } }
                ]
            }
        }
    },
    props: {
        flag: { type: Boolean, default: false },
        dialog: { type: Boolean, default: false }
    },
    watch: { // 监听
        flag (n, o) { // 离开时候清空输入框 归来时候初始化值
            if (n !== true) {
                this.$refs['form'].resetFields()
            }
        }
    },
    methods: {
        ok: debounce(function () {
            this.$refs['form'].validate(valid => {
                if (!valid) {return false}
                this.loading = true
                // 提交
            })
        }),
        checkStrong(msg){
            var modes = 0;
            //正则表达式验证符合要求的
            if(msg.length < 1) return modes;
            if(/\d/.test(msg)) modes++; //数字
            if(/[a-z]/.test(msg)) modes++; //小写
            if(/[A-Z]/.test(msg)) modes++; //大写  
            if(/\W/.test(msg)) modes++; //特殊字符
            //逻辑处理
            switch(modes) {
                case 1:
                    return 25;
                    break;
                case 2:
                    return 50;
                    break;
                case 3:
                    return 75;
                case 4:
                    return 100
                    break;
            }
            return modes;
        },
        format(percentage) {
            //逻辑处理
            switch(percentage) {
                case 25:
                    return '弱';
                    break;
                case 50:
                    return '中';
                    break;
                case 75:
                    return '强';
                case 100:
                    return '强'
                    break;
            }
            return percentage;

            // return percentage == 25 ? '满' : `${percentage}%`;
        },
        cancel () {
            this.$refs['form'].resetFields()
            this.$emit('update:dialog', false)
        },
    },
    mounted () {
    }
}
</script>

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

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

相关文章

Java nio 的线程通信机制线程通信Pipe

Java的Pipe是一种新的线程通信机制&#xff0c;传统的线程通信可以是通过共享内存的方式&#xff0c;socket等方式&#xff0c;而Pipe是通过Java NIO 通信的方式实现共享内存&#xff0c;优点类似于go语言的管道 先上代码 public static void main(String[] args) throws IOEx…

智能充电桩网关,构建高效充电网络

近年来我国新能源汽车的增长速度出现明显的上升趋势&#xff0c;但是其充电桩的发展还比较缓慢。目前在充电桩系统设计期间仍存在一些问题&#xff0c;主要表现在充电设施短缺、充电难等问题&#xff0c;这些问题的发生均会在一定程度上限制新能源汽车的发展&#xff0c;这就需…

【papaparse插件】前端预览csv文件

需求&#xff1a;就是可以在前端直接预览csv文件的内容 1.了解csv文件 1.1 csv文件和xlsx、xls文件的异同 首先了解一下csv文件和excel文件&#xff08;xlsx&#xff0c;xls&#xff09;有什么异同&#xff0c;简单来说他们都是存储表格数据的文件&#xff0c;csv只能显示较…

【C++/STL】:优先级队列的使用及底层剖析仿函数

目录 &#x1f4a1;前言一&#xff0c;优先级队列的使用二&#xff0c;仿函数1&#xff0c;什么是仿函数2&#xff0c;仿函数的简单示例 三&#xff0c;优先级队列的底层剖析 &#x1f4a1;前言 优先队列(priority_queue)是一种容器适配器&#xff0c;默认使用vector作为其底层…

改变AI历史的Transformer是如何帮助LLM大模型工作的?看图解密Transformer原理,看不懂算我输!

在过去的几年里&#xff0c;大型语言模型(LLM)的出现&#xff0c;为长达数十年的智能机器构建的探索中带来了巨大的飞跃。 这项基于试图模拟人类大脑的研究技术&#xff0c;也在近几年催生了一个新领域——Generative AI 生成式人工智能&#xff0c;简单理解就是可以 通过模仿…

4.制作的docker镜像

最近工作需要&#xff0c;制作docker镜像&#xff0c;用做构建使用。 1.拉取基础镜像ubuntu:22.04 docker pull ubuntu:22.042.运行ubuntu容器 docker run --privileged -d --name ubuntu_build ubuntu:22.04 sleep infinity3.进入运行的容器 docker exec -it ubuntu_build …

数据结构:队列详解 c++信息学奥赛基础知识讲解

目录 一、队列概念 二、队列容器 三、队列操作 四、代码实操 五、队列遍历 六、案例实操 题目描述&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 详细代码&#xff1a; 一、队列概念 队列是一种特殊的线性…

激励视频广告的eCPM更高,每天的展示频次有限制吗?

在APP发展初期&#xff0c;由于DUA量级有限&#xff0c;所需的广告资源比较少&#xff0c;往往接入1-2家广告平台就能满足APP用户每日需要的广告展示量。而随着APP用户规模的扩大、广告场景的不断丰富&#xff0c;开发者要提升APP整体广告变现收益&#xff0c;一是可以尽可能多…

nacos使用shared-configs设置多个配置文件后,配置中修改无法动态更新 解决办法

问题描述 今天使用nacos去做配置分离&#xff0c;启动成功了&#xff0c;配置也读取了&#xff0c;但是当我修改nacos中的配置时&#xff0c;发现数据无法动态更新 下面是测试接口的调用 可以看到我修改配置后&#xff0c;接口返回的参数依然是老参数 问题排查 首先检查了…

重生奇迹MU新手攻略:如何一步步往大佬发展

装备强化攻略&#xff1a; 提纯装备&#xff1a;通过提纯装备可以提升基础属性&#xff0c;选择合适的装备进行提纯可以获得更好的效果。 镶嵌宝石&#xff1a;使用宝石进行装备镶嵌可以增加装备的属性&#xff0c;根据需要选择适合的宝石进行镶嵌。 洗练装备&#xff1a;通…

大模型赋能全链路可观测性:运维效能的革新之旅

目录 全链路可观测工程与大模型结合---提升运维效能 可观测性&#xff08;Observability&#xff09;在IT系统中的应用及其重要性 统一建设可观测数据 统一建设可观测数据的策略与流程 全链路的构成和监控形态 云上的全链路可视方案 为什么一定是Copilot 大模型的Copilo…

jenkins设置定时构建语法

一、设置定时 定时构建的语法是*** * * * ***。 第一个*表示分钟&#xff0c;取值范围是0~59。例如&#xff0c;5 * * * *表示每个小时的第5分钟会构建一次&#xff1b;H/15 * * * 或/15 * * * 表示每隔15分钟构建一次&#xff1b; 第2个表示小时&#xff0c;取值范围是0~23。…

气膜建筑审批流程及现状分析—轻空间

气膜建筑作为一种新兴的建筑形式&#xff0c;以其快速建造、成本低廉和灵活多变的优势在各个领域得到了广泛应用。然而&#xff0c;气膜建筑在我国尚未被纳入正式的建筑规范&#xff0c;这使得其审批流程与传统建筑有显著差异。轻空间将详细探讨气膜建筑的审批流程及其在实际操…

全局mixins

一、文章由来 在开发过程中发现在钩子函数位置直接使用dicts就能直接绑定数据了&#xff0c;由此溯源发现了自己的盲区 二、局部使用 // myMixin.js文件 var myMixin {created: function () {this.hello()},methods: {hello: function () {console.log(hello from mixin!)…

Transformers 安装与基本使用

文章目录 Github文档推荐文章简介安装官方示例中文情感分析模型分词器 Tokenizer填充 Padding截断 Truncation google-t5/t5-small使用脚本进行训练Pytorch 机器翻译数据集下载数据集格式转换 Github https://github.com/huggingface/transformers 文档 https://huggingface…

边缘计算VNC智能盒子如何助力HMI设备实现二次开发?

HMI&#xff08;Human-Machine Interface&#xff09;又称人机界面&#xff0c;是用户与机器之间交互和通信的媒介。今天带你了解智能盒子如何助力HMI设备实现二次开发&#xff1f; HMI设备被广泛应用在工业自动化中&#xff0c;具有显示设备信息&#xff0c;实时监测&#xf…

【Linux杂货铺】Linux学习之路:期末总结篇1

第一章 什么是Linux? Linux 是 UNIX 操作系统的一个克隆&#xff1b;它由林纳斯 本纳第克特 托瓦兹从零开始编写&#xff0c;并在网络上众多松散的黑客团队的帮助下得以发展和完善&#xff1b;它遵从可移植操作系统接口&#xff08;POSIX&#xff09;标准和单一 UNIX 规范…

短信群发策略优化:如何有效降低退订率?

在短信群发营销中&#xff0c;退订率的上升常常影响营销效果。为了降低退订率&#xff0c;提高客户黏性&#xff0c;以下是一些实用的策略建议&#xff1a; 1.合理控制发送频率 过多的短信发送会给客户带来骚扰感&#xff0c;导致退订。因此&#xff0c;应合理控制短信的发送频…

排序算法(C语言版)

前言 排序作为生产环境中常见的需求之一&#xff0c;对整个产品有举足轻重的影响&#xff0c;可以说使用一个合适的排序算法是业务逻辑中比较重要的一部分。今天我们就来介绍常见的排序算法以及实现 排序 所谓排序无非就是按照特定的规则对一组数据就行顺序化。 常见的排序有…

智能语音热水器:置入NRK3301离线语音识别ic 迈向智能家居新时代

一、热水器语音识别芯片开发背景 在科技的今天&#xff0c;人们对于生活品质的追求已不仅仅满足于基本的物质需求&#xff0c;更渴望通过智能技术让生活变得更加便捷、舒适。热水器作为家庭生活中不可或缺的一部分&#xff0c;其智能化转型势在必行。 在传统热水器使用中&#…