import React, {Component} from 'react'; import {BrowserRouter as Router, Route, Link, Switch} from "react-router-dom"; import {getImageUrl, DragValidator} from 'educoder'; import {Tabs, Input, Checkbox, Button, notification} from 'antd'; import DragValidatortwo from '../../../src/common/components/DragValidatortwo' import ReadPassword from './ReadPassword'; import axios from 'axios'; import './common.css' const TabPane = Tabs.TabPane const loginInputsyl = { "width": " 100%", "height": "40px", } //父组件 EducoderLogin.js class LoginRegisterComponent extends Component { constructor(props) { super(props) this.state = { login: "", password: "", passwords: "", seconds: 35, codes: "", getverificationcodes: true, Phonenumberisnotcobool: false, Phonenumberisnotco: undefined, Phonenumberisnotcosytdhk:undefined, Phonenumberisnotcosmmm: undefined, Phonenumberisnotcosymmmm:undefined, Phonenumberisnotcosyzm:undefined, s: 'text', classpass: "text", readonlyInput: true, dragOk: false, Whethertoverify:false, modalsType:true, } } openNotification = (messge) => { notification.open({ message: "提示", description: messge, onClick: () => { console.log('Notification Clicked!'); }, }); }; StudyMakeMoney = () => { // 调用父组件方法 this.props.Setshowbool(1); } // 点击表单后,改变type changeType = () => { this.setState({classpass: 'password'}); } changeTypey = () => { } //倒计时 getverificationcode = () => { if(this.state.login === undefined || this.state.login.length===0){ this.openNotification("请输入手机号或邮箱"); return; } //这是判断是否手机正确 if(this.state.Phonenumberisnotcobool === true){ this.openNotification(this.state.Phonenumberisnotco); this.setState({ Whethertoverify:this.state.Whethertoverify===true?false:true, }) return; } //拖动滑动验证 if(this.state.dragOk===undefined||this.state.dragOk === false){ this.openNotification("拖动滑块验证"); return; } if (this.state.getverificationcodes === true) { this.setState({ getverificationcodes: undefined, }) let timer = setInterval(() => { this.setState((preState) => ({ seconds: preState.seconds - 1, }), () => { if (this.state.seconds == 0) { clearInterval(timer); this.setState({ getverificationcodes: false, seconds: 35, }) } }); }, 1000) this.SMSverification(); } else { this.setState({ getverificationcodes: undefined, }) let timer = setInterval(() => { this.setState((preState) => ({ seconds: preState.seconds - 1, }), () => { if (this.state.seconds == 0) { clearInterval(timer); this.setState({ getverificationcodes: false, seconds: 35, }) } }); }, 1000) this.SMSverification(); } } //短信验证 SMSverification = () => { var url = `/accounts/get_verification_code.json`; axios.get((url), { params: { login: this.state.login, type: 2, } }).then((result) => { //验证有问题{"status":1,"message":"success"} this.openNotification("验证码已发送,请注意查收!",2); }).catch((error) => { console.log(error); }) } cancelReadOnly = () => { this.setState({ readonlyInput: false, }) } //找回密码 Retrievepassword = () => { if (this.state.Phonenumberisnotcobool === false) { if (this.state.login.length === 0) { this.setState({ Phonenumberisnotco:"请输入正确的邮箱或手机号", }) return } } if (this.state.login === undefined|| this.state.login.length ===0 || this.state.login === "") { this.setState({ Phonenumberisnotco:"账号不能为空", }) return } if (this.state.dragOk === false) { // this.openNotification(`请拖动滑块完成验证`,2); this.setState({ Phonenumberisnotcosytdhk:"请拖动滑块完成验证", }) return } if (this.state.password === undefined || this.state.password.length ===0 || this.state.password === "") { this.setState({ Phonenumberisnotcosmmm:"密码不能为空", }) return } if (this.state.passwords === undefined || this.state.passwords.length ===0 || this.state.passwords === "") { this.setState({ Phonenumberisnotcosymmmm:"二次密码不能为空" }) return } if (this.state.password !== this.state.passwords==="") { this.openNotification(`两次输入的密码不一致`); return } else if (this.state.password !==undefined ||this.state.password.length>0&&this.state.password.length<8){ this.setState({ Phonenumberisnotcosmmm:"密码不能少于8位", }) return } else if (this.state.password !==undefined ||this.state.password.length>0&&this.state.password.length>16){ this.setState({ Phonenumberisnotcosmmm:"密码不能超过16位", }) return } else if (this.state.passwords !==undefined ||this.state.passwords.length>0&&this.state.passwords.length<8){ this.setState({ Phonenumberisnotcosymmmm:"二次密码不能少于8位", }) return } else if (this.state.passwords !==undefined ||this.state.passwords.length>0&&this.state.passwords.length>16){ this.setState({ Phonenumberisnotcosymmmm:"二次密码不能超过16位", }) return } if (this.state.codes === undefined|| this.state.codes.length ===0 || this.state.codes === "") { this.setState({ Phonenumberisnotcosyzm:"验证码不能为空" }) return } var url = "/accounts/reset_password.json"; axios.post(url, { login: this.state.login, code: this.state.codes, new_password: this.state.password, new_password_confirmation: this.state.passwords, }).then((result) => { // console.log(result); //登录成功,会生成session if(result){ if(result.data.status===-2){ if(result.data.message==="验证码不正确"){ this.setState({ Phonenumberisnotcosyzm:"验证码不正确", }) return; }else if(result.data.message==="验证码已失效"){ this.setState({ Phonenumberisnotcosyzm:"验证码不正确", }) return; }else { this.openNotification(result.data.message); return; } }else { this.setState({ modalsType:true }) } } }).catch((error) => { }) } openNotification = (messge) => { notification.open({ message: "提示", description: messge, onClick: () => { console.log('Notification Clicked!'); }, }); }; loginInputonChange = (e) => { // console.log(e.target.value); var stirngt; if(e.target.value.length>0){ var str= e.target.value.replace(/\s*/g,"") stirngt=str; }else{ stirngt= e.target.value; } this.setState({ login: stirngt, Phonenumberisnotco:undefined, dragOk:false, Whethertoverify:this.state.Whethertoverify===true?false:true, }) } loginInputonChanges = (e) => { // console.log(e.target.value); var stirngt; if(e.target.value.length>0){ var str= e.target.value.replace(/\s*/g,"") stirngt=str; }else{ stirngt= e.target.value; } this.setState({ password: stirngt, }) } loginInputonChangess = (e) => { // console.log(e.target.value); var stirngt; if(e.target.value.length>0){ var str= e.target.value.replace(/\s*/g,"") stirngt=str; }else{ stirngt= e.target.value; } this.setState({ passwords: stirngt, }) } //获取code codesonChange = (e) => { this.setState({ codes: e.target.value }) } inputOnBlur = (e) => { this.isCorrectname(e.target.value); // this.Emailphonenumberverification(e.target.value, id); } isCorrectname = (value) => { console.log(value.length); if (value.length === 0) { this.setState({ Phonenumberisnotco: undefined, Phonenumberisnotcobool: false, }) return; } // var telephone = $("#telephoneAdd.tianjia_phone").val(); var regph = /^[1][3,4,5,6,7,8][0-9]{9}$/; // var email = $("#add_email.tianjia_email").val(); var regemail = /^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/; // [1]手机号开头必须是1 [3,4,5,6,7,8] 第二位是3-8中的一个 [0-9]{9} 后边9位可以是0-9的任意数字。 var stringdata = undefined; if (!regph.test(value)) { stringdata = "手机号格式不正确"; this.setState({ Phonenumberisnotco: stringdata, Phonenumberisnotcobool: false, }) } else { this.setState({ Phonenumberisnotco: undefined, Phonenumberisnotcobool: true, }) return } if (!regemail.test(value)) { if ((value.indexOf("@") != -1) === true) { stringdata = "邮箱格式不正确"; } else { stringdata = "手机号格式不正确"; } this.setState({ Phonenumberisnotco: stringdata, Phonenumberisnotcobool: false, }) this.Emailphonenumberverification(value) return } else { this.setState({ Phonenumberisnotco: undefined, Phonenumberisnotcobool: true, }) return } } //是否验证通过 dragOkCallback = () => { console.log(this.state.login); if(this.state.login===""||this.state.login.length===0){ this.setState({ Phonenumberisnotco: "账号不能为空", Phonenumberisnotcobool: true, dragOk:false, Whethertoverify:this.state.Whethertoverify===true?false:true, }) return } this.Emailphonenumberverification(this.state.login) } //邮箱手机号验证 Emailphonenumberverification = (value) => { var url = `/accounts/valid_email_and_phone.json`; axios.get((url), { params: { login: value, type: 2, } }).then((result) => { // console.log(result); if(result){ if(result.data.status===-2){ console.log(value.length); this.setState({ Phonenumberisnotco: result.data.message, Phonenumberisnotcobool: true, dragOk:false, Whethertoverify:this.state.Whethertoverify===true?false:true, }) return; }else { this.setState({ Phonenumberisnotco: undefined, Phonenumberisnotcobool: false, dragOk:true, }) return; } } }).catch((error) => { console.log(error); }) } render() { const { // 登录 autoLogin, // 注册 readAgreement, dragOk, login, password, passwords, classpass, seconds, getverificationcodes, Phonenumberisnotco, Phonenumberisnotcosytdhk, Phonenumberisnotcosmmm, Phonenumberisnotcosymmmm, Phonenumberisnotcosyzm, readonlyInput, codes, Whethertoverify, } = this.state // height: 346px; return ( <div className="login_register_content" style={{height: "520px"}}> <ReadPassword modalsType={this.state.modalsType} StudyMakeMoney={()=>this.StudyMakeMoney()} /> <Input type="text" name="username" value={"namename"} style={{height: '0', width: '0', border: 'none', display: "none"}}/> <Input type="password" name="password" id="password" value={"123123123"} style={{height: '0', width: '0', border: 'none', display: "none"}}/> <style>{` .login_section .section_header { margin-bottom: 16px; font-size: 18px; width: 100%; text-align: center; border-bottom: 1px solid rgb(234, 234, 234); height: 69px; color: #05101A; line-height: 69px; } .loginInputzhuche{ width: 100%; background-color: #fff!important; height: 45px !important; padding: 5px; } `}</style> <div className="login_section"> <div className="section_header font-18" style={{color:"#05101A"}}> 找回密码 </div> <div style={{width: '340px'}}> <style> { ` .ant-input { font-family: "Monospaced Number", "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-box-sizing: border-box; box-sizing: border-box; margin: 0; padding: 0; list-style: none; position: relative; display: inline-block; padding: 4px 11px; width: 100%; height: 38px; font-size: 14px; line-height: 1.5; color: rgba(0, 0, 0, 0.65); background-color: #fff; background-image: none; border: 1px solid #d9d9d9; border-radius: 4px; -webkit-transition: all .3s; -o-transition: all .3s; transition: all .3s; } ` } </style> {/*onBlur={(e) => this.inputOnBlur(e)}*/} <Input style={loginInputsyl} type="text" autoComplete="off" onClick={this.changeTypey} className={"loginInputzhuche"} placeholder="输入注册手机号或邮箱" value={this.state.login} onChange={this.loginInputonChange} style={{marginTop: '10px', height: "38px"}}></Input> { Phonenumberisnotco && Phonenumberisnotco !== "" ? <p className="color-red mt5 mb5" style={{width: " 100%", height: "20px"}}> <span className="fl" style={{textAlign: "left", width: " 100%"}}>{Phonenumberisnotco}</span> </p> : <div style={{height: "25px"}}></div> } { Whethertoverify===false? <DragValidator height={38} successGreenColor="#29bd8b" style={{height: "38px", width: "100%"}} dragOkCallback={()=>this.dragOkCallback()} ></DragValidator> : "" } { Whethertoverify===true? <DragValidatortwo height={38} successGreenColor="#29bd8b" style={{height: "38px", width: "100%"}} dragOkCallback={()=>this.dragOkCallback()} ></DragValidatortwo> : "" } { Phonenumberisnotcosytdhk && Phonenumberisnotcosytdhk !=="" ? <p className="color-red mt5 mb5" style={{width: " 100%", height: "20px"}}> <span className="fl" style={{textAlign: "left", width: " 100%"}}>{Phonenumberisnotcosytdhk}</span> </p> : <div style={{height: "25px"}}></div> } <Input type={classpass} className={"loginInputzhuche"} onClick={this.changeType} autoComplete="new-password" onChange={this.loginInputonChanges} value={this.state.password} style={{width: "100%", height: "38px"}} placeholder="输入8~16位密码,区分大小写"></Input> { Phonenumberisnotcosmmm && Phonenumberisnotcosmmm !== "" ? <p className="color-red mt5 mb5" style={{width: " 100%", height: "20px"}}> <span className="fl" style={{textAlign: "left", width: " 100%"}}>{Phonenumberisnotcosmmm}</span> </p> : <div style={{height: "25px"}}></div> } <Input type={classpass} className={"loginInputzhuche"} onClick={this.changeType} autoComplete="new-password" onChange={this.loginInputonChangess} value={this.state.passwords} style={{height: "38px", width: "100%"}} placeholder="再次输入新密码"></Input> { Phonenumberisnotcosymmmm && Phonenumberisnotcosymmmm !== "" ? <p className="color-red mt5 mb5" style={{width: " 100%", height: "20px"}}> <span className="fl" style={{textAlign: "left", width: " 100%"}}>{Phonenumberisnotcosymmmm}</span> </p> : <div style={{height: "25px"}}></div> } <div className="yslbutondls"> <Input className=" mr5 loginInputzhuche" type="text" autoComplete="off" style={{ width: "210px", height: "38px", }} placeholder="请输入验证码" onChange={this.codesonChange} value={codes} > </Input> { getverificationcodes === undefined ? <Button className=" ml5 " disabled style={{"width": "120px", "text-align": "center", "height": "45px",}} size={"large"}>重新发送{seconds}s</Button> : getverificationcodes === true ? <Button className=" ml5 " style={{"width": "120px", "text-align": "center", "height": "45px"}} type="primary" onClick={() => this.getverificationcode()} size={"large"}>获取验证码</Button> : <Button className=" ml5 " style={{"width": "120px", "text-align": "center", "height": "45px"}} type="primary" onClick={() => this.getverificationcode()} size={"large"}>重新发送</Button> } </div> { Phonenumberisnotcosyzm && Phonenumberisnotcosyzm !== "" ? <p className="color-red mt5 mb5" style={{width: " 100%", height: "20px"}}> <span className="fl" style={{textAlign: "left", width: " 100%"}}>{Phonenumberisnotcosyzm}</span> </p> : <div style={{height: "25px"}}></div> } <Button size={"large"} type="primary" style={{height:"46px", width: "100%",marginBottom:"26px"}} onClick={this.Retrievepassword}>完成</Button> </div> </div> </div> ); } } export default (LoginRegisterComponent);