WIP Доработал работу полей в форме Основных данных

This commit is contained in:
DwCay
2023-04-05 14:41:21 +03:00
parent 1a3f00cd79
commit 326a93e1c9
5 changed files with 81 additions and 26 deletions

View File

@@ -1,5 +1,5 @@
<template lang="pug"> <template lang="pug">
medical-form-wrapper(title="Основные данные" :change-edit="changeEdit") medical-form-wrapper(title="Основные данные" :cancel="cancelEdit" :open-edit="openEdit" :save="saveChange")
.form-wrap.gap-24.w-full .form-wrap.gap-24.w-full
.data-section.flex.flex-col.gap-4(v-for="data in configData") .data-section.flex.flex-col.gap-4(v-for="data in configData")
.font-semibold.text-sm.whitespace-nowrap {{data.dataLabel}} .font-semibold.text-sm.whitespace-nowrap {{data.dataLabel}}
@@ -8,15 +8,15 @@
.avatar-field.flex.gap-3.items-center(v-if="field.type === 'avatar'") .avatar-field.flex.gap-3.items-center(v-if="field.type === 'avatar'")
base-avatar(:size="40") base-avatar(:size="40")
img( img(
v-if="basicData[data.dataKey][field.key]" v-if="basic[data.dataKey][field.key]"
:src="url + basicData[data.dataKey][field.key]" :src="url + basic[data.dataKey][field.key]"
alt="AV" alt="AV"
) )
span(v-else) {{ avatar }} span(v-else) {{ avatar }}
.replace-photo.font-medium.text-base.cursor-pointer(v-if="isEdit") Заменить фото .replace-photo.font-medium.text-base.cursor-pointer(v-if="isEdit") Заменить фото
.select(v-else-if="field.type === 'select'") .select(v-else-if="field.type === 'select'")
base-select( base-select(
v-model="basicData[data.dataKey][field.key]" v-model="basic[data.dataKey][field.key]"
:hide-dropdown-icon="!isEdit" :hide-dropdown-icon="!isEdit"
:disable="!isEdit" :disable="!isEdit"
:outlined="isEdit" :outlined="isEdit"
@@ -27,7 +27,7 @@
base-input( base-input(
v-else v-else
:disabled="!isEdit" :disabled="!isEdit"
v-model="basicData[data.dataKey][field.key]" v-model="basic[data.dataKey][field.key]"
:type="field.type" :type="field.type"
:width="300" :width="300"
:standout="!isEdit" :standout="!isEdit"
@@ -45,7 +45,7 @@ import {
baseDataForm, baseDataForm,
genderOptions, genderOptions,
} from "@/pages/newMedicalCard/utils/configMedical"; } from "@/pages/newMedicalCard/utils/configMedical";
import { mapGetters } from "vuex"; import { mapGetters, mapState } from "vuex";
export default { export default {
name: "BasicDataForm", name: "BasicDataForm",
@@ -57,14 +57,25 @@ export default {
configData: baseDataForm, configData: baseDataForm,
}; };
}, },
computed: mapGetters({ computed: {
basicData: "getBasicData", ...mapGetters({
url: "getUrl", url: "getUrl",
avatar: "getAvatar", avatar: "getAvatar",
}), }),
...mapState({
basic: (state) => state.medical.basicData,
}),
},
methods: { methods: {
changeEdit() { cancelEdit() {
this.isEdit = !this.isEdit; this.isEdit = false;
this.$store.dispatch("returnInitData");
},
saveChange() {
this.isEdit = false;
},
openEdit() {
this.isEdit = true;
}, },
}, },
}; };
@@ -74,7 +85,7 @@ export default {
.select .select
width: 324px width: 324px
.avatar-field .avatar-field
min-width: 310px min-width: 324px
.replace-photo .replace-photo
color: var(--btn-blue-color) color: var(--btn-blue-color)
.input .input

View File

@@ -1,6 +1,6 @@
<template lang="pug"> <template lang="pug">
.sidebar-wrapper.h-full.rounded.px-2.py-6.flex.flex-col .sidebar-wrapper.h-full.rounded.px-2.py-6.flex.flex-col
.menu-item.text-base.px-4.py-3.rounded( .menu-item.text-base.px-4.py-3.rounded.cursor-pointer(
v-for="item in menuItem", v-for="item in menuItem",
:key="item.id", :key="item.id",
:id="item.id", :id="item.id",

View File

@@ -8,9 +8,9 @@
span.font-bold.text-base {{title}} span.font-bold.text-base {{title}}
q-icon.edit-button.text-lg.cursor-pointer(name="app:edit" v-if="!isEdit" @click="clickEditForm" size="20") q-icon.edit-button.text-lg.cursor-pointer(name="app:edit" v-if="!isEdit" @click="clickEditForm" size="20")
slot slot
.flex.h-fit.w-fit.gap-2 .flex.h-fit.w-fit.gap-2(v-if="isEdit")
base-button.text-base.font-semibold(v-if="isEdit" outlined :size="40" @click="cancelEdit") Отменить base-button.text-base.font-semibold(outlined :size="40" @click="cancelEdit") Отменить
base-button.text-base.font-semibold(v-if="isEdit" :size="40" @click="saveChangeForm") Сохранить изменения base-button.text-base.font-semibold(:size="40" @click="saveChangeForm") Сохранить изменения
</template> </template>
<script> <script>
@@ -21,7 +21,15 @@ export default {
components: { BaseButton, BaseLoader }, components: { BaseButton, BaseLoader },
props: { props: {
title: String, title: String,
changeEdit: { cancel: {
type: Function,
default: () => {},
},
save: {
type: Function,
default: () => {},
},
openEdit: {
type: Function, type: Function,
default: () => {}, default: () => {},
}, },
@@ -35,18 +43,18 @@ export default {
methods: { methods: {
clickEditForm() { clickEditForm() {
this.isEdit = true; this.isEdit = true;
this.changeEdit(); this.openEdit();
}, },
cancelEdit() { cancelEdit() {
this.isEdit = false; this.isEdit = false;
this.changeEdit(); this.cancel();
}, },
saveChangeForm() { saveChangeForm() {
this.isLoadingData = true; this.isLoadingData = true;
setTimeout(() => { setTimeout(() => {
this.isLoadingData = false; this.isLoadingData = false;
this.isEdit = false; this.isEdit = false;
this.changeEdit(); this.save();
}, 2000); }, 2000);
}, },
}, },

View File

@@ -101,11 +101,11 @@ export const baseDataForm = [
export const genderOptions = [ export const genderOptions = [
{ {
id: "MALE",
label: "Мужской", label: "Мужской",
value: "MALE",
}, },
{ {
id: "WOMEN",
label: "Женский", label: "Женский",
value: "WOMEN",
}, },
]; ];

View File

@@ -1,7 +1,32 @@
import { fetchWrapper } from "@/shared/fetchWrapper"; import { fetchWrapper } from "@/shared/fetchWrapper";
import { genderOptions } from "@/pages/newMedicalCard/utils/configMedical";
const state = () => ({ const state = () => ({
medicalCard: {}, medicalCard: {},
basicData: {
basicData: {
last_name: null,
first_name: null,
patronymic: null,
gender: null,
birth_date: null,
photo: null,
},
registrationAddress: {
region: null,
city: null,
street: null,
house_number: null,
apartment_number: null,
},
residenceAddress: {
region: null,
city: null,
street: null,
house_number: null,
apartment_number: null,
},
},
avatar: "", avatar: "",
}); });
@@ -18,7 +43,9 @@ const getters = {
last_name: person?.last_name, last_name: person?.last_name,
first_name: person?.first_name, first_name: person?.first_name,
patronymic: person?.patronymic, patronymic: person?.patronymic,
gender: person?.gender, gender:
person?.gender &&
genderOptions.find((el) => el.id === person?.gender),
birth_date: person?.birth_date birth_date: person?.birth_date
? new Date(person?.birth_date) ? new Date(person?.birth_date)
: new Date(), : new Date(),
@@ -55,7 +82,13 @@ const actions = {
"medicalId" "medicalId"
)}/detail/` )}/detail/`
) )
.then((res) => commit("setMedicalCard", res)); .then((res) => {
commit("setMedicalCard", res);
commit("setBasicData");
});
},
returnInitData({ commit }) {
commit("setBasicData");
}, },
}; };
@@ -63,6 +96,9 @@ const mutations = {
setMedicalCard(state, card) { setMedicalCard(state, card) {
state.medicalCard = card; state.medicalCard = card;
}, },
setBasicData(state) {
state.basicData = { ...this.getters.getBasicData };
},
}; };
export default { export default {