feat: afficher fournisseur dans les libellés front

This commit is contained in:
Matthieu
2025-10-31 10:02:27 +01:00
parent ef9a8b5b7b
commit dc2bc6c70a
14 changed files with 47 additions and 47 deletions

View File

@@ -233,7 +233,7 @@
: 'text-base-content hover:bg-primary/10 hover:text-primary' : 'text-base-content hover:bg-primary/10 hover:text-primary'
" "
> >
Constructeurs Fournisseurs
</NuxtLink> </NuxtLink>
</li> </li>
</ul> </ul>
@@ -488,7 +488,7 @@
: 'text-base-content hover:bg-primary/10 hover:text-primary' : 'text-base-content hover:bg-primary/10 hover:text-primary'
" "
> >
Constructeurs Fournisseurs
</NuxtLink> </NuxtLink>
</li> </li>
</ul> </ul>

View File

@@ -98,7 +98,7 @@
</div> </div>
</div> </div>
<div class="form-control"> <div class="form-control">
<label class="label"><span class="label-text font-medium">Constructeur</span></label> <label class="label"><span class="label-text font-medium">Fournisseur</span></label>
<ConstructeurSelect <ConstructeurSelect
v-if="isEditMode" v-if="isEditMode"
class="w-full" class="w-full"

View File

@@ -26,7 +26,7 @@
v-if="options.length === 0" v-if="options.length === 0"
class="px-3 py-2 text-xs text-gray-500" class="px-3 py-2 text-xs text-gray-500"
> >
Aucun constructeur trouvé Aucun fournisseur trouvé
</div> </div>
<button <button
v-for="option in options" v-for="option in options"
@@ -55,7 +55,7 @@
<div class="flex flex-wrap gap-2 min-h-[1.5rem]"> <div class="flex flex-wrap gap-2 min-h-[1.5rem]">
<span v-if="!selectedConstructeurs.length" class="text-sm text-gray-500"> <span v-if="!selectedConstructeurs.length" class="text-sm text-gray-500">
Aucun constructeur sélectionné Aucun fournisseur sélectionné
</span> </span>
<span <span
v-for="constructeur in selectedConstructeurs" v-for="constructeur in selectedConstructeurs"
@@ -66,7 +66,7 @@
<button <button
type="button" type="button"
class="btn btn-ghost btn-xs p-0" class="btn btn-ghost btn-xs p-0"
aria-label="Retirer le constructeur" aria-label="Retirer le fournisseur"
@click="removeConstructeur(constructeur.id)" @click="removeConstructeur(constructeur.id)"
> >
<IconLucideX class="w-3 h-3" aria-hidden="true" /> <IconLucideX class="w-3 h-3" aria-hidden="true" />
@@ -77,7 +77,7 @@
<dialog class="modal" :class="{ 'modal-open': openCreateModal }"> <dialog class="modal" :class="{ 'modal-open': openCreateModal }">
<div class="modal-box"> <div class="modal-box">
<h3 class="font-bold text-lg mb-4"> <h3 class="font-bold text-lg mb-4">
Nouveau constructeur Nouveau fournisseur
</h3> </h3>
<form @submit.prevent="handleCreate"> <form @submit.prevent="handleCreate">
<div class="form-control mb-3"> <div class="form-control mb-3">
@@ -88,7 +88,7 @@
v-model="createForm.email" v-model="createForm.email"
class="mb-3" class="mb-3"
label="Email" label="Email"
placeholder="ex: contact@constructeur.com" placeholder="ex: contact@fournisseur.com"
autocomplete="email" autocomplete="email"
/> />
<FieldPhone <FieldPhone
@@ -140,7 +140,7 @@ const props = defineProps({
}, },
placeholder: { placeholder: {
type: String, type: String,
default: 'Sélectionner ou créer un constructeur...', default: 'Sélectionner ou créer un fournisseur...',
}, },
}) })

View File

@@ -32,7 +32,7 @@
<div> <div>
<p class="font-medium">Informations générales</p> <p class="font-medium">Informations générales</p>
<p class="text-xs text-base-content/60"> <p class="text-xs text-base-content/60">
Nom, site et constructeur de la machine. Nom, site et fournisseur de la machine.
</p> </p>
</div> </div>
</label> </label>

View File

@@ -67,7 +67,7 @@
}}</span> }}</span>
</div> </div>
<div> <div>
<span class="font-medium">Constructeur:</span> <span class="font-medium">Fournisseur:</span>
<div v-if="!isEditMode" class="ml-2"> <div v-if="!isEditMode" class="ml-2">
<div v-if="pieceConstructeursDisplay.length" class="space-y-1"> <div v-if="pieceConstructeursDisplay.length" class="space-y-1">
<div <div
@@ -94,7 +94,7 @@
v-else v-else
class="w-full" class="w-full"
:model-value="pieceConstructeurIds" :model-value="pieceConstructeurIds"
placeholder="Sélectionner un ou plusieurs constructeurs..." placeholder="Sélectionner un ou plusieurs fournisseurs..."
@update:model-value="handleConstructeurChange" @update:model-value="handleConstructeurChange"
/> />
</div> </div>

View File

@@ -19,7 +19,7 @@ export function useConstructeurs () {
} }
return result return result
} catch (error) { } catch (error) {
console.error('Erreur lors du chargement des constructeurs:', error) console.error('Erreur lors du chargement des fournisseurs:', error)
return { success: false, error: error.message } return { success: false, error: error.message }
} finally { } finally {
loading.value = false loading.value = false
@@ -36,14 +36,14 @@ export function useConstructeurs () {
const result = await post('/constructeurs', data) const result = await post('/constructeurs', data)
if (result.success) { if (result.success) {
constructeurs.value = [result.data, ...constructeurs.value] constructeurs.value = [result.data, ...constructeurs.value]
showSuccess(`Constructeur "${result.data.name}" créé`) showSuccess(`Fournisseur "${result.data.name}" créé`)
} else if (result.error) { } else if (result.error) {
showError(result.error) showError(result.error)
} }
return result return result
} catch (error) { } catch (error) {
console.error('Erreur lors de la création du constructeur:', error) console.error('Erreur lors de la création du fournisseur:', error)
showError('Impossible de créer le constructeur') showError('Impossible de créer le fournisseur')
return { success: false, error: error.message } return { success: false, error: error.message }
} finally { } finally {
loading.value = false loading.value = false
@@ -59,14 +59,14 @@ export function useConstructeurs () {
if (index !== -1) { if (index !== -1) {
constructeurs.value[index] = result.data constructeurs.value[index] = result.data
} }
showSuccess(`Constructeur "${result.data.name}" mis à jour`) showSuccess(`Fournisseur "${result.data.name}" mis à jour`)
} else if (result.error) { } else if (result.error) {
showError(result.error) showError(result.error)
} }
return result return result
} catch (error) { } catch (error) {
console.error('Erreur lors de la mise à jour du constructeur:', error) console.error('Erreur lors de la mise à jour du fournisseur:', error)
showError('Impossible de mettre à jour le constructeur') showError('Impossible de mettre à jour le fournisseur')
return { success: false, error: error.message } return { success: false, error: error.message }
} finally { } finally {
loading.value = false loading.value = false
@@ -79,14 +79,14 @@ export function useConstructeurs () {
const result = await del(`/constructeurs/${id}`) const result = await del(`/constructeurs/${id}`)
if (result.success) { if (result.success) {
constructeurs.value = constructeurs.value.filter(item => item.id !== id) constructeurs.value = constructeurs.value.filter(item => item.id !== id)
showSuccess('Constructeur supprimé') showSuccess('Fournisseur supprimé')
} else if (result.error) { } else if (result.error) {
showError(result.error) showError(result.error)
} }
return result return result
} catch (error) { } catch (error) {
console.error('Erreur lors de la suppression du constructeur:', error) console.error('Erreur lors de la suppression du fournisseur:', error)
showError('Impossible de supprimer le constructeur') showError('Impossible de supprimer le fournisseur')
return { success: false, error: error.message } return { success: false, error: error.message }
} finally { } finally {
loading.value = false loading.value = false

View File

@@ -89,19 +89,19 @@
type="text" type="text"
class="input input-bordered input-sm md:input-md" class="input input-bordered input-sm md:input-md"
:disabled="saving" :disabled="saving"
placeholder="Référence interne ou constructeur" placeholder="Référence interne ou fournisseur"
> >
</div> </div>
<div class="form-control"> <div class="form-control">
<label class="label"> <label class="label">
<span class="label-text">Constructeur</span> <span class="label-text">Fournisseur</span>
</label> </label>
<ConstructeurSelect <ConstructeurSelect
v-model="editionForm.constructeurIds" v-model="editionForm.constructeurIds"
class="w-full" class="w-full"
:disabled="saving" :disabled="saving"
placeholder="Rechercher un ou plusieurs constructeurs..." placeholder="Rechercher un ou plusieurs fournisseurs..."
/> />
</div> </div>
</div> </div>

View File

@@ -62,19 +62,19 @@
type="text" type="text"
class="input input-bordered input-sm md:input-md" class="input input-bordered input-sm md:input-md"
:disabled="submitting || !selectedType" :disabled="submitting || !selectedType"
placeholder="Référence interne ou constructeur" placeholder="Référence interne ou fournisseur"
> >
</div> </div>
<div class="form-control"> <div class="form-control">
<label class="label"> <label class="label">
<span class="label-text">Constructeur</span> <span class="label-text">Fournisseur</span>
</label> </label>
<ConstructeurSelect <ConstructeurSelect
v-model="creationForm.constructeurIds" v-model="creationForm.constructeurIds"
class="w-full" class="w-full"
:disabled="submitting || !selectedType" :disabled="submitting || !selectedType"
placeholder="Rechercher un ou plusieurs constructeurs..." placeholder="Rechercher un ou plusieurs fournisseurs..."
/> />
</div> </div>
</div> </div>

View File

@@ -3,15 +3,15 @@
<div class="flex items-center justify-between"> <div class="flex items-center justify-between">
<div> <div>
<h1 class="text-3xl font-bold"> <h1 class="text-3xl font-bold">
Constructeurs Fournisseurs
</h1> </h1>
<p class="text-sm text-gray-500"> <p class="text-sm text-gray-500">
Gérez les constructeurs et leurs coordonnées. Gérez les fournisseurs et leurs coordonnées.
</p> </p>
</div> </div>
<button class="btn btn-primary" @click="openCreateModal"> <button class="btn btn-primary" @click="openCreateModal">
<IconLucidePlus class="w-4 h-4 mr-2" aria-hidden="true" /> <IconLucidePlus class="w-4 h-4 mr-2" aria-hidden="true" />
Nouveau constructeur Nouveau fournisseur
</button> </button>
</div> </div>
@@ -46,11 +46,11 @@
<div v-if="loading" class="py-16 text-center text-sm text-gray-500"> <div v-if="loading" class="py-16 text-center text-sm text-gray-500">
<span class="loading loading-spinner loading-lg mb-2" /> <span class="loading loading-spinner loading-lg mb-2" />
Chargement des constructeurs... Chargement des fournisseurs...
</div> </div>
<div v-else-if="filteredConstructeurs.length === 0" class="py-16 text-center text-sm text-gray-500"> <div v-else-if="filteredConstructeurs.length === 0" class="py-16 text-center text-sm text-gray-500">
Aucun constructeur trouvé. Aucun fournisseur trouvé.
</div> </div>
<div v-else class="overflow-x-auto"> <div v-else class="overflow-x-auto">
@@ -90,7 +90,7 @@
<dialog class="modal" :class="{ 'modal-open': modalOpen }"> <dialog class="modal" :class="{ 'modal-open': modalOpen }">
<div class="modal-box"> <div class="modal-box">
<h3 class="font-bold text-lg mb-4"> <h3 class="font-bold text-lg mb-4">
{{ editingConstructeur ? 'Modifier' : 'Nouveau' }} constructeur {{ editingConstructeur ? 'Modifier' : 'Nouveau' }} fournisseur
</h3> </h3>
<form class="space-y-4" @submit.prevent="saveConstructeur"> <form class="space-y-4" @submit.prevent="saveConstructeur">
<div class="form-control"> <div class="form-control">
@@ -211,7 +211,7 @@ const saveConstructeur = async () => {
} }
const confirmDelete = async (constructeur) => { const confirmDelete = async (constructeur) => {
if (!confirm(`Supprimer le constructeur "${constructeur.name}" ?`)) { return } if (!confirm(`Supprimer le fournisseur "${constructeur.name}" ?`)) { return }
const result = await deleteConstructeur(constructeur.id) const result = await deleteConstructeur(constructeur.id)
if (!result.success && result.error) { if (!result.success && result.error) {
showError(result.error) showError(result.error)

View File

@@ -137,14 +137,14 @@
</div> </div>
<div v-if="isEditMode || hasMachineConstructeur" class="form-control"> <div v-if="isEditMode || hasMachineConstructeur" class="form-control">
<label class="label"> <label class="label">
<span class="label-text">Constructeur</span> <span class="label-text">Fournisseur</span>
</label> </label>
<ConstructeurSelect <ConstructeurSelect
v-if="isEditMode" v-if="isEditMode"
class="w-full" class="w-full"
:key="machine.value?.id" :key="machine.value?.id"
:model-value="machineConstructeurIds" :model-value="machineConstructeurIds"
placeholder="Rechercher un ou plusieurs constructeurs..." placeholder="Rechercher un ou plusieurs fournisseurs..."
@update:modelValue="handleMachineConstructeurChange" @update:modelValue="handleMachineConstructeurChange"
/> />
<div v-else class="input input-bordered bg-base-200"> <div v-else class="input input-bordered bg-base-200">

View File

@@ -196,7 +196,7 @@
Référence : {{ findComponentById(entry.composantId)?.reference || "—" }} Référence : {{ findComponentById(entry.composantId)?.reference || "—" }}
</div> </div>
<div> <div>
Constructeur : Fournisseur :
{{ findComponentById(entry.composantId)?.constructeur?.name || findComponentById(entry.composantId)?.constructeurName || "—" }} {{ findComponentById(entry.composantId)?.constructeur?.name || findComponentById(entry.composantId)?.constructeurName || "—" }}
</div> </div>
@@ -298,7 +298,7 @@
Référence : {{ findPieceById(entry.pieceId)?.reference || "—" }} Référence : {{ findPieceById(entry.pieceId)?.reference || "—" }}
</div> </div>
<div> <div>
Constructeur : Fournisseur :
{{ findPieceById(entry.pieceId)?.constructeur?.name || findPieceById(entry.pieceId)?.constructeurName || "—" }} {{ findPieceById(entry.pieceId)?.constructeur?.name || findPieceById(entry.pieceId)?.constructeurName || "—" }}
</div> </div>

View File

@@ -89,19 +89,19 @@
type="text" type="text"
class="input input-bordered input-sm md:input-md" class="input input-bordered input-sm md:input-md"
:disabled="saving" :disabled="saving"
placeholder="Référence interne ou constructeur" placeholder="Référence interne ou fournisseur"
> >
</div> </div>
<div class="form-control"> <div class="form-control">
<label class="label"> <label class="label">
<span class="label-text">Constructeur</span> <span class="label-text">Fournisseur</span>
</label> </label>
<ConstructeurSelect <ConstructeurSelect
v-model="editionForm.constructeurIds" v-model="editionForm.constructeurIds"
class="w-full" class="w-full"
:disabled="saving" :disabled="saving"
placeholder="Rechercher un ou plusieurs constructeurs..." placeholder="Rechercher un ou plusieurs fournisseurs..."
/> />
</div> </div>
</div> </div>

View File

@@ -62,19 +62,19 @@
type="text" type="text"
class="input input-bordered input-sm md:input-md" class="input input-bordered input-sm md:input-md"
:disabled="submitting || !selectedType" :disabled="submitting || !selectedType"
placeholder="Référence interne ou constructeur" placeholder="Référence interne ou fournisseur"
> >
</div> </div>
<div class="form-control"> <div class="form-control">
<label class="label"> <label class="label">
<span class="label-text">Constructeur</span> <span class="label-text">Fournisseur</span>
</label> </label>
<ConstructeurSelect <ConstructeurSelect
v-model="creationForm.constructeurId" v-model="creationForm.constructeurId"
class="w-full" class="w-full"
:disabled="submitting || !selectedType" :disabled="submitting || !selectedType"
placeholder="Rechercher un constructeur..." placeholder="Rechercher un fournisseur..."
/> />
</div> </div>
</div> </div>

View File

@@ -68,7 +68,7 @@ const renderPrintPieces = (
const constructeurBadges = (piece.constructeurs || []) const constructeurBadges = (piece.constructeurs || [])
.map((constructeur, badgeIdx) => { .map((constructeur, badgeIdx) => {
const suffix = piece.constructeurs.length > 1 ? ` ${badgeIdx + 1}` : '' const suffix = piece.constructeurs.length > 1 ? ` ${badgeIdx + 1}` : ''
return `<span class="print-badge print-badge--subtle">Constructeur${suffix}: ${constructeur.name}</span>` return `<span class="print-badge print-badge--subtle">Fournisseur${suffix}: ${constructeur.name}</span>`
}) })
.join('') .join('')
@@ -107,7 +107,7 @@ const renderPrintPieces = (
${piece.description ? `<p class="print-piece-description">${piece.description}</p>` : ''} ${piece.description ? `<p class="print-piece-description">${piece.description}</p>` : ''}
<div class="print-piece-meta"> <div class="print-piece-meta">
<div class="print-field-mini"> <div class="print-field-mini">
<label>Constructeur(s)</label> <label>Fournisseur(s)</label>
<span>${piece.constructeurs?.length <span>${piece.constructeurs?.length
? piece.constructeurs.map(constructeur => constructeur.name).join(', ') ? piece.constructeurs.map(constructeur => constructeur.name).join(', ')
: '—'}</span> : '—'}</span>