WIP Настроил отправление данных с формы создания медицинской карты

This commit is contained in:
DwCay
2023-03-07 19:16:19 +03:00
parent e4da8bc437
commit ff81fdd6fa
6 changed files with 241 additions and 13 deletions

View File

@@ -69,6 +69,10 @@ export default {
type: String, type: String,
default: "Завершить", default: "Завершить",
}, },
finish: {
type: Function,
default: () => {},
},
}, },
}; };
</script> </script>

View File

@@ -8,6 +8,7 @@
:currentStep="currentStep", :currentStep="currentStep",
:next-step="nextStep", :next-step="nextStep",
:prev-step="prevStep", :prev-step="prevStep",
:finish="finishCreateCard",
finishLabel="Создать медицинскую карту", finishLabel="Создать медицинскую карту",
flat flat
) )
@@ -23,6 +24,7 @@ import BaseSelect from "@/components/base/BaseSelect";
import MedicalBaseData from "@/pages/medicalCard/components/MedicalBaseData"; import MedicalBaseData from "@/pages/medicalCard/components/MedicalBaseData";
import MedicalIdentityDocuments from "@/pages/medicalCard/components/MedicalIdentityDocuments"; import MedicalIdentityDocuments from "@/pages/medicalCard/components/MedicalIdentityDocuments";
import MedicalPolicyDocuments from "@/pages/medicalCard/components/MedicalPolicyDocuments"; import MedicalPolicyDocuments from "@/pages/medicalCard/components/MedicalPolicyDocuments";
import { requestMedicalCardData } from "@/pages/clients/utils/wrapperClientForm";
import { fetchWrapper } from "@/shared/fetchWrapper.js"; import { fetchWrapper } from "@/shared/fetchWrapper.js";
import BaseStepperQuasar from "@/components/base/BaseStepperQuasar"; import BaseStepperQuasar from "@/components/base/BaseStepperQuasar";
@@ -81,17 +83,31 @@ export default {
prevStep() { prevStep() {
this.currentStep -= 1; this.currentStep -= 1;
}, },
finish() {}, finishCreateCard() {
requestMedicalCardData(this.clientData, this.sourceСlientDetail).then(
() =>
fetchWrapper.post(`medical_card/medical_history/create/`, {
person: this.sourceСlientDetail.id,
organization: "3883e8f5-cede-4645-97a3-6d1511e63d10",
agreement: false,
})
);
},
fetchClientDetail() { fetchClientDetail() {
fetchWrapper fetchWrapper
.get(`/general/person/${this.selectedClientId}/detail/`) .get(`general/person/${this.selectedClientId}/detail/`)
.then((detail) => this.saveClientDetail(detail)); .then((detail) => this.saveClientDetail(detail));
}, },
saveClientDetail(detail) { saveClientDetail(detail) {
this.sourceСlientDetail = detail; this.sourceСlientDetail = detail;
this.clientData = { this.clientData = {
id: detail.id, id: detail.id,
address: detail.address, registration_address: detail.address.find(
(address) => address.registration_flg
)?.join_address,
temporary_address: detail.address.find(
(address) => address.temporary_registration_flg
)?.join_address,
benefit_code: detail.benefit_code, benefit_code: detail.benefit_code,
birth_date: detail.birth_date ? new Date(detail.birth_date) : null, birth_date: detail.birth_date ? new Date(detail.birth_date) : null,
//contacts: detail.contacts, //contacts: detail.contacts,
@@ -103,6 +119,9 @@ export default {
special_mark: detail.special_mark, special_mark: detail.special_mark,
phone: detail.contacts.find((el) => el.kind === "PHONE")?.username, phone: detail.contacts.find((el) => el.kind === "PHONE")?.username,
email: detail.contacts.find((el) => el.kind === "EMAIL")?.username, email: detail.contacts.find((el) => el.kind === "EMAIL")?.username,
confidant_name: "",
confidant_phone: "",
policy: "OMS",
}; };
this.saveClientIdentityDoc(detail.identity_documents); this.saveClientIdentityDoc(detail.identity_documents);
this.saveCLientPolicy(detail.insurance_policy); this.saveCLientPolicy(detail.insurance_policy);
@@ -133,7 +152,7 @@ export default {
let identityDoc = data.find((el) => el.kind === "PASSPORT"); let identityDoc = data.find((el) => el.kind === "PASSPORT");
this.clientData.identity_documents = { this.clientData.identity_documents = {
kind: "PASSPORT", kind: "PASSPORT",
number: series_number:
identityDoc?.series && identityDoc?.number identityDoc?.series && identityDoc?.number
? `${identityDoc?.series} ${identityDoc?.number}` ? `${identityDoc?.series} ${identityDoc?.number}`
: "", : "",

View File

@@ -0,0 +1,202 @@
import { fetchWrapper } from "@/shared/fetchWrapper";
import moment from "moment/moment";
export async function updatePerson(data, initialData) {
const dataPerson = {
full_name: data.full_name,
birth_date: moment(data.birth_date).format("YYYY-MM-DD"),
insurance_number: data.insurance_number,
gender: data.gender,
benefit_code: data.benefit_code,
};
const notEmptyData = {};
Object.keys(dataPerson).forEach((key) => {
if (dataPerson[key] && initialData[key] !== dataPerson[key]) {
notEmptyData[key] = dataPerson[key];
}
});
return Object.keys(notEmptyData).length
? fetchWrapper
.post(`general/person/${data.id}/update/`, notEmptyData)
.then((res) => res)
: Promise.resolve();
}
export async function requestAddress(data, initialData) {
const registrationInit = initialData.address.find(
(add) => add.registration_flg
);
const temporaryInit = initialData.address.find(
(add) => add.temporary_registration_flg
);
let resultRequestRegistration = Promise.resolve();
let resultRequestTemporary = Promise.resolve();
if (!registrationInit && data.registration_address) {
resultRequestRegistration = fetchWrapper.post(`general/address/create/`, {
person: data.id,
full_address: data.registration_address,
registration_flg: true,
});
}
if (
registrationInit &&
registrationInit.join_address !== data.registration_address
) {
resultRequestRegistration = fetchWrapper.post(
`general/address/${registrationInit.id}/update/`,
{
full_address: data.registration_address,
}
);
}
if (!temporaryInit && data.temporary_address) {
resultRequestTemporary = fetchWrapper.post(`general/address/create/`, {
person: data.id,
full_address: data.temporary_address,
temporary_registration_flg: true,
});
}
if (temporaryInit && temporaryInit.join_address !== data.temporary_address) {
resultRequestTemporary = fetchWrapper.post(
`general/address/${registrationInit.id}/update/`,
{
full_address: data.temporary_address,
}
);
}
return Promise.all([resultRequestRegistration, resultRequestTemporary]);
}
export async function requestContacts(data, dataInit) {
const phoneInit = dataInit.contacts.find((el) => el.kind === "PHONE");
const emailInit = dataInit.contacts.find((el) => el.kind === "EMAIL");
let resultRequestPhone = Promise.resolve();
let resultRequestEmail = Promise.resolve();
if (!phoneInit && data.phone) {
resultRequestPhone = fetchWrapper.post(`general/contact/create/`, {
person: data.id,
username: data.phone,
kind: "PHONE",
});
}
if (phoneInit && phoneInit?.username !== data.phone) {
resultRequestPhone = fetchWrapper.post(
`general/contact/${phoneInit.id}/update/`,
{
person: data.id,
username: data.phone,
kind: "PHONE",
}
);
}
if (!emailInit && data.email) {
resultRequestEmail = fetchWrapper.post(`general/contact/create/`, {
person: data.id,
username: data.email,
kind: "EMAIL",
});
}
if (emailInit && emailInit?.username !== data.email) {
resultRequestEmail = fetchWrapper.post(
`general/contact/${emailInit.id}/update/`,
{
person: data.id,
username: data.email,
kind: "EMAIL",
}
);
}
return Promise.all([resultRequestPhone, resultRequestEmail]);
}
export async function requestIdentityDoc(data, dataInit) {
let identityInit = dataInit.identity_documents.find(
(doc) => doc.kind === "PASSPORT"
);
identityInit = {
...identityInit,
series_number:
identityInit?.series && identityInit?.number
? `${identityInit.series} ${identityInit.number}`
: "",
};
const dataIdentity = {
...data.identity_documents,
issued_by_date: moment(data.identity_documents.issued_by_date).format(
"YYYY-MM-DD"
),
};
const notEmptyIdentityDoc = {};
Object.keys(dataIdentity).forEach((key) => {
if (dataIdentity[key] && dataIdentity[key] !== identityInit[key]) {
notEmptyIdentityDoc[key] = dataIdentity[key];
}
});
if (Object.keys(notEmptyIdentityDoc).length) {
if (!identityInit) {
return fetchWrapper.post(`general/identity_document/create/`, {
...notEmptyIdentityDoc,
person: dataInit.id,
});
} else {
return fetchWrapper.post(
`general/identity_document/${identityInit.id}/update/`,
{
...notEmptyIdentityDoc,
}
);
}
} else {
return Promise.resolve();
}
}
export async function requestPolicy(data, dataInit) {
const policyInit =
data.policy === "OMS"
? dataInit.insurance_policy.find((el) => el.title === "OMS")
: dataInit.insurance_policy.find((el) => el.title === "DMS");
const dataPolicy = data.policy === "OMS" ? data.OMSPolicy : data.DMSPolicy;
const dataRequest = {
organization: dataPolicy.organization,
series: dataPolicy.number.split(" ")[0],
number: dataPolicy.number.split(" ")[1],
};
const notEmptyPolicy = {};
Object.keys(dataRequest).forEach((key) => {
if (!policyInit && dataRequest[key]) {
notEmptyPolicy[key] = dataRequest[key];
}
if (policyInit && policyInit[key] !== dataRequest[key]) {
notEmptyPolicy[key] = dataRequest[key];
}
});
if (Object.keys(notEmptyPolicy).length) {
if (!policyInit) {
return fetchWrapper.post(`general/insurance_policy/create/`, {
...notEmptyPolicy,
title: data.policy,
person: data.id,
});
} else {
return fetchWrapper.post(
`general/insurance_policy/${policyInit.id}/update/`,
{
...notEmptyPolicy,
title: data.policy,
}
);
}
} else {
return Promise.resolve();
}
}
export async function requestMedicalCardData(data, init) {
return Promise.all([
updatePerson(data, init),
requestAddress(data, init),
requestContacts(data, init),
requestIdentityDoc(data, init),
requestPolicy(data, init),
]);
}

View File

@@ -35,11 +35,13 @@
base-input( base-input(
label="Адрес регистрации", label="Адрес регистрации",
placeholder="Введите полный адрес", placeholder="Введите полный адрес",
v-model="clientDetail.registration_address"
outlined outlined
) )
base-input( base-input(
label="Фактический адрес места жительства", label="Фактический адрес места жительства",
placeholder="Введите полный адрес", placeholder="Введите полный адрес",
v-model="clientDetail.temporary_address"
outlined outlined
) )
.flex.gap-x-4 .flex.gap-x-4

View File

@@ -6,7 +6,8 @@
base-input( base-input(
label="Серия и номер", label="Серия и номер",
placeholder="0000 000000", placeholder="0000 000000",
v-model="clientDetail.identity_documents.number", mask="#### ######",
v-model="clientDetail.identity_documents.series_number",
outlined outlined
) )
base-input( base-input(
@@ -19,6 +20,7 @@
base-input( base-input(
label="Код подразделения", label="Код подразделения",
placeholder="000-000", placeholder="000-000",
mask="###-###",
v-model="clientDetail.identity_documents.issued_by_org_code", v-model="clientDetail.identity_documents.issued_by_org_code",
outlined outlined
) )

View File

@@ -3,7 +3,7 @@
span.font-bold Полис span.font-bold Полис
base-radio-buttons-group( base-radio-buttons-group(
:items="policiesList", :items="policiesList",
v-model="policy", v-model="clientDetail.policy",
:columnGap="152", :columnGap="152",
inline inline
) )
@@ -41,17 +41,21 @@
base-input( base-input(
label="Код категории льготы", label="Код категории льготы",
placeholder="000", placeholder="000",
v-model="clientDetail.benefit_code",, mask="###"
v-model="clientDetail.benefit_code",
outlined outlined
) )
base-input( base-input(
label="К кому обращаться в случае необходимости", label="К кому обращаться в случае необходимости",
placeholder="ФИО*", placeholder="ФИО*",
v-model="clientDetail.confidant_name",
outlined outlined
) )
base-input( base-input(
label="Номер телефона", label="Номер телефона",
placeholder="+7 (915) 6449223", placeholder="+7 (915) 6449223",
mask="+7 (###) ###-##-##",
v-model="clientDetail.confidant_phone",
outlined outlined
) )
</template> </template>
@@ -72,17 +76,12 @@ export default {
props: { props: {
clientDetail: Object, clientDetail: Object,
}, },
data() {
return {
policy: "OMS",
};
},
computed: { computed: {
policiesList() { policiesList() {
return medicalDetailConfig.policiesList; return medicalDetailConfig.policiesList;
}, },
selectedOMSPolicy() { selectedOMSPolicy() {
return this.policy === "OMS"; return this.clientDetail.policy === "OMS";
}, },
}, },
}; };