Fix delete documents

This commit is contained in:
Vladimir 2026-06-26 09:30:10 +03:00
parent ef252e5928
commit ad64abedd2
3 changed files with 80 additions and 32 deletions

View File

@ -1129,14 +1129,28 @@ const addDoc = (doc) => {
// Удалить документ // Удалить документ
const removeDoc = async (docId) => { const removeDoc = async (docId) => {
const doc = selectedDocs.value.find(d => d.id === docId);
selectedDocs.value = selectedDocs.value.filter(d => d.id !== docId);
try { try {
await deleteData(`/documents/${docId}`, { const { fetchData } = useLaravelApi();
method: 'DELETE' 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) { } catch (error) {
console.error('Ошибка при удалении документа:', error); toast.add({
throw error; severity: 'warn',
summary: 'Документ убран из списка',
detail: 'Не удалось удалить на сервере, будет удалён при сохранении',
life: 3000
});
} }
}; };
@ -1322,9 +1336,7 @@ const saveDeal = async () => {
...deal.value, ...deal.value,
deal_date: formattedDate, deal_date: formattedDate,
employees: selectedEmployees.value.map(employee => employee.id), employees: selectedEmployees.value.map(employee => employee.id),
//side_one_clients: sideOneClients.map(client => client.id), documents: selectedDocs.value.map(doc => doc.id),
//side_two_clients: sideTwoClients.map(client => client.id),
//documents: selectedDocs.value.map(doc => doc.id),
}; };
try { try {
@ -1337,10 +1349,12 @@ const saveDeal = async () => {
}); });
if (response.data.success) { if (response.data.success) {
const docCount = selectedDocs.value.length;
const docText = docCount > 0 ? ` (${docCount} док.)` : '';
toast.add({ toast.add({
severity: 'success', severity: 'success',
summary: 'Успех', summary: 'Успех',
detail: String(response.data.message || (isEditing.value ? 'Сделка успешно обновлена' : 'Сделка успешно создана')), detail: String(response.data.message || (isEditing.value ? 'Сделка обновлена' : 'Сделка создана') + docText),
life: 3000, life: 3000,
}); });

View File

@ -5,7 +5,7 @@
<!-- <h3 class="mb-4">Добавление документа</h3>--> <!-- <h3 class="mb-4">Добавление документа</h3>-->
<div class="mb-4"> <div class="mb-4">
<label for="document-name" class="block text-sm font-medium text-gray-700">Название документа</label> <label for="document-name" class="block text-sm font-medium text-gray-700">Название документа <span class="text-red-500">*</span></label>
<InputText <InputText
id="document-name" id="document-name"
v-model="documentName" v-model="documentName"
@ -19,6 +19,7 @@
Выберите файл Выберите файл
</label> </label>
<FileUpload <FileUpload
ref="fileUploadRef"
name="file" name="file"
customUpload customUpload
:auto="false" :auto="false"
@ -26,10 +27,33 @@
accept=".pdf,.doc,.docx,.jpg,.png" accept=".pdf,.doc,.docx,.jpg,.png"
@select="onFileSelect" @select="onFileSelect"
@uploader="saveDealDoc" @uploader="saveDealDoc"
chooseLabel="Выбрать" @clear="selectedFile = null"
uploadLabel="Загрузить" >
cancelLabel="Отмена" <template #header="{ chooseCallback, uploadCallback, clearCallback, files }">
/> <div class="flex flex-wrap gap-2">
<Button @click="chooseCallback()" size="small" outlined severity="secondary">
<img :src="plusIcon" alt="" width="14" height="14" class="mr-1"> Выбрать
</Button>
<Button @click="clearCallback()" size="small" outlined severity="danger" :disabled="!files || files.length === 0">
<img :src="closeIcon" alt="" width="14" height="14" class="mr-1"> Отмена
</Button>
</div>
</template>
<template #content="{ files }">
<div v-if="files && files.length > 0" class="flex items-center justify-between gap-2 p-2">
<div class="flex items-center gap-2">
<img :src="defaultDocIcon" alt="" width="32" height="32">
<span class="text-sm">{{ files[0].name }}</span>
</div>
<Button @click="onUploadClick" size="small" outlined severity="success">
<img :src="sendIcon" alt="" width="14" height="14" class="mr-1"> Загрузить
</Button>
</div>
</template>
<template #empty>
<span class="text-gray-500">Перетащите файл сюда или нажмите "Выбрать"</span>
</template>
</FileUpload>
</div> </div>
<!-- <div class="mb-4">--> <!-- <div class="mb-4">-->
@ -58,6 +82,12 @@ import {inject, ref} from 'vue';
import { dealsApi } from '@/shared/api/deal'; import { dealsApi } from '@/shared/api/deal';
import InputText from "primevue/inputtext"; import InputText from "primevue/inputtext";
import FileUpload from 'primevue/fileupload'; 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({ // const props = defineProps({
// deal: { // deal: {
@ -68,17 +98,24 @@ import FileUpload from 'primevue/fileupload';
const dialogRef = inject('dialogRef'); const dialogRef = inject('dialogRef');
const props = dialogRef.value.data; const props = dialogRef.value.data;
const toast = useToast();
//const emit = defineEmits(['close', 'select']); //const emit = defineEmits(['close', 'select']);
// Реактивные переменные для названия и файла // Реактивные переменные для названия и файла
const documentName = ref(''); const documentName = ref('');
const selectedFile = ref(null); const selectedFile = ref(null);
const fileUploadRef = ref(null);
const onUploadClick = () => {
if (fileUploadRef.value) {
fileUploadRef.value.upload();
}
};
// Событие выбора файла // Событие выбора файла
const onFileSelect = (event) => { const onFileSelect = (event) => {
selectedFile.value = event.files[0]; selectedFile.value = event.files[0];
console.log(selectedFile);
}; };
@ -92,10 +129,13 @@ const closeModal = () => {
}; };
// Сохранение документа // Сохранение документа
const saveDealDoc = async (event) => { const saveDealDoc = async () => {
console.log('saveDealDoc вызван', event); if (!documentName.value) {
if (!documentName.value || !selectedFile.value) { alert('Заполните название документа');
alert('Пожалуйста, заполните все поля'); return;
}
if (!selectedFile.value) {
alert('Выберите файл');
return; return;
} }
@ -113,7 +153,12 @@ const saveDealDoc = async (event) => {
try { try {
const response = await dealsApi.uploadDocument(formData); 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) dialogRef.value.close(response.data.data)
//closeModal(); //closeModal();
} catch (error) { } catch (error) {

View File

@ -87,19 +87,8 @@ const confirmDelete = (event) => {
accept: async () => { accept: async () => {
try { try {
emit('remove', props.doc.id); emit('remove', props.doc.id);
toast.add({
severity: 'success',
summary: 'Успешно',
detail: 'Документ удален',
life: 3000
});
} catch (error) { } catch (error) {
toast.add({ console.error('Ошибка при удалении документа:', error);
severity: 'error',
summary: 'Ошибка',
detail: 'Не удалось удалить документ',
life: 3000
});
} }
}, },
reject: () => { reject: () => {