Files
Inventory/app/composables/usePieces.js
Matthieu 1ca5c347b7 feat: Composables pour la gestion des données
- useApi.js : Service API générique avec gestion d'erreurs
- useSites.js : Gestion des sites industriels
- useMachines.js : Gestion des machines et création depuis types
- useMachineTypes.js : Gestion des types de machines
- useMachineTypesApi.js : API pour les types de machines
- useComposants.js : Gestion des composants hiérarchiques
- usePieces.js : Gestion des pièces de machines
- useCustomFields.js : Gestion des champs personnalisés
- useToast.js : Système de notifications toast
2025-07-30 08:15:35 +02:00

134 lines
3.8 KiB
JavaScript

import { ref } from 'vue'
import { useToast } from './useToast'
import { useApi } from './useApi'
const pieces = ref([])
const loading = ref(false)
export function usePieces() {
const { showSuccess, showError, showInfo } = useToast()
const { get, post, patch, delete: del } = useApi()
const loadPieces = async () => {
loading.value = true
try {
const result = await get('/pieces')
if (result.success) {
pieces.value = result.data
showInfo(`Chargement de ${pieces.value.length} pièce(s) réussi`)
}
} catch (error) {
console.error('Erreur lors du chargement des pièces:', error)
} finally {
loading.value = false
}
}
const getPiecesByMachine = async (machineId) => {
loading.value = true
try {
const result = await get(`/pieces/machine/${machineId}`)
if (result.success) {
return { success: true, data: result.data }
}
return { success: false, error: result.error }
} catch (error) {
console.error('Erreur lors du chargement des pièces:', error)
return { success: false, error: error.message }
} finally {
loading.value = false
}
}
const getPiecesByComposant = async (composantId) => {
loading.value = true
try {
const result = await get(`/pieces/composant/${composantId}`)
if (result.success) {
return { success: true, data: result.data }
}
return { success: false, error: result.error }
} catch (error) {
console.error('Erreur lors du chargement des pièces:', error)
return { success: false, error: error.message }
} finally {
loading.value = false
}
}
const createPiece = async (pieceData) => {
loading.value = true
try {
const result = await post('/pieces', pieceData)
if (result.success) {
pieces.value.push(result.data)
showSuccess(`Pièce "${pieceData.name}" créée avec succès`)
}
return result
} catch (error) {
console.error('Erreur lors de la création de la pièce:', error)
return { success: false, error: error.message }
} finally {
loading.value = false
}
}
const updatePieceData = async (id, pieceData) => {
loading.value = true
try {
const result = await patch(`/pieces/${id}`, pieceData)
if (result.success) {
const index = pieces.value.findIndex(piece => piece.id === id)
if (index !== -1) {
pieces.value[index] = result.data
}
showSuccess(`Pièce "${pieceData.name}" mise à jour avec succès`)
}
return result
} catch (error) {
console.error('Erreur lors de la mise à jour de la pièce:', error)
return { success: false, error: error.message }
} finally {
loading.value = false
}
}
const deletePiece = async (id) => {
loading.value = true
try {
const result = await del(`/pieces/${id}`)
if (result.success) {
const deletedPiece = pieces.value.find(piece => piece.id === id)
pieces.value = pieces.value.filter(piece => piece.id !== id)
showSuccess(`Pièce "${deletedPiece?.name || 'inconnu'}" supprimée avec succès`)
}
return result
} catch (error) {
console.error('Erreur lors de la suppression de la pièce:', error)
return { success: false, error: error.message }
} finally {
loading.value = false
}
}
const getPieceById = (id) => {
return pieces.value.find(piece => piece.id === id)
}
const getPieces = () => pieces.value
const isLoading = () => loading.value
return {
pieces,
loading,
loadPieces,
getPiecesByMachine,
getPiecesByComposant,
createPiece,
updatePiece: updatePieceData,
deletePiece,
getPieceById,
getPieces,
isLoading
}
}