element中form数组表单验证

98 阅读1分钟
<el-form ref="form" :model="form" label-width="85px" :loading="formLoading" :rules="rules">
			<el-row>
				<el-col :span="24">
					<el-form-item label="请假类型" prop="leave_type">
                        <el-select v-model="form.leave_type" clearable :disabled="pageType==='watch'" placeholder="请选择">
                            <el-option
                                v-for="dict in leaveTask"
                                :key="dict.dictValue"
                                :label="dict.dictLabel"
                                :value="dict.dictValue">
                            </el-option>
                        </el-select>
					</el-form-item>
				</el-col>
                <div v-for="(item,index) in form.mpLeaveSons" :key="index">
                    <el-col :span="10">
                        <el-form-item label="开始时间" :prop="`mpLeaveSons[${index}].start_time`" :rules="rules.start_time">
                            <el-date-picker
                                :disabled="pageType==='watch'"
                                v-model="item.start_time"
                                type="date"
                                :picker-options="pickerOptions"
                                value-format="yyyy-MM-dd"
                                placeholder="选择日期"
                                clearable
                                @change="(e)=>dateSelectStart(e,item,index)"
                                >
                            </el-date-picker>
                        </el-form-item>
                    </el-col>
                    <el-col :span="12">
                        <el-form-item label="上午/下午" :prop="`mpLeaveSons[${index}].start_type`" :rules="rules.start_type">
                            <el-select v-model="item.start_type" clearable :disabled="pageType==='watch'" placeholder="请选择"  @change="selectTypeStart">
                                <el-option
                                    v-for="item in sky"
                                    :key="item.value"
                                    :label="item.label"
                                    :value="item.value">
                                </el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :span="10">
                        <el-form-item label="结束时间" :prop="`mpLeaveSons[${index}].end_time`" :rules="rules.end_time">
                            <el-date-picker
                                :disabled="pageType==='watch'"
                                v-model="item.end_time"
                                value-format="yyyy-MM-dd"
                                type="date"
                                :picker-options="pickerOptions"
                                placeholder="选择日期"
                                clearable
                                @change="(e)=>dateSelectEnd(e,item,index)"
                                >
                                </el-date-picker>
                        </el-form-item>
                    </el-col>
                    <el-col :span="12">
                        <el-form-item label="上午/下午" :prop="`mpLeaveSons[${index}].end_type`" :rules="rules.end_type">
                            <el-select v-model="item.end_type" clearable :disabled="pageType==='watch'" placeholder="请选择"  @change="selectTypeEnd">
                                <el-option
                                    v-for="item in sky"
                                    :key="item.value"
                                    :label="item.label"
                                    :value="item.value">
                                </el-option>
                            </el-select>
                        </el-form-item>
                    </el-col>
                    <el-col :span="24">
                        <el-form-item label="请假时长" prop="duration">
                            <el-input
                                style="width: 220px;"
                                :disabled="pageType==='watch'"
                                v-model="item.duration"
                                clearable
                            >
                                <template slot="append">天</template>
                            </el-input>
                        </el-form-item>
                    </el-col>
                </div>
                <el-col :span="24" v-if="pageType!=='watch'">
                    <el-form-item label="" prop="project_name">
                        <el-button style="width: 100px;" :disabled="pageType==='watch'" type="primary" icon="el-icon-plus" @click="addLeave"></el-button>
                    </el-form-item>
                </el-col>
                <el-col :span="10">
                    <el-form-item label="请假总时长" prop="duration">
                        <el-input
                            :disabled="pageType==='watch'"
                            v-model="form.duration"
                            clearable
                        >
                            <template slot="append">天</template>
                        </el-input>
                    </el-form-item>
				</el-col>
                <el-col :span="24">
                    <el-form-item label="原因" prop="reason">
                        <el-input
                            type="textarea"
                            :disabled="pageType==='watch'"
                            :autosize="{ minRows: 2 }"
                            v-model="form.reason"
                            placeholder="请输入"
                        />
                    </el-form-item>
				</el-col>
                <el-col :span="24">
                    <el-form-item label="备注" prop="notes">
                        <el-input
                            type="textarea"
                            :disabled="pageType==='watch'"
                            :autosize="{ minRows: 4 }"
                            v-model="form.notes"
                            placeholder="请输入"
                        />
                    </el-form-item>
				</el-col>
			</el-row>
		</el-form>
            
            // 表单参数   需要验证的数组需要在form内才可以
		form: {
                    mpLeaveSons: [
                        {
                            start_time:'',
                            end_time:'',
                            start_type:'',
                            end_type:'',
                            duration:''
                        }
                    ]
                },
        rules: {
            leave_type: [
                { required: true, message: '请选择请假类型', trigger: 'blur' },
            ],
            start_time:[
                { required: true, message: '请选择开始时间', trigger: 'blur' },
            ],
            end_time:[
                { required: true, message: '请选择结束时间', trigger: 'blur' },
            ],
            start_type:[
                { required: true, message: '请选择上午/下午时间段', trigger: 'blur' },
            ],
            end_type:[
                { required: true, message: '请选择上午/下午时间段', trigger: 'blur' },
            ],
        },

然后就可以在方法内,this.$refs.form.validate((valid) 和if (valid)