[],
- },
});
const emit = defineEmits([
"update",
"edit",
"custom-field-update",
- "assign-model",
]);
// Données locales isolées pour cette pièce
@@ -412,10 +374,13 @@ const documentIcon = (doc) =>
getFileIcon({ name: doc.filename || doc.name, mime: doc.mimeType });
const previewDocument = ref(null);
const previewVisible = ref(false);
-const selectedPieceModelId = computed(
- () => props.piece.pieceModelId || props.piece.pieceModel?.id || ""
-);
-const pieceModelOptions = computed(() => props.pieceModelOptions || []);
+const extractStructureCustomFields = (structure) => {
+ if (!structure || typeof structure !== "object") {
+ return [];
+ }
+ const customFields = structure.customFields;
+ return Array.isArray(customFields) ? customFields : [];
+};
function fieldKeyFromNameAndType(name, type) {
const normalizedName = typeof name === 'string' ? name : '';
const normalizedType = typeof type === 'string' ? type : '';
@@ -529,25 +494,53 @@ function mergeFieldDefinitionsWithValues(definitions, values) {
return merged;
}
+const pieceDefinitionSources = computed(() => {
+ const requirement = props.piece.typeMachinePieceRequirement || {};
+ const type = requirement.typePiece || props.piece.typePiece || {};
+
+ const definitions = [];
+ const pushFields = (collection) => {
+ if (Array.isArray(collection)) {
+ definitions.push(...collection);
+ }
+ };
+
+ pushFields(props.piece.customFields);
+ pushFields(props.piece.definition?.customFields);
+ pushFields(props.piece.typePiece?.customFields);
+ pushFields(type.customFields);
+ pushFields(requirement.typePiece?.customFields);
+ pushFields(requirement.customFields);
+ pushFields(requirement.definition?.customFields);
+
+ [
+ props.piece.definition?.structure,
+ props.piece.typePiece?.structure,
+ type.structure,
+ type.pieceSkeleton,
+ props.piece.typePiece?.pieceSkeleton,
+ requirement.structure,
+ requirement.pieceSkeleton,
+ ].forEach((structure) => {
+ const fields = extractStructureCustomFields(structure);
+ if (fields.length) {
+ definitions.push(...fields);
+ }
+ });
+
+ return definitions;
+});
+
const displayedCustomFields = computed(() =>
mergeFieldDefinitionsWithValues(
- props.piece.customFields,
+ pieceDefinitionSources.value,
props.piece.customFieldValues,
),
);
const candidateCustomFields = computed(() => {
- const sources = [
- props.piece.customFieldValues?.map((value) => value?.customField),
- props.piece.typePiece?.customFields,
- props.piece.typeMachinePieceRequirement?.typePiece?.customFields,
- props.piece.typeMachinePieceRequirement?.customFields,
- props.piece.pieceModel?.customFields,
- props.piece.customFields,
- ];
-
const map = new Map();
- sources.forEach((collection) => {
+ const register = (collection) => {
if (!Array.isArray(collection)) {
return;
}
@@ -563,7 +556,10 @@ const candidateCustomFields = computed(() => {
}
map.set(key, item);
});
- });
+ };
+
+ register(props.piece.customFieldValues?.map((value) => value?.customField));
+ register(pieceDefinitionSources.value);
return Array.from(map.values());
});
@@ -827,22 +823,6 @@ const updatePiece = () => {
});
};
-const assignPieceModel = (value) => {
- const previousModelId =
- props.piece.pieceModelId || props.piece.pieceModel?.id || null;
- const previousModel = props.piece.pieceModel || null;
- props.piece.pieceModelId = value || null;
- if (!value) {
- props.piece.pieceModel = null;
- }
- emit("assign-model", {
- pieceId: props.piece.id,
- pieceModelId: value || null,
- previousModelId,
- previousModel,
- });
-};
-
const updateCustomFieldValue = async (fieldValueId, field) => {
if (!field || resolveFieldReadOnly(field)) {
return;
diff --git a/app/components/SkeletonComponentNodeSelector.vue b/app/components/SkeletonComponentNodeSelector.vue
deleted file mode 100644
index 867c317..0000000
--- a/app/components/SkeletonComponentNodeSelector.vue
+++ /dev/null
@@ -1,199 +0,0 @@
-
-
-
-
-
-
-
- {{ node.alias || node.typeComposantLabel || 'Composant' }}
-
-
- {{
- node.typeComposantLabel
- ? `Famille : ${node.typeComposantLabel}`
- : node.typeComposantId
- ? `Famille : ${node.typeComposantId}`
- : 'Famille non définie'
- }}
-
-
-
-
- Modèle : {{ selectedComponentModelLabel }}
-
-
-
-
-
-
-
-
Pièces associées
-
-
-
{{ piece.typePieceLabel || 'Pièce' }}
-
- {{
- piece.typePieceLabel
- ? `Famille : ${piece.typePieceLabel}`
- : piece.typePieceId
- ? `Famille : ${piece.typePieceId}`
- : 'Famille non définie'
- }}
-
-
-
-
-
-
-
-
Sous-composants
-
-
-
-
-
-
-
diff --git a/app/components/model-types/EditModal.vue b/app/components/model-types/EditModal.vue
index 1448c3f..5ccc6ab 100644
--- a/app/components/model-types/EditModal.vue
+++ b/app/components/model-types/EditModal.vue
@@ -9,7 +9,7 @@
Les champs marqués d'un astérisque sont obligatoires.
-
-