useForm.vue 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <!--
  2. * @Description: 使用vbenForm的功能进行渲染
  3. -->
  4. <template>
  5. <Modal
  6. title="预览(不支持布局)"
  7. :visible="state.visible"
  8. @ok="handleGetData"
  9. @cancel="handleCancel"
  10. okText="获取数据"
  11. cancelText="关闭"
  12. style="top: 20px"
  13. :destroyOnClose="true"
  14. :width="900"
  15. >
  16. <BasicForm v-bind="attrs" @register="registerForm" />
  17. <JsonModal ref="jsonModal" />
  18. </Modal>
  19. </template>
  20. <script lang="ts" setup>
  21. import { BasicForm, useForm } from '/@/components/Form/index';
  22. import { reactive, ref, computed } from 'vue';
  23. import { IFormConfig } from '../../typings/v-form-component';
  24. import { IAnyObject } from '../../typings/base-type';
  25. import JsonModal from '../VFormDesign/components/JsonModal.vue';
  26. import { IToolbarMethods } from '../../typings/form-type';
  27. import { Modal } from 'ant-design-vue';
  28. const jsonModal = ref<IToolbarMethods | null>(null);
  29. const state = reactive<{
  30. formModel: IAnyObject;
  31. visible: boolean;
  32. formConfig: IFormConfig;
  33. }>({
  34. formModel: {},
  35. formConfig: {} as IFormConfig,
  36. visible: false,
  37. });
  38. const attrs = computed(() => {
  39. return {
  40. ...state.formConfig,
  41. } as Recordable;
  42. });
  43. /**
  44. * 显示Json数据弹框
  45. * @param jsonData
  46. */
  47. const showModal = (jsonData: IFormConfig) => {
  48. state.formConfig = jsonData;
  49. state.visible = true;
  50. };
  51. //表单
  52. const [registerForm, { validate }] = useForm();
  53. const handleCancel = () => {
  54. state.visible = false;
  55. };
  56. /**
  57. * 获取表单数据
  58. * @return {Promise<void>}
  59. */
  60. const handleGetData = async () => {
  61. let data = await validate();
  62. jsonModal.value?.showModal?.(data);
  63. };
  64. defineExpose({ showModal });
  65. </script>