From 7e1482f515c37dd9f1881e07384231ce1f402776 Mon Sep 17 00:00:00 2001 From: Falknat Date: Thu, 15 Jan 2026 15:27:39 +0700 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BE=D0=BA?= =?UTF-8?q?=20=D1=84=D1=80=D0=BE=D0=BD=D1=82=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Правим фронт от ошибок --- .gitignore | 3 +- front_vue/src/components/Board.vue | 43 +++ front_vue/src/components/Card.vue | 77 ++++- front_vue/src/components/Column.vue | 3 +- front_vue/src/components/ConfirmDialog.vue | 30 +- .../src/components/TaskPanel/CommentForm.vue | 9 +- .../components/TaskPanel/TaskCommentsTab.vue | 12 +- .../src/components/TaskPanel/TaskPanel.vue | 96 ++++--- front_vue/src/components/ui/MoveCardPanel.vue | 266 ++++++++++++++++++ front_vue/src/views/ArchivePage.vue | 32 ++- front_vue/src/views/MainApp.vue | 2 +- 11 files changed, 513 insertions(+), 60 deletions(-) create mode 100644 front_vue/src/components/ui/MoveCardPanel.vue diff --git a/.gitignore b/.gitignore index bf162d7..8eaf4a3 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,5 @@ backend/public/* # Личные файлы deploy.js deploy.php -.vscode \ No newline at end of file +.vscode +.cursorrules \ No newline at end of file diff --git a/front_vue/src/components/Board.vue b/front_vue/src/components/Board.vue index 8f58093..6edb1e2 100644 --- a/front_vue/src/components/Board.vue +++ b/front_vue/src/components/Board.vue @@ -12,6 +12,7 @@ @open-task="(card) => emit('open-task', { card, columnId: column.id })" @create-task="emit('create-task', column.id)" @archive-task="archiveTask" + @move-request="handleMoveRequest" /> @@ -29,17 +30,59 @@ > + + + + + diff --git a/front_vue/src/views/ArchivePage.vue b/front_vue/src/views/ArchivePage.vue index 3dc184f..eb0337e 100644 --- a/front_vue/src/views/ArchivePage.vue +++ b/front_vue/src/views/ArchivePage.vue @@ -108,8 +108,8 @@ :users="store.users" :current-user-id="store.currentUserId" :is-project-admin="store.isProjectAdmin" + :on-save="handleSaveTask" @close="closePanel" - @save="handleSaveTask" @delete="handleDeleteTask" @restore="handleRestoreFromPanel" /> @@ -120,6 +120,8 @@ title="Удалить задачу?" message="Задача будет удалена безвозвратно. Это действие нельзя отменить." confirm-text="Удалить" + variant="danger" + :is-loading="isDeleting" @confirm="handleConfirmDelete" @cancel="confirmDialogOpen = false" /> @@ -141,6 +143,10 @@ import { useMobile } from '../composables/useMobile' const { isMobile } = useMobile() +// ==================== СОСТОЯНИЯ ЗАГРУЗКИ ==================== +const isRestoring = ref(false) +const isDeleting = ref(false) + // ==================== STORE ==================== const store = useProjectsStore() @@ -288,21 +294,33 @@ const confirmDelete = (cardId) => { } const handleConfirmDelete = async () => { - if (cardToDelete.value) { + if (isDeleting.value || !cardToDelete.value) return + + isDeleting.value = true + try { const result = await cardsApi.delete(cardToDelete.value) if (result.success) { cards.value = cards.value.filter(c => c.id !== cardToDelete.value) } + confirmDialogOpen.value = false + cardToDelete.value = null + } finally { + isDeleting.value = false } - confirmDialogOpen.value = false - cardToDelete.value = null } // ==================== ВОССТАНОВЛЕНИЕ ==================== const handleRestore = async (cardId) => { - const result = await cardsApi.setArchive(cardId, 0) - if (result.success) { - cards.value = cards.value.filter(c => c.id !== cardId) + if (isRestoring.value) return + + isRestoring.value = true + try { + const result = await cardsApi.setArchive(cardId, 0) + if (result.success) { + cards.value = cards.value.filter(c => c.id !== cardId) + } + } finally { + isRestoring.value = false } } diff --git a/front_vue/src/views/MainApp.vue b/front_vue/src/views/MainApp.vue index b8d1765..5f18f22 100644 --- a/front_vue/src/views/MainApp.vue +++ b/front_vue/src/views/MainApp.vue @@ -93,8 +93,8 @@ :users="store.users" :current-user-id="store.currentUserId" :is-project-admin="store.isProjectAdmin" + :on-save="handleSaveTask" @close="closePanel" - @save="handleSaveTask" @delete="handleDeleteTask" @archive="handleArchiveTask" />