|
@@ -20,7 +20,8 @@ const BIND_WX_ERROR = 'BIND_WX_ERROR';
|
|
|
export default class Login extends Component {
|
|
|
constructor(props) {
|
|
|
super(props);
|
|
|
- this.validNumber = 0;
|
|
|
+ this.validMobileNumber = 0;
|
|
|
+ this.validEmailNumber = 0;
|
|
|
this.state = { type: LOGIN_WX, data: { area: MobileArea[0].value } };
|
|
|
window.addEventListener(
|
|
|
'message',
|
|
@@ -57,9 +58,9 @@ export default class Login extends Component {
|
|
|
}
|
|
|
|
|
|
login() {
|
|
|
- const { data, needEmail, mobileError, validError } = this.state;
|
|
|
+ const { data, needEmail, mobileError, emailError, validError } = this.state;
|
|
|
const { area, mobile, mobileVerifyCode, email } = data;
|
|
|
- if (mobileError || validError) return;
|
|
|
+ if (mobileError || emailError || validError) return;
|
|
|
if (!area || !mobile || !mobileVerifyCode) return;
|
|
|
if (needEmail && !email) return;
|
|
|
User.login(area, mobile, mobileVerifyCode, email, null, false)
|
|
@@ -73,6 +74,8 @@ export default class Login extends Component {
|
|
|
.catch(err => {
|
|
|
if (err.message.indexOf('验证码') >= 0) {
|
|
|
this.setState({ validError: err.message });
|
|
|
+ } else if (err.message.indexOf('邮箱') >= 0) {
|
|
|
+ this.setState({ emailError: err.message });
|
|
|
} else {
|
|
|
this.setState({ mobileError: err.message });
|
|
|
}
|
|
@@ -80,9 +83,9 @@ export default class Login extends Component {
|
|
|
}
|
|
|
|
|
|
bind() {
|
|
|
- const { data, needEmail, mobileError, validError } = this.state;
|
|
|
+ const { data, needEmail, mobileError, emailError, validError } = this.state;
|
|
|
const { area, mobile, mobileVerifyCode, email } = data;
|
|
|
- if (mobileError || validError) return;
|
|
|
+ if (mobileError || emailError || validError) return;
|
|
|
if (!area || !mobile || !mobileVerifyCode) return;
|
|
|
if (needEmail && !email) return;
|
|
|
User.bind(area, mobile, mobileVerifyCode, email)
|
|
@@ -92,6 +95,8 @@ export default class Login extends Component {
|
|
|
.catch(err => {
|
|
|
if (err.message.indexOf('验证码') >= 0) {
|
|
|
this.setState({ validError: err.message });
|
|
|
+ } else if (err.message.indexOf('邮箱') >= 0) {
|
|
|
+ this.setState({ emailError: err.message });
|
|
|
} else {
|
|
|
this.setState({ mobileError: err.message });
|
|
|
}
|
|
@@ -132,14 +137,14 @@ export default class Login extends Component {
|
|
|
const { data } = this.state;
|
|
|
const { area, mobile } = data;
|
|
|
if (!area || !mobile) return;
|
|
|
- this.validNumber += 1;
|
|
|
- const number = this.validNumber;
|
|
|
+ this.validMobileNumber += 1;
|
|
|
+ const number = this.validMobileNumber;
|
|
|
User.validWechat(area, mobile)
|
|
|
.then(result => {
|
|
|
if (result) {
|
|
|
this.setState({ mobileError: '' });
|
|
|
return User.validMobile(area, mobile).then(r => {
|
|
|
- if (number !== this.validNumber) return;
|
|
|
+ if (number !== this.validMobileNumber) return;
|
|
|
this.setState({ needEmail: r });
|
|
|
});
|
|
|
}
|
|
@@ -151,6 +156,26 @@ export default class Login extends Component {
|
|
|
});
|
|
|
}
|
|
|
|
|
|
+ validEmail() {
|
|
|
+ const { data } = this.state;
|
|
|
+ const { email } = data;
|
|
|
+ if (!email) return;
|
|
|
+ this.validEmailNumber += 1;
|
|
|
+ const number = this.validEmailNumber;
|
|
|
+ User.validEmail(email)
|
|
|
+ .then(result => {
|
|
|
+ if (number !== this.validEmailNumber) return Promise.resolve();
|
|
|
+ if (result) {
|
|
|
+ this.setState({ emailError: '' });
|
|
|
+ return Promise.resolve();
|
|
|
+ }
|
|
|
+ return Promise.reject(new Error('该邮箱已绑定其他账号,请更换邮箱地址'));
|
|
|
+ })
|
|
|
+ .catch(err => {
|
|
|
+ this.setState({ emailError: err.message });
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
sendValid() {
|
|
|
const { data, mobileError } = this.state;
|
|
|
const { area, mobile } = data;
|
|
@@ -188,7 +213,12 @@ export default class Login extends Component {
|
|
|
<GIcon
|
|
|
name="close"
|
|
|
onClick={() => {
|
|
|
- User.closeLogin(new Error('no login'));
|
|
|
+ if (type === BIND_WX_ERROR) {
|
|
|
+ // 绑定微信错误,返回重新绑定微信
|
|
|
+ this.setState({ type: BIND_WX });
|
|
|
+ } else {
|
|
|
+ User.closeLogin(new Error('no login'));
|
|
|
+ }
|
|
|
}}
|
|
|
/>
|
|
|
</Modal>
|
|
@@ -250,14 +280,16 @@ export default class Login extends Component {
|
|
|
<Input
|
|
|
placeholder="请输入邮箱"
|
|
|
value={this.state.data.email}
|
|
|
+ error={this.state.emailError}
|
|
|
onChange={e => {
|
|
|
this.changeData('email', e.target.value);
|
|
|
+ this.validEmail();
|
|
|
}}
|
|
|
/>
|
|
|
)}
|
|
|
{needEmail && (<div>
|
|
|
<RadioItem checked theme="white" className="m-r-5" />
|
|
|
- 我已经阅读并同意 <a href={`/contract/${registerContract.key}`} target="_blank">{registerContract.title}</a> 与 <a href={`/contract/${privacyContract.key}`} target="_blank">{privacyContract.title}</a>.
|
|
|
+ 我已同意 <a href={`/contract/${registerContract.key}`} target="_blank">《{registerContract.title}》</a> <a href={`/contract/${privacyContract.key}`} target="_blank">《{privacyContract.title}》</a>
|
|
|
</div>)}
|
|
|
<Button
|
|
|
type="primary"
|
|
@@ -311,7 +343,7 @@ export default class Login extends Component {
|
|
|
}
|
|
|
|
|
|
renderBindPhone() {
|
|
|
- const { needEmail, contract = {} } = this.state;
|
|
|
+ const { needEmail, registerContract = {}, privacyContract } = this.state;
|
|
|
return (
|
|
|
<div className="body">
|
|
|
<div className="title">绑定手机号</div>
|
|
@@ -349,15 +381,19 @@ export default class Login extends Component {
|
|
|
<Input
|
|
|
placeholder="请输入邮箱"
|
|
|
value={this.state.data.email}
|
|
|
+ error={this.state.emailError}
|
|
|
onChange={e => {
|
|
|
this.changeData('email', e.target.value);
|
|
|
+ this.validEmail();
|
|
|
}}
|
|
|
/>
|
|
|
)}
|
|
|
{needEmail && (<div>
|
|
|
<RadioItem checked theme="white" className="m-r-5" />
|
|
|
- 我已经阅读并同意 <a href={`/contract/${contract.key}`} target="_blank">{contract.title}</a> 与 <a href={`/contract/${contract.key}`} target="_blank">隐私政策</a>.
|
|
|
+ 我已同意 <a href={`/contract/${registerContract.key}`} target="_blank">《{registerContract.title}》</a> <a href={`/contract/${privacyContract.key}`} target="_blank">《{privacyContract.title}》</a>
|
|
|
+ <a className="f-r" onClick={() => this.setState({ type: LOGIN_PHONE })}>使用手机号码登录</a>
|
|
|
</div>)}
|
|
|
+ {!needEmail && <div><a className="f-r" onClick={() => this.setState({ type: LOGIN_PHONE })}>使用手机号码登录</a></div>}
|
|
|
<Button
|
|
|
type="primary"
|
|
|
size="large"
|
|
@@ -406,15 +442,15 @@ export default class Login extends Component {
|
|
|
return (
|
|
|
<div className="body">
|
|
|
<div className="title">绑定失败</div>
|
|
|
- <div className="text">该微信账户已绑定其他手机号,您可直接使用微信登入。</div>
|
|
|
+ <div className="text">该微信账户已绑定其他手机号码,您可直接扫码登入。</div>
|
|
|
<div className="btn">
|
|
|
<GButton
|
|
|
radius
|
|
|
onClick={() => {
|
|
|
- this.close();
|
|
|
+ this.setState({ type: LOGIN_WX });
|
|
|
}}
|
|
|
>
|
|
|
- Ok
|
|
|
+ 扫码登入
|
|
|
</GButton>
|
|
|
</div>
|
|
|
</div>
|