使用promise.all()实现多表单验证 以及 循环表单验证

多表单验证
需求:多个标签页中的form表单 点击确定按钮 需要全部验证通过方可提交
使用的element ui表单验证方法

图1

// submitForm() 确定方法
submitForm() {
        let form1 = new Promise((resolve, reject) => {
            this.$refs['form1'].validate(valid => {
                if (valid) {
                    resolve()
                } else {
                	// 返回验证失败的表单名称
                   reject('form1') 
                }
            })
        })
        let form2 = new Promise((resolve, reject) => {
            this.$refs['form2'].validate(valid => {
                if (valid) {
                    resolve()
                } else {
                   reject('form2') 
                }
            })
        })
        let form3 = new Promise((resolve, reject) => {
            this.$refs['form3'].validate(valid => {
                if (valid) {
                    resolve()
                } else {
                   reject('form3') 
                }
            })
        })
        Promise.all([form1, form2, form3]).then((res)=>{
            //验证成功 向提交数据
        }).catch((err) => {
        	// this.activeName 当前标签页name
        	// 如果验证失败的表单 不在当前标签页 会有以下提示
            if (err === 'form1' && this.activeName != 'basic') {
                 this.$message({
                    message: '基本信息未填写完整,请前往查看',
                    type: 'error'
                });
            } else if (err === 'form2' && this.activeName != 'user') {
                 this.$message({
                    message: '人员信息未填写完整,请前往查看',
                    type: 'error'
                });
            } else if (err === 'form3' && this.activeName != 'stage') {
                 this.$message({
                    message: '阶段信息未填写完整,请前往查看',
                    type: 'error'
                });
            }
        })
    },

循环表单验证
如下图所示 动态添加form-item组

图2

// 举个简单的例子
<el-form ref="form3" :model="form3" label-width="120px">
	<template v-for="(item,index) in form3.schedulingList">
		<el-form-item label="人员成本(元)" :prop="`schedulingList.${index}.cost`" :rules="rules.userListCost" >
           	<el-input v-model="item.cost" placeholder="请输入人员成本" :disabled="viewFlag" />
        </el-form-item>
		<el-form-item label="阶段" :prop="`schedulingList.${index}.stage`" :rules="rules.schedulingListStage">
	        <el-input v-model="item.stage" placeholder="请输入阶段" :disabled="viewFlag" />
	    </el-form-item>
    <template>
</el-form>
form3:{
	schedulingList: [
		{
			cost: '',
			stage: ''
		}
	]
},
rules: {
	// 人员成本校验
	userListCost: [
       { required: true, message: "人员成本不能为空", trigger: "blur" }
  	],	
	// 阶段信息校验
    schedulingListStage: [
       { required: true, message: "阶段信息不能为空", trigger: "blur" }
    ]
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值