个人设置页issue更改

This commit is contained in:
谢思 2022-10-28 11:43:18 +08:00
parent e7b4fb030e
commit 7c9f01ea74
4 changed files with 237 additions and 183 deletions

View File

@ -1,6 +1,7 @@
import React , { forwardRef, useState } from 'react';
import React , { forwardRef, Fragment, useState } from 'react';
import { Form , Input , Button, message } from 'antd';
import { AlignCenter } from '../../Component/layout';
import Modals from '../../Component/PublicModal/Index';
import Axios from 'axios';
import img1 from '../../Images/personalInfo3.png';
import { setmiyah } from '../../../common/Component';
@ -8,7 +9,7 @@ import { useEffect } from 'react';
export default Form.create()(
forwardRef((props)=>{
const { getFieldDecorator, validateFields, resetFields } = props && props.form;
const { getFieldDecorator, validateFields, resetFields, getFieldsValue } = props && props.form;
const { current_user, type, resetUserInfo} = props;
const [ NewPass , setNewPass ] = useState(undefined);
@ -16,7 +17,8 @@ export default Form.create()(
const [ countDown, setCountDown] = useState(undefined);
const [ emailValue, setEmailValue] = useState(undefined);
const [ passMap, setPassMap] = useState({password: undefined, email: undefined, code: undefined});
const [ updatePsdMap, setUpdatePsdMap] = useState({oldPassword: undefined, password: undefined, password1: undefined})
const [ updatePsdMap, setUpdatePsdMap] = useState({oldPassword: undefined, password: undefined, password1: undefined});
const [ visible, setVisible] = useState(false);
useEffect(()=>{
setPassMap({password: undefined, email: undefined, code: undefined});
@ -26,25 +28,11 @@ export default Form.create()(
function submit() {
validateFields((error,values)=>{
if(!error){
submitFunc(values);
setVisible(true);
}
})
}
function submitFunc(values) {
const url = `/accounts/change_password.json`;
Axios.post(url,{
login:current_user && current_user.login,
...values
}).then(result=>{
if(result && result.data){
resetFields();
setUpdatePsdMap({oldPassword: undefined, password: undefined, password1: undefined});
message.success('密码重置成功!');
}
}).catch(error=>{})
}
//
var reg = /(?!.*\s)(?!^[\u4e00-\u9fa5]+$)^.{8,16}$/;
function checkIdentifier(rule, value, callback , inputValue){
@ -89,7 +77,9 @@ export default Form.create()(
email: emailValue,
smscode: setmiyah(emailValue)
}}).then(res=>{
console.log('res', res);
if(res && !res.data.status){
message.success('发送成功')
}
})
//
startCountDown();
@ -110,196 +100,260 @@ export default Form.create()(
//
function checkPsd(rule, value, callback){
current_user && Axios.post(`/v1/${current_user.login}/check_password.json`,{
password: value
}).then(res=>{
const map = type === '0' ? passMap : updatePsdMap;
if(res && !res.data.status){
if(type === '0'){
map.password = value;
setPassMap(map);
const map = type === '0' ? passMap : updatePsdMap;
if(value){
current_user && Axios.post(`/v1/${current_user.login}/check_password.json`,{
password: value
}).then(res=>{
if(res && !res.data.status){
if(type === '0'){
map.password = value;
setPassMap(map);
}else{
map.oldPassword = value;
setUpdatePsdMap(map);
}
callback();
}else{
map.oldPassword = value;
setUpdatePsdMap(map);
if(type === '0'){
map.password = undefined;
setPassMap(map);
}else{
map.oldPassword = undefined;
setUpdatePsdMap(map);
}
callback(res.data.message);
}
callback();
})
}else{
if(type === '0'){
map.password = undefined;
setPassMap(map);
}else{
if(type === '0'){
map.password = undefined;
setPassMap(map);
}else{
map.oldPassword = undefined;
setUpdatePsdMap(map);
}
callback(res.data.message);
map.oldPassword = undefined;
setUpdatePsdMap(map);
}
})
callback();
}
}
//
function checkEmail(rule, value, callback){
current_user && Axios.post(`/v1/${current_user.login}/check_email.json`,{
email: value
}).then(res=>{
const map = passMap;
if(res && !res.data.status){
map.email = value;
setPassMap(map);
setEmailValue(value);
callback();
}else{
map.email = undefined;
setPassMap(map);
callback(res.data.message);
}
})
const map = passMap;
if(value){
current_user && Axios.post(`/v1/${current_user.login}/check_email.json`,{
email: value
}).then(res=>{
if(res && !res.data.status){
map.email = value;
setPassMap(map);
setEmailValue(value);
callback();
}else{
setEmailValue(undefined);
map.email = undefined;
setPassMap(map);
callback(res.data.message);
}
})
}else{
setEmailValue(undefined);
map.email = undefined;
setPassMap(map);
callback();
}
}
//
function checkCode(rule, value, callback){
current_user && value && value.length > 4 && Axios.post(`/v1/${current_user.login}/check_email_verify_code.json`,{
code_type: 10,
email: emailValue,
code: value
}).then(res=>{
const map = passMap;
if(res && !res.data.status){
map.code = value;
setPassMap(map);
callback();
}else{
map.code = undefined;
setPassMap(map);
callback(res.data.message);
const map = passMap;
if(value){
current_user && value && value.length > 4 && Axios.post(`/v1/${current_user.login}/check_email_verify_code.json`,{
code_type: 10,
email: emailValue,
code: value
}).then(res=>{
if(res && !res.data.status){
map.code = value;
setPassMap(map);
callback();
}else{
map.code = undefined;
setPassMap(map);
callback(res.data.message);
}
})
}else{
map.code = undefined;
setPassMap(map);
callback();
}
}
//
function confirmUpdateEmail(e){
validateFields((error,values)=>{
if(!error){
setVisible(true);
}
})
}
//
function updateEmail(e){
console.log('提交更改邮箱表单', e);
validateFields((error,values)=>{
if(!error){
const {code, email, password1} = values;
if(code && email && password1){
current_user && Axios.patch(`/v1/${current_user.login}/update_email.json`,{
code, email, password: password1
}).then(res=>{
if(res && !res.data.status){
setPassMap({password: undefined, email: undefined, code: undefined});
resetFields();
resetUserInfo();
message.success('更新成功');
}else{
message.error(res.data.message || '更新失败');
}
})
}
function updateEmailOrPsd(){
if(type === '0'){
const {code, email, password1} = getFieldsValue();
if(code && email && password1){
current_user && Axios.patch(`/v1/${current_user.login}/update_email.json`,{
code, email, password: password1
}).then(res=>{
if(res && !res.data.status){
setPassMap({password: undefined, email: undefined, code: undefined});
resetFields();
resetUserInfo();
setVisible(false);
message.success('更新成功');
}else{
setVisible(false);
message.error(res.data.message || '更新失败');
}
})
}
}else{
const values = getFieldsValue();
const url = `/accounts/change_password.json`;
Axios.post(url,{
login:current_user && current_user.login,
...values
}).then(result=>{
if(result && result.data){
resetFields();
setUpdatePsdMap({oldPassword: undefined, password: undefined, password1: undefined});
setVisible(false);
setNewPass(undefined);
setNewPassRepeat(undefined);
message.success('密码重置成功!');
}
}).catch(error=>{})
}
})
}
console.log('1111', updatePsdMap.password1);
// type: 0 1 2
return(
type === '0' ? <div>
<div className='tipsBox mb15'><img src={img1} alt="" width={16} className='mr10'/>更改邮箱后您在<span className='spanTil'>GitLink</span> 的登陆账号接受通知的邮箱<span className='spanTil'>git config</span> 邮件地址将同步变更请谨慎更改!</div>
<div className='tipsBox mb20 emailBox'>现邮箱地址<span className='ml10 email spanTil'>{current_user && current_user.email}</span></div>
<div className='updateEmail mb20'>更改邮箱</div>
<Form layout={'inline'} className="formBase passMan personalUpdateInfoForm">
<Form.Item label="登录密码" className={`${passMap.password ? 'hasSuccess' : ''}`}>
{getFieldDecorator("password1",{
rules:[
{required:true,message:"请输入登录密码"},
{validator:(rule, value, callback)=>checkPsd(rule, value, callback)}
],
validateFirst: true,
validateTrigger:"onBlur",
})(
<Input.Password placeholder="请输入登录密码" autoComplete={"new-password1"} style={{width:"400px"}}/>
)}
</Form.Item>
<Form.Item label="新邮箱地址" className={`${passMap.email ? 'hasSuccess' : ''}`}>
{getFieldDecorator("email",{
rules:[
{required:true,message:"请输入新邮箱地址"},
{type: 'email',message: '请输入正确的邮箱格式'},
{validator:(rule, value, callback)=>checkEmail(rule, value, callback)}
],
validateFirst: true,
validateTrigger:"onBlur",
})(
<Input placeholder="请输入新邮箱地址" style={{width:"400px"}}/>
)}
</Form.Item>
<div>
<Form.Item label="邮箱验证码" className={`${passMap.code ? 'hasSuccess' : ''}`}>
{getFieldDecorator("code",{
<Fragment>
{type === '0' ? <div>
<div className='tipsBox mb15'><img src={img1} alt="" width={16} className='mr10'/>更改邮箱后您在<span className='spanTil'>GitLink</span> 的登录账号接收通知的邮件地址<span className='spanTil'>git config</span> 邮件地址将同步变更请谨慎更改!</div>
<div className='tipsBox mb20 emailBox'>现邮箱地址<span className='ml10 email spanTil'>{current_user && current_user.email}</span></div>
<div className='updateEmail mb20'>更改邮箱</div>
<Form layout={'inline'} className="formBase passMan personalUpdateInfoForm">
<Form.Item label="登录密码" className={`${passMap.password ? 'hasSuccess' : ''}`}>
{getFieldDecorator("password1",{
rules:[
{required:true,message:"请输入邮箱验证码"},
{validator:(rule, value, callback)=>checkCode(rule, value, callback)}
]
{required:true,message:"请输入登录密码"},
{validator:(rule, value, callback)=>checkPsd(rule, value, callback)}
],
validateTrigger:"onBlur",
})(
<Input placeholder="请输入邮箱验证码" style={{width:"400px"}}/>
<Input.Password placeholder="请输入登录密码" autoComplete={"new-password"} style={{width:"400px"}}/>
)}
</Form.Item>
{countDown ? <Button className='getCaptchaBut ml50' disabled>重发 ({countDown})</Button> : <Button className='getCaptchaBut ml50' onClick={getCaptcha} disabled={!emailValue}>获取验证码</Button>}
</div>
<Form.Item label="新邮箱地址" className={`${passMap.email ? 'hasSuccess' : ''}`}>
{getFieldDecorator("email",{
rules:[
{required:true,message:"请输入新邮箱地址"},
{type: 'email',message: '请输入正确的邮箱格式'},
{validator:(rule, value, callback)=>checkEmail(rule, value, callback)}
],
validateTrigger:"onBlur",
})(
<Input placeholder="请输入新邮箱地址" style={{width:"400px"}} autoComplete={"off"}/>
)}
</Form.Item>
<div>
<Form.Item label="邮箱验证码" className={`${passMap.code ? 'hasSuccess' : ''}`}>
{getFieldDecorator("code",{
rules:[
{required:true,message:"请输入邮箱验证码"},
{validator:(rule, value, callback)=>checkCode(rule, value, callback)}
],
validateTrigger:"onBlur",
})(
<Input placeholder="请输入邮箱验证码" style={{width:"400px"}}/>
)}
</Form.Item>
{countDown ? <Button className='getCaptchaBut ml50' disabled>重发 ({countDown})</Button> : <Button className='getCaptchaBut ml50' onClick={getCaptcha} disabled={!emailValue}>获取验证码</Button>}
</div>
<AlignCenter style={{marginTop:"20px"}}>
<span className="ant-form-item-label mr10"></span>
<Button className={`${passMap.password && passMap.email && passMap.code ? 'but25' : ''}`} type={"primary"} onClick={confirmUpdateEmail} disabled={!(passMap.password && passMap.email && passMap.code)}>确认更改</Button>
</AlignCenter>
</Form>
</div> : type === '1' ? <Form layout={'inline'} className="formBase passMan personalUpdateInfoForm mt30">
<Form.Item label="旧密码" className={`${updatePsdMap.oldPassword ? 'hasSuccess' : ''}`}>
{getFieldDecorator("old_password",{
rules:[
{required:true,message:"请输入旧密码"},
{validator:(rule, value, callback)=>checkPsd(rule, value, callback)}
],
validateTrigger:"onBlur",
})(
<Input.Password placeholder="请输入旧密码" autoComplete={"new-password"} style={{width:"400px"}}/>
)}
</Form.Item>
<Form.Item label="新密码" className={`${updatePsdMap.password ? 'hasSuccess' : ''}`}>
{getFieldDecorator("password",{
rules:[
{required:true,message:"请输入新密码"},
{validator:(rule, value, callback)=>checkNewPass(rule, value, callback, NewPassRepeat)}
],
validateFirst: true,
validateTrigger:"onBlur",
})(
<Input.Password placeholder="请输入新密码" style={{width:"400px"}} onChange={(e)=>{setNewPass(e.target.value)}}/>
)}
</Form.Item>
<Form.Item label="确认新密码" className={`${updatePsdMap.password1 ? 'hasSuccess' : ''}`}>
{getFieldDecorator("new_password_repeat",{
rules:[
{required:true,message:"请重新输入新密码"},
{validator:(rule, value, callback)=>checkIdentifier(rule, value, callback, NewPass)}
],
validateFirst: true,
validateTrigger:"onBlur",
})(
<Input.Password placeholder="请重新输入新密码" style={{width:"400px"}} onChange={(e)=>{setNewPassRepeat(e.target.value)}}/>
)}
</Form.Item>
<AlignCenter style={{marginTop:"20px"}}>
<span className="ant-form-item-label mr10"></span>
<Button className={`${passMap.password && passMap.email && passMap.code ? 'but25' : ''}`} type={"primary"} onClick={updateEmail} disabled={!(passMap.password && passMap.email && passMap.code)}>确认更改</Button>
<Button className={`${updatePsdMap.oldPassword && updatePsdMap.password && updatePsdMap.password1 ? 'but25' : ''}`} type={"primary"} onClick={submit} disabled={!(updatePsdMap.oldPassword && updatePsdMap.password && updatePsdMap.password1)}>确认更改</Button>
</AlignCenter>
</Form>
</div> : type === '1' ? <Form layout={'inline'} className="formBase passMan personalUpdateInfoForm mt30">
<Form.Item label="旧密码" className={`${updatePsdMap.oldPassword ? 'hasSuccess' : ''}`}>
{getFieldDecorator("old_password",{
rules:[
{required:true,message:"请输入旧密码"},
{validator:(rule, value, callback)=>checkPsd(rule, value, callback)}
],
validateFirst: true,
validateTrigger:"onBlur",
})(
<Input.Password placeholder="请输入旧密码" autoComplete={"new-password"} style={{width:"400px"}}/>
)}
</Form.Item>
<Form.Item label="新密码" className={`${updatePsdMap.password ? 'hasSuccess' : ''}`}>
{getFieldDecorator("password",{
rules:[
{required:true,message:"请输入新密码"},
{validator:(rule, value, callback)=>checkNewPass(rule, value, callback, NewPassRepeat)}
],
validateFirst: true,
validateTrigger:"onBlur",
})(
<Input.Password placeholder="请输入新密码" style={{width:"400px"}} onChange={(e)=>{setNewPass(e.target.value)}}/>
)}
</Form.Item>
<Form.Item label="确认新密码" className={`${updatePsdMap.password1 ? 'hasSuccess' : ''}`}>
{getFieldDecorator("new_password_repeat",{
rules:[
{required:true,message:"请重新输入新密码"},
{validator:(rule, value, callback)=>checkIdentifier(rule, value, callback, NewPass)}
],
validateFirst: true,
validateTrigger:"onBlur",
})(
<Input.Password placeholder="请重新输入新密码" style={{width:"400px"}} onChange={(e)=>{setNewPassRepeat(e.target.value)}}/>
)}
</Form.Item>
<AlignCenter style={{marginTop:"20px"}}>
<span className="ant-form-item-label mr10"></span>
<Button className={`${updatePsdMap.oldPassword && updatePsdMap.password && updatePsdMap.password1 ? 'but25' : ''}`} type={"primary"} onClick={submit} disabled={!(updatePsdMap.oldPassword && updatePsdMap.password && updatePsdMap.password1)}>确认更改</Button>
</AlignCenter>
</Form> : <div>
<div className='tipsBox mb15'><img src={img1} alt="" width={16} className='mr10'/>请您谨慎操作注销后帐号内所有数据都会被清空且无法恢复帐号!</div>
<div className='tipCont'>
GitLink目前提供邮件渠道帐号注销服务如需注销帐号请通过发送邮件注销申请邮件到 <span className='orange'>gitlink@ccf.org.cn</span><br/>
相关注意事项如下:<br/>
<span className='oneTipBox mt10'>必须使用要注销的 GitLink 帐号所绑定的邮箱地址发送邮件</span>
<span className='oneTipBox mt5'>发送注销申请邮件之前确认帐号下无创建/加入组织帐号名下无仓库信息</span>
<span className='oneTipBox mt5'>邮件标题: 注销 GitLink 帐号邮件正文请注明要注销帐号的邮箱和昵称</span>
<span className='oneTipBox mt5'>发送邮件后我们会积极处理请耐心等候我们的邮件回复</span>
</div>
</div>
</Form> : <div>
<div className='tipsBox mb15'><img src={img1} alt="" width={16} className='mr10'/>请您谨慎操作注销后帐号内所有数据都会被清空且无法恢复帐号!</div>
<div className='tipCont'>
GitLink目前提供邮件渠道帐号注销服务如需注销帐号请通过发送邮件注销申请邮件到 <span className='orange'>gitlink@ccf.org.cn</span><br/>
相关注意事项如下:<br/>
<span className='oneTipBox mt10'>必须使用要注销的 GitLink 帐号所绑定的邮箱地址发送邮件</span>
<span className='oneTipBox mt5'>发送注销申请邮件之前确认帐号下无创建/加入组织帐号名下无仓库信息</span>
<span className='oneTipBox mt5'>邮件标题: 注销 GitLink 帐号邮件正文请注明要注销帐号的邮箱和昵称</span>
<span className='oneTipBox mt5'>发送邮件后我们会积极处理请耐心等候我们的邮件回复</span>
</div>
</div>}
<Modals
visible={visible}
onCancel={()=>{setVisible(false)}}
title={type==='0'? '更改邮箱' : '更改密码'}
btn={
<div>
<Button size={'large'} onClick={()=>{setVisible(false)}}>取消</Button>
<Button size={"large"} type={"primary"} onClick={updateEmailOrPsd}>确认更改</Button>
</div>
}
>
<div className="desc">
<AlignCenter className="descMain">
<i className="iconfont icon-jinggao1 mr10 font-20 red"></i>确认更改{type === '0' ? '邮箱' : '密码'}</AlignCenter>
<p>{type === '0' ? '更改邮箱后您在GitLink的登录账号、接收通知的邮件地址、git config 邮件地址将同步变更。请再次确认。' : '更改密码后您在GitLink的登录密码将同步变更。请再次确认。'}</p>
</div>
</Modals>
</Fragment>
)})
)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 76 KiB

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 65 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

After

Width:  |  Height:  |  Size: 46 KiB