feat(transport) : datatable Qualimat vide par défaut, n'affiche que les résultats de recherche (ERP-166)
This commit is contained in:
@@ -558,6 +558,7 @@
|
|||||||
},
|
},
|
||||||
"qualimat": {
|
"qualimat": {
|
||||||
"empty": "Aucun transporteur QUALIMAT trouvé.",
|
"empty": "Aucun transporteur QUALIMAT trouvé.",
|
||||||
|
"searchHint": "Saisissez le nom du transporteur pour lancer la recherche.",
|
||||||
"columns": {
|
"columns": {
|
||||||
"name": "Nom",
|
"name": "Nom",
|
||||||
"address": "Adresse",
|
"address": "Adresse",
|
||||||
|
|||||||
@@ -138,12 +138,12 @@
|
|||||||
<MalioDataTable
|
<MalioDataTable
|
||||||
:columns="qualimatColumns"
|
:columns="qualimatColumns"
|
||||||
:items="qualimatRows"
|
:items="qualimatRows"
|
||||||
:total-items="qualimatTotal"
|
:total-items="qualimatTotalDisplay"
|
||||||
:page="qualimatPage"
|
:page="qualimatPage"
|
||||||
:per-page="qualimatPerPage"
|
:per-page="qualimatPerPage"
|
||||||
:per-page-options="qualimatPerPageOptions"
|
:per-page-options="qualimatPerPageOptions"
|
||||||
row-clickable
|
row-clickable
|
||||||
:empty-message="t('transport.carriers.form.qualimat.empty')"
|
:empty-message="qualimatEmptyMessage"
|
||||||
@row-click="onQualimatRowClick"
|
@row-click="onQualimatRowClick"
|
||||||
@update:page="qualimatGoToPage"
|
@update:page="qualimatGoToPage"
|
||||||
@update:per-page="qualimatSetPerPage"
|
@update:per-page="qualimatSetPerPage"
|
||||||
@@ -207,7 +207,7 @@
|
|||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { computed, onMounted, ref, watch } from 'vue'
|
import { computed, ref, watch } from 'vue'
|
||||||
import { debounce } from '~/shared/utils/debounce'
|
import { debounce } from '~/shared/utils/debounce'
|
||||||
import { useCarrierForm } from '~/modules/transport/composables/useCarrierForm'
|
import { useCarrierForm } from '~/modules/transport/composables/useCarrierForm'
|
||||||
import { useQualimatSearch, type QualimatCarrierRow } from '~/modules/transport/composables/useQualimatSearch'
|
import { useQualimatSearch, type QualimatCarrierRow } from '~/modules/transport/composables/useQualimatSearch'
|
||||||
@@ -283,15 +283,30 @@ const qualimatColumns = [
|
|||||||
{ key: 'validityDate', label: t('transport.carriers.form.qualimat.columns.validityDate') },
|
{ key: 'validityDate', label: t('transport.carriers.form.qualimat.columns.validityDate') },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
// Le datatable n'affiche QUE des résultats de recherche : vide tant que le Nom n'est
|
||||||
|
// pas saisi (pas de liste complète par défaut). `main.name` pilote l'affichage.
|
||||||
|
const hasQualimatSearch = computed(() => main.name.trim() !== '')
|
||||||
|
|
||||||
// Lignes « plates » pour MalioDataTable (l'IRI sert au radio + à retrouver la ligne
|
// Lignes « plates » pour MalioDataTable (l'IRI sert au radio + à retrouver la ligne
|
||||||
// source au clic). Le détail QUALIMAT complet reste dans `qualimatItems`.
|
// source au clic). Le détail QUALIMAT complet reste dans `qualimatItems`.
|
||||||
const qualimatRows = computed(() => qualimatItems.value.map(row => ({
|
const qualimatRows = computed(() => {
|
||||||
id: row.id,
|
if (!hasQualimatSearch.value) {
|
||||||
iri: row['@id'],
|
return []
|
||||||
name: row.name,
|
}
|
||||||
address: formatQualimatAddress(row),
|
return qualimatItems.value.map(row => ({
|
||||||
validityDate: row.validityDate,
|
id: row.id,
|
||||||
})))
|
iri: row['@id'],
|
||||||
|
name: row.name,
|
||||||
|
address: formatQualimatAddress(row),
|
||||||
|
validityDate: row.validityDate,
|
||||||
|
}))
|
||||||
|
})
|
||||||
|
|
||||||
|
// Total / message vide alignés sur « tableau vide tant qu'on n'a pas recherché ».
|
||||||
|
const qualimatTotalDisplay = computed(() => (hasQualimatSearch.value ? qualimatTotal.value : 0))
|
||||||
|
const qualimatEmptyMessage = computed(() => hasQualimatSearch.value
|
||||||
|
? t('transport.carriers.form.qualimat.empty')
|
||||||
|
: t('transport.carriers.form.qualimat.searchHint'))
|
||||||
|
|
||||||
// Contenant (RG-4.03) : Benne / Fond mouvant — select simple.
|
// Contenant (RG-4.03) : Benne / Fond mouvant — select simple.
|
||||||
const CONTAINER_TYPES = ['BENNE', 'FOND_MOUVANT'] as const
|
const CONTAINER_TYPES = ['BENNE', 'FOND_MOUVANT'] as const
|
||||||
@@ -328,18 +343,17 @@ const confirmOpen = ref(false)
|
|||||||
const pendingRow = ref<QualimatCarrierRow | null>(null)
|
const pendingRow = ref<QualimatCarrierRow | null>(null)
|
||||||
|
|
||||||
// Le datatable QUALIMAT est filtré par le NOM saisi dans le formulaire principal
|
// 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,
|
// (RG-4.01) — pas de champ de recherche dédié. Aucune recherche tant que le Nom est
|
||||||
// plus un chargement initial au montage (liste active complète si le nom est vide).
|
// vide (tableau vide par défaut) ; sinon re-filtrage debouncé à chaque frappe.
|
||||||
const filterQualimatByName = debounce((term: string) => {
|
const filterQualimatByName = debounce((term: string) => {
|
||||||
|
if (term.trim() === '') {
|
||||||
|
return
|
||||||
|
}
|
||||||
void qualimatSetFilters({ search: term })
|
void qualimatSetFilters({ search: term })
|
||||||
}, 300)
|
}, 300)
|
||||||
|
|
||||||
watch(() => main.name, term => filterQualimatByName(term))
|
watch(() => main.name, term => filterQualimatByName(term))
|
||||||
|
|
||||||
onMounted(() => {
|
|
||||||
void qualimatSetFilters({ search: main.name })
|
|
||||||
})
|
|
||||||
|
|
||||||
/** Adresse QUALIMAT condensee pour la colonne « Adresse » (voie · CP · ville). */
|
/** Adresse QUALIMAT condensee pour la colonne « Adresse » (voie · CP · ville). */
|
||||||
function formatQualimatAddress(row: QualimatCarrierRow): string {
|
function formatQualimatAddress(row: QualimatCarrierRow): string {
|
||||||
return [row.address, row.postalCode, row.city].filter(Boolean).join(' · ')
|
return [row.address, row.postalCode, row.city].filter(Boolean).join(' · ')
|
||||||
|
|||||||
Reference in New Issue
Block a user