WIP Поправил условия сохранения изменений

This commit is contained in:
DwCay
2023-04-11 17:12:09 +03:00
parent 53490838f5
commit 9383be22df
6 changed files with 102 additions and 74 deletions

View File

@@ -21,6 +21,7 @@
:autogrow="autogrow", :autogrow="autogrow",
:square="square", :square="square",
:standout="standout" :standout="standout"
:accept="accept"
hide-bottom-space hide-bottom-space
) )
slot.cursor-pointer slot.cursor-pointer
@@ -65,6 +66,10 @@ export default {
type: [Boolean, String], type: [Boolean, String],
default: false, default: false,
}, },
accept: {
type: String,
default: "",
},
mask: String, mask: String,
width: Number, width: Number,
maxLength: Number, maxLength: Number,

View File

@@ -7,7 +7,7 @@
circle, circle,
type="file", type="file",
id="image-upload", id="image-upload",
accept="image/*", accept="image/.jpg,.jpeg,.png, .jpg",
@change="(e)=>previewImage(e)", @change="(e)=>previewImage(e)",
) )
.avatar.flex.absolute.items-center.gap-x-6 .avatar.flex.absolute.items-center.gap-x-6
@@ -48,15 +48,17 @@ export default {
this.image = e.target.result; this.image = e.target.result;
}; };
reader.readAsDataURL(picture[0]); reader.readAsDataURL(picture[0]);
this.imageData = [...event.target.files];
}, },
confirm() { confirm() {
this.value = this.image; this.value.file = this.imageData;
this.value.photo = this.image;
this.confirmUpload(); this.confirmUpload();
}, },
}, },
created() { created() {
if (this.value) { if (this.value) {
this.image = this.value; this.image = this.value.photo;
} }
}, },
}; };

View File

@@ -16,8 +16,8 @@
.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.avatar.object-cover( img.avatar.object-cover(
v-if="basic[data.dataKey][field.key]" v-if="basic[data.dataKey][field.key]?.photo"
:src="basic[data.dataKey][field.key]" :src="basic[data.dataKey][field.key].photo"
alt="AV" alt="AV"
) )
span(v-else) {{ avatar }} span(v-else) {{ avatar }}
@@ -30,7 +30,7 @@
.select(v-else-if="field.type === 'select'") .select(v-else-if="field.type === 'select'")
base-select( base-select(
v-model="basic[data.dataKey][field.key]" v-model="basic[data.dataKey][field.key]"
@input="checkChangeInput" @update:model-value="checkChangeInput"
:hide-dropdown-icon="!isEdit" :hide-dropdown-icon="!isEdit"
:disable="!isEdit" :disable="!isEdit"
:outlined="isEdit" :outlined="isEdit"
@@ -42,7 +42,7 @@
v-else v-else
:disabled="!isEdit" :disabled="!isEdit"
v-model="basic[data.dataKey][field.key]" v-model="basic[data.dataKey][field.key]"
@input="checkChangeInput" @update:model-value="checkChangeInput"
:type="field.type" :type="field.type"
:width="300" :width="300"
:standout="!isEdit" :standout="!isEdit"
@@ -59,8 +59,8 @@ import BaseAvatar from "@/components/base/BaseAvatar.vue";
import BaseModal from "@/components/base/BaseModal.vue"; import BaseModal from "@/components/base/BaseModal.vue";
import BaseUploadPhoto from "@/components/base/BaseUploadPhoto.vue"; import BaseUploadPhoto from "@/components/base/BaseUploadPhoto.vue";
import MedicalFormWrapper from "@/pages/newMedicalCard/components/MedicalFormWrapper.vue"; import MedicalFormWrapper from "@/pages/newMedicalCard/components/MedicalFormWrapper.vue";
import { getRequestChangeData } from "@/shared/utils/wrapperRequestChangeData";
import { fetchWrapper } from "@/shared/fetchWrapper"; import { fetchWrapper } from "@/shared/fetchWrapper";
import { removeEmptyFields } from "@/shared/utils/changesObjects";
import moment from "moment"; import moment from "moment";
import { import {
baseDataForm, baseDataForm,
@@ -110,6 +110,7 @@ export default {
}, },
confirmCahngeAvatar() { confirmCahngeAvatar() {
this.showModal = false; this.showModal = false;
this.isCheckChange = true;
}, },
cancelEdit() { cancelEdit() {
this.$store.dispatch("returnInitData"); this.$store.dispatch("returnInitData");
@@ -119,75 +120,61 @@ export default {
let registration = this.basic.registrationAddress; let registration = this.basic.registrationAddress;
let residence = this.basic.residenceAddress; let residence = this.basic.residenceAddress;
let personal = this.basic.personalData; let personal = this.basic.personalData;
const personalFormData = new FormData();
personalFormData.append(
"full_name",
`${personal.last_name} ${personal.first_name} ${personal.patronymic}`
);
if (personal.birth_date) {
personalFormData.append(
"birth_date",
moment(personal.birth_date).format("YYYY-MM-DD")
);
}
if (personal.gender) {
personalFormData.append("gender", personal.gender?.id);
}
if (
personal.photo.file &&
personal.photo.photo !== this.initDataBasic.personalData.photo.photo
) {
personalFormData.append("photo", personal.photo.file[0]);
}
const request = Object.keys(this.basic).map((key) => { const request = Object.keys(this.basic).map((key) => {
if (key === "personalData") { if (key === "personalData") {
let updatePersonal = { return fetchWrapper.post(
full_name: `${personal.last_name} ${personal.first_name} ${personal.patronymic}`, `general/person/${personal.id}/update/`,
gender: personal.gender?.id, personalFormData,
birth_date: "formData"
personal.birth_date && );
moment(personal.birth_date).format("YYYY-MM-DD"),
};
if (
JSON.stringify(this.basic[key]) !==
JSON.stringify(this.initDataBasic[key])
) {
return fetchWrapper.post(
`general/person/${personal.id}/update/`,
updatePersonal
);
}
return Promise.resolve();
} }
if (key === "registrationAddress") { if (key === "registrationAddress") {
let initRegistration = Object.keys( let createRegistration = {
removeEmptyFields(this.initDataBasic[key]) person: personal.id,
registration_flg: true,
...registration,
};
return getRequestChangeData(
createRegistration,
registration,
this.initDataBasic[key],
"address",
registration.id
); );
if (Object.keys(removeEmptyFields(this.basic[key])).length) {
if (!initRegistration.length) {
return fetchWrapper.post(`general/address/create/`, {
person: personal.id,
registration_flg: true,
...removeEmptyFields(registration),
});
}
if (
JSON.stringify(this.basic[key]) !==
JSON.stringify(this.initDataBasic[key])
) {
return fetchWrapper.post(
`general/address/${registration.id}/update/`,
removeEmptyFields(registration)
);
}
return Promise.resolve();
}
return Promise.resolve();
} }
if (key === "residenceAddress") { if (key === "residenceAddress") {
let initResidence = Object.keys( let createResidence = {
removeEmptyFields(this.initDataBasic[key]) person: personal.id,
residence_flg: true,
...residence,
};
return getRequestChangeData(
createResidence,
residence,
this.initDataBasic[key],
"address",
residence.id
); );
if (Object.keys(removeEmptyFields(this.basic[key])).length) {
if (!initResidence.length) {
return fetchWrapper.post(`general/address/create/`, {
person: personal.id,
residence_flg: true,
...removeEmptyFields(residence),
});
}
if (
JSON.stringify(this.basic[key]) !==
JSON.stringify(this.initDataBasic[key])
) {
return fetchWrapper.post(
`general/address/${residence.id}/update/`,
removeEmptyFields(residence)
);
}
return Promise.resolve();
}
return Promise.resolve();
} }
}); });
return request; return request;
@@ -200,6 +187,7 @@ export default {
.then(() => { .then(() => {
this.isLoadingData = false; this.isLoadingData = false;
this.isEdit = false; this.isEdit = false;
this.isCheckChange = false;
}); });
}, },
openEdit() { openEdit() {

View File

@@ -58,13 +58,13 @@ export const baseDataForm = [
key: "house_number", key: "house_number",
label: "Дом", label: "Дом",
type: "text", type: "text",
rules: [(val) => !/^\W|0/.test(val)], rules: [(val) => !/^[\W0]/.test(val)],
}, },
{ {
key: "apartment_number", key: "apartment_number",
label: "Квартира", label: "Квартира",
type: "text", type: "text",
rules: [(val) => !/^\W|0/.test(val)], rules: [(val) => !/^[\W0]/.test(val)],
}, },
], ],
}, },
@@ -91,13 +91,13 @@ export const baseDataForm = [
key: "house_number", key: "house_number",
label: "Дом", label: "Дом",
type: "text", type: "text",
rules: [(val) => !/^\W|0/.test(val)], rules: [(val) => !/^[\W0]/.test(val)],
}, },
{ {
key: "apartment_number", key: "apartment_number",
label: "Квартира", label: "Квартира",
type: "text", type: "text",
rules: [(val) => !/^\W|0/.test(val)], rules: [(val) => !/^[\W0]/.test(val)],
}, },
], ],
}, },

View File

@@ -0,0 +1,28 @@
import { fetchWrapper } from "../fetchWrapper";
import { removeEmptyFields } from "./changesObjects";
export function getRequestChangeData(
createData,
updateData,
initData,
key,
id
) {
let isInitDataEmpty = [...Object.keys(removeEmptyFields(initData))].length;
if (Object.keys(removeEmptyFields(updateData)).length) {
if (!isInitDataEmpty) {
return fetchWrapper.post(
`general/${key}/create/`,
removeEmptyFields(createData)
);
}
if (JSON.stringify(updateData) !== JSON.stringify(initData)) {
return fetchWrapper.post(
`general/${key}/${id}/update/`,
removeEmptyFields(updateData)
);
}
return Promise.resolve();
}
return Promise.resolve();
}

View File

@@ -49,7 +49,12 @@ const getters = {
birth_date: person?.birth_date birth_date: person?.birth_date
? new Date(person?.birth_date) ? new Date(person?.birth_date)
: new Date(), : new Date(),
photo: person?.photo ? rootState.getUrl + person?.photo : null, photo: person?.photo
? {
photo: rootState.getUrl + person.photo,
file: null,
}
: {},
id: person?.id, id: person?.id,
}, },
registrationAddress: { registrationAddress: {