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