Fix delete documents
This commit is contained in:
parent
ef252e5928
commit
ad64abedd2
@ -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,
|
||||
});
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@
|
||||
<!-- <h3 class="mb-4">Добавление документа</h3>-->
|
||||
|
||||
<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
|
||||
id="document-name"
|
||||
v-model="documentName"
|
||||
@ -19,6 +19,7 @@
|
||||
Выберите файл
|
||||
</label>
|
||||
<FileUpload
|
||||
ref="fileUploadRef"
|
||||
name="file"
|
||||
customUpload
|
||||
:auto="false"
|
||||
@ -26,10 +27,33 @@
|
||||
accept=".pdf,.doc,.docx,.jpg,.png"
|
||||
@select="onFileSelect"
|
||||
@uploader="saveDealDoc"
|
||||
chooseLabel="Выбрать"
|
||||
uploadLabel="Загрузить"
|
||||
cancelLabel="Отмена"
|
||||
/>
|
||||
@clear="selectedFile = null"
|
||||
>
|
||||
<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 class="mb-4">-->
|
||||
@ -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) {
|
||||
|
||||
@ -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: () => {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user