From a100dacc6eb9d6a7a46e0c1ba547d382ac89db00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A8=E6=A0=91=E6=9E=97?= <904079904@qq.com> Date: Fri, 6 Dec 2019 10:57:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=E5=90=8D=E7=A7=B0=E8=BE=93?= =?UTF-8?q?=E5=85=A5=E7=89=B9=E6=AE=8A=E5=AD=97=E7=AC=A6=E5=92=8C=E8=A1=A8?= =?UTF-8?q?=E6=83=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/user/account/AccountBasicEdit.js | 122 ++++++++++++------ 1 file changed, 86 insertions(+), 36 deletions(-) diff --git a/public/react/src/modules/user/account/AccountBasicEdit.js b/public/react/src/modules/user/account/AccountBasicEdit.js index 033f433b0..9d292a168 100644 --- a/public/react/src/modules/user/account/AccountBasicEdit.js +++ b/public/react/src/modules/user/account/AccountBasicEdit.js @@ -136,7 +136,7 @@ class AccountBasic extends Component { } handleSubmit = () => { - this.props.form.validateFieldsAndScroll((err, values) => { + this.props.form.validateFieldsAndScroll({ force: true }, (err, values) => { console.log(values); let {basicInfo}=this.props; if(!err ){ @@ -148,12 +148,12 @@ class AccountBasic extends Component { this.props.showNotification('请先选择院系/部门') return; } - + let url=`/users/accounts/${basicInfo.id}.json` axios.put((url),{ nickname:values.nickname, // 认证中的不能修改 - name: basicInfo.authentication == 'uncertified' ? + name: basicInfo.authentication == 'uncertified' ? (this.state.showRealName ? values.name : this.state.realName ) : basicInfo.name, show_realname:this.state.showRealName, gender:parseInt(values.sex), @@ -173,7 +173,7 @@ class AccountBasic extends Component { } this.props.getBasicInfo(); this.props.history.push('/account/profile') - + } }).catch((error)=>{ console.log(error); @@ -357,7 +357,7 @@ class AccountBasic extends Component { }) } - + addOrgSuccess = (name) => { // const schoolList = this.state.schoolList.slice(0) @@ -377,7 +377,7 @@ class AccountBasic extends Component { } showApplyForAddOrgModal = () => { - this.applyForAddOrgForm.setVisible(true) + this.applyForAddOrgForm.setVisible(true) } showApplyForAddChildOrgModal = () => { let{school,schoolList}=this.state; @@ -385,18 +385,18 @@ class AccountBasic extends Component { return item.name == school; }); if(arr.length > 0){ - this.applyForAddChildOrgForm.setVisible(true) + this.applyForAddChildOrgForm.setVisible(true) }else{ this.props.showNotification("请先选择正确的单位或者学校!"); } } - checkNameLength = (rule, value, callback) => { - if (value && value.length <= MAX_NAME_LENGTH) { - callback(); - return; - } - callback(`请输入真实姓名,最大限制${MAX_NAME_LENGTH}个字符`); - } + // checkNameLength = (rule, value, callback) => { + // if (value && value.length <= MAX_NAME_LENGTH) { + // callback(); + // return; + // } + // callback(`请输入真实姓名,最大限制${MAX_NAME_LENGTH}个字符`); + // } // 切换职称 changeJob=(e)=>{ this.setState({ @@ -410,9 +410,53 @@ class AccountBasic extends Component { }) } } - + //昵称 + handleSubmitName(rule, value, callback){ + if (value) { + let iconRule1 = /[`~!@#$%^&*()\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]/im; +// 判断是否含有emoji表情 + let iconRule2 = /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/ig; +// 如果为true,字符串含有emoji表情 ,false不含 + const iconRule2s =iconRule2.test(value); +// 如果为true,字符串含有特殊符号 ,false不 + const iconRule1s =iconRule1.test(value); + + if (iconRule2s===true|| iconRule1s===true) { + callback('2-20位中英文、数字及下划线'); + } + else if(value.length<2){ + callback('2-20位中英文、数字及下划线'); + }else if(value.length>=21){ + callback('2-20位中英文、数字及下划线'); + } + } + callback(); + } + + // 姓名 + handleSubmitNames(rule, value, callback){ + if (value) { + let iconRule1 = /[`~!@#$%^&*()_\-+=<>?:"{}|,.\/;'\\[\]·~!@#¥%……&*()——\-+={}|《》?:“”【】、;‘’,。、]/im; +// 判断是否含有emoji表情 + let iconRule2 = /[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF][\u200D|\uFE0F]|[\uD83C|\uD83D|\uD83E][\uDC00-\uDFFF]|[0-9|*|#]\uFE0F\u20E3|[0-9|#]\u20E3|[\u203C-\u3299]\uFE0F\u200D|[\u203C-\u3299]\uFE0F|[\u2122-\u2B55]|\u303D|[\A9|\AE]\u3030|\uA9|\uAE|\u3030/ig; +// 如果为true,字符串含有emoji表情 ,false不含 + const iconRule2s =iconRule2.test(value); +// 如果为true,字符串含有特殊符号 ,false不 + const iconRule1s =iconRule1.test(value); + + if (iconRule2s===true|| iconRule1s===true) { + callback('2-10位中英文、数字'); + } + else if(value.length<2){ + callback('2-10位中英文、数字'); + }else if(value.length>=11){ + callback('2-10位中英文、数字'); + } + } + callback(); + } render() { - let{ + let{ nameLength, showRealName, filterSchoolList, @@ -446,10 +490,10 @@ class AccountBasic extends Component { {...propsWithoutForm} addOrgSuccess={this.addOrgSuccess} ></ApplyForAddOrgModal> <ApplyForAddChildOrgModal ref="applyForAddChildOrgModal" schoolName={school} schoolId={school_id} departmentName={departmentsName} - {...propsWithoutForm} wrappedComponentRef={(form) => this.applyForAddChildOrgForm = form} + {...propsWithoutForm} wrappedComponentRef={(form) => this.applyForAddChildOrgForm = form} addChildOrgSuccess={this.addChildOrgSuccess} ></ApplyForAddChildOrgModal> - + <div className="basicForm courseNormalForm"> <style>{` .formItemInline { @@ -525,9 +569,12 @@ class AccountBasic extends Component { {getFieldDecorator('nickname', { rules: [{ // initialValue: this.state.cityDefaultValue, - required: true, + required: true, message: '请输入您的昵称', - }], + }, + { validator: this.handleSubmitName }, + ], + validateTrigger: 'onSubmit', // 设置进行表单验证的时机为onSubmit })( <Input placeholder={`请输入您的昵称,最大限制${MAX_NICKNAME_LENGTH}个字符`} className="exercicenewinputysl" onInput={this.changeNickName} maxLength={MAX_NICKNAME_LENGTH} addonAfter ={ <span className="color-grey-6 font-13">{String(nameLength)}/{MAX_NICKNAME_LENGTH}</span> @@ -552,18 +599,21 @@ class AccountBasic extends Component { { basicInfo.authentication == 'uncertified' ? <React.Fragment>{getFieldDecorator('name', { rules: [{ // initialValue: this.state.cityDefaultValue, - required: true, + required: true, message: `请输入真实姓名,最大限制${MAX_NAME_LENGTH}个字符`, - validator: this.checkNameLength - }], + }, + { validator: this.handleSubmitNames }, + + ], + validateTrigger: 'onSubmit', // 设置进行表单验证的时机为onSubmit })( <Input placeholder={`请输入真实姓名,最大限制${MAX_NAME_LENGTH}个字符`} className="yslgraduainputedit" disabled={!showRealName && this.state.forDisable == true } addonAfter={ <i className={showRealName?"iconfont icon-xianshi font-18 color-blue":"iconfont icon-yincang font-18 color-blue"} onClick={()=>this.showOrHide(showRealName)}></i> }></Input> - )} + )} <span>{ showRealName ? '(显示:平台将显示您的真实姓名)' : '(隐藏:平台将显示你的昵称)' }</span> - </React.Fragment> : + </React.Fragment> : <div className="df" style={{}}> <Tooltip title="已完成实名认证,不能修改"> <span className="mr8" >{showRealName ? this.props.basicInfo.name : getHiddenName(this.props.basicInfo.name)}</span> @@ -573,7 +623,7 @@ class AccountBasic extends Component { <span>{ showRealName ? '(显示:平台将显示您的真实姓名)' : '(隐藏:平台将显示你的昵称)' }</span> </div> } - </Form.Item> + </Form.Item> <Form.Item label="性别" @@ -581,7 +631,7 @@ class AccountBasic extends Component { > {getFieldDecorator('sex', { rules: [{ - required: true, + required: true, message: '请选择性别', }], })( @@ -589,7 +639,7 @@ class AccountBasic extends Component { <ConditionToolTip title="已完成实名认证,不能修改" condition={basicInfo.authentication != 'uncertified'} > <Radio value="0" disabled={basicInfo.authentication != 'uncertified'}>男</Radio> <Radio value="1" disabled={basicInfo.authentication != 'uncertified'}>女</Radio> - </ConditionToolTip> + </ConditionToolTip> </RadioGroup> )} </Form.Item> @@ -602,19 +652,19 @@ class AccountBasic extends Component { {getFieldDecorator('city', { rules: [{ type: 'array', - required: true, + required: true, message: '请先选择所在地', }], })( <City></City> )} </Form.Item> - <AccountBasicEditItem - identity={identity} - getFieldDecorator = {getFieldDecorator} - professionalFlag = {professionalFlag} - basicInfo = {basicInfo} - {...this.props} + <AccountBasicEditItem + identity={identity} + getFieldDecorator = {getFieldDecorator} + professionalFlag = {professionalFlag} + basicInfo = {basicInfo} + {...this.props} {...this.state} {...common} form={this.props.form} @@ -630,7 +680,7 @@ class AccountBasic extends Component { <div className="clearfix mt30 mb30"> */} <Button type="primary" onClick={this.handleSubmit} size="middle" className="saveBtn mr20 mt30">{"保存"}</Button> - {this.props.basicInfo.base_info_completed && + {this.props.basicInfo.base_info_completed && <Button type="" onClick={() => { this.props.history.push('/account/profile') }} size="middle" className="saveBtn cancelBtn mr20 mt30">{"取消"}</Button>} {/* </div> </Form.Item> */}