feat(transport) : onglet Qualimat accessible dès le départ, recherche réactive au nom, sélection remplit le formulaire (ERP-166)
This commit is contained in:
@@ -167,15 +167,6 @@
|
||||
</span>
|
||||
</template>
|
||||
</MalioDataTable>
|
||||
|
||||
<div v-if="!isValidated('qualimat')" class="flex justify-center">
|
||||
<MalioButton
|
||||
variant="primary"
|
||||
:label="t('transport.carriers.form.qualimat.continue')"
|
||||
:disabled="carrierId === null"
|
||||
@click="onContinueQualimat"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -216,7 +207,8 @@
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import { computed, ref, watch } from 'vue'
|
||||
import { computed, onMounted, ref, watch } from 'vue'
|
||||
import { debounce } from '~/shared/utils/debounce'
|
||||
import { useCarrierForm } from '~/modules/transport/composables/useCarrierForm'
|
||||
import { useQualimatSearch, type QualimatCarrierRow } from '~/modules/transport/composables/useQualimatSearch'
|
||||
|
||||
@@ -240,7 +232,6 @@ if (!can('transport.carriers.manage')) {
|
||||
|
||||
const {
|
||||
main,
|
||||
carrierId,
|
||||
mainLocked,
|
||||
mainSubmitting,
|
||||
mainErrors,
|
||||
@@ -251,10 +242,8 @@ const {
|
||||
tabKeys,
|
||||
activeTab,
|
||||
unlockedIndex,
|
||||
isValidated,
|
||||
submitMain,
|
||||
applyQualimatSelection,
|
||||
completeTab,
|
||||
} = useCarrierForm()
|
||||
|
||||
const {
|
||||
@@ -335,17 +324,20 @@ const tabs = computed(() => tabKeys.value.map((key, index) => ({
|
||||
const placeholderTabs = computed(() => tabKeys.value.filter(key => key !== 'qualimat'))
|
||||
|
||||
// ── Saisie assistee QUALIMAT (onglet Qualimat) ───────────────────────────────
|
||||
const qualimatLoaded = ref(false)
|
||||
const confirmOpen = ref(false)
|
||||
const pendingRow = ref<QualimatCarrierRow | null>(null)
|
||||
|
||||
// Chargement quand l'onglet Qualimat devient actif : la recherche est branchée sur
|
||||
// le NOM saisi dans le formulaire principal (RG-4.01) — pas de champ dédié.
|
||||
watch(activeTab, (tab) => {
|
||||
if (tab === 'qualimat' && !qualimatLoaded.value) {
|
||||
qualimatLoaded.value = true
|
||||
void qualimatSetFilters({ search: main.name })
|
||||
}
|
||||
// Le datatable QUALIMAT est filtré par le NOM saisi dans le formulaire principal
|
||||
// (RG-4.01) — pas de champ de recherche dédié. Re-filtrage debouncé à chaque frappe,
|
||||
// plus un chargement initial au montage (liste active complète si le nom est vide).
|
||||
const filterQualimatByName = debounce((term: string) => {
|
||||
void qualimatSetFilters({ search: term })
|
||||
}, 300)
|
||||
|
||||
watch(() => main.name, term => filterQualimatByName(term))
|
||||
|
||||
onMounted(() => {
|
||||
void qualimatSetFilters({ search: main.name })
|
||||
})
|
||||
|
||||
/** Adresse QUALIMAT condensee pour la colonne « Adresse » (voie · CP · ville). */
|
||||
@@ -406,11 +398,6 @@ async function confirmIntegrate(): Promise<void> {
|
||||
}
|
||||
}
|
||||
|
||||
/** « Continuer » : valide l'onglet Qualimat et avance a l'onglet Adresses. */
|
||||
function onContinueQualimat(): void {
|
||||
completeTab('qualimat')
|
||||
}
|
||||
|
||||
/** Retour vers le repertoire transporteurs (fleche d'en-tete). */
|
||||
function goBack(): void {
|
||||
router.push('/carriers')
|
||||
|
||||
Reference in New Issue
Block a user