diff --git a/apps/ops/src/components/shared/MonAujourdhui.vue b/apps/ops/src/components/shared/MonAujourdhui.vue index 57b8684..bf1b85a 100644 --- a/apps/ops/src/components/shared/MonAujourdhui.vue +++ b/apps/ops/src/components/shared/MonAujourdhui.vue @@ -7,7 +7,7 @@ * (en route / sur place via /roster/geofence-states). Actions réelles (assistant NL pré-rempli, ⌘K, nouvelle vente). * Additif, monté en tête du tableau de bord. */ -import { ref, computed, onMounted } from 'vue' +import { ref, computed, onMounted, onUnmounted } from 'vue' import { useRouter } from 'vue-router' import { usePermissions } from 'src/composables/usePermissions' import { useCommandPalette } from 'src/composables/useCommandPalette' @@ -92,7 +92,12 @@ async function load () { try { await Promise.all(tasks) } catch (e) { /* dégradé */ } loading.value = false } -onMounted(load) +// Accueil = tableau VIVANT : rafraîchit les compteurs (en attente / en retard / interventions) toutes les 60 s et au +// retour sur l'onglet. dash() garde la valeur précédente pendant le refetch (pas de clignotement vers « … »). +let refreshTimer = null +function onVisible () { if (document.visibilityState === 'visible') load() } +onMounted(() => { load(); refreshTimer = setInterval(load, 60000); document.addEventListener('visibilitychange', onVisible) }) +onUnmounted(() => { if (refreshTimer) clearInterval(refreshTimer); document.removeEventListener('visibilitychange', onVisible) }) const dash = (v) => (loading.value && v == null) ? '…' : (v == null ? '—' : v) function allocate () { window.dispatchEvent(new CustomEvent('ops:assistant', { detail: { text: 'Allouer un technicien pour le client ' } })) }