|
|
|
@ -30,7 +30,8 @@ export default class Register extends Component { |
|
|
|
confirmDirty: false, |
|
|
|
visible: false, |
|
|
|
help: '', |
|
|
|
} |
|
|
|
prefix: '86', |
|
|
|
}; |
|
|
|
|
|
|
|
componentWillReceiveProps(nextProps) { |
|
|
|
if (nextProps.register.status === 'ok') { |
|
|
|
@ -52,7 +53,7 @@ export default class Register extends Component { |
|
|
|
clearInterval(this.interval); |
|
|
|
} |
|
|
|
}, 1000); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
getPasswordStatus = () => { |
|
|
|
const { form } = this.props; |
|
|
|
@ -64,26 +65,27 @@ export default class Register extends Component { |
|
|
|
return 'pass'; |
|
|
|
} |
|
|
|
return 'pool'; |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
handleSubmit = (e) => { |
|
|
|
e.preventDefault(); |
|
|
|
this.props.form.validateFields({ force: true }, |
|
|
|
(err, values) => { |
|
|
|
if (!err) { |
|
|
|
this.props.dispatch({ |
|
|
|
type: 'register/submit', |
|
|
|
payload: values, |
|
|
|
}); |
|
|
|
} |
|
|
|
this.props.form.validateFields({ force: true }, (err, values) => { |
|
|
|
if (!err) { |
|
|
|
this.props.dispatch({ |
|
|
|
type: 'register/submit', |
|
|
|
payload: { |
|
|
|
...values, |
|
|
|
prefix: this.state.prefix, |
|
|
|
}, |
|
|
|
}); |
|
|
|
} |
|
|
|
); |
|
|
|
} |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
handleConfirmBlur = (e) => { |
|
|
|
const { value } = e.target; |
|
|
|
this.setState({ confirmDirty: this.state.confirmDirty || !!value }); |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
checkConfirm = (rule, value, callback) => { |
|
|
|
const { form } = this.props; |
|
|
|
@ -92,7 +94,7 @@ export default class Register extends Component { |
|
|
|
} else { |
|
|
|
callback(); |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
checkPassword = (rule, value, callback) => { |
|
|
|
if (!value) { |
|
|
|
@ -120,13 +122,19 @@ export default class Register extends Component { |
|
|
|
callback(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
changePrefix = (value) => { |
|
|
|
this.setState({ |
|
|
|
prefix: value, |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
renderPasswordProgress = () => { |
|
|
|
const { form } = this.props; |
|
|
|
const value = form.getFieldValue('password'); |
|
|
|
const passwordStatus = this.getPasswordStatus(); |
|
|
|
return value && value.length ? |
|
|
|
return value && value.length ? ( |
|
|
|
<div className={styles[`progress-${passwordStatus}`]}> |
|
|
|
<Progress |
|
|
|
status={passwordProgressMap[passwordStatus]} |
|
|
|
@ -135,27 +143,31 @@ export default class Register extends Component { |
|
|
|
percent={value.length * 10 > 100 ? 100 : value.length * 10} |
|
|
|
showInfo={false} |
|
|
|
/> |
|
|
|
</div> : null; |
|
|
|
} |
|
|
|
</div> |
|
|
|
) : null; |
|
|
|
}; |
|
|
|
|
|
|
|
render() { |
|
|
|
const { form, register } = this.props; |
|
|
|
const { getFieldDecorator } = form; |
|
|
|
const { count } = this.state; |
|
|
|
const { count, prefix } = this.state; |
|
|
|
return ( |
|
|
|
<div className={styles.main}> |
|
|
|
<h3>注册</h3> |
|
|
|
<Form onSubmit={this.handleSubmit}> |
|
|
|
<FormItem> |
|
|
|
{getFieldDecorator('mail', { |
|
|
|
rules: [{ |
|
|
|
required: true, message: '请输入邮箱地址!', |
|
|
|
}, { |
|
|
|
type: 'email', message: '邮箱地址格式错误!', |
|
|
|
}], |
|
|
|
})( |
|
|
|
<Input size="large" placeholder="邮箱" /> |
|
|
|
)} |
|
|
|
rules: [ |
|
|
|
{ |
|
|
|
required: true, |
|
|
|
message: '请输入邮箱地址!', |
|
|
|
}, |
|
|
|
{ |
|
|
|
type: 'email', |
|
|
|
message: '邮箱地址格式错误!', |
|
|
|
}, |
|
|
|
], |
|
|
|
})(<Input size="large" placeholder="邮箱" />)} |
|
|
|
</FormItem> |
|
|
|
<FormItem help={this.state.help}> |
|
|
|
<Popover |
|
|
|
@ -163,7 +175,9 @@ export default class Register extends Component { |
|
|
|
<div style={{ padding: '4px 0' }}> |
|
|
|
{passwordStatusMap[this.getPasswordStatus()]} |
|
|
|
{this.renderPasswordProgress()} |
|
|
|
<div style={{ marginTop: 10 }}>请至少输入 6 个字符。请不要使用容易被猜到的密码。</div> |
|
|
|
<div style={{ marginTop: 10 }}> |
|
|
|
请至少输入 6 个字符。请不要使用容易被猜到的密码。 |
|
|
|
</div> |
|
|
|
</div> |
|
|
|
} |
|
|
|
overlayStyle={{ width: 240 }} |
|
|
|
@ -171,9 +185,11 @@ export default class Register extends Component { |
|
|
|
visible={this.state.visible} |
|
|
|
> |
|
|
|
{getFieldDecorator('password', { |
|
|
|
rules: [{ |
|
|
|
validator: this.checkPassword, |
|
|
|
}], |
|
|
|
rules: [ |
|
|
|
{ |
|
|
|
validator: this.checkPassword, |
|
|
|
}, |
|
|
|
], |
|
|
|
})( |
|
|
|
<Input |
|
|
|
size="large" |
|
|
|
@ -185,57 +201,59 @@ export default class Register extends Component { |
|
|
|
</FormItem> |
|
|
|
<FormItem> |
|
|
|
{getFieldDecorator('confirm', { |
|
|
|
rules: [{ |
|
|
|
required: true, message: '请确认密码!', |
|
|
|
}, { |
|
|
|
validator: this.checkConfirm, |
|
|
|
}], |
|
|
|
})( |
|
|
|
<Input |
|
|
|
size="large" |
|
|
|
type="password" |
|
|
|
placeholder="确认密码" |
|
|
|
/> |
|
|
|
)} |
|
|
|
rules: [ |
|
|
|
{ |
|
|
|
required: true, |
|
|
|
message: '请确认密码!', |
|
|
|
}, |
|
|
|
{ |
|
|
|
validator: this.checkConfirm, |
|
|
|
}, |
|
|
|
], |
|
|
|
})(<Input size="large" type="password" placeholder="确认密码" />)} |
|
|
|
</FormItem> |
|
|
|
<FormItem> |
|
|
|
<InputGroup size="large" className={styles.mobileGroup} compact> |
|
|
|
<FormItem style={{ width: '20%' }}> |
|
|
|
{getFieldDecorator('prefix', { |
|
|
|
initialValue: '86', |
|
|
|
})( |
|
|
|
<Select size="large"> |
|
|
|
<Option value="86">+86</Option> |
|
|
|
<Option value="87">+87</Option> |
|
|
|
</Select> |
|
|
|
)} |
|
|
|
</FormItem> |
|
|
|
<FormItem style={{ width: '80%' }}> |
|
|
|
{getFieldDecorator('mobile', { |
|
|
|
rules: [{ |
|
|
|
required: true, message: '请输入手机号!', |
|
|
|
}, { |
|
|
|
pattern: /^1\d{10}$/, message: '手机号格式错误!', |
|
|
|
}], |
|
|
|
})( |
|
|
|
<Input placeholder="11位手机号" /> |
|
|
|
)} |
|
|
|
</FormItem> |
|
|
|
<InputGroup compact> |
|
|
|
<Select |
|
|
|
size="large" |
|
|
|
value={prefix} |
|
|
|
onChange={this.changePrefix} |
|
|
|
style={{ width: '20%' }} |
|
|
|
> |
|
|
|
<Option value="86">+86</Option> |
|
|
|
<Option value="87">+87</Option> |
|
|
|
</Select> |
|
|
|
{getFieldDecorator('mobile', { |
|
|
|
rules: [ |
|
|
|
{ |
|
|
|
required: true, |
|
|
|
message: '请输入手机号!', |
|
|
|
}, |
|
|
|
{ |
|
|
|
pattern: /^1\d{10}$/, |
|
|
|
message: '手机号格式错误!', |
|
|
|
}, |
|
|
|
], |
|
|
|
})( |
|
|
|
<Input |
|
|
|
size="large" |
|
|
|
style={{ width: '80%' }} |
|
|
|
placeholder="11位手机号" |
|
|
|
/> |
|
|
|
)} |
|
|
|
</InputGroup> |
|
|
|
</FormItem> |
|
|
|
<FormItem> |
|
|
|
<Row gutter={8}> |
|
|
|
<Col span={16}> |
|
|
|
{getFieldDecorator('captcha', { |
|
|
|
rules: [{ |
|
|
|
required: true, message: '请输入验证码!', |
|
|
|
}], |
|
|
|
})( |
|
|
|
<Input |
|
|
|
size="large" |
|
|
|
placeholder="验证码" |
|
|
|
/> |
|
|
|
)} |
|
|
|
rules: [ |
|
|
|
{ |
|
|
|
required: true, |
|
|
|
message: '请输入验证码!', |
|
|
|
}, |
|
|
|
], |
|
|
|
})(<Input size="large" placeholder="验证码" />)} |
|
|
|
</Col> |
|
|
|
<Col span={8}> |
|
|
|
<Button |
|
|
|
@ -250,10 +268,18 @@ export default class Register extends Component { |
|
|
|
</Row> |
|
|
|
</FormItem> |
|
|
|
<FormItem> |
|
|
|
<Button size="large" loading={register.submitting} className={styles.submit} type="primary" htmlType="submit"> |
|
|
|
<Button |
|
|
|
size="large" |
|
|
|
loading={register.submitting} |
|
|
|
className={styles.submit} |
|
|
|
type="primary" |
|
|
|
htmlType="submit" |
|
|
|
> |
|
|
|
注册 |
|
|
|
</Button> |
|
|
|
<Link className={styles.login} to="/user/login">使用已有账户登录</Link> |
|
|
|
<Link className={styles.login} to="/user/login"> |
|
|
|
使用已有账户登录 |
|
|
|
</Link> |
|
|
|
</FormItem> |
|
|
|
</Form> |
|
|
|
</div> |
|
|
|
|