basic-model-form.vue 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. <script lang="ts">
  2. import { computed, defineComponent, onMounted, ref, unref } from 'vue';
  3. import { useModal } from '../Modal/hooks/useModal';
  4. import { useForm } from '../Form/hooks/useForm';
  5. import type { modalProps } from '../Modal/types';
  6. import type { FormProps } from '../Form/types/form';
  7. import type { ModalFromMethods } from './type';
  8. export default defineComponent({
  9. name: 'ModalForm',
  10. emits: ['registerModalForm', 'submitForm'],
  11. setup(props, { emit }) {
  12. const modelPropsRef = ref<Partial<modalProps>>();
  13. const formPropsRef = ref<Partial<FormProps>>();
  14. console.log(props, 'registerModalForm');
  15. const formComputRef = computed(() => {
  16. return {
  17. labelWidth: 180,
  18. layout: 'horizontal',
  19. gridProps: {
  20. cols: '1 xl:4 s:1 l:3',
  21. itemResponsive: true
  22. },
  23. collapsedRows: 1,
  24. showActionButtonGroup: false,
  25. ...unref(formPropsRef)
  26. };
  27. });
  28. const modalComputRef = computed(() => {
  29. return {
  30. ...unref(modelPropsRef)
  31. };
  32. });
  33. const [registerModal, { openModal, closeModal, setSubLoading, setModalProps, setModalLoading }] = useModal(
  34. unref(modalComputRef)
  35. );
  36. const [
  37. registerForm,
  38. {
  39. validate,
  40. restoreValidation,
  41. setFieldsValue,
  42. resetFields,
  43. setLoading,
  44. setSchema,
  45. submit,
  46. clearValidate,
  47. getFieldsValue,
  48. setFormProps,
  49. updateSchema
  50. }
  51. ] = useForm(formComputRef.value);
  52. const methods: ModalFromMethods = {
  53. setModalProps,
  54. openModal,
  55. closeModal,
  56. setFieldsValue,
  57. resetFields,
  58. setFormProps,
  59. setLoading,
  60. setSchema,
  61. submit,
  62. validate,
  63. clearValidate,
  64. getFieldsValue,
  65. restoreValidation,
  66. setSubLoading,
  67. updateSchema,
  68. setModalLoading
  69. };
  70. onMounted(() => {
  71. emit('registerModalForm', methods);
  72. });
  73. async function handleSubmitForm() {
  74. setSubLoading(false);
  75. await validate();
  76. setSubLoading(true);
  77. emit('submitForm');
  78. }
  79. return {
  80. registerModal,
  81. registerForm,
  82. handleSubmitForm
  83. };
  84. }
  85. });
  86. </script>
  87. <template>
  88. <BasicModal @register-modal="registerModal" @ok="handleSubmitForm">
  89. <BasicForm @register-form="registerForm"></BasicForm>
  90. </BasicModal>
  91. </template>
  92. <style scoped></style>