feat(transport) : onglet Qualimat accessible dès le départ, recherche réactive au nom, sélection remplit le formulaire (ERP-166)
Pull Request — Quality gate / Backend (PHP CS + PHPUnit) (pull_request) Failing after 49s
Pull Request — Quality gate / Frontend (lint + Vitest + build) (pull_request) Successful in 1m34s

This commit is contained in:
2026-06-17 08:10:17 +02:00
parent 388d39a379
commit cf645493c1
4 changed files with 31 additions and 38 deletions
@@ -76,8 +76,10 @@ export function useCarrierForm() {
// ── Onglets : ordre + gating progressif ───────────────────────────────────
const tabKeys = ref<string[]>([...CARRIER_TAB_KEYS])
// Index du dernier onglet déverrouillé (-1 tant que le transporteur n'est pas créé).
const unlockedIndex = ref(-1)
// Index du dernier onglet déverrouillé. L'onglet Qualimat (index 0) est la saisie
// assistée du formulaire principal : accessible DÈS LE DÉPART (≠ Adresses /
// Contacts / Prix, déverrouillés seulement après le POST principal).
const unlockedIndex = ref(0)
const activeTab = ref<string>(CARRIER_TAB_KEYS[0])
// Onglets validés (passent en lecture seule).
const validated = reactive<Record<string, boolean>>({})
@@ -194,9 +196,10 @@ export function useCarrierForm() {
}
/**
* POST /carriers (groupe `carrier:write:main`). Pré-check front (nom), puis
* création. Au succès : verrouille le bloc principal, déverrouille le 1er onglet
* et bascule sur « Qualimat ». Retourne true si créé, false sinon.
* POST /carriers (groupe `carrier:write:main`). Pré-check front, puis création.
* Au succès : verrouille le bloc principal, déverrouille l'onglet Adresses et
* bascule dessus (l'onglet Qualimat, saisie assistée, était déjà accessible).
* Retourne true si créé, false sinon.
*/
async function submitMain(): Promise<boolean> {
if (mainSubmitting.value) return false
@@ -217,8 +220,9 @@ export function useCarrierForm() {
main.certificationType = created.certificationType ?? main.certificationType
mainLocked.value = true
unlockedIndex.value = 0
activeTab.value = tabKeys.value[0] ?? CARRIER_TAB_KEYS[0]
// Déverrouille l'onglet suivant (Adresses, index 1) et bascule dessus.
unlockedIndex.value = Math.max(unlockedIndex.value, 1)
activeTab.value = tabKeys.value[1] ?? CARRIER_TAB_KEYS[1]
toast.success({ title: t('transport.carriers.toast.createSuccess') })
return true
}