feat(machines) : ajoute le clonage par catégorie (structure seule)
Nouveau mode de clonage de machine via le paramètre `mode` de
POST /api/machines/{id}/clone :
- mode "full" (défaut) : comportement inchangé (clone complet)
- mode "structure" : ne recopie que les catégories des slots
(modelType), composant/pièce/produit concrets laissés vides
(slots à compléter), sans overrides ni custom field values
Front : sélecteur de mode dans la page de création de machine,
visible uniquement quand une machine source est choisie.
This commit is contained in:
@@ -33,6 +33,9 @@ export function useMachineCreatePage() {
|
||||
siteId: '',
|
||||
reference: '',
|
||||
cloneFromMachineId: '',
|
||||
// 'full' = clone complet (composants/pièces concrets) ; 'structure' = catégories
|
||||
// uniquement (slots à compléter).
|
||||
cloneMode: 'full' as 'full' | 'structure',
|
||||
})
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -57,6 +60,7 @@ export function useMachineCreatePage() {
|
||||
result = await cloneMachine(newMachine.cloneFromMachineId, {
|
||||
name: newMachine.name,
|
||||
siteId: newMachine.siteId,
|
||||
mode: newMachine.cloneMode,
|
||||
...(newMachine.reference ? { reference: newMachine.reference } : {}),
|
||||
})
|
||||
} else {
|
||||
|
||||
@@ -169,7 +169,7 @@ export function useMachines() {
|
||||
}
|
||||
}
|
||||
|
||||
const cloneMachine = async (sourceId: string, data: { name: string; siteId: string; reference?: string }): Promise<ApiResponse> => {
|
||||
const cloneMachine = async (sourceId: string, data: { name: string; siteId: string; reference?: string; mode?: 'full' | 'structure' }): Promise<ApiResponse> => {
|
||||
loading.value = true
|
||||
try {
|
||||
const result = await post(`/machines/${sourceId}/clone`, data)
|
||||
|
||||
@@ -103,6 +103,41 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Clone mode (visible only when a source machine is selected) -->
|
||||
<div v-if="c.newMachine.cloneFromMachineId" class="form-control">
|
||||
<label class="label">
|
||||
<span class="label-text">Mode de clonage</span>
|
||||
</label>
|
||||
<div class="flex flex-col gap-2 sm:flex-row sm:gap-6">
|
||||
<label class="flex items-start gap-2 cursor-pointer">
|
||||
<input
|
||||
v-model="c.newMachine.cloneMode"
|
||||
type="radio"
|
||||
value="full"
|
||||
class="radio radio-primary radio-sm mt-0.5"
|
||||
:disabled="!canEdit"
|
||||
>
|
||||
<span class="text-sm">
|
||||
Tout cloner
|
||||
<span class="block text-xs text-gray-500">Structure + composants et pièces assignés</span>
|
||||
</span>
|
||||
</label>
|
||||
<label class="flex items-start gap-2 cursor-pointer">
|
||||
<input
|
||||
v-model="c.newMachine.cloneMode"
|
||||
type="radio"
|
||||
value="structure"
|
||||
class="radio radio-primary radio-sm mt-0.5"
|
||||
:disabled="!canEdit"
|
||||
>
|
||||
<span class="text-sm">
|
||||
Structure seule
|
||||
<span class="block text-xs text-gray-500">Catégories uniquement, slots à compléter</span>
|
||||
</span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Actions -->
|
||||
<div class="flex justify-end gap-3 pt-4 border-t border-base-200">
|
||||
<NuxtLink to="/machines" class="btn btn-outline btn-sm md:btn-md">
|
||||
|
||||
Reference in New Issue
Block a user