improve(ops): accueil = tableau VIVANT — rafraîchit les compteurs (60 s + retour d'onglet)
L'accueil ne chargeait qu'au montage. Ajout : refetch toutes les 60 s + immédiat au retour sur l'onglet (visibilitychange), avec nettoyage à onUnmounted. dash() conserve la valeur précédente pendant le refetch → pas de clignotement vers « … ». Les compteurs « en attente de réponse / en retard / interventions » restent à jour sans rechargement. Build OK, leak-clean, déployé. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
7371c1b446
commit
4718d025f3
|
|
@ -7,7 +7,7 @@
|
||||||
* (en route / sur place via /roster/geofence-states). Actions réelles (assistant NL pré-rempli, ⌘K, nouvelle vente).
|
* (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.
|
* 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 { useRouter } from 'vue-router'
|
||||||
import { usePermissions } from 'src/composables/usePermissions'
|
import { usePermissions } from 'src/composables/usePermissions'
|
||||||
import { useCommandPalette } from 'src/composables/useCommandPalette'
|
import { useCommandPalette } from 'src/composables/useCommandPalette'
|
||||||
|
|
@ -92,7 +92,12 @@ async function load () {
|
||||||
try { await Promise.all(tasks) } catch (e) { /* dégradé */ }
|
try { await Promise.all(tasks) } catch (e) { /* dégradé */ }
|
||||||
loading.value = false
|
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)
|
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 ' } })) }
|
function allocate () { window.dispatchEvent(new CustomEvent('ops:assistant', { detail: { text: 'Allouer un technicien pour le client ' } })) }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user