element el-form 动态表单及自定义校验

动态表单的增加、删除和自定义校验
在这里插入图片描述
在这里插入图片描述

<el-form
     :model="ruleForm"
     :rules="rules"
     ref="ruleForm"
     class="base-info-box--form"
   >
     <el-row>
       <el-col :span="12">
         <el-form-item
           label="名称:"
           prop="name"
           label-width="80px"
         >
           <el-input
             v-model.trim="ruleForm.name"
             placeholder="请输入名称"
             class="hn_search_box"
             style="width: 100%"
             :maxlength="32"
           />
         </el-form-item>
       </el-col>
       <el-col :span="12">
         <el-form-item
           label="状态:"
           prop="state"
           label-width="140px"
           required
         >
           <el-select
             v-model="ruleForm.state"
             size="small"
             class="hn_drop_select"
             style="width: 300px"
             placeholder="请选择状态"
           >
             <el-option
               v-for="item in stateList"
               :key="item.code"
               :label="item.descn"
               :value="item.code"
             >
             </el-option>
           </el-select>
         </el-form-item>
       </el-col>
     </el-row>
    
     <div v-for="(item, index) in ruleForm.subList" style="position: relative;">
       <el-row style="display: flex;align-items: center;">
         <el-col :span="18" style="display: flex;align-items: center;">
             <el-form-item label="时间范围" label-width="100px" :key="`时间1${index}`" :prop="'subList.' + index + '.startTime'" :rules=" {validator: checkStartTime, trigger: 'change' }">
               <el-date-picker
                 v-model="item.startTime"
                 type="date"
               >
               </el-date-picker>
             </el-form-item><p style="margin: 0 10px">  至  </p>
             <el-form-item label="" :key="`时间2${index}`" :prop="'subList.' + index + '.endTime'" :rules="{ validator: checkEndTime, trigger: 'change' }">
               <el-date-picker
                 v-model="item.endTime"
                 type="date"
                 >
               </el-date-picker>
             </el-form-item>
           </el-col>
         <el-col :span="4">
           <i class="el-icon-circle-plus-outline" style="font-size:28px;cursor:pointer;color: #2272fb" @click="addPlus"></i>
           <i @click.prevent="removePlus(item)" class="el-icon-remove-outline" style="font-size:28px;cursor:pointer;color:#F56C6C"></i>
         </el-col>
       </el-row>
     </div>
     <el-row style="text-align: center">
       <el-button class="hn_bg_btn" type="" @click="submitBaseForm('ruleForm')">保存</el-button>
     </el-row>
   </el-form>

data中字段声明

ruleForm: {  // 基础信息表单
   name: "",
    state: 1,
    subList: [
      {
        startTime: "",
        endTime: "",
      },
    ],
  }

// 基础信息/表单校验
    rules: {
      name: [{ required: true, message: "请输入名称", trigger: "blur" }],
      state: [{ required: true, message: "请选择状态", trigger: "change" }],
    },

methods

 // 保存基础信息
    submitBaseForm(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
        	console.log('校验通过')
         }else{
         	console.log('校验不通过')
         }
      });
    },

自定义校验

// 校验开始时间
    checkStartTime(rule, value, callback) {
      let index = Number((rule.field).split('.')[1])
      const errors = []
      if (!value) {
        errors.push(new Error('请选择开始时间'))
      }else{
        let endTime = this.ruleForm.subList[index].endTime
        if(endTime && endTime.getTime() <= value.getTime()) {
          errors.push(new Error('开始时间不可大于结束时间'))
        }
      }
      
      callback(errors)
    },
    // 校验结束时间
    checkEndTime(rule, value, callback) {
      let index = Number((rule.field).split('.')[1])
      const errors = []
      if (!value) {
        errors.push(new Error('请选择结束时间'))
      }else{
        let startTime = this.ruleForm.subList[index].startTime
        if(startTime && startTime.getTime() >= value.getTime()) {
          errors.push(new Error('结束时间不可小于开始时间'))
        }
      }
      
      callback(errors)
    },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值