react ~2.登陆页面验证码的获取传递与刷新

import React from 'react';
import { withRouter } from 'react-router-dom';
import { Form, Input, Icon, Checkbox, Row, message } from 'antd';

import { fetchPost, fetchGet } from '@common/js/Fetch.js';
import fbank from '../images/fbank.png';
import '../css/loginform.scss';

const FormItem = Form.Item;

class LoginForm extends React.Component {

    constructor(props) {
        super(props);
        this.state = {
            rememberEmail: '',
            imgUrl: MI.baseURI + `/captcha/get?id=` + Math.random()
        };
    }

    componentDidMount() {
        //判断本地是否记住了邮箱地址
        if (localStorage.getItem('user_email') !== null) {
            this.setState({
                rememberEmail: localStorage.getItem('login_email')
            });
        }
    }

    /**
     * 提交登录
     */
    handleSubmit = (e) => {

        e.preventDefault();
        this.props.form.validateFields((err, values) => {
            if (!err) {
                const data = {
                    "loginName": values.email,
                    "password": values.password,
                    "captcha": values.captcha
                };
                const apiUrl = `${MI.baseURI}/sys/login`;
                fetchPost(apiUrl, data).then((response) => {
                    if (response.success) {
                        message.success('登陆成功');
                        //如果用户选择记住账户
                        //则将写入本地存储localstorage中
                        if (values.remember == true) {
                            localStorage.setItem("user_email", response.data.userName);
                            localStorage.setItem("login_email", response.data.loginName);
                        }

                       
                                //跳转到登录后的页面
                                this.props.history.push('/operation/product');
                            }
                        });

                     

                    } else {
                        this.getCaptcha();
                        message.error(response.msg);
                    }
                });
            }
        });
    }

    /**
     * 刷新验证码
     */
    getCaptcha() {
        this.setState({
            //在后面加上一个无用的参数id实现验证码刷新
            imgUrl: MI.baseURI + `/captcha/get?id=` + Math.random()
        });
    }

    render() {
        const { getFieldDecorator } = this.props.form;
        return (
            <div className="login-wrapper">
                <div className="login-content" >
                    <img className="company-logo" src={fbank}/>
                    <span className="company-name">重庆富民银行开放后台管理系统</span>
                    <Form onSubmit={this.handleSubmit}>
                        <FormItem>
                            {getFieldDecorator('email', {
                                initialValue: this.state.rememberEmail,
                                rules: [{ 
                                    required: true, message: '请输入你的账号!' 
                                }]
                            })(
                                <Input prefix={<Icon type="user" className="pre-icon" />} placeholder="账号" className="login-input"/>
                            )}
                        </FormItem>
                        <FormItem>
                            {getFieldDecorator('password', {
                                rules: [{ required: true, message: '请输入你的密码!' }],
                            })(
                                <Input prefix={<Icon type="lock" className="pre-icon" />} type="password" placeholder="密码" className="login-input"/>
                            )}
                        </FormItem>
                        <FormItem>
                            <Row style={{ display: 'flex' }}>
                                {getFieldDecorator('captcha', {
                                    rules: [{ required: true, message: '请输入验证码!' }],
                                })(
                                    <Input type="text" placeholder="验证码" className="code-input" />
                                )}
                                <div className="login-captcha">
                                    <div>
                                        <img src={this.state.imgUrl} key={this.state.key} />
                                    </div>
                                    <a className='change-code' onClick={this.getCaptcha.bind(this)}>换一张</a>
                                </div>
                            </Row>
                        </FormItem>
                        <FormItem className="remember-password">
                            {getFieldDecorator('remember', {
                                valuePropName: 'checked',
                                initialValue: true,
                            })(
                                <Checkbox style={{ fontSize: 14, color: '#636570' }}>记住账号</Checkbox>
                            )}
                        </FormItem>
                        <button type="submit" className="button-login">登录</button>
                    </Form>
                    
                </div>
            </div>
        );
    }
}

export default withRouter(Form.create()(LoginForm));

 

转载于:https://www.cnblogs.com/sunshineForFuture/p/10342280.html

AMD SDP CSDN 系列文章设计 摘要 本文档规划了7篇AMD SDP协议解析系列文章的技术博客设计方案。基于《Scalable Data Port (SDP) Specification》1.5.0版本(122页),面向SoC/NoC领域的RTL设计验证工程师,构建从基础概念到验证实现的知识体系。 系列文章严格遵循协议规范边界,采用五类证据标签区分内容来源(规范原文、勘误、验证推导等),禁止补充未定义的实现细节。包含端口控制、事务传输、一致性协议等核心内容,最终落实到验证平台设计覆盖率模型。 每篇文章采用统一模板:明确规范依据、问题导 阅读详情

相关推荐

async-anticaptcha:React异步验证码解析器

异步anticaptcha React异步验证码解析器。 use React\Anticaptcha; use React\HttpClient; $this->loop = \React\EventLoop\Factory::create(); $dnsResolverFactory = new \React\Dns\Resolver\Factory(); $dnsResolver = $dnsResolverFactory->createCached('8.8.8.8', $this->loop); $factory = new HttpClient\Factory(); $resolver = new Anticaptcha\Resolver( new Anticaptcha\Service\Antigate(

react图形图片验证码重新请求图片不刷新

【代码】react图形图片验证码重新请求图片不刷新

闪电⚡之王的博客简介 252

react-codes-input:PIN码的React组件,验证码和密码输入

React代码输入 PIN码的React组件,验证码和密码输入。 在线演示示例。 在线演示 Codesandbox示例 需要版本16.8.6或更高版本的reactreact-dom。 "peerDependencies" : { "react" : "^16.8.6" , "react-dom" : "^16.8.6" } 安装 npm install react-codes-input --save 捐款 ⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄ 浏览器支持 在IE9 +和Chrome和Safari(10.0.3)上进行了测试 文件 道具 类型 描述 默认 初始焦点 选择 布尔 选项为['false','true'] 错误的 wrapperRef 要求 React参考 没有任何 codeLength 要求 数字 6 ID 要求 力量 随机ID onC

React 登录验证(图片验证码

根据react编写图片验证码

weixin_49629694的博客 1494

基于 React 的登录页获取验证码流程

基于 React 的登录页获取验证码流程简介登录页全流程教学文档介绍画出静态页面流程一、验证码点击事件二、`model` 层异步操作1、`state` 初始化数据2、`effects` 调取接口3、`reducers` 同步数据三、page 页面操作四、model 层修改 `verificationBtn` 标识结语 简介 你好! 本人为 2019.7 毕业的应届毕业生,目前从事前端工程师的职业。...

陈书航的博客 6379

React 使用图片验证码组件(登录验证)

【代码】React 使用图片验证码组件(登录验证)

一起学习前端知识,一起成为前端开发工程师! 1359

react前端图形验证码 react-captcha-code

npm包 react-captcha-code 实现react的图形验证码

2301_79035732的博客 1632

图形验证码制作

概要:通过canvas画布来解决图形验证码。 思路: a.一个文本框用来输入由数字和字母组合的验证码+一个画布标签来显示图形验证码+一个提交按钮; b.提交按钮进行表单验证,输入正确或者错误进行相应的提示; c.用画布生成并渲染出验证码图形,并且得到随机的颜色; 效果图展示: 基础图片展示 提交成功效果展示 提交失败效果展示 代码展示: HTML <div class="code"> <input type="text" val

weixin_44724856的博客 884

React Native 登录页--验证码

React Native 登录页--验证码

jinkngmanka的博客 1732

基于 React 的图形验证码插件

【代码】基于 React 的图形验证码插件。

weixin_72099243的博客 1231

【亲测免费】 推荐一款强大的React代码输入组件 —— react-code-input

推荐一款强大的React代码输入组件 —— react-code-input 项目介绍 react-code-input 是一个专门用于创建和验证PIN码的React组件。它提供了数字、文本以及密码等多种类型的输入方式,并且拥有高度可定制化的界面样式,使得在各种应用程序中集成安全且美观的验证码或密码输入变得非常简单。 项目技术分析 这个组件基于React构建,利用了React的状态管理和生命周期方...

gitblog_00060的博客 640

多位验证码组件Captcha

效果图: index.js import React from 'react' import styles from './index.less' import { Input } from 'antd' import PropTypes from 'prop-types' import { remove } from 'lodash' const BACK_SPACE = 8 const LEFT = 37 const RIGHT = 39 class Captcha extends React.C

harry_yaya的博客 888

react-react验证码倒计时组件

react-验证码倒计时组件

react实现文字验证,图片验证功能

文字登录注册验证 图片登录注册验证

lm13420109892的博客 1839

egg+svg-captcha实现ejs,vue,react验证码效果

// 首先在egg项目中安装相关依赖 // npm i egg-cors svg-captcha egg-view-ejs --save //config/plugin.js module.exports = { // had enabled by egg // static: { // enable: true, // } ejs: { enable: true, package: 'egg-view-ejs', }, cors: { enable: t

kyyius的博客 540

react / vue3 获取验证码倒计时封装组建

react / vue3 获取验证码倒计时封装组建

大白兔奶糖的博客 821

推荐文章:探索「react-verification-code-input」—— 构建安全登录的得力助手

推荐文章:探索「react-verification-code-input」—— 构建安全登录的得力助手 在网络安全日益重要的今天,验证码输入框作为验证用户身份的最后防线,其重要性和用户体验成为了开发者不可忽视的一部分。今天,我们为您带来一款专注于提升验证码输入体验的开源神器 —— react-verification-code-input。 项目介绍 react-verification-cod...

gitblog_00010的博客 499

推荐使用 React Code Input:高效便捷的 PIN 码输入组件

推荐使用 React Code Input:高效便捷的 PIN 码输入组件 项目介绍 react-code-input 是一个专为 React 应用设计的 PIN 码输入组件。它允许用户以简洁、直观的方式输入和验证 PIN 码,适用于各种需要安全验证的场景。无论是手机验证码、密码输入,还是其他需要多字段输入的场景,react-code-input 都能提供出色的用户体验。 项目技术分析 技术栈 ...

gitblog_00532的博客 837

three js 9 补间动画tween

如果使用了yoyo的动画,且没有加delay,会有如下问题。AI给的解释为这是已知的bug。1 加上一个极短的delay。2 改用两个动画相互调用。

吴梓穆的博客 32

AI 范式越迁:使用 XXL-BOOT SKILL 实现一句话直生业务

使用 XXL-BOOT SKILL 实现一句话直生业务,AI 自动完成需求澄清、数据建模、后端前端开发、菜单权限配置及联调验证,AI 范式及业务交付进入新时代。

许雪里 345

基于数字图片处理的数控G代码生成源程序

致力于将网络上的字体图片转换为数控机床可识别的G代码。通过对图片进行处理,提取轮廓并设定加工尺寸,进而生成用于数控加工的G代码。目前程序支持直线拟合,生成的G代码以直线为基础,具备一定的加工精度。功能特点支持字体图片处理提取图片轮廓生成直线拟合的G代码配置openCV库进行图片处理支持轮廓加工代码生成正在添加灰显功能注意事项在编译生成程序前,需确保已配置openCV库当前版本暂不支持区域切除(行切环切)部分生成加工代码的参数尚未处理,但修改相对简单后续计划完善灰显功能支持区域切除(行切环切)优化生成加工代码的参数处理

上一篇: react ~1.生命周期函数
下一篇: react ~3.动态无限层级顶部菜单和左边菜单设计制作
ddh3110
博客等级 码龄12年 0粉丝 0原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值