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 @@
.base.flex.flex-col.gap-y-6
+ span.font-bold Полис
.flex.gap-x-4
- .flex.flex-col.gap-y-6
- span.font-bold Полис
- .flex.gap-x-6
- .input
- base-input(
- label="Серия и номер полиса ОМС",
- placeholder="0000 000000"
- )
- .input
- base-input(
- label="Серия и номер полиса ДМС",
- placeholder="0000 000000"
- )
- base-input(label="Код категории льготы", placeholder="000")
+ base-input.input(
+ label="Серия и номер полиса ОМС",
+ placeholder="000000 0000000000",
+ v-model="clientDetail.OMSPolicy.number",
+ v-mask="'###### ##########'"
+ )
+ base-input.input(
+ label="Страховая компания полиса ОМС",
+ v-model="clientDetail.OMSPolicy.organization",
+ )
+ .flex.gap-x-4
+ base-input.input(
+ label="Серия и номер полиса ДМС",
+ placeholder="000000 0000000000",
+ v-model="clientDetail.DMSPolicy.number",
+ v-mask="'###### ##########'"
+ )
+ base-input.input(
+ label="Страховая компания полиса ДМС",
+ v-model="clientDetail.DMSPolicy.organization",
+ )
+ base-input(
+ label="Код категории льготы",
+ placeholder="000",
+ v-model="clientDetail.benefit_code",
+ )
base-input(
label="К кому обращаться в случае необходимости",
placeholder="ФИО*"
@@ -36,6 +49,9 @@ export default {
name: "MedicalPolicyDocuments",
components: { BaseInput, BaseInputDate, BaseSelect, BaseButton },
directives: { mask },
+ props: {
+ clientDetail: Object,
+ },
};
diff --git a/src/pages/medicalCard/utils/medicalConfig.js b/src/pages/medicalCard/utils/medicalConfig.js
index 17292b4..fd42190 100644
--- a/src/pages/medicalCard/utils/medicalConfig.js
+++ b/src/pages/medicalCard/utils/medicalConfig.js
@@ -1,4 +1,16 @@
export const medicalDetailConfig = {
+ gendersList: [
+ {
+ id: "1",
+ label: "Мужской",
+ value: "MALE",
+ },
+ {
+ id: "2",
+ label: "Женский",
+ value: "WOMEN",
+ },
+ ],
identity_document: {
height: 366,
title: "Паспортные данные",
diff --git a/src/pages/schedule/TheSchedule.vue b/src/pages/schedule/TheSchedule.vue
index 46f7d31..673b9b1 100644
--- a/src/pages/schedule/TheSchedule.vue
+++ b/src/pages/schedule/TheSchedule.vue
@@ -1,33 +1,39 @@
.wrapper.flex.w-full.relative.mx-2
- .schedule-wrapper.relative.flex.flex-col.px-6.py-6.h-full.w-full.gap-y-5
- schedule-header(
- :start-month="startMonth",
- :times-shift="timesShift",
- :change-show-time="changeShowTime",
- :show-time="showTime"
- @switch-previous-month="switchPreviousMonth",
- @switch-next-month="switchNextMonth"
- )
- schedule-table(
- :schedules-employee="fetchSchedulesEmployee",
- :schedule-list="scheduleList",
- :serialized="serialized",
- :buttons="buttons",
- :start-month="startMonth",
- :clear-employee="clearEmployee",
- :show-time="showTime",
- :clear-select="clearSelect",
- :select-employee="selectEmployee",
- @schedule-employee="createScheduleEmployee",
- @schedules="distributeRequest"
- )
- schedule-bar(
- :buttons="buttons",
- :times="times",
- :create-schedules="postCreateSchedules",
- :delete-schedule="deleteSchedule"
- )
+ transition(name="schedule", mode="out-in")
+ .flex.justify-center.items-center.w-full(v-if="schedulesDataPresence")
+ base-loader(
+ :width="60",
+ :height="60"
+ )
+ .relative.flex.flex-col.px-6.py-6.h-full.w-full.gap-y-5(v-else)
+ schedule-header(
+ :start-month="startMonth",
+ :times-shift="timesShift",
+ :change-show-time="changeShowTime",
+ :show-time="showTime"
+ @switch-previous-month="switchPreviousMonth",
+ @switch-next-month="switchNextMonth"
+ )
+ schedule-table(
+ :schedules-employee="fetchSchedulesEmployee",
+ :schedule-list="scheduleList",
+ :serialized="serialized",
+ :buttons="buttons",
+ :start-month="startMonth",
+ :clear-employee="clearEmployee",
+ :show-time="showTime",
+ :clear-select="clearSelect",
+ :select-employee="selectEmployee",
+ @schedule-employee="createScheduleEmployee",
+ @schedules="distributeRequest"
+ )
+ schedule-bar(
+ :buttons="buttons",
+ :times="times",
+ :create-schedules="postCreateSchedules",
+ :delete-schedule="deleteSchedule"
+ )