import React, { Component } from 'react';
import './index.less';
import { Modal, Icon, Button, Tooltip } from 'antd';
import Assets from '@src/components/Assets';
import { asyncSMessage } from '@src/services/AsyncTools';
import { Icon as GIcon } from '../Icon';
import { Button as GButton } from '../Button';
import { User } from '../../stores/user';
import { My } from '../../stores/my';
import { Common } from '../../stores/common';
import { MobileArea } from '../../../Constant';
const LOGIN_PHONE = 'LOGIN_PHONE';
const LOGIN_WX = 'LOGIN_WX';
const BIND_PHONE = 'BIND_PHONE';
const BIND_WX = 'BIND_WX';
const BIND_WX_ERROR = 'BIND_WX_ERROR';
export default class Login extends Component {
constructor(props) {
super(props);
this.state = { type: LOGIN_PHONE };
}
close() {
User.closeLogin();
}
login() {
const { data, needEmail, mobileError, validError } = this.state;
const { area, mobile, mobileVerifyCode, email } = data;
if (mobileError !== '' || validError !== '') return;
if (area === '' || mobile === '' || mobileVerifyCode === '') return;
if (needEmail && email === '') return;
User.login(area, mobile, mobileVerifyCode).then(() => {
let handler = null;
if (needEmail) {
handler = My.bindEmail(email);
} else {
handler = Promise.resolve();
}
handler.then((result) => {
if (result.bindWechat) {
this.close();
} else {
this.setState({ type: BIND_WX });
}
});
})
.catch(err => {
if (err.message.indexOf('验证码') >= 0) {
this.setState({ validError: err.message });
} else {
this.setState({ mobileError: err.message });
}
});
}
bind() {
const { data, needEmail, mobileError, validError } = this.state;
const { area, mobile, mobileVerifyCode, email } = data;
if (mobileError !== '' || validError !== '') return;
if (area === '' || mobile === '' || mobileVerifyCode === '') return;
if (needEmail && email === '') return;
User.bind(area, mobile, mobileVerifyCode).then(() => {
let handler = null;
if (needEmail) {
handler = My.bindEmail(email);
} else {
handler = Promise.resolve();
}
handler.then(() => {
this.close();
});
})
.catch(err => {
if (err.message.indexOf('验证码') >= 0) {
this.setState({ validError: err.message });
} else {
this.setState({ mobileError: err.message });
}
});
}
scanLogin() {
User.loginWechat('').then((result) => {
if (result.id) {
this.close();
} else {
this.setState({ type: BIND_PHONE });
}
});
}
scanBind() {
User.loginWechat('').then(() => {
this.close();
}).catch(err => {
this.setState({ type: BIND_WX_ERROR, wechatError: err.message });
});
}
changeData(field, value) {
let { data } = this.state;
data = data || {};
data[field] = value;
this.setState({ data });
}
validMobile() {
const { data } = this.state;
const { area, mobile } = data;
if (area === '' || mobile === '') return;
User.validWechat(area, mobile)
.then(result => {
if (result) {
this.setState({ mobileError: '' });
return User.validMobile(area, mobile)
.then(r => {
this.setState({ needEmail: r });
});
}
this.setState({ needEmail: false });
return Promise.reject(new Error('该手机已绑定其他账号,请更换手机号码'));
})
.catch(err => {
this.setState({ mobileError: err.message });
});
}
sendValid() {
const { data, mobileError } = this.state;
const { area, mobile } = data;
if (area === '' || mobile === '' || mobileError !== '') return Promise.reject();
return Common.sendSms(area, mobile)
.then((result) => {
if (result) {
asyncSMessage('发送成功');
this.setState({ mobileError: '', validError: '' });
} else {
throw new Error('发送失败');
}
})
.catch(err => {
this.setState({ mobileError: err.message });
throw err;
});
}
render() {
const { type } = this.state;
const { user } = this.props;
return (