diff --git a/src/UI/Components/MainContent/Regist.tsx b/src/UI/Components/MainContent/Regist.tsx index 4d1885e9b..9ac3e7419 100644 --- a/src/UI/Components/MainContent/Regist.tsx +++ b/src/UI/Components/MainContent/Regist.tsx @@ -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; }> /> - +
+ + + { + this.registInput.invite_code = e.target.value; + this.valueTest(InputType.InviteCode); + }} + onBlur={() => (this.flag = InputType.OK)} + /> + +
+
+ + + { + this.registInput.user_name = e.target.value; + this.valueTest(InputType.UserName); + }} + onBlur={() => (this.flag = InputType.OK)} + /> + +
@@ -455,7 +530,8 @@ interface IUserAgreementProps } @observer -class UserAgreement extends React.Component { +class UserAgreement extends React.Component +{ render() { return (