From 5e591eaea9b61aae579659ffd0b563867f1214c5 Mon Sep 17 00:00:00 2001 From: Vova Date: Wed, 3 Dec 2025 21:26:17 +0300 Subject: [PATCH] Fix document upload --- .env.development | 2 +- src/components/deals/addEdit/DocAddModal.vue | 1 + src/components/deals/addEdit/DocsCard.vue | 4 +- src/services/laravelApiService.js | 52 +++++++++++++++----- src/shared/api/deals.js | 8 +-- 5 files changed, 50 insertions(+), 17 deletions(-) diff --git a/.env.development b/.env.development index 3b3dc67..649a7f6 100644 --- a/.env.development +++ b/.env.development @@ -2,7 +2,7 @@ NODE_ENV=development VITE_API_URL=https://joyworkdev.ru VITE_LARAVEL_URL=https://llar.joyworkdev.ru VITE_LARAVEL_API_URL=https://joyworkdev.ru -VITE_DEV_SESSION_ID=e74fad113507355529accbf75227afb8 +VITE_DEV_SESSION_ID=e140a9d56a24f47046b9ab0953e5a9ee VITE_DEV_REQUISITION_ID=17539 #VITE_BASIC_AUTH_USER=adminlogin #VITE_BASIC_AUTH_PASS=adminpassword \ No newline at end of file diff --git a/src/components/deals/addEdit/DocAddModal.vue b/src/components/deals/addEdit/DocAddModal.vue index 681edd7..f7bdf0a 100644 --- a/src/components/deals/addEdit/DocAddModal.vue +++ b/src/components/deals/addEdit/DocAddModal.vue @@ -88,6 +88,7 @@ const saveDealDoc = async () => { } catch (error) { console.error('Ошибка при загрузке документа:', error); alert('Произошла ошибка при загрузке документа'); + console.log('FormData entries:', [...formData.entries()]); } // try { diff --git a/src/components/deals/addEdit/DocsCard.vue b/src/components/deals/addEdit/DocsCard.vue index 2082254..ecdf734 100644 --- a/src/components/deals/addEdit/DocsCard.vue +++ b/src/components/deals/addEdit/DocsCard.vue @@ -5,7 +5,7 @@ Превью документа @@ -34,6 +34,8 @@ import { useConfirm } from 'primevue/useconfirm'; import { useToast } from 'primevue/usetoast'; import { computed } from "vue"; +import defaultIconUrl from '@/shared/assets/images/deal/deal-doc-icon.png'; + const props = defineProps({ doc: { type: Object, diff --git a/src/services/laravelApiService.js b/src/services/laravelApiService.js index b6ce389..e3dc9ea 100644 --- a/src/services/laravelApiService.js +++ b/src/services/laravelApiService.js @@ -1,4 +1,5 @@ import { laravel_api_instance, get_user_id } from '@/shared/api'; +import axios from 'axios'; // Функция для получения куки по имени const getCookie = (name) => { @@ -16,7 +17,6 @@ const fetchData = (endpoint, options = {}) => { const { method = 'GET', data, params = {}, headers = {} } = options; // Получаем PHPSESSID - //const sessionId = getCookie('PHPSESSID'); const isDev = import.meta.env.MODE === 'development'; const sessionId = isDev @@ -24,14 +24,9 @@ const fetchData = (endpoint, options = {}) => { : getCookie('PHPSESSID'); - //const sessionId = 'bfcf0cc168ec34cf8e26950cf1038dc2'; - //const usernameDev = process.env.VUE_APP_BASIC_AUTH_USER; //const passwordDev = process.env.VUE_APP_BASIC_AUTH_PASS; //const authDev = btoa(`${usernameDev}:${passwordDev}`); - - // Проверяем окружение - //const isDev = process.env.NODE_ENV === 'development'; //let authHeaders = {}; //Добавляем Basic Auth только в dev @@ -45,24 +40,53 @@ const fetchData = (endpoint, options = {}) => { // } // } - // Извлекаем путь из endpoint: например "/clients" + // Извлекаем путь из endpoint const path = endpoint.replace(/^\//, ''); - const isFormData = data instanceof FormData; - const finalHeaders = { ...headers }; + console.log('[laravelApiService] fetchData вызван с endpoint:', endpoint); + console.log('[laravelApiService] Тип data:', data && data.constructor.name); + console.log('[laravelApiService] data instanceof FormData:', data instanceof FormData); + const isFormData = data instanceof FormData; if (isFormData) { - delete finalHeaders['Content-Type']; + console.log('[laravelApiService] Используем directAxiosInstance для FormData'); + + const laravelApiUrl = 'http://llar.joyworkdev.ru/api'; + + // временный инстанс axios без Content-Type + const directAxiosInstance = axios.create({ + baseURL: laravelApiUrl, + withCredentials: laravel_api_instance.defaults.withCredentials, + }); + + const finalHeaders = { ...headers }; + if (sessionId) { + finalHeaders['X-Session-ID'] = sessionId; + } + + logMessage("Sending FormData directly to Laravel API: " + laravelApiUrl + endpoint); + return directAxiosInstance({ + url: endpoint, + method, + data, + headers: finalHeaders, + params, + }); + } + + console.log('[laravelApiService] Используем laravel_api_instance через deal/index.php'); + + const finalHeaders = { ...headers }; + if (sessionId) { + finalHeaders['X-Session-ID'] = sessionId; } return laravel_api_instance({ - //url: isDev ? '/deal/index.php' : endpoint, url: '/deal/index.php', method, data, headers: finalHeaders, params: { - //user_id: get_user_id(), path, ...params, }, @@ -70,6 +94,10 @@ const fetchData = (endpoint, options = {}) => { }); }; +function logMessage(message) { + console.log('[laravelApiService]', message); +} + export default { fetchData, }; \ No newline at end of file diff --git a/src/shared/api/deals.js b/src/shared/api/deals.js index 31f0251..8517969 100644 --- a/src/shared/api/deals.js +++ b/src/shared/api/deals.js @@ -27,12 +27,14 @@ export const dealsApi = { * @returns {Promise} - Ответ сервера */ uploadDocument(formData) { + console.log('[dealsApi] uploadDocument вызван с FormData:', formData); + return laravelApi.fetchData('/documents', { method: 'POST', data: formData, - headers: { - 'Content-Type': 'multipart/form-data', // Важно для FormData! - }, + // headers: { + // 'Content-Type': 'multipart/form-data', // Важно для FormData! + // }, }); },