render.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. <!-- 动态表单渲染 -->
  2. <script setup name="Render">
  3. const props = defineProps({
  4. formJson: {
  5. type: [String, Object],
  6. default: ""
  7. },
  8. formData: {
  9. type: [String, Object],
  10. default: ""
  11. },
  12. isView: {
  13. type: Boolean,
  14. default: false
  15. }
  16. })
  17. const vFormRef = ref(null)
  18. // 获取表单数据-异步
  19. const getFormData = () => {
  20. return vFormRef.value.getFormData()
  21. }
  22. /**
  23. * 设置表单内容
  24. * @param {表单配置} formConf
  25. * formConfig:{ formTemplate:表单模板,formData:表单数据,hiddenField:需要隐藏的字段字符串集合,disabledField:需要禁用的自读字符串集合}
  26. */
  27. const initForm = (formConf) => {
  28. const { formTemplate, formData, hiddenField, disabledField } = toRaw(formConf)
  29. if (formTemplate) {
  30. vFormRef.value.setFormJson(formTemplate)
  31. if (formData) {
  32. vFormRef.value.setFormData(formData)
  33. }
  34. if (disabledField && disabledField.length > 0) {
  35. setTimeout(() => {
  36. vFormRef.value.disableWidgets(disabledField)
  37. }, 200)
  38. }
  39. if (hiddenField && hiddenField.length > 0) {
  40. setTimeout(() => {
  41. vFormRef.value.hideWidgets(hiddenField)
  42. }, 200)
  43. }
  44. if (props.isView) {
  45. console.log(props.isView)
  46. setTimeout(() => {
  47. vFormRef.value.disableForm()
  48. }, 100)
  49. }
  50. }
  51. }
  52. defineExpose({ getFormData, initForm })
  53. </script>
  54. <template>
  55. <div class="">
  56. <v-form-render ref="vFormRef" :form-json="formJson" :form-data="formData" />
  57. </div>
  58. </template>