diff --git a/front_vue/src/components/Board.vue b/front_vue/src/components/Board.vue index a058063..d56fb69 100644 --- a/front_vue/src/components/Board.vue +++ b/front_vue/src/components/Board.vue @@ -434,8 +434,6 @@ defineExpose({ saveTask, deleteTask, archiveTask }) -ms-overflow-style: none; /* Предотвращаем системные жесты (pull-to-refresh) */ overscroll-behavior: contain; - /* Разрешаем и горизонтальный и вертикальный pan - колонки внутри скроллятся вертикально */ - touch-action: pan-x pan-y; } .board.mobile .columns::-webkit-scrollbar { diff --git a/front_vue/src/components/Column.vue b/front_vue/src/components/Column.vue index a6fc421..3a2a0cc 100644 --- a/front_vue/src/components/Column.vue +++ b/front_vue/src/components/Column.vue @@ -142,17 +142,33 @@ const handleDrop = (e) => { .column.mobile { width: 100vw; min-width: 100vw; - height: 100%; - max-height: none; + /* Высота по контенту, но ограничена доступным пространством */ + height: fit-content; + max-height: calc(100% - 20px); padding: 0 16px; scroll-snap-align: start; scroll-snap-stop: always; flex-shrink: 0; + /* Вертикальный скролл на уровне колонки - убирает вложенные скроллы */ + overflow-y: auto; + overflow-x: hidden; +} + +/* Скрываем скроллбар в мобильной версии - пользователи свайпают пальцем */ +.column.mobile { + scrollbar-width: none; + -ms-overflow-style: none; +} + +.column.mobile::-webkit-scrollbar { + display: none; } .column.mobile .cards { - max-height: calc(100vh - 320px); - overflow-y: auto; + /* Без overflow - скролл на уровне .column */ + max-height: none; + overflow: visible; + min-height: auto; } .column.drag-over .cards { diff --git a/front_vue/src/components/ProjectPanel.vue b/front_vue/src/components/ProjectPanel.vue index c4e0d64..425843c 100644 --- a/front_vue/src/components/ProjectPanel.vue +++ b/front_vue/src/components/ProjectPanel.vue @@ -772,6 +772,13 @@ const handleSave = async () => { try { if (isNew.value) { + // Проверяем что у всех колонок есть имена + const emptyColumnNew = form.value.columns.find(c => !c.name_columns?.trim()) + if (emptyColumnNew) { + toast.error('Укажите название для всех колонок') + return + } + // Проверяем что у всех отделов есть имена (для нового проекта тоже) const emptyDeptNew = form.value.departments.find(d => !d.name_departments?.trim()) if (emptyDeptNew) { @@ -826,6 +833,13 @@ const handleSave = async () => { } } else { // Редактирование проекта + // Проверяем что у всех колонок есть имена + const emptyColumn = form.value.columns.find(c => !c.name_columns?.trim()) + if (emptyColumn) { + toast.error('Укажите название для всех колонок') + return + } + // Обновляем название если изменилось if (form.value.name !== initialForm.value.name) { await store.updateProject(props.project.id, form.value.name) diff --git a/front_vue/src/components/ui/SelectDropdown.vue b/front_vue/src/components/ui/SelectDropdown.vue index 8091119..8320470 100644 --- a/front_vue/src/components/ui/SelectDropdown.vue +++ b/front_vue/src/components/ui/SelectDropdown.vue @@ -9,6 +9,7 @@ :alt="selectedOption.label" class="option-avatar" > + {{ selectedOption.label[0] }} {{ selectedOption?.label || placeholder }} @@ -54,6 +55,7 @@ :alt="option.label" class="option-avatar" > + {{ (option.label || '?')[0] }}