58 lines
1.5 KiB
Vue
Raw Normal View History

<template>
<div class="">
<v-form-render ref="vFormRef" :form-json="formJson" :form-data="formData" />
</div>
</template>
2023-04-19 21:04:42 +08:00
<!-- 动态表单渲染 -->
<script setup name="Render" lang="ts">
interface Props {
formJson: string | object;
formData: string | object;
isView: boolean;
}
2023-04-19 21:04:42 +08:00
const props = withDefaults(defineProps<Props>(), {
formJson: '',
formData: '',
isView: false
});
2023-04-19 21:04:42 +08:00
const vFormRef = ref();
2023-04-19 21:04:42 +08:00
// 获取表单数据-异步
const getFormData = () => {
return vFormRef.value.getFormData();
};
2023-04-19 21:04:42 +08:00
/**
* 设置表单内容
* @param {表单配置} formConf
* formConfig{ formTemplate表单模板formData表单数据hiddenField需要隐藏的字段字符串集合disabledField需要禁用的自读字符串集合}
*/
const initForm = (formConf: any) => {
const { formTemplate, formData, hiddenField, disabledField } = toRaw(formConf);
2023-04-19 21:04:42 +08:00
if (formTemplate) {
vFormRef.value.setFormJson(formTemplate);
2023-04-19 21:04:42 +08:00
if (formData) {
vFormRef.value.setFormData(formData);
2023-04-19 21:04:42 +08:00
}
if (disabledField && disabledField.length > 0) {
setTimeout(() => {
vFormRef.value.disableWidgets(disabledField);
}, 200);
2023-04-19 21:04:42 +08:00
}
if (hiddenField && hiddenField.length > 0) {
setTimeout(() => {
vFormRef.value.hideWidgets(hiddenField);
}, 200);
2023-04-19 21:04:42 +08:00
}
if (props.isView) {
setTimeout(() => {
vFormRef.value.disableForm();
}, 100);
2023-04-19 21:04:42 +08:00
}
}
};
defineExpose({ getFormData, initForm });
2023-04-19 21:04:42 +08:00
</script>