Merge branch 'ASTRA-48' into 'master'

WIP Закончена валидация

See merge request andrusyakka/urban-couscous!330
This commit is contained in:
Daria Golova
2023-04-24 07:55:46 +00:00
3 changed files with 59 additions and 35 deletions

View File

@@ -1,6 +1,6 @@
<template lang="pug"> <template lang="pug">
button.base-button.text-base( button.base-button.text-base(
type="button" type="button",
:disabled="disabled", :disabled="disabled",
:class="{'rounded': rounded, 'outlined': outlined, 'outlined-red': outlinedRed, 'secondary': secondary, 'confirm': confirm, 'added': added, 'added-border-none': addedBorderNone}" :class="{'rounded': rounded, 'outlined': outlined, 'outlined-red': outlinedRed, 'secondary': secondary, 'confirm': confirm, 'added': added, 'added-border-none': addedBorderNone}"
:style="{height: size + 'px', minWidth: size + 'px'}" :style="{height: size + 'px', minWidth: size + 'px'}"

View File

@@ -53,11 +53,11 @@
:standout="!isEdit", :standout="!isEdit",
:outlined="isEdit", :outlined="isEdit",
:mask="field?.inputMask", :mask="field?.inputMask",
:rule="field.rules", :rule="[(val) => !personDataField.includes(field.key) ? checkPassportFields(val, field.rules) : field.rules(val)]",
:autogrow="field.key === 'issued_by_org'" :autogrow="field.key === 'issued_by_org'"
) )
.icon-copy.my-auto.text-lg.label-field( .icon-copy.my-auto.text-lg.label-field(
v-if="checkCopiedFields(field.key)", v-if="checkCopiedFields(field.key) && !!docData[data.dataKey][field.key]",
@click="copyValue(docData[data.dataKey][field.key])" @click="copyValue(docData[data.dataKey][field.key])"
) )
</template> </template>
@@ -93,6 +93,7 @@ export default {
docData: null, docData: null,
isCheckChange: false, isCheckChange: false,
isLoadingData: true, isLoadingData: true,
approvedPassportData: false,
copiedFields: [ copiedFields: [
"series", "series",
"number", "number",
@@ -127,8 +128,26 @@ export default {
initialDocData() { initialDocData() {
return this.$store.state.medical?.documents; return this.$store.state.medical?.documents;
}, },
passportFields() {
let excludedFields = ["photo", "id"];
return Object.keys(this.docData.passport).filter(
(key) => !excludedFields.includes(key)
);
},
}, },
methods: { methods: {
checkPassportFields(val, defaultRule) {
if (this.passportFields.every((elem) => !this.docData.passport[elem])) {
this.$refs.documentForm
.getValidationComponents()
.filter((elem) => !this.personDataField.includes(elem.name))
.forEach((elem) => elem.resetValidation());
this.approvedPassportData = true;
return true;
}
this.approvedPassportData = false;
return defaultRule(val);
},
removeImage(docKey, field) { removeImage(docKey, field) {
this.docData[docKey][field] = {}; this.docData[docKey][field] = {};
this.isCheckChange = true; this.isCheckChange = true;
@@ -145,6 +164,7 @@ export default {
this.initialDocData?.passport?.issued_by_date; this.initialDocData?.passport?.issued_by_date;
this.isEdit = false; this.isEdit = false;
this.isCheckChange = false; this.isCheckChange = false;
this.$refs.documentForm.resetValidation();
}, },
openEdit() { openEdit() {
this.isEdit = true; this.isEdit = true;
@@ -172,15 +192,16 @@ export default {
}); });
this.addErrorNotification(error?.title, error?.message); this.addErrorNotification(error?.title, error?.message);
}); });
this.cancelEdit();
} else { } else {
let passportFormData = new FormData(); let passportFormData = new FormData();
let documentsFormData = new FormData(); let documentsFormData = new FormData();
form.getValidationComponents().forEach((elem) => { form.getValidationComponents().forEach((elem) => {
if (!this.personDataField.includes(elem.name)) if (!this.personDataField.includes(elem.name)) {
if (!this.approvedPassportData)
passportFormData.append(elem.name, elem.modelValue ?? ""); passportFormData.append(elem.name, elem.modelValue ?? "");
else documentsFormData.append(elem.name, elem.modelValue ?? ""); } else documentsFormData.append(elem.name, elem.modelValue ?? "");
}); });
if (!this.approvedPassportData)
this.checkChengePhoto("passport", "photo", passportFormData); this.checkChengePhoto("passport", "photo", passportFormData);
this.checkChengePhoto( this.checkChengePhoto(
"insurance_number", "insurance_number",
@@ -193,6 +214,7 @@ export default {
documentsFormData documentsFormData
); );
let request = []; let request = [];
if (!this.approvedPassportData) {
if (!this.initialDocData.passport?.id) { if (!this.initialDocData.passport?.id) {
passportFormData.append("kind", "PASSPORT"); passportFormData.append("kind", "PASSPORT");
passportFormData.append( passportFormData.append(
@@ -212,6 +234,7 @@ export default {
passportFormData passportFormData
) )
); );
}
request.push( request.push(
this.sendData( this.sendData(
`general/person/${this.$store.state.medical?.basicData?.personalData?.id}/update/`, `general/person/${this.$store.state.medical?.basicData?.personalData?.id}/update/`,
@@ -222,6 +245,7 @@ export default {
this.$store.dispatch("getMedicalCardData"); this.$store.dispatch("getMedicalCardData");
this.isEdit = false; this.isEdit = false;
this.isCheckChange = false; this.isCheckChange = false;
this.$refs.form?.resetValidation();
}); });
} }
}); });

View File

@@ -376,7 +376,7 @@ export const documentForm = [
title: "Ошибка валидации", title: "Ошибка валидации",
message: "Серия паспорта менее 4 цифр или не заполнена", message: "Серия паспорта менее 4 цифр или не заполнена",
}, },
rules: [(val) => ruleLengthValue(val, 4)], rules: (val) => ruleLengthValue(val, 4),
}, },
{ {
key: "number", key: "number",
@@ -387,7 +387,7 @@ export const documentForm = [
title: "Ошибка валидации", title: "Ошибка валидации",
message: "Номер паспорта менее 6 цифр или не заполнен", message: "Номер паспорта менее 6 цифр или не заполнен",
}, },
rules: [(val) => ruleLengthValue(val, 6)], rules: (val) => ruleLengthValue(val, 6),
}, },
{ {
key: "issued_by_org", key: "issued_by_org",
@@ -397,7 +397,7 @@ export const documentForm = [
title: "Ошибка валидации", title: "Ошибка валидации",
message: "Поле 'Кем выдан' не заполнено", message: "Поле 'Кем выдан' не заполнено",
}, },
rules: [(val) => ruleNotValue(val)], rules: (val) => ruleNotValue(val),
}, },
{ {
key: "issued_by_org_code", key: "issued_by_org_code",
@@ -408,13 +408,13 @@ export const documentForm = [
title: "Ошибка валидации", title: "Ошибка валидации",
message: "Код подразделения менее 6 цифр или не заполнен", message: "Код подразделения менее 6 цифр или не заполнен",
}, },
rules: [(val) => ruleLengthValue(val, 7)], rules: (val) => ruleLengthValue(val, 7),
}, },
{ {
key: "issued_by_date", key: "issued_by_date",
label: "Дата выдачи", label: "Дата выдачи",
type: "date", type: "date",
rules: [(val) => ruleDateValue(val)], rules: (val) => ruleDateValue(val),
errorMessage: { errorMessage: {
title: "Ошибка валидации", title: "Ошибка валидации",
message: "Дата выдачи паспорта позднее текущего дня", message: "Дата выдачи паспорта позднее текущего дня",
@@ -440,7 +440,7 @@ export const documentForm = [
title: "Ошибка валидации", title: "Ошибка валидации",
message: "СНИЛС содержит менее 11 цифр", message: "СНИЛС содержит менее 11 цифр",
}, },
rules: [(val) => ruleOptionalFields(val, 14)], rules: (val) => ruleOptionalFields(val, 14),
}, },
{ {
key: "photo_insurance_number", key: "photo_insurance_number",
@@ -462,7 +462,7 @@ export const documentForm = [
title: "Ошибка валидации", title: "Ошибка валидации",
message: "ИНН содержит менее 12 цифр", message: "ИНН содержит менее 12 цифр",
}, },
rules: [(val) => ruleOptionalFields(val, 12)], rules: (val) => ruleOptionalFields(val, 12),
}, },
{ {
key: "photo_tax_identification_number", key: "photo_tax_identification_number",