From 92b7bd6d010522b15070969680584df6730824c6 Mon Sep 17 00:00:00 2001 From: dderbentsov Date: Thu, 2 Nov 2023 01:19:05 +0300 Subject: [PATCH] global rework patient info --- src/components/base/BaseEditModeSwitcher.vue | 55 +++++++++++ src/components/base/BaseFieldList.vue | 58 ++++++++++++ .../components/MedicalCardSearchRow.vue | 7 +- src/pages/newMedicalCard/TheMedicalCard.vue | 13 ++- .../components/MedicalBaseInfo.vue | 8 +- .../components/MedicalBasicDataWrapper.vue | 30 ------ .../components/MedicalCardPatientForm.vue | 34 ++++--- .../components/SpecialMarks.vue | 91 +++++++++++++++++++ ...MedicalSidebar.vue => _MedicalSidebar.vue} | 0 .../general}/BasicDataForm.vue | 22 ++--- .../general}/ContactsForm.vue | 0 .../general}/DocumentsForm.vue | 0 .../tabs/general/GeneralInfo copy.vue | 79 ++++++++++++++++ .../tabs/general/GeneralInfo.vue | 63 +++++++++++++ .../general}/InsuranceForm.vue | 0 .../tabs/general/MedicalCardGeneralInfo.vue | 41 +++++++++ .../tabs/general/generalInfoData.js | 9 ++ .../newMedicalCard/utils/medicalConfig.js | 81 ++++++++--------- src/store/index.js | 2 + src/store/modules/medicalCard.js | 4 +- src/store/modules/person.js | 74 +++++++++++++++ 21 files changed, 562 insertions(+), 109 deletions(-) create mode 100644 src/components/base/BaseEditModeSwitcher.vue create mode 100644 src/components/base/BaseFieldList.vue delete mode 100644 src/pages/newMedicalCard/components/MedicalBasicDataWrapper.vue create mode 100644 src/pages/newMedicalCard/components/SpecialMarks.vue rename src/pages/newMedicalCard/components/{MedicalSidebar.vue => _MedicalSidebar.vue} (100%) rename src/pages/newMedicalCard/{components/BasicDataForms => tabs/general}/BasicDataForm.vue (91%) rename src/pages/newMedicalCard/{components/BasicDataForms => tabs/general}/ContactsForm.vue (100%) rename src/pages/newMedicalCard/{components/BasicDataForms => tabs/general}/DocumentsForm.vue (100%) create mode 100644 src/pages/newMedicalCard/tabs/general/GeneralInfo copy.vue create mode 100644 src/pages/newMedicalCard/tabs/general/GeneralInfo.vue rename src/pages/newMedicalCard/{components/BasicDataForms => tabs/general}/InsuranceForm.vue (100%) create mode 100644 src/pages/newMedicalCard/tabs/general/MedicalCardGeneralInfo.vue create mode 100644 src/pages/newMedicalCard/tabs/general/generalInfoData.js create mode 100644 src/store/modules/person.js diff --git a/src/components/base/BaseEditModeSwitcher.vue b/src/components/base/BaseEditModeSwitcher.vue new file mode 100644 index 0000000..e18788a --- /dev/null +++ b/src/components/base/BaseEditModeSwitcher.vue @@ -0,0 +1,55 @@ + + + diff --git a/src/components/base/BaseFieldList.vue b/src/components/base/BaseFieldList.vue new file mode 100644 index 0000000..efde7e5 --- /dev/null +++ b/src/components/base/BaseFieldList.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/src/pages/medcards/components/MedicalCardSearchRow.vue b/src/pages/medcards/components/MedicalCardSearchRow.vue index bed820c..5d11203 100644 --- a/src/pages/medcards/components/MedicalCardSearchRow.vue +++ b/src/pages/medcards/components/MedicalCardSearchRow.vue @@ -53,9 +53,14 @@ export default { ...mapActions({ getMedicalCardData: "getMedicalCardDataByPersonId", createMedicalCard: "createMedicalCard", + getPerson: "GET_PERSON", }), openMedicalCard() { - this.$router.push("medical-card/" + this.person["medical_card_id"]); + this.getPerson(this.person.id) + .then(() => + this.$router.push("medical-card/" + this.person["medical_card_id"]) + ) + .catch((error) => alert(error)); }, createMedCard() { this.createMedicalCard({ diff --git a/src/pages/newMedicalCard/TheMedicalCard.vue b/src/pages/newMedicalCard/TheMedicalCard.vue index 46e5996..a056696 100644 --- a/src/pages/newMedicalCard/TheMedicalCard.vue +++ b/src/pages/newMedicalCard/TheMedicalCard.vue @@ -1,10 +1,11 @@ - diff --git a/src/pages/newMedicalCard/components/MedicalCardPatientForm.vue b/src/pages/newMedicalCard/components/MedicalCardPatientForm.vue index 93258d7..c60b3f6 100644 --- a/src/pages/newMedicalCard/components/MedicalCardPatientForm.vue +++ b/src/pages/newMedicalCard/components/MedicalCardPatientForm.vue @@ -13,7 +13,8 @@ q-breadcrumbs-el(:label="`Медкарта #${medicalCardData?.number}`") .mr-4.flex - .text {{ patient?.marks }} + special-marks(:marks="patient?.marks", :edit-mode="editMode") + .ml-6.flex.gap-x-4.col-grow.items-center q-avatar(size="80px", :style="{'background-color': 'var(--border-light-grey-color)', color: 'var(--font-dark-blue-color)'}") @@ -32,28 +33,28 @@ .flex-col(v-else) .flex.gap-x-2 base-input( - v-model="patient.lastName" + v-model="patientEdit.lastName" size="S", label="Фамилия" ) base-input( - v-model="patient.firstName" + v-model="patientEdit.firstName" size="S", label="Имя" ) base-input( - v-model="patient.patronymic" + v-model="patientEdit.patronymic" size="S", label="Отчество" ) .flex.gap-x-2 base-input( - v-model="patient.birthDate" + v-model="patientEdit.birthDate" size="S", label="Дата рождения" ) base-input( - v-model="patient.gender" + v-model="patientEdit.gender" size="S", label="Пол" ) @@ -62,6 +63,7 @@ diff --git a/src/pages/newMedicalCard/components/MedicalSidebar.vue b/src/pages/newMedicalCard/components/_MedicalSidebar.vue similarity index 100% rename from src/pages/newMedicalCard/components/MedicalSidebar.vue rename to src/pages/newMedicalCard/components/_MedicalSidebar.vue diff --git a/src/pages/newMedicalCard/components/BasicDataForms/BasicDataForm.vue b/src/pages/newMedicalCard/tabs/general/BasicDataForm.vue similarity index 91% rename from src/pages/newMedicalCard/components/BasicDataForms/BasicDataForm.vue rename to src/pages/newMedicalCard/tabs/general/BasicDataForm.vue index 2da1907..dcfc370 100644 --- a/src/pages/newMedicalCard/components/BasicDataForms/BasicDataForm.vue +++ b/src/pages/newMedicalCard/tabs/general/BasicDataForm.vue @@ -15,13 +15,7 @@ .flex.w-full.items-center.gap-4(v-for="field in data.fields") .label-field.font-sm.text-sm.whitespace-nowrap {{`${field.label} :`}} .flex.gap-3.items-center.h-10(v-if="field.type === 'avatar'") - base-avatar(:size="40") - img.avatar.object-cover( - v-if="basic[data.dataKey][field.key]?.photo" - :src="basic[data.dataKey][field.key].photo" - alt="AV" - ) - span(v-else) {{ avatar }} + .replace-photo.font-medium.text-base.cursor-pointer(v-if="isEdit" @click="showModal = true") Заменить фото base-modal(v-model="showModal" title="Загрузить изображение") base-upload-photo( @@ -64,7 +58,7 @@ + + diff --git a/src/pages/newMedicalCard/tabs/general/GeneralInfo.vue b/src/pages/newMedicalCard/tabs/general/GeneralInfo.vue new file mode 100644 index 0000000..1c475f0 --- /dev/null +++ b/src/pages/newMedicalCard/tabs/general/GeneralInfo.vue @@ -0,0 +1,63 @@ + + + diff --git a/src/pages/newMedicalCard/components/BasicDataForms/InsuranceForm.vue b/src/pages/newMedicalCard/tabs/general/InsuranceForm.vue similarity index 100% rename from src/pages/newMedicalCard/components/BasicDataForms/InsuranceForm.vue rename to src/pages/newMedicalCard/tabs/general/InsuranceForm.vue diff --git a/src/pages/newMedicalCard/tabs/general/MedicalCardGeneralInfo.vue b/src/pages/newMedicalCard/tabs/general/MedicalCardGeneralInfo.vue new file mode 100644 index 0000000..5759b90 --- /dev/null +++ b/src/pages/newMedicalCard/tabs/general/MedicalCardGeneralInfo.vue @@ -0,0 +1,41 @@ + + + + diff --git a/src/pages/newMedicalCard/tabs/general/generalInfoData.js b/src/pages/newMedicalCard/tabs/general/generalInfoData.js new file mode 100644 index 0000000..73afa8a --- /dev/null +++ b/src/pages/newMedicalCard/tabs/general/generalInfoData.js @@ -0,0 +1,9 @@ +export const contactInformation = { + options: ["Email", "Telegram", "Телефон"], + emptyMessage: "Отсутствует контактная информация", +}; + +export const addressInformation = { + options: ["Адрес регистрации", "Адрес проживания", "Адрес дополнительный"], + emptyMessage: "Отсутствует адрес", +}; diff --git a/src/pages/newMedicalCard/utils/medicalConfig.js b/src/pages/newMedicalCard/utils/medicalConfig.js index a1fc286..8249925 100644 --- a/src/pages/newMedicalCard/utils/medicalConfig.js +++ b/src/pages/newMedicalCard/utils/medicalConfig.js @@ -10,49 +10,46 @@ import pdfIcon from "@/assets/icons/pdf.svg"; import wordIcon from "@/assets/icons/word.svg"; import exelIcon from "@/assets/icons/exel.svg"; -export const baseDataForm = [ - { - dataLabel: "Личные данные", - dataKey: "personalData", - fields: [ - { - key: "last_name", - label: "Фамилия", - type: "text", - disabled: true, - }, - { - key: "first_name", - label: "Имя", - type: "text", - disabled: true, - }, - { - key: "patronymic", - label: "Отчество", - type: "text", - disabled: true, - }, - { - key: "gender", - label: "Пол", - type: "select", - disabled: true, - }, - { - key: "birth_date", - label: "Дата рождения", - type: "date", - disabled: true, - }, - { - key: "photo", - label: "Фото", - type: "avatar", - disabled: true, - }, - ], +export const specialMarksIconsConfig = { + hard: { + icon: "thumb_down_alt", + color: "amber-2", + bgColor: "#8d6e63", + description: "Конфликтный", }, + debt: { + icon: "paid", + color: "yellow", + bgColor: "green", + description: "Долг", + }, + allergic: { + icon: "bolt", + color: "red", + bgColor: "orange", + description: "Аллергик", + }, + infected: { + icon: "sick", + color: "light-green-9", + bgColor: "#afb42b", + description: "Опасное заболевание", + }, + ban: { + icon: "dangerous", + color: "grey-6", + bgColor: "black", + description: "Не записывать", + }, + unknown: { + icon: "help", + color: "grey-6", + bgColor: "#bdbdbd", + description: "Неопознанная метка", + }, +}; + +export const baseDataForm = [ { dataLabel: "Адрес регистрации", dataKey: "registrationAddress", diff --git a/src/store/index.js b/src/store/index.js index b0ecdf5..9b04165 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,6 +1,7 @@ import { createStore } from "vuex"; import medical from "./modules/medicalCard"; import calendar from "./modules/calendar"; +import person from "./modules/person"; export default createStore({ state: { @@ -13,6 +14,7 @@ export default createStore({ modules: { medical, calendar, + person, }, getters: { getUrl(state) { diff --git a/src/store/modules/medicalCard.js b/src/store/modules/medicalCard.js index 177a547..7fa2119 100644 --- a/src/store/modules/medicalCard.js +++ b/src/store/modules/medicalCard.js @@ -12,7 +12,7 @@ const state = () => ({ networks: [], }, basicData: { - personalData: { + patient: { last_name: null, first_name: null, patronymic: null, @@ -129,7 +129,7 @@ const getters = { ) || {}; let person = state.medicalCard.person; return { - personalData: { + patient: { last_name: person?.last_name || "", first_name: person?.first_name || "", patronymic: person?.patronymic || "", diff --git a/src/store/modules/person.js b/src/store/modules/person.js new file mode 100644 index 0000000..c2ff23c --- /dev/null +++ b/src/store/modules/person.js @@ -0,0 +1,74 @@ +import { fetchWrapper } from "@/shared/fetchWrapper"; + +const state = () => ({ + firstName: "", + lastName: "", + patronymic: "", + birthDate: "", + gender: "", + marks: [], + addresses: [ + { + category: "fact", + full_address: "г.Рязань, ул. Новикова-Прибоя, д.43/1, кв.2", + }, + { + category: "registration", + full_address: "г.Санкт-Себастьянг, ул. Шоссе Энтузиастов, д.243, кв.4", + }, + ], + contacts: [ + { category: "email", value: "dol@yandex.ru" }, + { category: "phone", value: "+79586541252" }, + ], +}); + +const getters = { + PERSON(state) { + return { + firstName: state.firstName, + lastName: state.lastName, + patronymic: state.patronymic, + birthDate: state.birthDate, + gender: state.gender, + marks: ["hard", "rich", "allergic", "infected", "ban"], + }; + }, + ADDRESSES(state) { + return state.addresses; + }, + CONTACTS(state) { + return state.contacts; + }, +}; + +const actions = { + GET_PERSON({ commit }, id) { + fetchWrapper + .get(`persons/${id}`) + .then((res) => { + commit("SET_PERSON", res); + }) + .catch((e) => alert(e)); + }, + UPDATE_PERSON(context, { obj, id }) { + fetchWrapper.patch(`persons/${id}`, obj); + }, +}; + +const mutations = { + SET_PERSON(state, payload) { + state.firstName = payload.first_name; + state.lastName = payload.last_name; + state.patronymic = payload.patronymic; + state.birthDate = payload.birth_date; + state.gender = payload.gender; + }, +}; + +export default { + state, + getters, + actions, + mutations, +};