Restore catalogs and type-aware machine selection
This commit is contained in:
@@ -563,6 +563,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>
|
||||
@@ -670,6 +691,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>
|
||||
@@ -778,6 +820,8 @@ import { useRoute } from 'vue-router'
|
||||
import { useMachines } from '~/composables/useMachines'
|
||||
import { useComposants } from '~/composables/useComposants'
|
||||
import { usePieces } from '~/composables/usePieces'
|
||||
import { useComponentTypes } from '~/composables/useComponentTypes'
|
||||
import { usePieceTypes } from '~/composables/usePieceTypes'
|
||||
import { useCustomFields } from '~/composables/useCustomFields'
|
||||
import { useApi } from '~/composables/useApi'
|
||||
import { useToast } from '~/composables/useToast'
|
||||
@@ -818,10 +862,12 @@ const {
|
||||
getComposantsByMachine,
|
||||
updateComposant: updateComposantApi
|
||||
} = useComposants()
|
||||
const {
|
||||
getPiecesByMachine,
|
||||
updatePiece: updatePieceApi
|
||||
const {
|
||||
getPiecesByMachine,
|
||||
updatePiece: updatePieceApi
|
||||
} = usePieces()
|
||||
const { componentTypes, loadComponentTypes } = useComponentTypes()
|
||||
const { pieceTypes, loadPieceTypes } = usePieceTypes()
|
||||
|
||||
const { upsertCustomFieldValue, updateCustomFieldValue: updateCustomFieldValueApi } = useCustomFields()
|
||||
const {
|
||||
@@ -889,8 +935,16 @@ const machineHasSkeletonRequirements = computed(() =>
|
||||
componentRequirements.value.length > 0 || pieceRequirements.value.length > 0
|
||||
)
|
||||
|
||||
const componentTypeOptions = computed(() => componentTypes.value || [])
|
||||
const pieceTypeOptions = computed(() => pieceTypes.value || [])
|
||||
|
||||
const componentTypeLabelMap = computed(() => {
|
||||
const map = new Map()
|
||||
componentTypeOptions.value.forEach((type) => {
|
||||
if (type?.id) {
|
||||
map.set(type.id, type.name || '')
|
||||
}
|
||||
})
|
||||
componentRequirements.value.forEach((requirement) => {
|
||||
const type = requirement.typeComposant
|
||||
if (type?.id) {
|
||||
@@ -902,6 +956,11 @@ const componentTypeLabelMap = computed(() => {
|
||||
|
||||
const pieceTypeLabelMap = computed(() => {
|
||||
const map = new Map()
|
||||
pieceTypeOptions.value.forEach((type) => {
|
||||
if (type?.id) {
|
||||
map.set(type.id, type.name || '')
|
||||
}
|
||||
})
|
||||
pieceRequirements.value.forEach((requirement) => {
|
||||
const type = requirement.typePiece
|
||||
if (type?.id) {
|
||||
@@ -1006,6 +1065,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]
|
||||
@@ -1030,6 +1096,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]
|
||||
@@ -2331,6 +2404,12 @@ onMounted(() => {
|
||||
if (!constructeurs.value.length) {
|
||||
loadConstructeurs()
|
||||
}
|
||||
if (!componentTypes.value.length) {
|
||||
loadComponentTypes()
|
||||
}
|
||||
if (!pieceTypes.value.length) {
|
||||
loadPieceTypes()
|
||||
}
|
||||
|
||||
// Vérifier si on doit activer le mode édition depuis l'URL
|
||||
const route = useRoute()
|
||||
|
||||
Reference in New Issue
Block a user