!2676 WebCAD注册增加邀请码

pull/2670/MERGE
黄诗津 6 months ago committed by ChenX
parent 2530aeec2f
commit ee7170ff6e

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

Loading…
Cancel
Save