|
|
|
@ -2,11 +2,11 @@ import { Button, Checkbox, Classes, Dialog, InputGroup, Intent, Position, Toolti
|
|
|
|
|
import { IObservableValue, observable } from 'mobx';
|
|
|
|
|
import { inject, observer } from 'mobx-react';
|
|
|
|
|
import * as React from 'react';
|
|
|
|
|
import { safeEval } from '../../../Common/eval';
|
|
|
|
|
import { ResourcesCDN_HOST, SignUrl } from '../../../Common/HostUrl';
|
|
|
|
|
import { KeyBoard } from '../../../Common/KeyEnum';
|
|
|
|
|
import { PostJson, RequestStatus } from '../../../Common/Request';
|
|
|
|
|
import { Sleep } from '../../../Common/Sleep';
|
|
|
|
|
import { safeEval } from '../../../Common/eval';
|
|
|
|
|
import { TopPanelStore } from '../../Store/TopPanelStore';
|
|
|
|
|
import { AppToaster } from '../Toaster';
|
|
|
|
|
|
|
|
|
@ -17,6 +17,8 @@ interface IRegistInput
|
|
|
|
|
check_code: string;
|
|
|
|
|
pswConfirm: string;
|
|
|
|
|
agreement_checked: boolean;
|
|
|
|
|
invite_code: string;
|
|
|
|
|
user_name: string;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
interface InputIntent
|
|
|
|
@ -24,6 +26,8 @@ interface InputIntent
|
|
|
|
|
PSW: Intent;
|
|
|
|
|
ComfirmPSW: Intent;
|
|
|
|
|
PHONE: Intent;
|
|
|
|
|
InviteCode: Intent,
|
|
|
|
|
UserName: Intent,
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
enum InputType
|
|
|
|
@ -32,12 +36,15 @@ enum InputType
|
|
|
|
|
ComfirmPSW = 1,
|
|
|
|
|
PHONE = 2,
|
|
|
|
|
OK = 3,
|
|
|
|
|
InviteCode = 4,
|
|
|
|
|
UserName = 5,
|
|
|
|
|
}
|
|
|
|
|
const prefix = "time_";
|
|
|
|
|
let SMSTimer: NodeJS.Timeout;
|
|
|
|
|
@inject("store")
|
|
|
|
|
@observer
|
|
|
|
|
export default class Regist extends React.Component<{ store?: TopPanelStore; }> {
|
|
|
|
|
export default class Regist extends React.Component<{ store?: TopPanelStore; }>
|
|
|
|
|
{
|
|
|
|
|
@observable private errMsg: string = "";
|
|
|
|
|
@observable private flag: InputType = InputType.OK;
|
|
|
|
|
@observable private inputIntent: InputIntent;
|
|
|
|
@ -49,6 +56,7 @@ export default class Regist extends React.Component<{ store?: TopPanelStore; }>
|
|
|
|
|
@observable private registInput: IRegistInput;
|
|
|
|
|
private openAgreement = observable.box(false);
|
|
|
|
|
private phoneRegex = new RegExp(`\^1\\d{10}$`);
|
|
|
|
|
private inviteCode = new RegExp(`\^[a-z0-9]{6}$`);
|
|
|
|
|
private pswRegex = new RegExp(`\^[^\\u4e00-\\u9fa5]+$`);
|
|
|
|
|
@observable registering: boolean = false;
|
|
|
|
|
constructor(props)
|
|
|
|
@ -60,11 +68,15 @@ export default class Regist extends React.Component<{ store?: TopPanelStore; }>
|
|
|
|
|
check_code: "",
|
|
|
|
|
pswConfirm: "",
|
|
|
|
|
agreement_checked: false,
|
|
|
|
|
invite_code: "",
|
|
|
|
|
user_name: "",
|
|
|
|
|
};
|
|
|
|
|
this.inputIntent = {
|
|
|
|
|
PSW: Intent.NONE,
|
|
|
|
|
ComfirmPSW: Intent.NONE,
|
|
|
|
|
PHONE: Intent.NONE,
|
|
|
|
|
InviteCode: Intent.NONE,
|
|
|
|
|
UserName: Intent.NONE,
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
handleRegist = async () =>
|
|
|
|
@ -105,6 +117,15 @@ export default class Regist extends React.Component<{ store?: TopPanelStore; }>
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (this.inputIntent.InviteCode !== Intent.SUCCESS)
|
|
|
|
|
{
|
|
|
|
|
AppToaster.show({
|
|
|
|
|
message: "邀请码有误",
|
|
|
|
|
intent: Intent.DANGER,
|
|
|
|
|
timeout: 1000,
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
if (!this.registInput.agreement_checked)
|
|
|
|
|
{
|
|
|
|
|
AppToaster.show({
|
|
|
|
@ -283,6 +304,21 @@ export default class Regist extends React.Component<{ store?: TopPanelStore; }>
|
|
|
|
|
this.inputIntent.PHONE = Intent.DANGER;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
case InputType.InviteCode:
|
|
|
|
|
text = this.registInput.invite_code;
|
|
|
|
|
if (this.inviteCode.test(text))
|
|
|
|
|
{
|
|
|
|
|
this.flag = InputType.OK;
|
|
|
|
|
this.errMsg = "";
|
|
|
|
|
this.inputIntent.InviteCode = Intent.SUCCESS;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
this.errMsg = "邀请码是6位字母和数字";
|
|
|
|
|
this.flag = InputType.InviteCode;
|
|
|
|
|
this.inputIntent.InviteCode = Intent.DANGER;
|
|
|
|
|
}
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
render()
|
|
|
|
@ -398,7 +434,46 @@ export default class Regist extends React.Component<{ store?: TopPanelStore; }>
|
|
|
|
|
/>
|
|
|
|
|
</Tooltip>
|
|
|
|
|
</div>
|
|
|
|
|
|
|
|
|
|
<div className="item">
|
|
|
|
|
<Tooltip
|
|
|
|
|
content={this.errMsg}
|
|
|
|
|
position={Position.TOP}
|
|
|
|
|
intent={Intent.WARNING}
|
|
|
|
|
isOpen={this.flag === InputType.InviteCode}>
|
|
|
|
|
<InputGroup
|
|
|
|
|
value={this.registInput.invite_code}
|
|
|
|
|
intent={this.inputIntent.InviteCode}
|
|
|
|
|
name="txt"
|
|
|
|
|
placeholder={"邀请码: 6位字母和数字"}
|
|
|
|
|
onChange={e =>
|
|
|
|
|
{
|
|
|
|
|
this.registInput.invite_code = e.target.value;
|
|
|
|
|
this.valueTest(InputType.InviteCode);
|
|
|
|
|
}}
|
|
|
|
|
onBlur={() => (this.flag = InputType.OK)}
|
|
|
|
|
/>
|
|
|
|
|
</Tooltip>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="item">
|
|
|
|
|
<Tooltip
|
|
|
|
|
content={this.errMsg}
|
|
|
|
|
position={Position.TOP}
|
|
|
|
|
intent={Intent.WARNING}
|
|
|
|
|
isOpen={this.flag === InputType.UserName}>
|
|
|
|
|
<InputGroup
|
|
|
|
|
value={this.registInput.user_name}
|
|
|
|
|
intent={this.inputIntent.UserName}
|
|
|
|
|
name="txt"
|
|
|
|
|
placeholder={"企业名称(可选)"}
|
|
|
|
|
onChange={e =>
|
|
|
|
|
{
|
|
|
|
|
this.registInput.user_name = e.target.value;
|
|
|
|
|
this.valueTest(InputType.UserName);
|
|
|
|
|
}}
|
|
|
|
|
onBlur={() => (this.flag = InputType.OK)}
|
|
|
|
|
/>
|
|
|
|
|
</Tooltip>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div className="regist-footer info-block" >
|
|
|
|
@ -455,7 +530,8 @@ interface IUserAgreementProps
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@observer
|
|
|
|
|
class UserAgreement extends React.Component<IUserAgreementProps, {}> {
|
|
|
|
|
class UserAgreement extends React.Component<IUserAgreementProps, {}>
|
|
|
|
|
{
|
|
|
|
|
render()
|
|
|
|
|
{
|
|
|
|
|
return (
|
|
|
|
|