react antd 实现修改密码(原密码,新密码,再次输入新密码,新密码增加正则复杂度校验)

news2024/11/25 4:43:02

先看样子

在这里插入图片描述
组件代码:

import React, { useState, useEffect } from 'react'
import { Row, Col, Modal, Spin, Input, Button, message, Form } from 'antd'
import { LockOutlined, EyeTwoTone, EyeInvisibleOutlined } from '@ant-design/icons'
import * as Serve from '@/serve/Serve/Serve'
// 添加弹窗
import { history } from 'umi'
export default function ({ modalViPassword, onCancelPassword, firstLoginFlag = false }) {
    const [form] = Form.useForm()
    // 修改密码
    const [loadingPassword, setloadingPassword] = useState(false)
    const iconRender = visible => (visible ? <EyeTwoTone /> : <EyeInvisibleOutlined />)
    const modalCancelPassword = () => {
        form.resetFields()
        setloadingPassword(false)
    }
    const goLoginFun = () => {
        IPServe.systemlLogout()
        const href = '/AAAA/mainlogin'
        history.push({
            pathname: href,
        })
    }
    const onOkPassword = async () => {
        form.validateFields().then(async values => {
            let { oldPassword, newPassword,  } = form.getFieldsValue()

            modalCancelPassword()

        })
    }
    return (
        modalViPassword && (
            <Modal visible={modalViPassword} footer={null} destroyOnClose closable={false} width={600} title={'密码修改'} onCancel={modalCancelPassword}>
                <Spin spinning={loadingPassword}>
                    <Form initialValues={{}} labelCol={{ span: 6 }} wrapperCol={{ span: 18 }} form={form} autoComplete="off" colon={false}>
                        {!firstLoginFlag && (
                            <Row style={{ width: '88%', margin: '0px auto 10px', display: 'flex', alignItems: 'center' }}>
                                <Col span={24}>
                                    <Form.Item
                                        name="oldPassword"
                                        label="原密码:"
                                        rules={[
                                            {
                                                required: true,
                                                message: '请输入原密码!',
                                            },
                                        ]}
                                    >
                                        <Input.Password
                                            size="large"
                                            placeholder="请输入原密码"
                                            prefix={<LockOutlined style={{ color: '#ec5e59' }} />}
                                            iconRender={iconRender}
                                        />
                                    </Form.Item>
                                </Col>
                            </Row>
                        )}
                        <Row style={{ width: '88%', margin: '0px auto 10px', display: 'flex', alignItems: 'center' }}>
                            <Col span={24}>
                                <Form.Item
                                    name="newPassword"
                                    label="新密码:"
                                    rules={[
                                        {
                                            required: true,
                                            message: '请输入新密码!',
                                        },
                                        {
                                            pattern: /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,20}/,
                                            message: '请输入8-20位数的密码,其中包含大小写字母、数字和特殊符号四种'
                                        },
                                    ]}
                                >
                                    <Input.Password
                                        size="large"
                                        placeholder="请输入新密码"
                                        prefix={<LockOutlined style={{ color: '#ec5e59' }} />}
                                        iconRender={iconRender}
                                    />
                                </Form.Item>
                            </Col>
                        </Row>
                        <Row style={{ width: '88%', margin: '0px auto 10px', display: 'flex', alignItems: 'center' }}>
                            <Col span={24}>
                                <Form.Item
                                    name="newPassword2"
                                    label="复输新密码:"
                                    rules={[
                                        {
                                            required: true,
                                            message: '请再次输入新密码!',
                                        },
                                        {
                                            pattern: /(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,20}/,
                                            message: '请输入8-20位数的密码,其中包含大小写字母、数字和特殊符号四种'
                                        },
                                        ({ getFieldValue }) => ({
                                            validator(_, value) {
                                                if (
                                                    !value ||
                                                    (getFieldValue('newPassword') && getFieldValue('newPassword').trim()) === (value && value.trim())
                                                ) {
                                                    return Promise.resolve()
                                                }
                                                return Promise.reject(new Error('两次新密码请保持一致!'))
                                            },
                                        }),
                                    ]}
                                >
                                    <Input.Password
                                        size="large"
                                        placeholder="请再次输入新密码"
                                        prefix={<LockOutlined style={{ color: '#ec5e59' }} />}
                                        iconRender={iconRender}
                                    />
                                </Form.Item>
                            </Col>
                        </Row>
                    </Form>
                    <Row justify="end" style={{ marginTop: '15px' }}>
                        <Button type="primary" style={{ marginRight: '15px' }} onClick={onOkPassword}>
                            修改
                        </Button>
                        <Button type="ghost" style={{ backgroundColor: '#fff' }} onClick={modalCancelPassword}>
                            取消
                        </Button>
                    </Row>
                </Spin>
            </Modal>
        )
    )
}

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

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

相关文章

如何申请做快团团购帮卖团长?免费试用教程一学就会!

新手小白想要自己做快团团&#xff0c;有两种方法。 1、自己提供货源&#xff0c;自己开团做团长。 这种方法流程非常简单&#xff0c;从微信小程序中找到快团团&#xff0c;点击右上角“一键开团”&#xff0c;然后“创建普通团购”&#xff0c;按照操作设置就可以开团了。 …

Java高频面试之JVM篇

说一下 Jvm 的主要组成部分&#xff1f;及其作用&#xff1f; 类加载器执行器运行时数据区域本地接口 谈谈对运行时数据区的理解&#xff1f; 堆和栈的区别是什么&#xff1f; 堆中存什么&#xff1f;栈中存什么&#xff1f; 堆总存对象,栈中存局部变量,引用 为什么要把堆…

静音检测电路芯片D3703F——工 作 电 压 范 围 宽 : 3.2V ~ 16.0V,可以用于汽 车 音 响 系 统

概 述 &#xff1a; D3703F 是 一 块 汽 车 音 响 静 音 检 测 电 路 。 用 于 音 响 系 统 检 测 在 放 音 或 快 进 / 退 时 进 行 静 音 检 测 。 D3703F 的 的 电 压 范 围 &#xff1a; 3.2V &#xff5e; 16V &#xff0c; 信 号 检 测 和 静 音 时 间 可 通 过 外 围…

参花期刊投稿发表论文

《参花》是由国家新闻出版总署批准&#xff0c;吉林省文化和旅游厅主管&#xff0c;吉林省文化馆主办的正规文学类期刊。文学是用语言塑造形象反映社会生活的一种语言艺术&#xff0c;是自觉、独立而又面向整个社会的艺术&#xff0c;是文化中极具强烈感染力的重要组成部分&…

Java List基础篇

目录 前言一、常用List1.1 List1.1.1 特点1.1.2 常用API 1.2 ArrayList1.2.1 特点1.2.2 使用 1.3 LinkedList1.3.1 特点1.3.2 使用 1.4 CopyOnWriteArrayList1.4.1 特点1.4.2 使用 1.5 Arrays.asList()1.5.1 特点1.5.2 使用 二、对比总结 前言 一、常用List 1.1 List List是…

C++STL--谓词

谓词 ① 可调用的表达式称为谓词,包括仿函数,自定义函数,lambda表达式。 ② 接受一个参数的谓词&#xff0c;称为一元谓词。 ③ 接受两个参数的谓词&#xff0c;称为二元谓词。 可调用的表达式:对于一个对象或者表达式,如果可以使用调用运算符(),就称它为可以调用的。 一元谓…

2024年【T电梯修理】考试总结及T电梯修理考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 T电梯修理考试总结考前必练&#xff01;安全生产模拟考试一点通每个月更新T电梯修理考试技巧题目及答案&#xff01;多做几遍&#xff0c;其实通过T电梯修理试题及解析很简单。 1、【多选题】修理工陶、陈&#xff0c…

李沐27_含并行连结的网络GoogLeNet_Inception——自学笔记

Inception块 1.四个路径从不同层面抽取信息&#xff0c;然后在输出通道维合并。 2.有更少的参数个数和计算复杂度&#xff08;相比于3X3和5X5卷积层&#xff09; GoogLeNet 1.五个stages&#xff0c;九个inception块 Inception各种后续变种 1.Inception-BN(V2)——使用ba…

SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测

SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现INFO-TCN-BiGRU-Attention向量加权算法优化时间卷积双向门控循环单元注意力机制多变量时间序列预测预测效果基本介绍模型描述程…

STL--pair 数对

pair 数对&#x1f357; pair是一个模板类,使用时需要引用文件 #include <utility>//通用工具pair可将两个value处理为一个元素。C标准库内多处用到了这个结构。尤其容器 map、unordered_map和unordered_multimap就是使用pair来管理其内部元素(key_value),任何函数如果…

MySQL一些特殊功能的索引(6/16)

特殊功能性索引 B-Tree索引&#xff1a; InnoDB的默认索引类型&#xff0c;适用于多种查询操作。 可以用于等值查询、范围查询和索引列的组合查询。 创建B-Tree索引的示例&#xff1a; CREATE INDEX index_name ON table_name (column1, column2);全文索引&#xff08;FULLTEX…

个人博客项目笔记_05

1. ThreadLocal内存泄漏 ThreadLocal 内存泄漏是指由于没有及时清理 ThreadLocal 实例所存储的数据&#xff0c;导致这些数据在线程池或长时间运行的应用中累积过多&#xff0c;最终导致内存占用过高的情况。 内存泄漏通常发生在以下情况下&#xff1a; 线程池场景下的 ThreadL…

Mysql内存表及使用场景(12/16)

内存表&#xff08;Memory引擎&#xff09; InnoDB引擎使用B树作为主键索引&#xff0c;数据按照索引顺序存储&#xff0c;称为索引组织表&#xff08;Index Organized Table&#xff09;。 Memory引擎的数据和索引分开存储&#xff0c;数据以数组形式存放&#xff0c;主键索…

个人博客项目笔记_07

写文章 写文章需要 三个接口&#xff1a; 获取所有文章类别 获取所有标签 发布文章 1. 所有文章分类 1.1 接口说明 接口url&#xff1a;/categorys 请求方式&#xff1a;GET 请求参数&#xff1a; 参数名称参数类型说明 返回数据&#xff1a; {"success":…

PyTorch-Lightning:trining_step的自动优化

文章目录 PyTorch-Lightning&#xff1a;trining_step的自动优化总结&#xff1a; class _ AutomaticOptimization()def rundef _make_closuredef _training_stepclass ClosureResult():def from_training_step_output class Closure PyTorch-Lightning&#xff1a;trining_ste…

算法 分割字符串为实体类

题目 String userData "10000:张三:男:1998-01-01#10001:张三:男:1998-01-01#10002:李四:女:1999-02-02#10003:王五:男:2000-03-03#10004:赵六:女:2001-04-04"; String[] usersArray userData.split("#"); // 使用Stream API将字符串数组转换为SysUser对…

ALV合并单元格

1、文章说明 在开发一些报表时&#xff0c;需要显示双层的标题&#xff0c;或者合并单元格的数据&#xff0c;归根结底就是要实现类似EXCEL合并单元格的需求。如图所示 网上的资料&#xff0c;很多根据国外某大神的方法实现&#xff1a;https://tricktresor.de/blog/zellen-ver…

JavaScript(四)-Web APIS

文章目录 日期对象实例化时间对象方法时间戳 节点操作DOM节点查找节点增加节点删除节点 M端事件JS插件Window对象BOM&#xff08;浏览器对象模型&#xff09;定时器-延时函数JS执行机制location对象navigator对象history对象 本地存储本地存储介绍本地存储分类localStoragesess…

Play Module Factory:Codigger系统上的高效Module开发工具

Play Module Factory&#xff0c;这款在Codigger系统上独树一帜的Play-Module开发工具&#xff0c;为广大的开发者们提供了一个全新的、高效的插件开发平台。它汇集了丰富的模板资源、基础库、API接口以及语言支持&#xff0c;这些功能强大的工具组合在一起&#xff0c;使得开发…

14亿美元!德国默克与AI生物科技公司合作;马斯克Neuralink首位脑机接口植入者用意念打游戏;黄仁勋在俄勒冈州立大学开讲

AI for Science 的新成果、新动态、新视角—— 日本第一 IT 公司富士通&#xff1a;生成式 AI 加速药物研发 马斯克&#xff1a;Neuralink 首位脑机接口植入者用「意念」打游戏 默克与 AI 生物科技公司 Caris 达成合作 AI 蛋白质设计服务提供商「天鹜科技」完成数千万元 Pre…