|
@@ -22,6 +22,8 @@ export default class Login extends Component {
|
|
|
super(props);
|
|
|
this.validNumber = 0;
|
|
|
this.state = { type: LOGIN_WX, error: {}, data: { area: MobileArea[0].value } };
|
|
|
+ this.validMobileNumber = 0;
|
|
|
+ this.validEmailNumber = 0;
|
|
|
window.addEventListener(
|
|
|
'message',
|
|
|
event => {
|
|
@@ -55,9 +57,9 @@ export default class Login extends Component {
|
|
|
}
|
|
|
|
|
|
login() {
|
|
|
- const { data, needEmail, mobileError, validError, error } = this.state;
|
|
|
+ const { data, needEmail, mobileError, validError, emailError, error } = this.state;
|
|
|
const { area, mobile, mobileVerifyCode, email } = data;
|
|
|
- if (mobileError || validError) return;
|
|
|
+ if (mobileError || emailError || validError) return;
|
|
|
if (!area || !mobile || !mobileVerifyCode || (needEmail && !email)) {
|
|
|
error[LOGIN_PHONE] = { mobile: !mobile, mobileVerifyCode: !mobileVerifyCode, email: !email };
|
|
|
this.setState({ error });
|
|
@@ -76,6 +78,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 });
|
|
|
}
|
|
@@ -83,9 +87,9 @@ export default class Login extends Component {
|
|
|
}
|
|
|
|
|
|
bind() {
|
|
|
- const { data, needEmail, mobileError, validError, error } = this.state;
|
|
|
+ const { data, needEmail, mobileError, emailError, validError, error } = this.state;
|
|
|
const { area, mobile, mobileVerifyCode, email } = data;
|
|
|
- if (mobileError || validError) return;
|
|
|
+ if (mobileError || emailError || validError) return;
|
|
|
if (!area || !mobile || !mobileVerifyCode || (needEmail && !email)) {
|
|
|
error[BIND_PHONE] = { mobile: !mobile, mobileVerifyCode: !mobileVerifyCode, email: !email };
|
|
|
this.setState({ error });
|
|
@@ -100,6 +104,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 });
|
|
|
}
|
|
@@ -141,14 +147,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 });
|
|
|
});
|
|
|
}
|
|
@@ -160,6 +166,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;
|
|
@@ -197,7 +223,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>
|
|
@@ -221,7 +252,7 @@ export default class Login extends Component {
|
|
|
}
|
|
|
|
|
|
renderLoginPhone() {
|
|
|
- const { needEmail, registerContract = {}, privacyContract, error = {} } = this.state;
|
|
|
+ const { needEmail = true, registerContract = {}, privacyContract, error = {} } = this.state;
|
|
|
const emptyError = error[LOGIN_PHONE] || {};
|
|
|
return (
|
|
|
<div className="body">
|
|
@@ -263,23 +294,23 @@ export default class Login extends Component {
|
|
|
placeholder="请输入邮箱"
|
|
|
value={this.state.data.email}
|
|
|
empty={emptyError.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}
|
|
|
+ 《{registerContract.title}》
|
|
|
</a>{' '}
|
|
|
- 与{' '}
|
|
|
<a href={`/contract/${privacyContract.key}`} target="_blank">
|
|
|
- {privacyContract.title}
|
|
|
+ 《{privacyContract.title}》
|
|
|
</a>
|
|
|
- .
|
|
|
</div>
|
|
|
)}
|
|
|
<Button
|
|
@@ -334,7 +365,7 @@ export default class Login extends Component {
|
|
|
}
|
|
|
|
|
|
renderBindPhone() {
|
|
|
- const { needEmail = true, contract = {}, error = {} } = this.state;
|
|
|
+ const { needEmail = true, registerContract = {}, privacyContract = {}, error = {} } = this.state;
|
|
|
const emptyError = error[BIND_PHONE] || {};
|
|
|
return (
|
|
|
<div className="body">
|
|
@@ -376,23 +407,33 @@ export default class Login extends Component {
|
|
|
placeholder="请输入邮箱"
|
|
|
value={this.state.data.email}
|
|
|
empty={emptyError.email}
|
|
|
+ error={this.state.emailError}
|
|
|
onChange={e => {
|
|
|
this.changeData('email', e.target.value);
|
|
|
+ this.validEmail();
|
|
|
}}
|
|
|
/>
|
|
|
)}
|
|
|
{needEmail && (
|
|
|
<div className="m-b-2">
|
|
|
<RadioItem checked theme="white" className="m-r-5" />
|
|
|
- 我已经阅读并同意{' '}
|
|
|
- <a href={`/contract/${contract.key}`} target="_blank">
|
|
|
- {contract.title}
|
|
|
+ 我已同意{' '}
|
|
|
+ <a href={`/contract/${registerContract.key}`} target="_blank">
|
|
|
+ 《{registerContract.title}》
|
|
|
</a>{' '}
|
|
|
- 与{' '}
|
|
|
- <a href={`/contract/${contract.key}`} target="_blank">
|
|
|
- 隐私政策
|
|
|
+ <a href={`/contract/${privacyContract.key}`} target="_blank">
|
|
|
+ 《{privacyContract.title}》
|
|
|
+ </a>
|
|
|
+ <a className="f-r" onClick={() => this.setState({ type: LOGIN_PHONE })}>
|
|
|
+ 使用手机号码登录
|
|
|
+ </a>
|
|
|
+ </div>
|
|
|
+ )}
|
|
|
+ {!needEmail && (
|
|
|
+ <div className="m-b-2">
|
|
|
+ <a className="f-r" onClick={() => this.setState({ type: LOGIN_PHONE })}>
|
|
|
+ 使用手机号码登录
|
|
|
</a>
|
|
|
- .
|
|
|
</div>
|
|
|
)}
|
|
|
<Button
|
|
@@ -443,15 +484,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>
|