收藏文章 楼主

element-ui的表单验证如何清除校验提示语(账号密码和手机验证码两种登录方式)

版块:AIGC   类型:普通   作者:AI绘图   查看:81   回复:0   获赞:0   时间:2023-11-01 03:31:27

今天做vue后台管理项目的时候,在表单验证环节出了一个bug。这个项目原来是只有一种登录方式的,输入账号和密码即可登录。后来老板又要求增加一个用手机号码获取验证码登录。
做好了之后就出现了一个问题,当不输入手机号的时候,下方会有警示,提示你没有输入手机号

在这里插入图片描述
然后这时点击下方按钮,切换到账号密码登录时,这个警示仍然存在。
如图在这里插入图片描述
直接说解决方法

<!-- 账号密码登录 -->
<el-form class="login-form" ref="loginForm" :model="loginForm" :rules="loginRules">

			<el-form-item class="username-item" prop="username">
				<el-input placeholder="账号" v-model="loginForm.username">
					<img class="input-icon icon-pdl" slot="prefix" src="@/assets/login/yh.png" />
				</el-input>
			</el-form-item>

			<el-form-item class="password-item" prop="password">
				<el-input placeholder="密码" :type="eyes_status ? 'text' : 'password'" v-model="loginForm.password" @keyup.enter.native="handleLogin">
					<img class="input-icon icon-pdl" slot="prefix" src="@/assets/login/mm.png" />
					<img 
						class="input-icon xs icon-pdr" 
						slot="suffix" 
						:src="eyes_url"
						@click="changeEyes"
						@mouseenter="changeEyesStatus('enter')"
						@mouseleave="changeEyesStatus('leave')"
					/>
				</el-input>
			</el-form-item>

			<div class="forget-password">
				<!-- <el-checkbox v-model="checked">记住密码</el-checkbox> -->
				<router-link to="/reset-password">忘记密码?</router-link>
			</div>

			<el-form-item>
				<el-button @click.native.prevent="handleLogin" :loading="loading" class="handle-login">登 录</el-button>
			</el-form-item>

</el-form>
<!--手机验证码登录-->
<el-form class="login-form" ref="loginForm" :model="loginForm" :rules="loginRules">
			
			<el-form-item class="mobile-item" prop="mobile">
				<el-input placeholder="请输入手机号" v-model="loginForm.mobile">
					<img class="input-icon icon-pdl" slot="prefix" src="@/assets/login/yh.png" />
				</el-input>
			</el-form-item>

			<div class="codeStyle">
				<el-form-item class="verifyCode-item verifyStyle" prop="verifyCode">
					<el-input placeholder="请输入验证码" v-model="loginForm.verifyCode" @keyup.enter.native="handleLogin" maxlength="6">
				</el-input>
				</el-form-item>
			</div>	

			<div class="btnStyle">
				<el-form-item class="verifyCode-item buttonStyle">
					<el-button type="primary" @click="getCode">{{computeTime>0 ? `(${computeTime}s)已发送` : '获取验证码'}} </el-button>
				</el-form-item>
			</div>

		<!-- {{computeTime>0 ? `(${computeTime}s)已发送` : '获取验证码'}} -->
			<el-form-item>
				<el-button @click.native.prevent="handleLogin" :loading="loading" class="handle-login">登 录</el-button>
			</el-form-item>
</el-form>

不知道大家注意到没有,这里两种登录方式用到的是同一个loginRules,而且我在data里面写的也是

loginForm: {
			username: "",
			password: "",
			mobile:"",
			verifyCode:"",
			loginType:'mobile',
			loginWay:false,
		},
		loginRules: {
			username: [
			{ required: true, trigger: "blur", validator: validateUsername }
			],
			password: [
			{ required: true, trigger: "blur", validator: validatePassword }
			],
			// 手机号、验证码为空时登录警示用户
			mobile: [
			{ required: true, trigger: "blur", validator: shoujihao }
			],
			verifyCode: [
			{ required: true, trigger: "blur", validator: yanzhengma }
			]
		},

把两种登陆规则写在一起了

改完之后的代码:

把手机验证码登录的验证规则单独写出来

<el-form class="login-form" ref="codeForm" :model="codeForm" :rules="codeRules">

在data里面return

return {
        checked: false,loginWay:false,
		loginForm: {
			username: "",
			password: "",
			//account代表的是用账号密码登录
			loginType:'account',
			
		},
		codeForm:{
			mobile:"15872609883",
			verifyCode:"",
			//mobile代表的是用手机号验证码登录
			loginType:'mobile',
		},
		loginRules: {
			username: [
			{ required: true, trigger: "blur", validator: validateUsername }
			],
			password: [
			{ required: true, trigger: "blur", validator: validatePassword }
			],
			
		},
		// 手机号、验证码登录规则
		codeRules:{
			mobile: [
			{ required: true, trigger: "blur", validator: shoujihao }
			],
			verifyCode: [
			{ required: true, trigger: "blur", validator: yanzhengma }
			]
		},
}

然后在methods里面写上清除验证的方法

clearValidate(formName) {
      this.$refs[formName].clearValidate();
  },






	//手机验证码登录界面和账号密码登录界面的相互切换
	changeWay(formName){
		this.loginWay = !this.loginWay;
		if(!this.loginWay){
			this.clearValidate('codeForm')
		}else{
			this.clearValidate('loginForm')
		}
		
		console.log(this.loginWay)
	},

在这里插入图片描述
在这里插入图片描述
然后再进行切换时就不会有这个bug了。
虽然问题很简单,但是我上网上查证的时候遇到这个问题的人也挺多的,我这里记录我的解决方法,虽然不一定是最好的,但是希望可以帮到同样遇到这个问题的人。

 
回复列表
默认   热门   正序   倒序

回复:element-ui的表单验证如何清除校验提示语(账号密码和手机验证码两种登录方式)

Powered by 7.12.10

©2015 - 2025 90Link

90link品牌推广 网站地图

您的IP:10.1.228.218,2025-12-21 14:47:50,Processed in 0.07402 second(s).

豫ICP备2023005541号

头像

用户名:

粉丝数:

签名:

资料 关注 好友 消息
免责声明
  • 1、本网站所刊载的文章,不代表本网站赞同其观点和对其真实性负责,仅供参考和借鉴。
  • 2、文章中的图片和文字版权归原作者所有,如有侵权请及时联系我们,我们将尽快处理。
  • 3、文章中提到的任何产品或服务,本网站不对其性能、质量、适用性、可靠性、安全性、法律合规性等方面做出任何保证或承诺,仅供读者参考,使用者自行承担风险。
  • 4、本网站不承担任何因使用本站提供的信息、服务或产品而产生的直接、间接、附带或衍生的损失或责任,使用者应自行承担一切风险。

侵权删除请致信 E-Mail:3454251265@qq.com