feat: add constructors selection and management

This commit is contained in:
Matthieu
2025-09-17 15:10:01 +02:00
parent 3c0c22ad0f
commit 0a95b90553
11 changed files with 635 additions and 53 deletions

View File

@@ -34,15 +34,16 @@
</div>
<div>
<span class="font-medium">Constructeur:</span>
<input
v-if="isEditMode"
:id="`piece-constructeur-${piece.id}`"
v-model="pieceData.constructeur"
type="text"
class="input input-sm input-bordered ml-2"
@blur="updatePiece"
<span v-if="!isEditMode" class="ml-2">
<span class="font-medium">{{ piece.constructeur?.name || 'Non défini' }}</span>
<span v-if="piece.constructeur" class="block text-xs text-gray-500">
{{ [piece.constructeur?.email, piece.constructeur?.phone].filter(Boolean).join(' ') }}
</span>
</span>
<ConstructeurSelect
v-else
v-model="piece.constructeurId"
/>
<span v-else class="ml-2">{{ pieceData.constructeur || 'Non défini' }}</span>
</div>
<div>
<span class="font-medium">Emplacement:</span>
@@ -229,6 +230,7 @@ import { useToast } from '~/composables/useToast'
import { useDocuments } from '~/composables/useDocuments'
import { getFileIcon } from '~/utils/fileIcons'
import DocumentUpload from '~/components/DocumentUpload.vue'
import ConstructeurSelect from './ConstructeurSelect.vue'
const props = defineProps({
piece: {
@@ -247,7 +249,6 @@ const emit = defineEmits(['update', 'edit', 'custom-field-update'])
const pieceData = reactive({
name: props.piece.name || '',
reference: props.piece.reference || '',
constructeur: props.piece.constructeur || '',
emplacement: props.piece.emplacement || '',
prix: props.piece.prix || ''
})
@@ -336,6 +337,17 @@ watch(
}
)
watch(
() => props.piece.constructeurId,
(newVal, oldVal) => {
if (!props.isEditMode) return
if (oldVal === undefined) return
if (newVal !== oldVal) {
updatePiece()
}
}
)
// Méthodes pour gérer les champs personnalisés
const setCustomFieldValue = (fieldValueId, value) => {
const fieldValue = props.piece.customFieldValues?.find(fv => fv.id === fieldValueId)
@@ -349,7 +361,8 @@ const updatePiece = () => {
emit('update', {
...props.piece,
...pieceData,
prix: prixValue && prixValue !== '' ? parseFloat(prixValue) : null
prix: prixValue && prixValue !== '' ? parseFloat(prixValue) : null,
constructeurId: props.piece.constructeurId || null,
})
}
@@ -377,7 +390,6 @@ onMounted(() => {
// Initialiser les données avec les props
pieceData.name = props.piece.name || ''
pieceData.reference = props.piece.reference || ''
pieceData.constructeur = props.piece.constructeur || ''
pieceData.emplacement = props.piece.emplacement || ''
pieceData.prix = props.piece.prix || ''