diff --git a/src/components/base/BaseButton.vue b/src/components/base/BaseButton.vue index 26b6062..7e465a8 100644 --- a/src/components/base/BaseButton.vue +++ b/src/components/base/BaseButton.vue @@ -1,6 +1,6 @@ @@ -93,6 +93,7 @@ export default { docData: null, isCheckChange: false, isLoadingData: true, + approvedPassportData: false, copiedFields: [ "series", "number", @@ -127,8 +128,26 @@ export default { initialDocData() { return this.$store.state.medical?.documents; }, + passportFields() { + let excludedFields = ["photo", "id"]; + return Object.keys(this.docData.passport).filter( + (key) => !excludedFields.includes(key) + ); + }, }, 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) { this.docData[docKey][field] = {}; this.isCheckChange = true; @@ -145,6 +164,7 @@ export default { this.initialDocData?.passport?.issued_by_date; this.isEdit = false; this.isCheckChange = false; + this.$refs.documentForm.resetValidation(); }, openEdit() { this.isEdit = true; @@ -172,16 +192,17 @@ export default { }); this.addErrorNotification(error?.title, error?.message); }); - this.cancelEdit(); } else { let passportFormData = new FormData(); let documentsFormData = new FormData(); form.getValidationComponents().forEach((elem) => { - if (!this.personDataField.includes(elem.name)) - passportFormData.append(elem.name, elem.modelValue ?? ""); - else documentsFormData.append(elem.name, elem.modelValue ?? ""); + if (!this.personDataField.includes(elem.name)) { + if (!this.approvedPassportData) + passportFormData.append(elem.name, elem.modelValue ?? ""); + } else documentsFormData.append(elem.name, elem.modelValue ?? ""); }); - this.checkChengePhoto("passport", "photo", passportFormData); + if (!this.approvedPassportData) + this.checkChengePhoto("passport", "photo", passportFormData); this.checkChengePhoto( "insurance_number", "photo_insurance_number", @@ -193,25 +214,27 @@ export default { documentsFormData ); let request = []; - if (!this.initialDocData.passport?.id) { - passportFormData.append("kind", "PASSPORT"); - passportFormData.append( - "person", - this.$store.state.medical?.basicData?.personalData?.id - ); - request.push( - this.sendData( - "general/identity_document/create/", - passportFormData - ) - ); - } else - request.push( - this.sendData( - `general/identity_document/${this.initialDocData.passport?.id}/update/`, - passportFormData - ) - ); + if (!this.approvedPassportData) { + if (!this.initialDocData.passport?.id) { + passportFormData.append("kind", "PASSPORT"); + passportFormData.append( + "person", + this.$store.state.medical?.basicData?.personalData?.id + ); + request.push( + this.sendData( + "general/identity_document/create/", + passportFormData + ) + ); + } else + request.push( + this.sendData( + `general/identity_document/${this.initialDocData.passport?.id}/update/`, + passportFormData + ) + ); + } request.push( this.sendData( `general/person/${this.$store.state.medical?.basicData?.personalData?.id}/update/`, @@ -222,6 +245,7 @@ export default { this.$store.dispatch("getMedicalCardData"); this.isEdit = false; this.isCheckChange = false; + this.$refs.form?.resetValidation(); }); } }); diff --git a/src/pages/newMedicalCard/utils/medicalConfig.js b/src/pages/newMedicalCard/utils/medicalConfig.js index 626e297..0eed8f9 100644 --- a/src/pages/newMedicalCard/utils/medicalConfig.js +++ b/src/pages/newMedicalCard/utils/medicalConfig.js @@ -376,7 +376,7 @@ export const documentForm = [ title: "Ошибка валидации", message: "Серия паспорта менее 4 цифр или не заполнена", }, - rules: [(val) => ruleLengthValue(val, 4)], + rules: (val) => ruleLengthValue(val, 4), }, { key: "number", @@ -387,7 +387,7 @@ export const documentForm = [ title: "Ошибка валидации", message: "Номер паспорта менее 6 цифр или не заполнен", }, - rules: [(val) => ruleLengthValue(val, 6)], + rules: (val) => ruleLengthValue(val, 6), }, { key: "issued_by_org", @@ -397,7 +397,7 @@ export const documentForm = [ title: "Ошибка валидации", message: "Поле 'Кем выдан' не заполнено", }, - rules: [(val) => ruleNotValue(val)], + rules: (val) => ruleNotValue(val), }, { key: "issued_by_org_code", @@ -408,13 +408,13 @@ export const documentForm = [ title: "Ошибка валидации", message: "Код подразделения менее 6 цифр или не заполнен", }, - rules: [(val) => ruleLengthValue(val, 7)], + rules: (val) => ruleLengthValue(val, 7), }, { key: "issued_by_date", label: "Дата выдачи", type: "date", - rules: [(val) => ruleDateValue(val)], + rules: (val) => ruleDateValue(val), errorMessage: { title: "Ошибка валидации", message: "Дата выдачи паспорта позднее текущего дня", @@ -440,7 +440,7 @@ export const documentForm = [ title: "Ошибка валидации", message: "СНИЛС содержит менее 11 цифр", }, - rules: [(val) => ruleOptionalFields(val, 14)], + rules: (val) => ruleOptionalFields(val, 14), }, { key: "photo_insurance_number", @@ -462,7 +462,7 @@ export const documentForm = [ title: "Ошибка валидации", message: "ИНН содержит менее 12 цифр", }, - rules: [(val) => ruleOptionalFields(val, 12)], + rules: (val) => ruleOptionalFields(val, 12), }, { key: "photo_tax_identification_number",