fix(front) : masque élargi pour l'immatriculation « Tout format » (ERP-189)

« Tout format » n'est plus un champ libre total : masque maska charset
(lettres/chiffres/espace/tiret, MAJ, longueur libre) pour les plaques anciennes
ou étrangères, filtrant accents/ponctuation/symboles. Format autoritaire côté serveur.
This commit is contained in:
2026-06-23 14:09:36 +02:00
parent 5349c3c4d5
commit f2c06aed43
@@ -67,12 +67,14 @@
:error="errors.dsd"
/>
<!-- Immatriculation : masque XX-000-XX (plaque FR SIV) sauf « Tout format ».
<!-- Immatriculation : masque XX-000-XX (plaque FR SIV) ; en « Tout format »,
masque ÉLARGI (lettres/chiffres/espace/tiret, MAJ) pour les plaques
anciennes/étrangères, mais sans laisser passer n'importe quoi.
PARTAGÉE entre les 2 blocs (RG-5.01) — v-model remonté au form parent.
TODO migrer le masque plaque quand @malio/layer-ui couvrira le format. -->
<MalioInputText
:model-value="immatriculation"
:mask="plateFreeFormat ? undefined : PLATE_MASK"
:mask="plateFreeFormat ? FREE_PLATE_MASK : PLATE_MASK"
:label="t('logistique.weighingTickets.form.immatriculation')"
:required="true"
:disabled="disabled"
@@ -115,6 +117,18 @@ const PLATE_MASK = {
tokens: { A: { pattern: /[A-Za-z]/, transform: (c: string) => c.toUpperCase() } },
}
// Masque « Tout format » (RG-5.01) : plaques anciennes / étrangères / engins. On
// autorise lettres, chiffres, espace et tiret, en MAJUSCULES, longueur libre —
// mais on filtre tout le reste (accents, ponctuation, symboles : « &é"'(_ç… »).
// Pattern maska charset du projet (cf. shared/utils/textSanitize) : `preProcess`
// retire d'abord les caractères hors charset (le token `multiple` glouton
// s'arrêterait sinon au 1er invalide), puis le token laisse passer le reste.
const FREE_PLATE_MASK = {
mask: 'P',
tokens: { P: { pattern: /[A-Z0-9 -]/, multiple: true } },
preProcess: (value: string) => value.toUpperCase().replace(/[^A-Z0-9 -]/g, ''),
}
// Masque « chiffres uniquement » (maska, longueur libre) pour Poids et DSD :
// ces champs texte sont verrouillés sur des entiers, et de toute façon désactivés
// (remplis par la pesée).