elementUi表单验证之数组类型自定义验证:限制时间范围以及传递当前行的index的方法
界面:
要求:结束时间不能小于开始时间。
第二行的开始时间需大于第一行的结束时间,以此类推。

注意校验数组里的每一项的写法: :prop=" 'schedulTimeList['+index+'].startTime' "
在rules里面进行了传参,主要是为了拿到当前行的index
通过时间选择器的picker-options, 限制: minTime: index-1>=0 && form.schedulTimeList[index-1].startTime,达到第二行的开始时间大于第一行的结束时间的目的
<el-form-item
label="开始时间:"
:prop="'schedulTimeList['+index+'].startTime'"
:rules="{required: true, validator: validateTime, message: '请选择开始时间!', trigger: 'blur', index: index, timeType: 'start'}"
>
<el-time-select
v-model="item.startTime"
placeholder="开始时间"
:disabled="readonly"
:picker-options="{
start: '08:00',
step: '00:15',
end: '22:00',
minTime: index-1>=0 && form.schedulTimeList[index-1].startTime
}"
/>
</el-form-item>
<el-form-item
label="结束时间:"
:prop="'schedulTimeList['+index+'].endTime'"
:rules="{required: true, validator: validateTime, message: '请选择结束时间!', trigger: 'blur', index: index, timeType: 'end'}"
>
<el-time-select
v-model="item.endTime"
placeholder="结束时间"
:disabled="readonly"
:picker-options="{
start: '08:00',
step: '00:15',
end: '22:00',
minTime: item.startTime
}"
/>
</el-form-item>
js:
validateTime: (rule, value, callback) => { if (!value) { callback(new Error('请选择时间!')) return false } else { const index = rule.index const start = this.form.schedulTimeList[index].startTime const end = this.form.schedulTimeList[index].endTime if (start && end) { // console.log('start,end', start, end) if (start.replace(':', '') < end.replace(':', '')) { callback() } else { rule.message = rule.timeType === 'start' ? '开始时间必须早于结束时间!' : '结束时间必须晚于开始时间!' callback(new Error()) } } // 比较时间的方法二 // if (start && end) { // const startMin = parseInt(start.split(':')[0]) * 60 + parseInt(start.split(':')[1]) // const endMin = parseInt(end.split(':')[0]) * 60 + parseInt(end.split(':')[1]) // console.log(startMin, endMin, '开始和结束') // } } }
(*╹▽╹*)几何柒期的blog

浙公网安备 33010602011771号