FIx: delete champs par default
This commit is contained in:
@@ -25,7 +25,6 @@
|
||||
<div class="flex flex-wrap gap-2 mt-2">
|
||||
<span v-if="component.reference" class="badge badge-outline badge-sm">{{ component.reference }}</span>
|
||||
<span v-if="component.constructeur" class="badge badge-outline badge-sm">{{ component.constructeur?.name }}</span>
|
||||
<span v-if="component.emplacement" class="badge badge-outline badge-sm">{{ component.emplacement }}</span>
|
||||
<span v-if="component.prix" class="badge badge-primary badge-sm">{{ component.prix }}€</span>
|
||||
<span
|
||||
v-if="component.typeMachineComponentRequirement"
|
||||
@@ -70,17 +69,6 @@
|
||||
/>
|
||||
<div v-else class="input input-bordered input-sm bg-base-200">{{ component.reference || 'Non définie' }}</div>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<label class="label"><span class="label-text font-medium">Emplacement</span></label>
|
||||
<input
|
||||
v-if="isEditMode"
|
||||
v-model="component.emplacement"
|
||||
type="text"
|
||||
class="input input-bordered input-sm"
|
||||
@blur="updateComponent"
|
||||
/>
|
||||
<div v-else class="input input-bordered input-sm bg-base-200">{{ component.emplacement || 'Non défini' }}</div>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<label class="label"><span class="label-text font-medium">Prix</span></label>
|
||||
<input
|
||||
@@ -165,7 +153,6 @@
|
||||
v-if="field.type === 'text'"
|
||||
v-model="field.value"
|
||||
type="text"
|
||||
:placeholder="field.defaultValue || ''"
|
||||
class="input input-bordered input-sm"
|
||||
:required="field.required"
|
||||
@blur="updateComponentCustomField(field)"
|
||||
@@ -174,7 +161,6 @@
|
||||
v-else-if="field.type === 'number'"
|
||||
v-model="field.value"
|
||||
type="number"
|
||||
:placeholder="field.defaultValue || ''"
|
||||
class="input input-bordered input-sm"
|
||||
:required="field.required"
|
||||
@blur="updateComponentCustomField(field)"
|
||||
@@ -186,7 +172,7 @@
|
||||
:required="field.required"
|
||||
@change="updateComponentCustomField(field)"
|
||||
>
|
||||
<option value="">{{ field.defaultValue || 'Sélectionner...' }}</option>
|
||||
<option value="">Sélectionner...</option>
|
||||
<option v-for="option in field.options" :key="option" :value="option">{{ option }}</option>
|
||||
</select>
|
||||
<div v-else-if="field.type === 'boolean'" class="flex items-center gap-2">
|
||||
@@ -204,14 +190,13 @@
|
||||
v-else-if="field.type === 'date'"
|
||||
v-model="field.value"
|
||||
type="date"
|
||||
:placeholder="field.defaultValue || ''"
|
||||
class="input input-bordered input-sm"
|
||||
:required="field.required"
|
||||
@blur="updateComponentCustomField(field)"
|
||||
/>
|
||||
</template>
|
||||
<template v-else>
|
||||
<div class="input input-bordered input-sm bg-base-200">{{ field.value || field.defaultValue || 'Non défini' }}</div>
|
||||
<div class="input input-bordered input-sm bg-base-200">{{ field.value || 'Non défini' }}</div>
|
||||
</template>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -34,17 +34,9 @@
|
||||
<option value="date">Date</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-2">
|
||||
<label class="flex items-center gap-2 text-xs">
|
||||
<input v-model="field.required" type="checkbox" class="checkbox checkbox-xs" />
|
||||
Obligatoire
|
||||
</label>
|
||||
<input
|
||||
v-model="field.defaultValue"
|
||||
type="text"
|
||||
class="input input-bordered input-xs"
|
||||
placeholder="Valeur par défaut"
|
||||
/>
|
||||
<div class="flex items-center gap-2 text-xs">
|
||||
<input v-model="field.required" type="checkbox" class="checkbox checkbox-xs" />
|
||||
Obligatoire
|
||||
</div>
|
||||
<textarea
|
||||
v-if="field.type === 'select'"
|
||||
@@ -359,7 +351,6 @@ const addCustomField = () => {
|
||||
name: '',
|
||||
type: 'text',
|
||||
required: false,
|
||||
defaultValue: '',
|
||||
optionsText: '',
|
||||
options: [],
|
||||
})
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
v-if="field.type === 'text'"
|
||||
v-model="fieldValues[field.id]"
|
||||
type="text"
|
||||
:placeholder="field.defaultValue || ''"
|
||||
class="input input-bordered input-sm"
|
||||
:required="field.required"
|
||||
@blur="updateCustomFieldValue(field.id)"
|
||||
@@ -28,7 +27,6 @@
|
||||
v-else-if="field.type === 'number'"
|
||||
v-model="fieldValues[field.id]"
|
||||
type="number"
|
||||
:placeholder="field.defaultValue || ''"
|
||||
class="input input-bordered input-sm"
|
||||
:required="field.required"
|
||||
@blur="updateCustomFieldValue(field.id)"
|
||||
@@ -42,7 +40,7 @@
|
||||
:required="field.required"
|
||||
@change="updateCustomFieldValue(field.id)"
|
||||
>
|
||||
<option value="">{{ field.defaultValue || 'Sélectionner...' }}</option>
|
||||
<option value="">Sélectionner...</option>
|
||||
<option
|
||||
v-for="option in field.options"
|
||||
:key="option"
|
||||
@@ -69,7 +67,6 @@
|
||||
v-else-if="field.type === 'date'"
|
||||
v-model="fieldValues[field.id]"
|
||||
type="date"
|
||||
:placeholder="field.defaultValue || ''"
|
||||
class="input input-bordered input-sm"
|
||||
:required="field.required"
|
||||
@blur="updateCustomFieldValue(field.id)"
|
||||
@@ -103,11 +100,11 @@ const emit = defineEmits(['update'])
|
||||
// Valeurs des champs personnalisés
|
||||
const fieldValues = reactive({})
|
||||
|
||||
// Initialiser les valeurs avec les valeurs par défaut
|
||||
// Initialiser les valeurs sans appliquer de valeur par défaut implicite
|
||||
const initializeFieldValues = () => {
|
||||
props.customFields.forEach(field => {
|
||||
if (!fieldValues[field.id]) {
|
||||
fieldValues[field.id] = field.defaultValue || ''
|
||||
if (!(field.id in fieldValues)) {
|
||||
fieldValues[field.id] = field.value ?? ''
|
||||
}
|
||||
})
|
||||
}
|
||||
@@ -132,4 +129,4 @@ watch(() => props.customFields, () => {
|
||||
onMounted(() => {
|
||||
initializeFieldValues()
|
||||
})
|
||||
</script>
|
||||
</script>
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
<div>
|
||||
<p class="font-medium">Informations générales</p>
|
||||
<p class="text-xs text-base-content/60">
|
||||
Nom, emplacement, site et constructeur de la machine.
|
||||
Nom, site et constructeur de la machine.
|
||||
</p>
|
||||
</div>
|
||||
</label>
|
||||
|
||||
@@ -71,18 +71,6 @@
|
||||
@update:modelValue="handleConstructeurChange"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<span class="font-medium">Emplacement:</span>
|
||||
<input
|
||||
v-if="isEditMode"
|
||||
:id="`piece-emplacement-${piece.id}`"
|
||||
v-model="pieceData.emplacement"
|
||||
type="text"
|
||||
class="input input-sm input-bordered ml-2"
|
||||
@blur="updatePiece"
|
||||
/>
|
||||
<span v-else class="ml-2">{{ pieceData.emplacement || 'Non défini' }}</span>
|
||||
</div>
|
||||
<div>
|
||||
<span class="font-medium">Prix:</span>
|
||||
<input
|
||||
@@ -146,7 +134,6 @@
|
||||
:value="fieldValue.value"
|
||||
@input="setCustomFieldValue(fieldValue.id, $event.target.value)"
|
||||
type="text"
|
||||
:placeholder="fieldValue.customField.defaultValue || ''"
|
||||
class="input input-bordered input-sm"
|
||||
:required="fieldValue.customField.required"
|
||||
@blur="updateCustomFieldValue(fieldValue.id)"
|
||||
@@ -158,7 +145,6 @@
|
||||
:value="fieldValue.value"
|
||||
@input="setCustomFieldValue(fieldValue.id, $event.target.value)"
|
||||
type="number"
|
||||
:placeholder="fieldValue.customField.defaultValue || ''"
|
||||
class="input input-bordered input-sm"
|
||||
:required="fieldValue.customField.required"
|
||||
@blur="updateCustomFieldValue(fieldValue.id)"
|
||||
@@ -173,7 +159,7 @@
|
||||
:required="fieldValue.customField.required"
|
||||
@blur="updateCustomFieldValue(fieldValue.id)"
|
||||
>
|
||||
<option value="">{{ fieldValue.customField.defaultValue || 'Sélectionner...' }}</option>
|
||||
<option value="">Sélectionner...</option>
|
||||
<option
|
||||
v-for="option in fieldValue.customField.options"
|
||||
:key="option"
|
||||
@@ -202,7 +188,6 @@
|
||||
:value="fieldValue.value"
|
||||
@input="setCustomFieldValue(fieldValue.id, $event.target.value)"
|
||||
type="date"
|
||||
:placeholder="fieldValue.customField.defaultValue || ''"
|
||||
class="input input-bordered input-sm"
|
||||
:required="fieldValue.customField.required"
|
||||
@blur="updateCustomFieldValue(fieldValue.id)"
|
||||
@@ -212,7 +197,7 @@
|
||||
<!-- Mode lecture seule -->
|
||||
<template v-else>
|
||||
<div class="input input-bordered input-sm bg-base-200">
|
||||
{{ fieldValue.value || fieldValue.customField.defaultValue || 'Non défini' }}
|
||||
{{ fieldValue.value || 'Non défini' }}
|
||||
</div>
|
||||
</template>
|
||||
</div>
|
||||
@@ -321,7 +306,6 @@ const emit = defineEmits(['update', 'edit', 'custom-field-update', 'assign-model
|
||||
const pieceData = reactive({
|
||||
name: props.piece.name || '',
|
||||
reference: props.piece.reference || '',
|
||||
emplacement: props.piece.emplacement || '',
|
||||
prix: props.piece.prix || ''
|
||||
})
|
||||
|
||||
@@ -484,11 +468,10 @@ watch(() => props.piece.customFieldValues, () => {
|
||||
}, { deep: true })
|
||||
|
||||
watch(
|
||||
() => [props.piece.name, props.piece.reference, props.piece.emplacement, props.piece.prix],
|
||||
() => [props.piece.name, props.piece.reference, props.piece.prix],
|
||||
() => {
|
||||
pieceData.name = props.piece.name || ''
|
||||
pieceData.reference = props.piece.reference || ''
|
||||
pieceData.emplacement = props.piece.emplacement || ''
|
||||
pieceData.prix = props.piece.prix || ''
|
||||
},
|
||||
)
|
||||
@@ -497,7 +480,6 @@ onMounted(() => {
|
||||
// Initialiser les données avec les props
|
||||
pieceData.name = props.piece.name || ''
|
||||
pieceData.reference = props.piece.reference || ''
|
||||
pieceData.emplacement = props.piece.emplacement || ''
|
||||
pieceData.prix = props.piece.prix || ''
|
||||
|
||||
// Debug: vérifier si les champs personnalisés sont présents
|
||||
|
||||
@@ -37,17 +37,9 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-2">
|
||||
<label class="flex items-center gap-2 text-xs">
|
||||
<input v-model="field.required" type="checkbox" class="checkbox checkbox-xs" />
|
||||
Obligatoire
|
||||
</label>
|
||||
<input
|
||||
v-model="field.defaultValue"
|
||||
type="text"
|
||||
class="input input-bordered input-xs"
|
||||
placeholder="Valeur par défaut"
|
||||
/>
|
||||
<div class="flex items-center gap-2 text-xs">
|
||||
<input v-model="field.required" type="checkbox" class="checkbox checkbox-xs" />
|
||||
Obligatoire
|
||||
</div>
|
||||
|
||||
<textarea
|
||||
@@ -108,7 +100,6 @@ const toEditorField = (input = {}) => ({
|
||||
name: typeof input.name === 'string' ? input.name : '',
|
||||
type: typeof input.type === 'string' && input.type ? input.type : 'text',
|
||||
required: Boolean(input.required),
|
||||
defaultValue: typeof input.defaultValue === 'string' ? input.defaultValue : '',
|
||||
optionsText: Array.isArray(input.options)
|
||||
? input.options.join('\n')
|
||||
: typeof input.optionsText === 'string'
|
||||
@@ -143,10 +134,6 @@ const normalizeFields = (fields) => {
|
||||
|
||||
const type = field.type || 'text'
|
||||
const required = Boolean(field.required)
|
||||
const defaultValue = typeof field.defaultValue === 'string'
|
||||
? field.defaultValue.trim() || undefined
|
||||
: undefined
|
||||
|
||||
let options
|
||||
if (type === 'select') {
|
||||
const raw = typeof field.optionsText === 'string' ? field.optionsText : ''
|
||||
@@ -158,9 +145,6 @@ const normalizeFields = (fields) => {
|
||||
}
|
||||
|
||||
const normalized = { name, type, required }
|
||||
if (defaultValue !== undefined) {
|
||||
normalized.defaultValue = defaultValue
|
||||
}
|
||||
if (options) {
|
||||
normalized.options = options
|
||||
}
|
||||
|
||||
@@ -78,17 +78,9 @@
|
||||
<option value="date">Date</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-2">
|
||||
<label class="flex items-center gap-2 text-xs">
|
||||
<input v-model="field.required" type="checkbox" class="checkbox checkbox-xs" />
|
||||
Obligatoire
|
||||
</label>
|
||||
<input
|
||||
v-model="field.defaultValue"
|
||||
type="text"
|
||||
class="input input-bordered input-xs"
|
||||
placeholder="Valeur par défaut"
|
||||
/>
|
||||
<div class="flex items-center gap-2 text-xs">
|
||||
<input v-model="field.required" type="checkbox" class="checkbox checkbox-xs" />
|
||||
Obligatoire
|
||||
</div>
|
||||
<textarea
|
||||
v-if="field.type === 'select'"
|
||||
@@ -373,7 +365,6 @@ const addCustomField = () => {
|
||||
name: '',
|
||||
type: 'text',
|
||||
required: false,
|
||||
defaultValue: '',
|
||||
optionsText: '',
|
||||
options: [],
|
||||
})
|
||||
|
||||
@@ -120,21 +120,15 @@
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div v-if="isSubComponentPieceCustomFieldExpanded(index, subIndex, pieceIndex, fieldIndex)" class="grid grid-cols-2 gap-1 mt-1">
|
||||
<div class="flex items-center gap-1">
|
||||
<div v-if="isSubComponentPieceCustomFieldExpanded(index, subIndex, pieceIndex, fieldIndex)" class="mt-1">
|
||||
<label class="flex items-center gap-1 text-xs">
|
||||
<input
|
||||
v-model="field.required"
|
||||
type="checkbox"
|
||||
class="checkbox checkbox-xs"
|
||||
/>
|
||||
<span class="text-xs">Obligatoire</span>
|
||||
</div>
|
||||
<input
|
||||
v-model="field.defaultValue"
|
||||
type="text"
|
||||
placeholder="Défaut"
|
||||
class="input input-bordered input-xs"
|
||||
/>
|
||||
Obligatoire
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div v-if="isSubComponentPieceCustomFieldExpanded(index, subIndex, pieceIndex, fieldIndex) && field.type === 'select'" class="mt-1">
|
||||
@@ -463,7 +457,6 @@ const addComponent = () => {
|
||||
name: '',
|
||||
reference: '',
|
||||
constructeur: '',
|
||||
emplacement: '',
|
||||
prix: null,
|
||||
pieces: [],
|
||||
customFields: [],
|
||||
@@ -511,7 +504,6 @@ const addComponentCustomField = (componentIndex) => {
|
||||
name: '',
|
||||
type: '',
|
||||
required: false,
|
||||
defaultValue: '',
|
||||
optionsText: ''
|
||||
})
|
||||
ensureComponentState(componentIndex)
|
||||
@@ -543,7 +535,6 @@ const addComponentPiece = (componentIndex) => {
|
||||
name: '',
|
||||
reference: '',
|
||||
constructeur: '',
|
||||
emplacement: '',
|
||||
prix: null,
|
||||
customFields: []
|
||||
})
|
||||
@@ -572,7 +563,6 @@ const addComponentPieceCustomField = (componentIndex, pieceIndex) => {
|
||||
name: '',
|
||||
type: '',
|
||||
required: false,
|
||||
defaultValue: '',
|
||||
optionsText: ''
|
||||
})
|
||||
ensureComponentPieceState(componentIndex, pieceIndex)
|
||||
@@ -604,7 +594,6 @@ const addSubComponent = (componentIndex) => {
|
||||
name: '',
|
||||
reference: '',
|
||||
constructeur: '',
|
||||
emplacement: '',
|
||||
prix: null,
|
||||
customFields: [],
|
||||
pieces: [],
|
||||
@@ -649,7 +638,6 @@ const addSubComponentCustomField = (componentIndex, subIndex) => {
|
||||
name: '',
|
||||
type: '',
|
||||
required: false,
|
||||
defaultValue: '',
|
||||
optionsText: ''
|
||||
})
|
||||
ensureSubComponentState(componentIndex, subIndex)
|
||||
@@ -674,7 +662,6 @@ const addSubComponentPiece = (componentIndex, subIndex) => {
|
||||
name: '',
|
||||
reference: '',
|
||||
constructeur: '',
|
||||
emplacement: '',
|
||||
prix: null,
|
||||
customFields: []
|
||||
})
|
||||
@@ -714,7 +701,6 @@ const addSubComponentPieceCustomField = (componentIndex, subIndex, pieceIndex) =
|
||||
name: '',
|
||||
type: '',
|
||||
required: false,
|
||||
defaultValue: '',
|
||||
optionsText: ''
|
||||
})
|
||||
ensureSubComponentPieceState(componentIndex, subIndex, pieceIndex)
|
||||
|
||||
@@ -92,7 +92,7 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div v-if="isFieldExpanded(fieldIndex)" class="grid grid-cols-1 md:grid-cols-2 gap-4 mt-3">
|
||||
<div v-if="isFieldExpanded(fieldIndex)" class="mt-3">
|
||||
<div class="flex items-center gap-2">
|
||||
<input
|
||||
type="checkbox"
|
||||
@@ -102,19 +102,6 @@
|
||||
/>
|
||||
<span class="text-sm">Champ obligatoire</span>
|
||||
</div>
|
||||
|
||||
<div class="form-control">
|
||||
<label class="label">
|
||||
<span class="label-text">Valeur par défaut</span>
|
||||
</label>
|
||||
<input
|
||||
:value="field.defaultValue"
|
||||
type="text"
|
||||
placeholder="Valeur par défaut"
|
||||
class="input input-bordered input-sm"
|
||||
@input="updateField(fieldIndex, { defaultValue: $event.target.value })"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div
|
||||
@@ -226,7 +213,6 @@ const addField = () => {
|
||||
name: '',
|
||||
type: '',
|
||||
required: false,
|
||||
defaultValue: '',
|
||||
optionsText: '',
|
||||
},
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user