From ad64abedd235f03a2fc725ad2d32a3a3b0a6e667 Mon Sep 17 00:00:00 2001 From: Vladimir Date: Fri, 26 Jun 2026 09:30:10 +0300 Subject: [PATCH] Fix delete documents --- src/components/deal/DealModal.vue | 32 +++++++--- src/components/deal/addEdit/DocAddModal.vue | 67 +++++++++++++++++---- src/components/deal/addEdit/DocsCard.vue | 13 +--- 3 files changed, 80 insertions(+), 32 deletions(-) diff --git a/src/components/deal/DealModal.vue b/src/components/deal/DealModal.vue index 660df93..730750e 100644 --- a/src/components/deal/DealModal.vue +++ b/src/components/deal/DealModal.vue @@ -1129,14 +1129,28 @@ const addDoc = (doc) => { // Удалить документ const removeDoc = async (docId) => { + const doc = selectedDocs.value.find(d => d.id === docId); + selectedDocs.value = selectedDocs.value.filter(d => d.id !== docId); + try { - await deleteData(`/documents/${docId}`, { - method: 'DELETE' + const { fetchData } = useLaravelApi(); + await fetchData(`/documents/${docId}`, { + method: 'PUT', + data: { soft_delete: true }, + }); + toast.add({ + severity: 'success', + summary: 'Документ удалён', + detail: doc ? `«${doc.name}» удалён` : 'Документ удалён', + life: 3000 }); - selectedDocs.value = selectedDocs.value.filter(doc => doc.id !== docId); } catch (error) { - console.error('Ошибка при удалении документа:', error); - throw error; + toast.add({ + severity: 'warn', + summary: 'Документ убран из списка', + detail: 'Не удалось удалить на сервере, будет удалён при сохранении', + life: 3000 + }); } }; @@ -1322,9 +1336,7 @@ const saveDeal = async () => { ...deal.value, deal_date: formattedDate, employees: selectedEmployees.value.map(employee => employee.id), - //side_one_clients: sideOneClients.map(client => client.id), - //side_two_clients: sideTwoClients.map(client => client.id), - //documents: selectedDocs.value.map(doc => doc.id), + documents: selectedDocs.value.map(doc => doc.id), }; try { @@ -1337,10 +1349,12 @@ const saveDeal = async () => { }); if (response.data.success) { + const docCount = selectedDocs.value.length; + const docText = docCount > 0 ? ` (${docCount} док.)` : ''; toast.add({ severity: 'success', summary: 'Успех', - detail: String(response.data.message || (isEditing.value ? 'Сделка успешно обновлена' : 'Сделка успешно создана')), + detail: String(response.data.message || (isEditing.value ? 'Сделка обновлена' : 'Сделка создана') + docText), life: 3000, }); diff --git a/src/components/deal/addEdit/DocAddModal.vue b/src/components/deal/addEdit/DocAddModal.vue index f11c514..b1eb0e7 100644 --- a/src/components/deal/addEdit/DocAddModal.vue +++ b/src/components/deal/addEdit/DocAddModal.vue @@ -5,7 +5,7 @@
- + + @clear="selectedFile = null" + > + + + +
@@ -58,6 +82,12 @@ import {inject, ref} from 'vue'; import { dealsApi } from '@/shared/api/deal'; import InputText from "primevue/inputtext"; import FileUpload from 'primevue/fileupload'; +import Button from 'primevue/button'; +import defaultDocIcon from '@/shared/assets/images/deal/deal-doc-icon.png'; +import plusIcon from '@/shared/assets/icons/plus-green.svg'; +import sendIcon from '@/shared/assets/icons/send.svg'; +import closeIcon from '@/shared/assets/icons/close.svg'; +import {useToast} from 'primevue/usetoast'; // const props = defineProps({ // deal: { @@ -68,17 +98,24 @@ import FileUpload from 'primevue/fileupload'; const dialogRef = inject('dialogRef'); const props = dialogRef.value.data; +const toast = useToast(); //const emit = defineEmits(['close', 'select']); // Реактивные переменные для названия и файла const documentName = ref(''); const selectedFile = ref(null); +const fileUploadRef = ref(null); + +const onUploadClick = () => { + if (fileUploadRef.value) { + fileUploadRef.value.upload(); + } +}; // Событие выбора файла const onFileSelect = (event) => { selectedFile.value = event.files[0]; - console.log(selectedFile); }; @@ -92,10 +129,13 @@ const closeModal = () => { }; // Сохранение документа -const saveDealDoc = async (event) => { - console.log('saveDealDoc вызван', event); - if (!documentName.value || !selectedFile.value) { - alert('Пожалуйста, заполните все поля'); +const saveDealDoc = async () => { + if (!documentName.value) { + alert('Заполните название документа'); + return; + } + if (!selectedFile.value) { + alert('Выберите файл'); return; } @@ -113,7 +153,12 @@ const saveDealDoc = async (event) => { try { const response = await dealsApi.uploadDocument(formData); - //emit('select', response.data.data); + toast.add({ + severity: 'success', + summary: 'Документ загружен', + detail: `«${documentName.value}» успешно добавлен`, + life: 3000 + }); dialogRef.value.close(response.data.data) //closeModal(); } catch (error) { diff --git a/src/components/deal/addEdit/DocsCard.vue b/src/components/deal/addEdit/DocsCard.vue index 28841b7..ebe4b01 100644 --- a/src/components/deal/addEdit/DocsCard.vue +++ b/src/components/deal/addEdit/DocsCard.vue @@ -87,19 +87,8 @@ const confirmDelete = (event) => { accept: async () => { try { emit('remove', props.doc.id); - toast.add({ - severity: 'success', - summary: 'Успешно', - detail: 'Документ удален', - life: 3000 - }); } catch (error) { - toast.add({ - severity: 'error', - summary: 'Ошибка', - detail: 'Не удалось удалить документ', - life: 3000 - }); + console.error('Ошибка при удалении документа:', error); } }, reject: () => {