FormModal.vue 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. <template>
  2. <BasicModal
  3. v-bind="$attrs"
  4. destroyOnClose
  5. @register="registerModal"
  6. :title="getTitle"
  7. :width="width"
  8. @ok="handleSubmit"
  9. :showFooter="true"
  10. >
  11. <div class="!pl-8 !pt-2">
  12. <BasicForm @register="registerForm" layout="vertical" />
  13. </div>
  14. </BasicModal>
  15. </template>
  16. <script lang="ts" setup>
  17. import { ref, computed, unref } from 'vue';
  18. import { BasicModal, useModalInner } from '/@/components/Modal';
  19. import { BasicForm, useForm } from '/@/components/Form';
  20. import { useMessage } from '/@/hooks/web/useMessage';
  21. import { dataFormSchema } from './data';
  22. import { engineerBedAdd, engineerBedEdit, engineerBedDetail } from '@/api/biz/engineer/bedApi';
  23. const emit = defineEmits(['success', 'register']);
  24. const getTitle = computed(() => (!unref(isUpdate) ? '新增床位' : '编辑床位'));
  25. const width = '600px';
  26. const isUpdate = ref(false);
  27. const rowId = ref();
  28. const { createMessage } = useMessage();
  29. const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({
  30. labelWidth: 150,
  31. schemas: dataFormSchema,
  32. showActionButtonGroup: false,
  33. baseColProps: {
  34. span: 24,
  35. },
  36. wrapperCol: {
  37. span: 22,
  38. },
  39. });
  40. const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => {
  41. await resetFields();
  42. setModalProps({ confirmLoading: false });
  43. isUpdate.value = !!data?.isUpdate;
  44. if (unref(isUpdate)) {
  45. const resData = await engineerBedDetail(data.record.id);
  46. rowId.value = resData.id;
  47. resData.cardNo = {
  48. input: resData.cardNo,
  49. dictValue: resData.cardType,
  50. };
  51. await setFieldsValue({
  52. ...resData,
  53. });
  54. } else {
  55. await setFieldsValue({
  56. cardNo: {
  57. input: '',
  58. dictValue: 'pb_card_sfz',
  59. },
  60. });
  61. }
  62. });
  63. // 提交按钮事件
  64. async function handleSubmit() {
  65. try {
  66. const values = await validate();
  67. setModalProps({ confirmLoading: true });
  68. const cardInfo = values.cardNo;
  69. values.cardNo = cardInfo?.input;
  70. values.cardType = cardInfo?.dictValue;
  71. !unref(isUpdate)
  72. ? await engineerBedAdd({ ...values })
  73. : await engineerBedEdit({ ...values, id: rowId.value });
  74. !unref(isUpdate) ? createMessage.success('新增成功!') : createMessage.success('编辑成功!');
  75. closeModal();
  76. emit('success', {
  77. isUpdate: unref(isUpdate),
  78. values: { ...values, id: rowId.value },
  79. });
  80. } finally {
  81. setModalProps({ confirmLoading: false });
  82. }
  83. }
  84. </script>