Fix upload documents

This commit is contained in:
Vladimir 2026-07-05 18:15:13 +03:00
parent b1ae591b88
commit f3143b4651
3 changed files with 27 additions and 27 deletions

View File

@ -371,8 +371,8 @@
:urlLaravel="urlLaravel" :urlLaravel="urlLaravel"
@remove="removeDoc" @remove="removeDoc"
/> />
<div class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4"> <div class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 pr-4 mb-4">
<button @click="openModalDealDoc" class="w-full h-full p-6 rounded flex flex-col items-center justify-center add-deal-doc-button"> <button @click="openModalDealDoc" class="w-full h-full p-4 rounded flex flex-col items-center justify-center add-deal-doc-button">
<img src="@/shared/assets/icons/plus-green.svg" alt="Добавить документ" class="w-6 h-6"> <img src="@/shared/assets/icons/plus-green.svg" alt="Добавить документ" class="w-6 h-6">
<p>Добавить документ</p> <p>Добавить документ</p>
</button> </button>
@ -651,6 +651,7 @@ async function loadDealData(dealId) {
id: doc.id, id: doc.id,
name: doc.name, name: doc.name,
file: doc.file, file: doc.file,
thumbnail: doc.thumbnail,
created_at: doc.created_at created_at: doc.created_at
})); }));
} else { } else {

View File

@ -77,9 +77,10 @@
</template> </template>
<script setup> <script setup>
import {inject, ref} from 'vue'; import { inject, ref } from 'vue';
//import { useLaravelApi } from '@/composables/useLaravelApi'; //import { useLaravelApi } from '@/composables/useLaravelApi';
import { dealsApi } from '@/shared/api/deal'; import { dealsApi } from '@/shared/api/deal';
import { generateThumbnail } from '@/shared/utils/generateThumbnail';
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 Button from 'primevue/button';
@ -139,8 +140,6 @@ const saveDealDoc = async () => {
return; return;
} }
//const { fetchData } = useLaravelApi();
// Создаем FormData для отправки файла // Создаем FormData для отправки файла
const formData = new FormData(); const formData = new FormData();
formData.append('name', documentName.value); formData.append('name', documentName.value);
@ -148,8 +147,17 @@ const saveDealDoc = async () => {
if (props.deal.id) { if (props.deal.id) {
formData.append('target_id', props.deal.id); formData.append('target_id', props.deal.id);
} }
formData.append('target_type', 10);
formData.append('target_type', 10); // Пример значения // Генерируем thumbnail
try {
const thumbnail = await generateThumbnail(selectedFile.value);
if (thumbnail) {
formData.append('thumbnail', thumbnail.blob, 'thumb.' + thumbnail.extension);
}
} catch (e) {
console.error('[DocAddModal] Thumbnail generation failed:', e);
}
try { try {
const response = await dealsApi.uploadDocument(formData); const response = await dealsApi.uploadDocument(formData);
@ -160,27 +168,10 @@ const saveDealDoc = async () => {
life: 3000 life: 3000
}); });
dialogRef.value.close(response.data.data) dialogRef.value.close(response.data.data)
//closeModal();
} catch (error) { } catch (error) {
console.error('Ошибка при загрузке документа:', error); console.error('Ошибка при загрузке документа:', error);
alert('Произошла ошибка при загрузке документа'); alert('Произошла ошибка при загрузке документа');
} }
// try {
// const response = await fetchData('/documents', {
// method: 'POST',
// data: formData,
// });
//
// // Передаем документ в родительский компонент
// emit('select', response.data.data);
//
// // Закрываем модальное окно
// closeModal();
// } catch (error) {
// console.error('Ошибка при загрузке документа:', error);
// alert('Произошла ошибка при загрузке документа');
// }
}; };
</script> </script>

View File

@ -1,14 +1,13 @@
<template> <template>
<div class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 pr-4"> <div class="w-full sm:w-1/2 md:w-1/3 lg:w-1/4 pr-4 mb-4">
<div class="document-card p-4 rounded flex"> <div class="document-card p-4 rounded flex">
<div class="deal-document-thumbnail w-16 h-16 shrink-0 rounded-lg overflow-hidden"> <div class="deal-document-thumbnail w-16 h-16 shrink-0 rounded-lg overflow-hidden">
<img v-if="isImage" :src="fileUrl" alt="Превью документа" class="w-full h-full object-cover" /> <img v-if="hasThumbnail" :src="thumbnailUrl" alt="Миниатюра документа" class="w-full h-full object-cover" />
<img v-else-if="isImage" :src="fileUrl" alt="Превью документа" class="w-full h-full object-cover" />
<img v-else <img v-else
:src="defaultIconUrl" :src="defaultIconUrl"
:alt="fileExtension + ' документ'" :alt="fileExtension + ' документ'"
class="w-full h-full object-contain bg-gray-100" /> class="w-full h-full object-contain bg-gray-100" />
</div> </div>
<!-- Название документа --> <!-- Название документа -->
@ -54,6 +53,15 @@ const fileUrl = computed(() => {
return `${props.urlLaravel}/storage/${props.doc.file}`; return `${props.urlLaravel}/storage/${props.doc.file}`;
}); });
const hasThumbnail = computed(() => {
return !!props.doc.thumbnail;
});
const thumbnailUrl = computed(() => {
if (!props.doc.thumbnail) return '';
return `${props.urlLaravel}/storage/${props.doc.thumbnail}`;
});
// // Проверка, является ли файл изображением // // Проверка, является ли файл изображением
const isImage = computed(() => { const isImage = computed(() => {
if (!props.doc.file) return false; if (!props.doc.file) return false;