Restore catalogs and type-aware machine selection
This commit is contained in:
@@ -159,6 +159,27 @@
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||
<div class="form-control md:col-span-2">
|
||||
<label class="label">
|
||||
<span class="label-text text-xs">Catégorie de composant</span>
|
||||
</label>
|
||||
<select
|
||||
class="select select-bordered select-xs md:select-sm"
|
||||
:value="entry.typeComposantId || requirement.typeComposantId || ''"
|
||||
@change="setComponentRequirementType(requirement.id, entryIndex, ($event.target && $event.target.value) || '')"
|
||||
>
|
||||
<option value="">
|
||||
{{ requirement.typeComposant?.name ? `Type du requirement (${requirement.typeComposant.name})` : 'Suivre le requirement' }}
|
||||
</option>
|
||||
<option
|
||||
v-for="type in componentTypeOptions"
|
||||
:key="type.id"
|
||||
:value="type.id"
|
||||
>
|
||||
{{ type.name }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<label class="label">
|
||||
<span class="label-text text-xs">Nom du composant</span>
|
||||
@@ -266,6 +287,27 @@
|
||||
</div>
|
||||
|
||||
<div class="grid grid-cols-1 md:grid-cols-2 gap-3">
|
||||
<div class="form-control md:col-span-2">
|
||||
<label class="label">
|
||||
<span class="label-text text-xs">Catégorie de pièce</span>
|
||||
</label>
|
||||
<select
|
||||
class="select select-bordered select-xs md:select-sm"
|
||||
:value="entry.typePieceId || requirement.typePieceId || ''"
|
||||
@change="setPieceRequirementType(requirement.id, entryIndex, ($event.target && $event.target.value) || '')"
|
||||
>
|
||||
<option value="">
|
||||
{{ requirement.typePiece?.name ? `Type du requirement (${requirement.typePiece.name})` : 'Suivre le requirement' }}
|
||||
</option>
|
||||
<option
|
||||
v-for="type in pieceTypeOptions"
|
||||
:key="type.id"
|
||||
:value="type.id"
|
||||
>
|
||||
{{ type.name }}
|
||||
</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-control">
|
||||
<label class="label">
|
||||
<span class="label-text text-xs">Nom de la pièce</span>
|
||||
@@ -559,6 +601,8 @@ import ConstructeurSelect from '~/components/ConstructeurSelect.vue'
|
||||
import { useMachines } from '~/composables/useMachines'
|
||||
import { useSites } from '~/composables/useSites'
|
||||
import { useMachineTypesApi } from '~/composables/useMachineTypesApi'
|
||||
import { useComponentTypes } from '~/composables/useComponentTypes'
|
||||
import { usePieceTypes } from '~/composables/usePieceTypes'
|
||||
import { useToast } from '~/composables/useToast'
|
||||
import { sanitizeDefinitionOverrides } from '~/shared/modelUtils'
|
||||
import IconLucidePlus from '~icons/lucide/plus'
|
||||
@@ -571,6 +615,8 @@ import IconLucideCircle from '~icons/lucide/circle'
|
||||
const { createMachine, createMachineFromType } = useMachines()
|
||||
const { sites, loadSites } = useSites()
|
||||
const { machineTypes, loadMachineTypes } = useMachineTypesApi()
|
||||
const { componentTypes, loadComponentTypes } = useComponentTypes()
|
||||
const { pieceTypes, loadPieceTypes } = usePieceTypes()
|
||||
const toast = useToast()
|
||||
|
||||
const submitting = ref(false)
|
||||
@@ -592,6 +638,9 @@ const selectedMachineType = computed(() => {
|
||||
return machineTypes.value.find(type => type.id === newMachine.typeMachineId) || null
|
||||
})
|
||||
|
||||
const componentTypeOptions = computed(() => componentTypes.value || [])
|
||||
const pieceTypeOptions = computed(() => pieceTypes.value || [])
|
||||
|
||||
const getStatusBadgeClass = (status) => {
|
||||
if (status === 'ready') {
|
||||
return 'badge-success'
|
||||
@@ -602,12 +651,46 @@ const getStatusBadgeClass = (status) => {
|
||||
return 'badge-error'
|
||||
}
|
||||
|
||||
const componentTypeLabelMap = computed(() => {
|
||||
const map = new Map()
|
||||
componentTypeOptions.value.forEach((type) => {
|
||||
if (type?.id) {
|
||||
map.set(type.id, type.name || '')
|
||||
}
|
||||
})
|
||||
const requirementTypes = selectedMachineType.value?.componentRequirements || []
|
||||
requirementTypes.forEach((requirement) => {
|
||||
const type = requirement?.typeComposant
|
||||
if (type?.id && type?.name) {
|
||||
map.set(type.id, type.name)
|
||||
}
|
||||
})
|
||||
return map
|
||||
})
|
||||
|
||||
const pieceTypeLabelMap = computed(() => {
|
||||
const map = new Map()
|
||||
pieceTypeOptions.value.forEach((type) => {
|
||||
if (type?.id) {
|
||||
map.set(type.id, type.name || '')
|
||||
}
|
||||
})
|
||||
const requirementTypes = selectedMachineType.value?.pieceRequirements || []
|
||||
requirementTypes.forEach((requirement) => {
|
||||
const type = requirement?.typePiece
|
||||
if (type?.id && type?.name) {
|
||||
map.set(type.id, type.name)
|
||||
}
|
||||
})
|
||||
return map
|
||||
})
|
||||
|
||||
const resolveComponentRequirementTypeLabel = (requirement, entry) => {
|
||||
const typeId = entry?.typeComposantId || requirement?.typeComposantId || null
|
||||
if (!typeId) {
|
||||
return requirement?.typeComposant?.name || 'Type non défini'
|
||||
}
|
||||
return requirement?.typeComposant?.name || 'Type non défini'
|
||||
return componentTypeLabelMap.value.get(typeId) || requirement?.typeComposant?.name || 'Type non défini'
|
||||
}
|
||||
|
||||
const resolvePieceRequirementTypeLabel = (requirement, entry) => {
|
||||
@@ -615,7 +698,7 @@ const resolvePieceRequirementTypeLabel = (requirement, entry) => {
|
||||
if (!typeId) {
|
||||
return requirement?.typePiece?.name || 'Type non défini'
|
||||
}
|
||||
return requirement?.typePiece?.name || 'Type non défini'
|
||||
return pieceTypeLabelMap.value.get(typeId) || requirement?.typePiece?.name || 'Type non défini'
|
||||
}
|
||||
|
||||
const getComponentRequirementEntries = requirementId => componentRequirementSelections[requirementId] || []
|
||||
@@ -680,6 +763,13 @@ const removeComponentSelectionEntry = (requirementId, index) => {
|
||||
componentRequirementSelections[requirementId] = entries.filter((_, i) => i !== index)
|
||||
}
|
||||
|
||||
const setComponentRequirementType = (requirementId, index, value) => {
|
||||
const entries = getComponentRequirementEntries(requirementId)
|
||||
const entry = entries[index]
|
||||
if (!entry) return
|
||||
entry.typeComposantId = value || null
|
||||
}
|
||||
|
||||
const setComponentRequirementConstructeur = (requirementId, index, value) => {
|
||||
const entries = getComponentRequirementEntries(requirementId)
|
||||
const entry = entries[index]
|
||||
@@ -705,6 +795,13 @@ const removePieceSelectionEntry = (requirementId, index) => {
|
||||
pieceRequirementSelections[requirementId] = entries.filter((_, i) => i !== index)
|
||||
}
|
||||
|
||||
const setPieceRequirementType = (requirementId, index, value) => {
|
||||
const entries = getPieceRequirementEntries(requirementId)
|
||||
const entry = entries[index]
|
||||
if (!entry) return
|
||||
entry.typePieceId = value || null
|
||||
}
|
||||
|
||||
const setPieceRequirementConstructeur = (requirementId, index, value) => {
|
||||
const entries = getPieceRequirementEntries(requirementId)
|
||||
const entry = entries[index]
|
||||
@@ -1153,7 +1250,9 @@ watch(
|
||||
onMounted(async () => {
|
||||
await Promise.all([
|
||||
loadSites(),
|
||||
loadMachineTypes()
|
||||
loadMachineTypes(),
|
||||
loadComponentTypes(),
|
||||
loadPieceTypes()
|
||||
])
|
||||
})
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user