Fix validate

This commit is contained in:
Vladimir 2026-06-19 15:16:24 +03:00
parent e9ae91ab3f
commit 09b389a784

View File

@ -91,6 +91,7 @@
optionValue="id" optionValue="id"
placeholder="Выберите заявку" placeholder="Выберите заявку"
:filter="true" :filter="true"
:class="{ 'p-invalid': errors.req_side_two }"
@filter="filterRequisitionsList" @filter="filterRequisitionsList"
:virtualScrollerOptions="{ itemSize: 40 }" :virtualScrollerOptions="{ itemSize: 40 }"
> >
@ -98,6 +99,7 @@
<DropdownIcon /> <DropdownIcon />
</template> </template>
</Select> </Select>
<small v-if="errors.req_side_two" class="p-error">{{ errorMessages.req_side_two }}</small>
</div> </div>
<div class="form__item flex flex-col gap-1 w-full mb-3"> <div class="form__item flex flex-col gap-1 w-full mb-3">
@ -744,6 +746,7 @@ const errors = ref({
title: false, title: false,
side_one: false, side_one: false,
side_two: false, side_two: false,
req_side_two: false,
deal_date: false deal_date: false
}); });
@ -751,9 +754,45 @@ const errorMessages = ref({
title: '', title: '',
side_one: '', side_one: '',
side_two: '', side_two: '',
req_side_two: '',
deal_date: '' deal_date: ''
}); });
watch(() => deal.value.title, () => {
if (errors.value.title) {
errors.value.title = false;
errorMessages.value.title = '';
}
});
watch(() => deal.value.side_one, () => {
if (errors.value.side_one) {
errors.value.side_one = false;
errorMessages.value.side_one = '';
}
});
watch(() => deal.value.side_two, () => {
if (errors.value.side_two) {
errors.value.side_two = false;
errorMessages.value.side_two = '';
}
});
watch(() => deal.value.deal_date, () => {
if (errors.value.deal_date) {
errors.value.deal_date = false;
errorMessages.value.deal_date = '';
}
});
watch(selectedRequisitionSideTwoId, () => {
if (errors.value.req_side_two) {
errors.value.req_side_two = false;
errorMessages.value.req_side_two = '';
}
});
const validateForm = () => { const validateForm = () => {
let isValid = true; let isValid = true;
@ -791,6 +830,16 @@ const validateForm = () => {
errorMessages.value.side_two = ''; errorMessages.value.side_two = '';
} }
// Валидация заявки стороны 2
if (!selectedRequisitionSideTwoId.value) {
errors.value.req_side_two = true;
errorMessages.value.req_side_two = 'Выберите заявку стороны 2';
isValid = false;
} else {
errors.value.req_side_two = false;
errorMessages.value.req_side_two = '';
}
// Валидация даты сделки // Валидация даты сделки
if (!deal.value.deal_date) { if (!deal.value.deal_date) {
errors.value.deal_date = true; errors.value.deal_date = true;
@ -1539,9 +1588,19 @@ defineExpose({ closeModel });
.form__item { .form__item {
.p-invalid { .p-invalid {
border-color: #e24c4c !important;
box-shadow: 0 0 0 1px #e24c4c;
}
.p-error {
color: #e24c4c; color: #e24c4c;
} }
.error-highlight {
animation: shake 0.4s ease;
box-shadow: 0 0 0 2px #e24c4c;
}
label { label {
font-size: 16px; font-size: 16px;
font-weight: 400; font-weight: 400;
@ -1706,4 +1765,12 @@ defineExpose({ closeModel });
background: #f2f2f2; background: #f2f2f2;
} }
@keyframes shake {
0%, 100% { transform: translateX(0); }
20% { transform: translateX(-4px); }
40% { transform: translateX(4px); }
60% { transform: translateX(-4px); }
80% { transform: translateX(4px); }
}
</style> </style>