fix(transport) : indexation réellement plafonnée à 100 % — re-synchronise le champ amount contrôlé via :key (ERP-170)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Successful in 3m0s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m32s

This commit is contained in:
2026-06-17 14:16:40 +02:00
parent 55d2c877bd
commit b9acfc1f0d
2 changed files with 33 additions and 3 deletions
@@ -64,13 +64,14 @@
</div>
<template v-if="showCharteredFields">
<MalioInputAmount
:key="indexationKey"
:model-value="main.indexationRate"
:label="t('transport.carriers.form.main.indexationRate')"
icon-name="mdi:percent"
icon-position="right"
:required="true"
:error="mainErrors.errors.indexationRate"
@update:model-value="(v: string) => main.indexationRate = clampPercent(v)"
@update:model-value="onIndexationInput"
/>
<MalioSelect
:model-value="main.containerType"
@@ -308,6 +309,19 @@ function apiErrorMessage(err: unknown): string {
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 {
router.push(`/carriers/${carrierId}`)
}
@@ -86,8 +86,11 @@
« Affreter ». La ligne 1 étant pleine (4 colonnes), ils démarrent
naturellement en colonne 1 de la ligne 2. -->
<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
:key="indexationKey"
:model-value="main.indexationRate"
:label="t('transport.carriers.form.main.indexationRate')"
icon-name="mdi:percent"
@@ -95,7 +98,7 @@
:required="true"
:readonly="mainLocked"
:error="mainErrors.errors.indexationRate"
@update:model-value="(v: string) => main.indexationRate = clampPercent(v)"
@update:model-value="onIndexationInput"
/>
<!-- 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). */
function goBack(): void {
router.push('/carriers')