diff --git a/app/components/ComponentItem.vue b/app/components/ComponentItem.vue index c8f5cd9..6b7f4e9 100644 --- a/app/components/ComponentItem.vue +++ b/app/components/ComponentItem.vue @@ -157,6 +157,60 @@ +
+
+

Documents

+ + {{ selectedFiles.length }} fichier{{ selectedFiles.length > 1 ? 's' : '' }} sélectionné{{ selectedFiles.length > 1 ? 's' : '' }} + +
+ +

Chargement des documents...

+ + + +
+
+
+ + {{ documentIcon(document).icon }} + +
+
{{ document.name }}
+
+ {{ document.mimeType || 'Inconnu' }} • {{ formatSize(document.size) }} +
+
+
+
+ + +
+
+
+

Aucun document lié à ce composant.

+
+

Pièces du composant

@@ -194,8 +248,10 @@ diff --git a/app/components/DocumentUpload.vue b/app/components/DocumentUpload.vue index e459002..9e1bff9 100644 --- a/app/components/DocumentUpload.vue +++ b/app/components/DocumentUpload.vue @@ -34,9 +34,12 @@
+ +
+
+
Documents
+ + {{ selectedFiles.length }} fichier{{ selectedFiles.length > 1 ? 's' : '' }} sélectionné{{ selectedFiles.length > 1 ? 's' : '' }} + +
+ +

Chargement des documents...

+ + + +
+
+
+ + {{ documentIcon(document).icon }} + +
+
{{ document.name }}
+
+ {{ document.mimeType || 'Inconnu' }} • {{ formatSize(document.size) }} +
+
+
+
+ + +
+
+
+

Aucun document lié à cette pièce.

+
\ No newline at end of file + diff --git a/app/composables/useDocuments.js b/app/composables/useDocuments.js index 8cbe590..4cf8b6b 100644 --- a/app/composables/useDocuments.js +++ b/app/composables/useDocuments.js @@ -17,16 +17,23 @@ export function useDocuments() { const { get, post, delete: del } = useApi() const { showError, showSuccess } = useToast() - const loadDocuments = async () => { + const loadFromEndpoint = async (endpoint, { updateStore = false } = {}) => { loading.value = true try { - const result = await get('/documents') + const result = await get(endpoint) if (result.success) { - documents.value = result.data + const data = result.data || [] + if (updateStore) { + documents.value = data + } + return { success: true, data } + } + if (result.error) { + showError(result.error) } return result } catch (error) { - console.error('Erreur lors du chargement des documents:', error) + console.error(`Erreur lors du chargement des documents (${endpoint}):`, error) showError("Impossible de charger les documents") return { success: false, error: error.message } } finally { @@ -34,25 +41,31 @@ export function useDocuments() { } } - const loadDocumentsBySite = async (siteId) => { - if (!siteId) return { success: false, error: 'Aucun site sélectionné' } - loading.value = true - try { - const result = await get(`/documents/site/${siteId}`) - if (result.success) { - documents.value = result.data - } - return result - } catch (error) { - console.error('Erreur lors du chargement des documents du site:', error) - showError("Impossible de charger les documents du site") - return { success: false, error: error.message } - } finally { - loading.value = false - } + const loadDocuments = async (options = {}) => { + return loadFromEndpoint('/documents', { updateStore: options.updateStore ?? true }) } - const uploadDocuments = async ({ files = [], context = {} }) => { + const loadDocumentsBySite = async (siteId, options = {}) => { + if (!siteId) return { success: false, error: 'Aucun site sélectionné' } + return loadFromEndpoint(`/documents/site/${siteId}`, { updateStore: options.updateStore ?? false }) + } + + const loadDocumentsByMachine = async (machineId, options = {}) => { + if (!machineId) return { success: false, error: 'Aucune machine sélectionnée' } + return loadFromEndpoint(`/documents/machine/${machineId}`, { updateStore: options.updateStore ?? false }) + } + + const loadDocumentsByComponent = async (componentId, options = {}) => { + if (!componentId) return { success: false, error: 'Aucun composant sélectionné' } + return loadFromEndpoint(`/documents/composant/${componentId}`, { updateStore: options.updateStore ?? false }) + } + + const loadDocumentsByPiece = async (pieceId, options = {}) => { + if (!pieceId) return { success: false, error: 'Aucune pièce sélectionnée' } + return loadFromEndpoint(`/documents/piece/${pieceId}`, { updateStore: options.updateStore ?? false }) + } + + const uploadDocuments = async ({ files = [], context = {} }, { updateStore = false } = {}) => { if (!files.length) return { success: false, error: 'Aucun fichier sélectionné' } loading.value = true @@ -81,7 +94,9 @@ export function useDocuments() { } if (created.length) { - documents.value = [...created, ...documents.value] + if (updateStore) { + documents.value = [...created, ...documents.value] + } return { success: true, data: created } } @@ -95,14 +110,16 @@ export function useDocuments() { } } - const deleteDocument = async (id) => { + const deleteDocument = async (id, { updateStore = false } = {}) => { if (!id) return { success: false, error: 'Identifiant manquant' } loading.value = true try { const result = await del(`/documents/${id}`) if (result.success) { - documents.value = documents.value.filter(doc => doc.id !== id) + if (updateStore) { + documents.value = documents.value.filter(doc => doc.id !== id) + } showSuccess('Document supprimé') } return result @@ -120,6 +137,9 @@ export function useDocuments() { loading, loadDocuments, loadDocumentsBySite, + loadDocumentsByMachine, + loadDocumentsByComponent, + loadDocumentsByPiece, uploadDocuments, deleteDocument, } diff --git a/app/pages/documents.vue b/app/pages/documents.vue index 0c0cca3..f98dce2 100644 --- a/app/pages/documents.vue +++ b/app/pages/documents.vue @@ -70,8 +70,15 @@ -
{{ document.name }}
-
{{ document.filename }}
+
+ + {{ documentIcon(document).icon }} + +
+
{{ document.name }}
+
{{ document.filename }}
+
+
{{ document.mimeType || 'Inconnu' }} {{ formatSize(document.size) }} @@ -104,6 +111,7 @@