diff --git a/src/pages/clients/components/ClientsActionPopup.vue b/src/pages/clients/components/ClientsActionPopup.vue index 3abb456..4c2b673 100644 --- a/src/pages/clients/components/ClientsActionPopup.vue +++ b/src/pages/clients/components/ClientsActionPopup.vue @@ -29,7 +29,6 @@ export default { openChangeData: Function, disabledDelete: Boolean, createMedicalCard: Function, - clientId: String, }, methods: { transmitDeleteClient() { diff --git a/src/pages/clients/components/ClientsTable.vue b/src/pages/clients/components/ClientsTable.vue index ac648e3..b30929f 100644 --- a/src/pages/clients/components/ClientsTable.vue +++ b/src/pages/clients/components/ClientsTable.vue @@ -260,20 +260,20 @@ export default { openModal() { this.showModal = true; }, - async handlerClickPopup(action, id) { + async handlerClickPopup(action, clientId, medicalId) { this.modalConfig = this.modalConfig.map((el) => { return el.name === action ? { ...el, view: true } : { ...el, view: false }; }); + this.clientId = clientId; if (action === "delete") { - this.clientId = id; this.titleModal = "Удалить клиента"; this.openModal(); } if (action === "medical") { - if (id) { - localStorage.setItem("medicalId", id); + if (medicalId) { + localStorage.setItem("medicalId", medicalId); this.$router.push("medical-card"); } else { this.titleModal = "Создать мед.карту"; @@ -281,8 +281,8 @@ export default { } } }, - createMedicalCard(id) { - this.selectedClientId = id; + createMedicalCard() { + this.selectedClientId = this.clientId; this.showMedicalCard = true; this.closeModal(); }, diff --git a/src/pages/clients/components/ClientsTableRow.vue b/src/pages/clients/components/ClientsTableRow.vue index 3a9e6a1..390623d 100644 --- a/src/pages/clients/components/ClientsTableRow.vue +++ b/src/pages/clients/components/ClientsTableRow.vue @@ -403,6 +403,7 @@ export default { this.$emit( "handler-click-popup", "medical", + this.client.id, this.client?.medical_history[0]?.id ); }, diff --git a/src/pages/clients/components/FormCreateMedicalCard.vue b/src/pages/clients/components/FormCreateMedicalCard.vue index d4acf1e..cae20be 100644 --- a/src/pages/clients/components/FormCreateMedicalCard.vue +++ b/src/pages/clients/components/FormCreateMedicalCard.vue @@ -7,7 +7,10 @@ :steps="steps", :currentStep="currentStep" ) - component(v-bind:is="currentTabComponent") + component( + v-bind:is="currentTabComponent", + :client-detail="clientData", + ) .flex.justify-between .flex base-button.font-semibold( @@ -38,6 +41,7 @@ import MedicalBaseData from "@/pages/medicalCard/components/MedicalBaseData"; import MedicalIdentityDocuments from "@/pages/medicalCard/components/MedicalIdentityDocuments"; import MedicalPolicyDocuments from "@/pages/medicalCard/components/MedicalPolicyDocuments"; import BaseStepper from "@/components/base/BaseStepper.vue"; +import { fetchWrapper } from "@/shared/fetchWrapper.js"; export default { name: "FormCreateMedicalCard", @@ -51,6 +55,9 @@ export default { MedicalPolicyDocuments, BaseStepper, }, + props: { + selectedClientId: String, + }, data() { return { isBaseData: true, @@ -77,6 +84,8 @@ export default { component: "medical-policy-documents", }, ], + sourceСlientDetail: {}, + clientData: {}, }; }, computed: { @@ -92,6 +101,73 @@ export default { this.currentStep -= 1; }, finish() {}, + fetchClientDetail() { + fetchWrapper + .get(`/general/person/${this.selectedClientId}/detail/`) + .then((detail) => this.saveClientDetail(detail)); + }, + saveClientDetail(detail) { + this.sourceСlientDetail = detail; + this.clientData = { + id: detail.id, + address: detail.address, + benefit_code: detail.benefit_code, + birth_date: detail.birth_date ? new Date(detail.birth_date) : null, + //contacts: detail.contacts, + fullName: `${detail.last_name ?? ""} ${detail.first_name ?? ""} ${ + detail.patronymic ?? "" + }`, + gender: detail?.gender, + insurance_number: detail.insurance_number, + special_mark: detail.special_mark, + phone: detail.contacts.find((el) => el.kind === "PHONE")?.username, + email: detail.contacts.find((el) => el.kind === "EMAIL")?.username, + }; + this.saveClientIdentityDoc(detail.identity_documents); + this.saveCLientPolicy(detail.insurance_policy); + }, + saveCLientPolicy(data) { + let OMSPolicy = data.find((el) => el.title === "OMS"), + DMSPolicy = data.find((el) => el.title === "DMS"); + this.clientData.OMSPolicy = { + number: + OMSPolicy?.series && OMSPolicy?.number + ? `${OMSPolicy?.series} ${OMSPolicy?.number}` + : "", + organization: OMSPolicy?.organization || "", + title: "OMS", + }; + if (OMSPolicy?.id) this.clientData.OMSPolicy.id = OMSPolicy?.id; + this.clientData.DMSPolicy = { + number: + DMSPolicy?.series && DMSPolicy?.number + ? `${DMSPolicy?.series} ${DMSPolicy?.number}` + : "", + organization: DMSPolicy?.organization || "", + title: "DMS", + }; + if (DMSPolicy?.id) this.clientData.DMSPolicy.id = DMSPolicy?.id; + }, + saveClientIdentityDoc(data) { + let identityDoc = data.find((el) => el.kind === "PASSPORT"); + this.clientData.identity_documents = { + kind: "PASSPORT", + number: + identityDoc?.series && identityDoc?.number + ? `${identityDoc?.series} ${identityDoc?.number}` + : "", + issued_by_org: identityDoc?.issued_by_org || "", + issued_by_org_code: identityDoc?.issued_by_org_code || "", + issued_by_date: identityDoc?.issued_by_date + ? new Date(identityDoc?.issued_by_date) + : null, + }; + if (identityDoc?.id) + this.clientData.identity_documents.id = identityDoc?.id; + }, + }, + mounted() { + this.fetchClientDetail(); }, }; diff --git a/src/pages/medicalCard/components/MedicalBaseData.vue b/src/pages/medicalCard/components/MedicalBaseData.vue index ac8b23b..513e5f0 100644 --- a/src/pages/medicalCard/components/MedicalBaseData.vue +++ b/src/pages/medicalCard/components/MedicalBaseData.vue @@ -3,20 +3,27 @@ .flex.flex-col.gap-y-6 span.font-bold Основное .flex.flex-col.gap-y-6 - base-input.w-full(placeholder="ФИО*") + base-input.w-full( + placeholder="ФИО*", + v-model="clientDetail.fullName", + ) base-radio-buttons-group( :items="gendersList", radioButtonsLabel="Пол", - v-model="gender", + v-model="clientDetail.gender", ) .flex.gap-x-4 .input - base-input-date(label="Дата рождения") + base-input-date( + label="Дата рождения", + v-model="clientDetail.birth_date", + ) .input base-input( placeholder="000–000–000 00", v-mask="'###-###-### ##'", - label="СНИЛС" + label="СНИЛС", + v-model="clientDetail.insurance_number", ) .flex.flex-col.gap-y-6 base-input( @@ -32,12 +39,14 @@ base-input( label="Номер телефона", placeholder="+7 (915) 644–92–23", - v-mask="'+7 (###) ###-##-##'" + v-mask="'+7 (###) ###-##-##'", + v-model="clientDetail.phone", ) .input base-input( label="Email", placeholder="user@yandex.ru" + v-model="clientDetail.email", ) @@ -48,6 +57,7 @@ import BaseSelect from "@/components/base/BaseSelect"; import BaseButton from "@/components/base/BaseButton"; import { mask } from "vue-the-mask"; import BaseRadioButtonsGroup from "@/components/base/BaseRadioButtonsGroup.vue"; +import { medicalDetailConfig } from "@/pages/medicalCard/utils/medicalConfig.js"; export default { name: "MedicalBaseData", @@ -59,22 +69,13 @@ export default { BaseRadioButtonsGroup, }, directives: { mask }, - data() { - return { - gendersList: [ - { - id: "1", - label: "Мужской", - value: "male", - }, - { - id: "2", - label: "Женский", - value: "woman", - }, - ], - gender: "", - }; + props: { + clientDetail: Object, + }, + computed: { + gendersList() { + return medicalDetailConfig.gendersList; + }, }, }; diff --git a/src/pages/medicalCard/components/MedicalIdentityDocuments.vue b/src/pages/medicalCard/components/MedicalIdentityDocuments.vue index 6fac737..a8bfdeb 100644 --- a/src/pages/medicalCard/components/MedicalIdentityDocuments.vue +++ b/src/pages/medicalCard/components/MedicalIdentityDocuments.vue @@ -3,23 +3,30 @@ .flex.flex-col.gap-y-6 span.font-bold Паспортные данные .flex.flex-col.gap-y-6 + base-input.input( + label="Серия и номер", + placeholder="0000 000000", + v-model="clientDetail.identity_documents.number" + ) + base-input( + label="Кем выдан", + placeholder="Точно как в паспорте", + v-model="clientDetail.identity_documents.issued_by_org" + ) .flex.gap-x-4 - .input - base-input( - label="Серия и номер", - placeholder="0000 000000" - ) - .input - base-input-date(label="Дата выдачи") - .flex.flex-col.gap-y-6 - base-input( - label="Кем выдан", - placeholder="Точно как в паспорте" + base-input.input( + label="Код подразделения", + placeholder="000-000", + v-model="clientDetail.identity_documents.issued_by_org_code" ) - base-input( - label="Страховая оганизация", - placeholder="Введите название организации" + base-input-date.input( + label="Дата выдачи", + v-model="clientDetail.identity_documents.issued_by_date" ) + base-input( + label="Страховая оганизация", + placeholder="Введите название организации" + ) diff --git a/src/pages/medicalCard/components/MedicalPolicyDocuments.vue b/src/pages/medicalCard/components/MedicalPolicyDocuments.vue index 6e5e109..02f86e5 100644 --- a/src/pages/medicalCard/components/MedicalPolicyDocuments.vue +++ b/src/pages/medicalCard/components/MedicalPolicyDocuments.vue @@ -1,20 +1,33 @@