Type de champ non pris en charge
@@ -184,7 +177,6 @@
:on-drag-enter="fieldDefs.onDragEnter"
:on-drop="fieldDefs.onDrop"
:on-drag-end="fieldDefs.onDragEnd"
- @save="fieldDefs.saveDefinitions()"
@add-field="fieldDefs.addField()"
@remove-field="fieldDefs.removeField($event)"
/>
@@ -224,9 +216,7 @@ const emit = defineEmits<{
'update:machine-reference': [value: string]
'update:machine-site-id': [value: string]
'update:constructeur-ids': [ids: unknown]
- 'blur-field': []
'set-custom-field-value': [field: any, value: unknown]
- 'update-custom-field': [field: any]
'custom-fields-saved': []
}>()
@@ -239,4 +229,8 @@ const fieldDefs = useMachineCustomFieldDefs({
watch(() => props.machineCustomFieldDefs, (newDefs) => {
fieldDefs.reinit(newDefs)
}, { deep: true })
+
+defineExpose({
+ saveFieldDefinitions: () => fieldDefs.saveDefinitions(),
+})
diff --git a/app/composables/useMachineDetailCustomFields.ts b/app/composables/useMachineDetailCustomFields.ts
index 62a36f7..d4b8790 100644
--- a/app/composables/useMachineDetailCustomFields.ts
+++ b/app/composables/useMachineDetailCustomFields.ts
@@ -376,6 +376,58 @@ export function useMachineDetailCustomFields(deps: MachineDetailCustomFieldsDeps
}
}
+ const saveAllMachineCustomFields = async () => {
+ if (!machine.value) return
+
+ const fields = Array.isArray(machineCustomFields.value) ? machineCustomFields.value : []
+ const fieldsToSave = fields.filter(
+ (field) => field.value !== undefined && field.value !== null && String(field.value).trim() !== '',
+ )
+
+ for (const field of fieldsToSave) {
+ const { id: customFieldId, customFieldValueId } = field
+
+ try {
+ if (customFieldValueId) {
+ await updateCustomFieldValueApi(customFieldValueId as string, {
+ value: field.value ?? '',
+ } as any)
+ } else if (customFieldId) {
+ const result: any = await upsertCustomFieldValue(
+ customFieldId as string,
+ 'machine',
+ machine.value.id as string,
+ field.value ?? '',
+ )
+ if (result.success) {
+ const createdValue = result.data as AnyRecord
+ if (createdValue?.id) {
+ field.customFieldValueId = createdValue.id
+ if (!createdValue.customField) {
+ createdValue.customField = {
+ id: customFieldId,
+ name: field.name,
+ type: field.type,
+ required: field.required,
+ options: field.options,
+ }
+ }
+ const existingValues = Array.isArray(machine.value.customFieldValues)
+ ? (machine.value.customFieldValues as AnyRecord[]).filter(
+ (item) => item.id !== createdValue.id,
+ )
+ : []
+ machine.value.customFieldValues = [...existingValues, createdValue]
+ }
+ }
+ }
+ } catch (error) {
+ console.error('Erreur lors de la sauvegarde du champ personnalisé:', error)
+ throw error
+ }
+ }
+ }
+
return {
// State
machineCustomFields,
@@ -392,5 +444,6 @@ export function useMachineDetailCustomFields(deps: MachineDetailCustomFieldsDeps
setMachineCustomFieldValue,
updateMachineCustomField,
updatePieceCustomField,
+ saveAllMachineCustomFields,
}
}
diff --git a/app/composables/useMachineDetailData.ts b/app/composables/useMachineDetailData.ts
index c8511ce..8e3a9f6 100644
--- a/app/composables/useMachineDetailData.ts
+++ b/app/composables/useMachineDetailData.ts
@@ -62,6 +62,7 @@ export function useMachineDetailData(machineId: string) {
const machine = ref
(null)
const productDocumentsMap = ref