Fix delete documents
This commit is contained in:
parent
ef252e5928
commit
ad64abedd2
@ -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,
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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: () => {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user