import React, { Component } from 'react' import './forgot-password.scss' import VeriCodeInput from '../common/veriCodeInput' import Button from '../common/Button' import { withFormik, Form, Field } from 'formik'; import { connect } from 'react-redux'; import { compose } from 'redux'; import { Toast } from "antd-mobile"; import { HeaderBar, CaptchaAli } from "@/common"; import ClearableInput from '../common/clearableInputWithCountryCodes' import { http } from "@/utils"; import { quickLogin } from '@/store/userAction'; import OnSubmissionError from '../common/OnSubmissionError' import { Link } from "react-router-dom"; class ForgotPassword extends Component { state = { validate: null, captchaInstance: null, validationData: null } getCaptchaInstance = instance => { this.setState({ captchaInstance: instance }) } onVerify = (data) => { this.setState({ validationData: data, validate: true }) } onSubmissionError = () => { const errors = Object.values(this.props.errors); errors.length && Toast.info(errors[0], 2, null, false) } render() { const { values, isValid, country } = this.props return ( <div className={'forgot-password'}> <HeaderBar title='忘记密码' arrow={true}/> <div className="content"> <Form className='forgot-password-form'> <Field name={'tel'} render={({field, form}) => { return ( <ClearableInput {...field} type={'tel'} placeholder={'请输入注册时的手机号'} wrapperClass={'tel-input'} setFieldValue={form.setFieldValue} country={country} />) }} /> { this.state.validate && <Field name='veriCode' render={({field}) => { return ( <VeriCodeInput {...field} className={'verify-code'} icon={<i className={'iconfont iconduanxin'} style={{fontSize: '20px', left: '12px'}} />} tel={values.tel} challenge={this.state.validate} instance={this.state.captchaInstance} action={'auth'} checking={1} country={country} validationData={this.state.validationData} /> ) }} /> } <OnSubmissionError callback={this.onSubmissionError}/> <CaptchaAli getInstance={this.getCaptchaInstance} onVerify={this.onVerify}/> <Button className={'next_step'} active={isValid}>下一步</Button> <Link className={'to-email'} to={`/passport/forgot-password-email`} replace>邮箱找回</Link> </Form> </div> </div> ); } } const formikConfig = { mapPropsToValues: () => ({ tel: '', veriCode: '' }), validateOnChange: true, validateOnBlur: true, validate: values => { let errors = {} if (!/\d/.test(values.tel)) { errors.tel = '请输入正确的手机号' } values.veriCode.toString().length !== 6 && (errors.veriCode = '验证码格式不正确') return errors }, handleSubmit(values, {props}) { sessionStorage.setItem('r_type', 'phone') sessionStorage.setItem('tel', values.tel) http.post(`${API['passport-api']}/check_phone_code`, { phone: values.tel, code: values.veriCode, area_code: '00' + props.country.num }).then(res => { if (res.data.errno == 0) { props.history.push('/passport/set-password', {from: props.location}) } else { Toast.info(res.data.msg, 2, null, false) } }) }, } export default compose( connect( state => ({country: state.country}), {quickLogin} ), withFormik(formikConfig) )(ForgotPassword)