feat(ops): accueil « Mon aujourd'hui » v2 — chiffres exacts + état terrain live + actions réelles

Applique « ne pas réutiliser une UX/métrique faible telle quelle » :
- Boîte de réception : remplace le compteur de session 'unread' (démarrait à 0, trompeur) par un VRAI décompte via
  /conversations/inbox-tickets — « à trier » (non assignés) + total ouvert. Tickets sur moi = _assign contient mon courriel.
- Interventions aujourd'hui : ajoute l'ÉTAT TERRAIN LIVE (en route / sur place via /roster/geofence-states, pastilles
  qui pulsent) en plus du découpage par statut.
- Barre d'ACTIONS réelles : « Allouer un technicien » → ouvre le copilote NL PRÉ-REMPLI (event ops:assistant → MainLayout),
  « Nouvelle vente », « Rechercher ⌘K ». Le pont ops:assistant est ajouté dans MainLayout (propre).
- États chargement (« … ») / vide, focus clavier, prefers-reduced-motion.
Vérifié en dev : rendu, 199 à trier (donnée réelle), event allocate + palette OK, 0 erreur console. Build OK, leak-clean, déployé.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
louispaulb 2026-07-19 15:10:07 -04:00
parent 386e36f863
commit dbbcd721e4
2 changed files with 4 additions and 2 deletions

View File

@ -243,8 +243,10 @@ const { togglePalette, openPalette } = useCommandPalette()
function onGlobalKey (e) { function onGlobalKey (e) {
if ((e.metaKey || e.ctrlKey) && (e.key === 'k' || e.key === 'K')) { e.preventDefault(); togglePalette() } if ((e.metaKey || e.ctrlKey) && (e.key === 'k' || e.key === 'K')) { e.preventDefault(); togglePalette() }
} }
onMounted(() => window.addEventListener('keydown', onGlobalKey)) // Ouvre le copilote NL PRÉ-REMPLI depuis un autre composant (ex. accueil « Allouer un technicien »).
onBeforeUnmount(() => window.removeEventListener('keydown', onGlobalKey)) function onAssistantEvent (e) { onNlCommand((e && e.detail && e.detail.text) || '') }
onMounted(() => { window.addEventListener('keydown', onGlobalKey); window.addEventListener('ops:assistant', onAssistantEvent) })
onBeforeUnmount(() => { window.removeEventListener('keydown', onGlobalKey); window.removeEventListener('ops:assistant', onAssistantEvent) })
const auth = useAuthStore() const auth = useAuthStore()
const { can, isLoaded, userName, userEmail } = usePermissions() const { can, isLoaded, userName, userEmail } = usePermissions()