1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- <!--
- * @Description: 使用vbenForm的功能进行渲染
- -->
- <template>
- <Modal
- title="预览(不支持布局)"
- :visible="state.visible"
- @ok="handleGetData"
- @cancel="handleCancel"
- okText="获取数据"
- cancelText="关闭"
- style="top: 20px"
- :destroyOnClose="true"
- :width="900"
- >
- <BasicForm v-bind="attrs" @register="registerForm" />
- <JsonModal ref="jsonModal" />
- </Modal>
- </template>
- <script lang="ts" setup>
- import { BasicForm, useForm } from '/@/components/Form/index';
- import { reactive, ref, computed } from 'vue';
- import { IFormConfig } from '../../typings/v-form-component';
- import { IAnyObject } from '../../typings/base-type';
- import JsonModal from '../VFormDesign/components/JsonModal.vue';
- import { IToolbarMethods } from '../../typings/form-type';
- import { Modal } from 'ant-design-vue';
- const jsonModal = ref<IToolbarMethods | null>(null);
- const state = reactive<{
- formModel: IAnyObject;
- visible: boolean;
- formConfig: IFormConfig;
- }>({
- formModel: {},
- formConfig: {} as IFormConfig,
- visible: false,
- });
- const attrs = computed(() => {
- return {
- ...state.formConfig,
- } as Recordable;
- });
- /**
- * 显示Json数据弹框
- * @param jsonData
- */
- const showModal = (jsonData: IFormConfig) => {
- state.formConfig = jsonData;
- state.visible = true;
- };
- //表单
- const [registerForm, { validate }] = useForm();
- const handleCancel = () => {
- state.visible = false;
- };
- /**
- * 获取表单数据
- * @return {Promise<void>}
- */
- const handleGetData = async () => {
- let data = await validate();
- jsonModal.value?.showModal?.(data);
- };
- defineExpose({ showModal });
- </script>
|