import React from 'react'; import './index.less'; import Page from '@src/containers/Page'; import { asyncSMessage } from '@src/services/AsyncTools'; import { MobileArea } from '../../../../Constant'; import Input, { SelectInput, VerificationInput } from '../../../components/Input'; import Button from '../../../components/Button'; import { User } from '../../../stores/user'; import { Common } from '../../../stores/common'; export default class extends Page { initState() { return { data: { mobile: '', area: MobileArea[0].value, email: '' }, }; } init() { this.validNumber = 0; } changeData(field, value) { let { data } = this.state; data = data || {}; data[field] = value; this.setState({ data }); } validMobile(login) { const { data } = this.state; const { area, mobile } = data; if (!area || !mobile) return; this.validNumber += 1; const number = this.validNumber; User.validWechat(area, mobile) .then(result => { if (result) { this.setState({ mobileError: '' }); return User.validMobile(area, mobile).then(r => { if (number !== this.validNumber) return; this.setState({ needEmail: r }); }); } this.setState({ needEmail: false }); return login ? Promise.resolve() : 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; }); } submit() { 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, email) .then(() => { const { url } = this.props.core.query; if (url) { toLink(url); } else { linkTo('/product'); } }) .catch(err => { console.log(err.message); if (err.message.indexOf('验证码') >= 0) { this.setState({ validError: err.message }); } else { this.setState({ mobileError: err.message }); } }); } renderView() { const { needEmail } = this.state; return ( <div> <SelectInput placeholder="请输入手机号" selectValue={this.state.data.area} select={MobileArea} value={this.state.data.mobile} error={this.state.mobileError} onSelect={value => { this.changeData('area', value); this.validMobile(); }} onChange={e => { this.changeData('mobile', e.target.value); this.validMobile(); }} /> <VerificationInput placeholder="请输入验证码" value={this.state.data.mobileVerifyCode} error={this.state.validError} onSend={() => { return this.sendValid(); }} onChange={e => { this.changeData('mobileVerifyCode', e.target.value); }} /> {needEmail && ( <Input placeholder="请输入邮箱" value={this.state.data.email} onChange={e => { this.changeData('email', e.target.value); }} /> )} <Button margin={25} radius block disabled={this.state.validError || this.state.mobileError} onClick={() => { this.submit(); }} > 绑定 </Button> </div> ); } }