FormModal.vue 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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-4">
  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 {
  23. engineerDialysisDeviceAdd,
  24. engineerDialysisDeviceEdit,
  25. engineerDialysisDeviceDetail,
  26. } from '@/api/biz/engineer/dialysisDeviceApi';
  27. const emit = defineEmits(['success', 'register']);
  28. const getTitle = computed(() => (!unref(isUpdate) ? '新增设备' : '编辑设备'));
  29. const width = '800px';
  30. const isUpdate = ref(false);
  31. const rowId = ref();
  32. const { createMessage } = useMessage();
  33. const [registerForm, { setFieldsValue, resetFields, validate }] = useForm({
  34. labelWidth: 150,
  35. schemas: dataFormSchema,
  36. showActionButtonGroup: false,
  37. baseColProps: {
  38. span: 12,
  39. },
  40. wrapperCol: {
  41. span: 22,
  42. },
  43. });
  44. const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => {
  45. await resetFields();
  46. setModalProps({ confirmLoading: false });
  47. isUpdate.value = !!data?.isUpdate;
  48. if (unref(isUpdate)) {
  49. const resData = await engineerDialysisDeviceDetail(data.record.id);
  50. rowId.value = resData.id;
  51. resData.cardNo = {
  52. input: resData.cardNo,
  53. dictValue: resData.cardType,
  54. };
  55. await setFieldsValue({
  56. ...resData,
  57. });
  58. } else {
  59. await setFieldsValue({
  60. cardNo: {
  61. input: '',
  62. dictValue: 'pb_card_sfz',
  63. },
  64. });
  65. }
  66. });
  67. // 提交按钮事件
  68. async function handleSubmit() {
  69. try {
  70. const values = await validate();
  71. setModalProps({ confirmLoading: true });
  72. const cardInfo = values.cardNo;
  73. values.cardNo = cardInfo?.input;
  74. values.cardType = cardInfo?.dictValue;
  75. !unref(isUpdate)
  76. ? await engineerDialysisDeviceAdd({ ...values })
  77. : await engineerDialysisDeviceEdit({ ...values, id: rowId.value });
  78. !unref(isUpdate) ? createMessage.success('新增成功!') : createMessage.success('编辑成功!');
  79. closeModal();
  80. emit('success', {
  81. isUpdate: unref(isUpdate),
  82. values: { ...values, id: rowId.value },
  83. });
  84. } finally {
  85. setModalProps({ confirmLoading: false });
  86. }
  87. }
  88. </script>