
javascript
<template v-for="(itemForm, idx) in cntrAndOogInfos" :key="idx">
<el-form
v-show="idx === activeIndex"
:ref="(el) => bindRef(el, idx)"
:model="itemForm.oogBaseInfo"
:rules="oogFormRules"
label-width="800px"
label-position="top"
class="form-container"
:disabled="isDisabled"
>
<el-form-item prop="overallLength">
<el-input v-model="itemForm.oogBaseInfo.overallLength">
<template #append>CM</template>
</el-input>
</el-form-item>
</el-form>
</template>
<script lang="ts" setup>
const formRefs = ref<any[]>([]);
const bindRef = (el, index) => {
if (el) {
formRefs.value[index] = el; // 元素存在时存入
} else {
delete formRefs.value[index]; // 元素销毁时删除(关键)
}
}
</script>
javascript
// 批量校验所有表单
const validateAllForms = async() => {
if (!formRefs.value || !formRefs.value.length) {
return false;
}
let allValid = true;
// 遍历所有表单实例
for (const form of formRefs.value) {
try {
await form.validate(); // 逐个校验
} catch (error) {
allValid = false; // 只要有一个失败,整体失败
// 可选:定位到第一个校验失败的表单
activeIndex.value = formRefs.value.indexOf(form);
return false
}
}
return allValid;
}