pc_vue_admin/src/components/DynamicForm/index.vue

47 lines
992 B
Vue
Raw Normal View History

2024-07-24 02:48:33 +00:00
<template>
2024-07-26 13:11:03 +00:00
<a-form :model="model" :rules="rules" layout="vertical" ref="formRef">
2024-07-24 02:48:33 +00:00
<a-row :gutter="16">
2024-07-27 05:28:17 +00:00
<a-col :span="item.span || 6" v-for="(item, index) in formItems" :key="index">
2024-07-26 13:11:03 +00:00
<a-form-item :label="item.label" :name="item.name" :rules="item.rules">
2024-07-28 06:11:55 +00:00
<component style="width: 100%" :is="item.type" v-model:value="model[item.name]" :disabled="allDisabled" v-bind="item.attrs" />
2024-07-24 02:48:33 +00:00
</a-form-item>
</a-col>
</a-row>
</a-form>
</template>
<script setup>
2024-07-26 13:11:03 +00:00
import { ref, watch } from 'vue'
2024-07-24 02:48:33 +00:00
const props = defineProps({
2024-07-26 13:11:03 +00:00
formItems: {
2024-07-24 02:48:33 +00:00
type: Array,
required: true
},
2024-07-26 13:11:03 +00:00
model: {
2024-07-24 02:48:33 +00:00
type: Object,
required: true
},
2024-07-26 13:11:03 +00:00
rules: {
2024-07-24 02:48:33 +00:00
type: Object,
default: () => ({})
2024-07-26 13:11:03 +00:00
},
2024-07-27 05:28:17 +00:00
allDisabled: {
type: Boolean,
default: false
2024-07-24 02:48:33 +00:00
}
})
2024-07-26 13:11:03 +00:00
const formRef = ref()
2024-07-24 02:48:33 +00:00
2024-07-26 13:11:03 +00:00
// Expose validate method
defineExpose({
2024-07-27 05:28:17 +00:00
validate: () => formRef.value.validate(),
resetFields: () => formRef.value.resetFields()
2024-07-26 13:11:03 +00:00
})
2024-07-24 02:48:33 +00:00
</script>
2024-07-26 13:11:03 +00:00
<style scoped>
/* Add your styles here */
</style>