index.vue 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. <!--
  2. * @Description: 渲染组件,无法使用Vben的组件
  3. -->
  4. <template>
  5. <Modal
  6. title="预览(支持布局)"
  7. :open="visible"
  8. @ok="handleGetData"
  9. @cancel="handleCancel"
  10. okText="获取数据"
  11. cancelText="关闭"
  12. style="top: 20px"
  13. :destroyOnClose="true"
  14. :width="900"
  15. >
  16. <VFormCreate
  17. :form-config="formConfig as any"
  18. v-model:fApi="fApi"
  19. v-model:formModel="formModel"
  20. @submit="onSubmit"
  21. >
  22. <template #slotName="{ formModel, field }">
  23. <a-input v-model:value="formModel[field]" placeholder="我是插槽传递的输入框" />
  24. </template>
  25. </VFormCreate>
  26. <JsonModal ref="jsonModal" />
  27. </Modal>
  28. </template>
  29. <script lang="ts">
  30. import { defineComponent, reactive, ref, toRefs } from 'vue';
  31. import { IFormConfig } from '../../typings/v-form-component';
  32. import { IAnyObject } from '../../typings/base-type';
  33. import VFormCreate from '../VFormCreate/index.vue';
  34. import { formatRules } from '../../utils';
  35. import { IVFormMethods } from '../../hooks/useVFormMethods';
  36. import JsonModal from '../VFormDesign/components/JsonModal.vue';
  37. import { IToolbarMethods } from '../../typings/form-type';
  38. import { Modal } from 'ant-design-vue';
  39. export default defineComponent({
  40. name: 'VFormPreview',
  41. components: {
  42. JsonModal,
  43. VFormCreate,
  44. Modal,
  45. },
  46. setup() {
  47. const jsonModal = ref<IToolbarMethods | null>(null);
  48. const state = reactive<{
  49. formModel: IAnyObject;
  50. visible: boolean;
  51. formConfig: IFormConfig;
  52. fApi: IVFormMethods;
  53. }>({
  54. formModel: {},
  55. formConfig: {} as IFormConfig,
  56. visible: false,
  57. fApi: {} as IVFormMethods,
  58. });
  59. /**
  60. * 显示Json数据弹框
  61. * @param jsonData
  62. */
  63. const showModal = (jsonData: IFormConfig) => {
  64. // console.log('showModal-', jsonData);
  65. formatRules(jsonData.schemas);
  66. state.formConfig = jsonData as any;
  67. state.visible = true;
  68. };
  69. /**
  70. * 获取表单数据
  71. * @return {Promise<void>}
  72. */
  73. const handleCancel = () => {
  74. state.visible = false;
  75. state.formModel = {};
  76. };
  77. const handleGetData = async () => {
  78. const _data = await state.fApi.submit?.();
  79. jsonModal.value?.showModal?.(_data);
  80. };
  81. const onSubmit = (_data: IAnyObject) => {
  82. //
  83. };
  84. const onCancel = () => {
  85. state.formModel = {};
  86. };
  87. return {
  88. handleGetData,
  89. handleCancel,
  90. ...toRefs(state),
  91. showModal,
  92. jsonModal,
  93. onSubmit,
  94. onCancel,
  95. };
  96. },
  97. });
  98. </script>