直接上代码
页面模块:
<template>
<a-form ref="formRef" name="dynamic_form_item" :model="dynamicValidateForm" >
<div v-for="(domain, index) in dynamicValidateForm.domains">
<a-form-item v-if="domain.view === 'input'" :label="domain.label" :name="['domains', index, 'value']" :rules="domain.rules">
<a-input :placeholder="'请输入'+domain.label" allowClear v-model:value="domain.value" />
</a-form-item>
<a-form-item v-if="domain.view === 'passwordinput'" :label="domain.label" :name="['domains', index, 'value']" :rules="domain.rules">
<a-input-password :placeholder="'请输入'+domain.label" allowClear v-model:value="domain.value" />
</a-form-item>
</div>
<a-form-item >
<a-button type="primary" html-type="submit" @click="submitForm">Submit</a-button>
<a-button style="margin-left: 10px" @click="resetForm">Reset</a-button>
</a-form-item>
</a-form>
</template>
ts模块
<script lang="ts" setup>
import { reactive, ref } from 'vue';
import type { FormInstance } from 'ant-design-vue';
const formRef = ref<FormInstance>();
const dynamicValidateForm = reactive<any>({
domains: [],
});
dynamicValidateForm.domains = [
{value:'',key:'1',label:'测试', view:'input', rules:[{ required: true,trigger: 'blur',message:'姓名不能为空'}]},
{value:'',key:'2',label:'测试2', view:'input',rules:[]},
{value:'',key:'3',label:'测试', view:'passwordinput', rules:[{ required: true,trigger: 'blur',message:'密码不能为空'}]},
];
const submitForm = () => {
formRef.value
.validate()
.then(() => {
console.log('values', dynamicValidateForm.domains);
})
.catch(error => {
console.log('error', error);
});
};
const resetForm = () => {
formRef.value.resetFields();
};
</script>