Merge branch 'H-3' into 'master'
WIP Интегрировал форму Основных данных с беком See merge request andrusyakka/urban-couscous!295
This commit is contained in:
@@ -8,13 +8,14 @@
|
|||||||
:hide-dropdown-icon="hideDropdownIcon"
|
:hide-dropdown-icon="hideDropdownIcon"
|
||||||
:borderless="borderless",
|
:borderless="borderless",
|
||||||
:outlined="outlined",
|
:outlined="outlined",
|
||||||
bg-color="white",
|
:bg-color="bgColor",
|
||||||
|
:standout="standout",
|
||||||
dense,
|
dense,
|
||||||
emit-value,
|
emit-value,
|
||||||
map-options
|
map-options
|
||||||
)
|
)
|
||||||
template(v-slot:selected)
|
template(v-slot:selected)
|
||||||
span(v-if="!value.icon") {{ textSelect }}
|
span(v-if="!value?.icon") {{ textSelect }}
|
||||||
q-icon(
|
q-icon(
|
||||||
v-else,
|
v-else,
|
||||||
:name="iconSelect",
|
:name="iconSelect",
|
||||||
@@ -22,7 +23,7 @@
|
|||||||
)
|
)
|
||||||
template(
|
template(
|
||||||
v-slot:option="scope",
|
v-slot:option="scope",
|
||||||
v-if="value.icon"
|
v-if="value?.icon"
|
||||||
)
|
)
|
||||||
q-item(v-bind="scope.itemProps", style="justify-content: center")
|
q-item(v-bind="scope.itemProps", style="justify-content: center")
|
||||||
q-item-section(avatar, style="padding: 0px; min-width: 0px")
|
q-item-section(avatar, style="padding: 0px; min-width: 0px")
|
||||||
@@ -41,10 +42,18 @@ export default {
|
|||||||
hideDropdownIcon: Boolean,
|
hideDropdownIcon: Boolean,
|
||||||
borderless: Boolean,
|
borderless: Boolean,
|
||||||
modelValue: [Object, String],
|
modelValue: [Object, String],
|
||||||
|
bgColor: {
|
||||||
|
type: String,
|
||||||
|
default: "white",
|
||||||
|
},
|
||||||
outlined: {
|
outlined: {
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
default: true,
|
default: true,
|
||||||
},
|
},
|
||||||
|
standout: {
|
||||||
|
type: [Boolean, String],
|
||||||
|
default: false,
|
||||||
|
},
|
||||||
items: {
|
items: {
|
||||||
type: Array,
|
type: Array,
|
||||||
default: () => [],
|
default: () => [],
|
||||||
@@ -80,7 +89,7 @@ export default {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
textSelect() {
|
textSelect() {
|
||||||
return this.value.label ? this.value.label : this.placeholder;
|
return this.value?.label ? this.value.label : this.placeholder;
|
||||||
},
|
},
|
||||||
iconSelect() {
|
iconSelect() {
|
||||||
return this.value?.icon ? this.value.icon : this.placeholder;
|
return this.value?.icon ? this.value.icon : this.placeholder;
|
||||||
|
|||||||
@@ -1,60 +1,67 @@
|
|||||||
<template lang="pug">
|
<template lang="pug">
|
||||||
medical-form-wrapper(title="Основная информация" :change-edit="changeEdit")
|
medical-form-wrapper(title="Основные данные" :change-edit="changeEdit")
|
||||||
.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}}
|
||||||
.flex.w-full.justify-between.items-center.gap-4(v-for="field in data.fields")
|
.flex.w-full.justify-between.items-center.gap-4(v-for="field in data.fields")
|
||||||
.label-field.font-sm.text-sm.whitespace-nowrap {{`${field.label} :`}}
|
.label-field.font-sm.text-sm.whitespace-nowrap {{`${field.label} :`}}
|
||||||
.avatar-field.justify-start(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")
|
||||||
base-input(v-else :disabled="!isEdit" v-model="initData[data.dataKey][field.key]" :type="field.type" :width="300" :standout="!isEdit" :outlined="isEdit" text-color="black")
|
img(
|
||||||
|
v-if="basicData[data.dataKey][field.key]"
|
||||||
|
:src="url + basicData[data.dataKey][field.key]"
|
||||||
|
alt="AV"
|
||||||
|
)
|
||||||
|
span(v-else) {{ avatar }}
|
||||||
|
.replace-photo.font-medium.text-base.cursor-pointer(v-if="isEdit") Заменить фото
|
||||||
|
.select(v-else-if="field.type === 'select'")
|
||||||
|
base-select(
|
||||||
|
v-model="basicData[data.dataKey][field.key]"
|
||||||
|
:hide-dropdown-icon="!isEdit"
|
||||||
|
:disable="!isEdit"
|
||||||
|
:outlined="isEdit"
|
||||||
|
:standout="!isEdit"
|
||||||
|
:items="genderOptions"
|
||||||
|
bg-color="#e9e9f6"
|
||||||
|
)
|
||||||
|
base-input(
|
||||||
|
v-else
|
||||||
|
:disabled="!isEdit"
|
||||||
|
v-model="basicData[data.dataKey][field.key]"
|
||||||
|
:type="field.type"
|
||||||
|
:width="300"
|
||||||
|
:standout="!isEdit"
|
||||||
|
:outlined="isEdit"
|
||||||
|
text-color="black"
|
||||||
|
)
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
|
import BaseSelect from "@/components/base/BaseSelect.vue";
|
||||||
import BaseInput from "@/components/base/BaseInput.vue";
|
import BaseInput from "@/components/base/BaseInput.vue";
|
||||||
import BaseAvatar from "@/components/base/BaseAvatar.vue";
|
import BaseAvatar from "@/components/base/BaseAvatar.vue";
|
||||||
import MedicalFormWrapper from "@/pages/newMedicalCard/components/MedicalFormWrapper.vue";
|
import MedicalFormWrapper from "@/pages/newMedicalCard/components/MedicalFormWrapper.vue";
|
||||||
import { baseDataForm } from "@/pages/newMedicalCard/utils/configMedical";
|
import {
|
||||||
import { mapState } from "vuex";
|
baseDataForm,
|
||||||
|
genderOptions,
|
||||||
|
} from "@/pages/newMedicalCard/utils/configMedical";
|
||||||
|
import { mapGetters } from "vuex";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "BasicDataForm",
|
name: "BasicDataForm",
|
||||||
components: { MedicalFormWrapper, BaseInput, BaseAvatar },
|
components: { MedicalFormWrapper, BaseInput, BaseAvatar, BaseSelect },
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
isEdit: false,
|
isEdit: false,
|
||||||
|
genderOptions: genderOptions,
|
||||||
configData: baseDataForm,
|
configData: baseDataForm,
|
||||||
initData: {
|
|
||||||
basicData: {
|
|
||||||
last_name: "",
|
|
||||||
first_name: "",
|
|
||||||
patronymic: "",
|
|
||||||
gender: "",
|
|
||||||
birth_date: new Date(),
|
|
||||||
photo: "",
|
|
||||||
},
|
|
||||||
registrationAddress: {
|
|
||||||
region: "",
|
|
||||||
city: "",
|
|
||||||
street: "",
|
|
||||||
house_number: "",
|
|
||||||
apartment_number: "",
|
|
||||||
},
|
|
||||||
residenceAddress: {
|
|
||||||
region: "",
|
|
||||||
city: "",
|
|
||||||
street: "",
|
|
||||||
house_number: "",
|
|
||||||
apartment_number: "",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
computed: mapState({
|
computed: mapGetters({
|
||||||
medical: (state) => state.medical.medicalCard,
|
basicData: "getBasicData",
|
||||||
|
url: "getUrl",
|
||||||
|
avatar: "getAvatar",
|
||||||
}),
|
}),
|
||||||
created() {
|
|
||||||
this.$store.dispatch("getMedicalCardData");
|
|
||||||
},
|
|
||||||
methods: {
|
methods: {
|
||||||
changeEdit() {
|
changeEdit() {
|
||||||
this.isEdit = !this.isEdit;
|
this.isEdit = !this.isEdit;
|
||||||
@@ -64,8 +71,12 @@ export default {
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="sass" scoped>
|
<style lang="sass" scoped>
|
||||||
|
.select
|
||||||
|
width: 324px
|
||||||
.avatar-field
|
.avatar-field
|
||||||
min-width: 310px
|
min-width: 310px
|
||||||
|
.replace-photo
|
||||||
|
color: var(--btn-blue-color)
|
||||||
.input
|
.input
|
||||||
color: purple
|
color: purple
|
||||||
.form-wrap
|
.form-wrap
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ export const baseDataForm = [
|
|||||||
{
|
{
|
||||||
key: "gender",
|
key: "gender",
|
||||||
label: "Пол",
|
label: "Пол",
|
||||||
type: "text",
|
type: "select",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: "birth_date",
|
key: "birth_date",
|
||||||
@@ -98,3 +98,14 @@ export const baseDataForm = [
|
|||||||
],
|
],
|
||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
export const genderOptions = [
|
||||||
|
{
|
||||||
|
label: "Мужской",
|
||||||
|
value: "MALE",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
label: "Женский",
|
||||||
|
value: "WOMEN",
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|||||||
@@ -2,7 +2,15 @@ import { createStore } from "vuex";
|
|||||||
import medical from "./modules/medicalCard";
|
import medical from "./modules/medicalCard";
|
||||||
|
|
||||||
export default createStore({
|
export default createStore({
|
||||||
|
state: {
|
||||||
|
url: "https://astra-dev.dopcore.com",
|
||||||
|
},
|
||||||
modules: {
|
modules: {
|
||||||
medical,
|
medical,
|
||||||
},
|
},
|
||||||
|
getters: {
|
||||||
|
getUrl(state) {
|
||||||
|
return state.url;
|
||||||
|
},
|
||||||
|
},
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -2,9 +2,50 @@ import { fetchWrapper } from "@/shared/fetchWrapper";
|
|||||||
|
|
||||||
const state = () => ({
|
const state = () => ({
|
||||||
medicalCard: {},
|
medicalCard: {},
|
||||||
|
avatar: "",
|
||||||
});
|
});
|
||||||
|
|
||||||
const getters = {};
|
const getters = {
|
||||||
|
getBasicData(state) {
|
||||||
|
let registrationAddress =
|
||||||
|
state.medicalCard?.person?.address?.find((el) => el.registration_flg) ||
|
||||||
|
{};
|
||||||
|
let residenceAddress =
|
||||||
|
state?.medicalCard?.person?.address?.find((el) => el.residence_flg) || {};
|
||||||
|
let person = state.medicalCard.person;
|
||||||
|
return {
|
||||||
|
basicData: {
|
||||||
|
last_name: person?.last_name,
|
||||||
|
first_name: person?.first_name,
|
||||||
|
patronymic: person?.patronymic,
|
||||||
|
gender: person?.gender,
|
||||||
|
birth_date: person?.birth_date
|
||||||
|
? new Date(person?.birth_date)
|
||||||
|
: new Date(),
|
||||||
|
photo: person?.photo,
|
||||||
|
},
|
||||||
|
registrationAddress: {
|
||||||
|
region: registrationAddress?.region,
|
||||||
|
city: registrationAddress?.city,
|
||||||
|
street: registrationAddress?.street,
|
||||||
|
house_number: registrationAddress?.house_number,
|
||||||
|
apartment_number: registrationAddress?.apartment_number,
|
||||||
|
},
|
||||||
|
residenceAddress: {
|
||||||
|
region: residenceAddress?.region,
|
||||||
|
city: residenceAddress?.city,
|
||||||
|
street: residenceAddress?.street,
|
||||||
|
house_number: residenceAddress?.house_number,
|
||||||
|
apartment_number: residenceAddress?.apartment_number,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
},
|
||||||
|
getAvatar(state) {
|
||||||
|
let lastName = state?.medicalCard?.person?.last_name;
|
||||||
|
let firstName = state?.medicalCard?.person?.first_name;
|
||||||
|
return lastName?.[0] + firstName?.[0];
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
const actions = {
|
const actions = {
|
||||||
getMedicalCardData({ commit }) {
|
getMedicalCardData({ commit }) {
|
||||||
|
|||||||
Reference in New Issue
Block a user