FormModal.vue 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  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. <BasicForm @register="registerForm" layout="vertical" class="!px-6 !pt-4" />
  12. </BasicModal>
  13. </template>
  14. <script lang="ts" setup>
  15. import { ref, unref } from 'vue';
  16. import { BasicModal, useModalInner } from '/@/components/Modal';
  17. import { BasicForm, useForm } from '/@/components/Form';
  18. import { useMessage } from '/@/hooks/web/useMessage';
  19. import { BasicWeekEnum, dataFormSchema } from './data';
  20. import {
  21. bedScheduledPersonAdd,
  22. bedScheduledPersonEdit,
  23. bedScheduledPersonDetail,
  24. } from '/@/api/biz/bed/scheduledPersonApi';
  25. import { getWorkingDay } from '/@/api/biz/management/working';
  26. import dayjs from 'dayjs';
  27. const emit = defineEmits(['success', 'register']);
  28. const getTitle = ref();
  29. const width = '45%';
  30. const isUpdate = ref(false);
  31. const rowId = ref();
  32. const specialNeedWeekOption = ref([]);
  33. const { createMessage } = useMessage();
  34. const [registerForm, { setFieldsValue, resetFields, validate, updateSchema }] = useForm({
  35. labelWidth: 100,
  36. schemas: dataFormSchema,
  37. showActionButtonGroup: false,
  38. baseColProps: {
  39. span: 12,
  40. },
  41. });
  42. const [registerModal, { setModalProps, closeModal }] = useModalInner(async data => {
  43. await resetFields();
  44. setModalProps({ confirmLoading: false });
  45. isUpdate.value = !!data?.isUpdate;
  46. getTitle.value = `${isUpdate.value ? '编辑排班' : '新建排班'} ( ${data.record.patientName} | ${
  47. data.record.gender
  48. } | ${data.record.age}岁 )`;
  49. if (unref(isUpdate)) {
  50. const resData = await bedScheduledPersonDetail(data.record.id);
  51. console.log('🚀 ~ file: FormModal.vue:54 ~ resData:', resData);
  52. rowId.value = resData.patientBasicId;
  53. const workingDay = await getWorkingDay();
  54. let specialNeedWeek = [];
  55. // const specialNeedWeekOption = [];
  56. for (const i in workingDay) {
  57. if (workingDay[i]) {
  58. specialNeedWeek = specialNeedWeek.concat(i);
  59. }
  60. specialNeedWeekOption.value.push({
  61. label: BasicWeekEnum[i],
  62. value: i,
  63. });
  64. }
  65. const fieldsData = Object.assign(resData, {
  66. frequency: {
  67. input: 1,
  68. dictValue: resData.frequency?.week == 1 ? 'week_1' : 'week_2',
  69. },
  70. specialNeedWeek,
  71. });
  72. console.log('🚀 ~ file: FormModal.vue:62 ~ fieldsData:', fieldsData);
  73. await updateSchema({
  74. field: 'specialNeedWeek',
  75. componentProps: {
  76. options: specialNeedWeekOption.value,
  77. },
  78. });
  79. await setFieldsValue({
  80. ...fieldsData,
  81. });
  82. } else {
  83. await setFieldsValue({
  84. appointmentDate: dayjs().format('YYYY-MM-DD'),
  85. });
  86. }
  87. });
  88. // 提交按钮事件
  89. async function handleSubmit() {
  90. try {
  91. const values = await validate();
  92. values.frequency = {
  93. week: values.frequency.dictValue,
  94. times: values.frequency.input,
  95. };
  96. values.specialNeed = {};
  97. specialNeedWeekOption.value.forEach(ele => {
  98. if (values.specialNeedWeek.includes(ele.value)) {
  99. values.specialNeed[ele.value] = true;
  100. } else {
  101. values.specialNeed[ele.value] = false;
  102. }
  103. });
  104. values.specialNeed['sailingSorts'] = values.sailingSorts.sort();
  105. delete values.specialNeedWeek;
  106. delete values.sailingSorts;
  107. console.log('🚀 ~ file: FormModal.vue:98 ~ handleSubmit ~ values:', values);
  108. setModalProps({ confirmLoading: true });
  109. !unref(isUpdate)
  110. ? await bedScheduledPersonAdd({ ...values })
  111. : await bedScheduledPersonEdit({ ...values, patientBasicId: rowId.value });
  112. !unref(isUpdate) ? createMessage.success('新增成功!') : createMessage.success('编辑成功!');
  113. closeModal();
  114. emit('success', {
  115. isUpdate: unref(isUpdate),
  116. values: { ...values, id: rowId.value },
  117. });
  118. } finally {
  119. setModalProps({ confirmLoading: false });
  120. }
  121. }
  122. </script>