From 7f6d2e8c13d680a06887e03fd11330120c9b224e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=98=D0=B3=D0=BE=D1=80=D1=8C=20=D0=9D=D0=B0=D0=B4=D0=B5?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Wed, 11 Feb 2026 12:27:54 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20=D1=83=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA=20=D0=B2=D0=B0?= =?UTF-8?q?=D0=BB=D0=B8=D0=B4=D0=B0=D1=86=D0=B8=D0=B8=20=D1=81=D0=BE=D0=B1?= =?UTF-8?q?=D1=8B=D1=82=D0=B8=D0=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Добавлено подробное логирование payload и response при ошибках - Специальная обработка 400 ошибок с детализацией по полям - Alert показывает конкретные поля с ошибками валидации - Помогает диагностировать проблемы типа start_date == end_date для all_day событий --- .../static/js/components/calendarWidget.js | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/backend/static/js/components/calendarWidget.js b/backend/static/js/components/calendarWidget.js index 58b53abf..c479f9ec 100644 --- a/backend/static/js/components/calendarWidget.js +++ b/backend/static/js/components/calendarWidget.js @@ -1331,6 +1331,9 @@ export function initCalendarWidget(options = {}) { updateWeekLists(); } catch (err) { console.error('Create event error', err); + console.error('Payload sent:', payload); + console.error('Response data:', err?.data); + if (err && err.status === 403) { const where = state?.type === 'dept' ? `отделе «${currentDeptLabel()}»` : 'компании'; alert( @@ -1339,6 +1342,24 @@ export function initCalendarWidget(options = {}) { '.\n' + 'Попросите руководителя назначить вам роль «Управлять календарём отдела».' ); + } else if (err && err.status === 400) { + // Детальная информация о валидации + const errors = err?.data?.errors || err?.data; + const detail = err?.data?.detail || ''; + let errorMsg = 'Ошибка валидации события:\n\n'; + + if (detail) { + errorMsg += detail + '\n\n'; + } + + if (typeof errors === 'object' && errors !== null) { + for (const [field, messages] of Object.entries(errors)) { + const msgs = Array.isArray(messages) ? messages : [messages]; + errorMsg += `${field}: ${msgs.join(', ')}\n`; + } + } + + alert(errorMsg || 'Не удалось сохранить событие. Проверьте введенные данные.'); } else { const detail = err?.data?.detail || (typeof err?.data === 'string' ? err.data : '');