fix(transport) : indexation réellement plafonnée à 100 % — re-synchronise le champ amount contrôlé via :key (ERP-170)

This commit is contained in:
2026-06-17 14:16:40 +02:00
parent 0d284fe488
commit 02d2fde653
2 changed files with 33 additions and 3 deletions
@@ -64,13 +64,14 @@
</div> </div>
<template v-if="showCharteredFields"> <template v-if="showCharteredFields">
<MalioInputAmount <MalioInputAmount
:key="indexationKey"
:model-value="main.indexationRate" :model-value="main.indexationRate"
:label="t('transport.carriers.form.main.indexationRate')" :label="t('transport.carriers.form.main.indexationRate')"
icon-name="mdi:percent" icon-name="mdi:percent"
icon-position="right" icon-position="right"
:required="true" :required="true"
:error="mainErrors.errors.indexationRate" :error="mainErrors.errors.indexationRate"
@update:model-value="(v: string) => main.indexationRate = clampPercent(v)" @update:model-value="onIndexationInput"
/> />
<MalioSelect <MalioSelect
:model-value="main.containerType" :model-value="main.containerType"
@@ -308,6 +309,19 @@ function apiErrorMessage(err: unknown): string {
return extractApiErrorMessage(data) || t('transport.carriers.toast.error') return extractApiErrorMessage(data) || t('transport.carriers.toast.error')
} }
// Indexation plafonnée à 100 % : la clé force le ré-affichage du MalioInputAmount
// (contrôlé) quand le plafonnement laisse le modelValue inchangé.
const indexationKey = ref(0)
/** Saisie de l'indexation : plafonne à 100 et re-synchronise le champ si plafonné. */
function onIndexationInput(value: string): void {
const clamped = clampPercent(value)
main.indexationRate = clamped
if (clamped !== value) {
indexationKey.value += 1
}
}
function goBack(): void { function goBack(): void {
router.push(`/carriers/${carrierId}`) router.push(`/carriers/${carrierId}`)
} }
@@ -86,8 +86,11 @@
« Affreter ». La ligne 1 étant pleine (4 colonnes), ils démarrent « Affreter ». La ligne 1 étant pleine (4 colonnes), ils démarrent
naturellement en colonne 1 de la ligne 2. --> naturellement en colonne 1 de la ligne 2. -->
<template v-if="showCharteredFields"> <template v-if="showCharteredFields">
<!-- Indexation : montant en % (icône à droite), plafonné à 100. --> <!-- Indexation : montant en % (icône à droite), plafonné à 100. La
:key force le ré-affichage du champ contrôlé quand on plafonne
(sinon le modelValue inchangé n'est pas re-synchronisé par Vue). -->
<MalioInputAmount <MalioInputAmount
:key="indexationKey"
:model-value="main.indexationRate" :model-value="main.indexationRate"
:label="t('transport.carriers.form.main.indexationRate')" :label="t('transport.carriers.form.main.indexationRate')"
icon-name="mdi:percent" icon-name="mdi:percent"
@@ -95,7 +98,7 @@
:required="true" :required="true"
:readonly="mainLocked" :readonly="mainLocked"
:error="mainErrors.errors.indexationRate" :error="mainErrors.errors.indexationRate"
@update:model-value="(v: string) => main.indexationRate = clampPercent(v)" @update:model-value="onIndexationInput"
/> />
<!-- Contenant : Benne / Fond mouvant (RG-4.03). --> <!-- Contenant : Benne / Fond mouvant (RG-4.03). -->
@@ -713,6 +716,19 @@ async function confirmIntegrate(): Promise<void> {
} }
} }
// Indexation plafonnée à 100 % : la clé force le ré-affichage du MalioInputAmount
// (contrôlé) quand le plafonnement laisse le modelValue inchangé.
const indexationKey = ref(0)
/** Saisie de l'indexation : plafonne à 100 et re-synchronise le champ si plafonné. */
function onIndexationInput(value: string): void {
const clamped = clampPercent(value)
main.indexationRate = clamped
if (clamped !== value) {
indexationKey.value += 1
}
}
/** Retour vers le repertoire transporteurs (fleche d'en-tete). */ /** Retour vers le repertoire transporteurs (fleche d'en-tete). */
function goBack(): void { function goBack(): void {
router.push('/carriers') router.push('/carriers')