From 8b3c97de9d59d1974752209968fae3adc1556c92 Mon Sep 17 00:00:00 2001 From: louispaulb Date: Sat, 4 Jul 2026 23:42:25 -0400 Subject: [PATCH] =?UTF-8?q?fix(ops):=20Sugg=C3=A9rer=20no=20overdue-sweep?= =?UTF-8?q?=20in=20Tourn=C3=A9es=20+=20mobile=20review=20scroll?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Deux retours terrain : 1. Jobs « en retard » (date < jour sélectionné) apparaissaient dans la répartition auto. Cause : en vue Tournées, suggestWindow suivait les chips de date du POOL, pas le jour choisi dans la bande → buildSuggestion balayait les jobs antérieurs sur le jour (branche `else cand = win`). Fix : en vue Tournées, `suggestWindow = [routesDay]` (la bande de dates fait autorité) → seuls les jobs DUS ce jour-là sont répartis, jamais les retards. (Le balayage des retards reste dispo hors Tournées via les chips.) 2. Revue « Répartition suggérée » trop dense sur mobile, lignes rognées sans défilement. Fix : dialogue MAXIMISÉ clientW 341) ; plan bâti sur le jour choisi ; 0 nouvelle erreur console. Co-Authored-By: Claude Opus 4.8 --- apps/ops/src/pages/PlanificationPage.vue | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/apps/ops/src/pages/PlanificationPage.vue b/apps/ops/src/pages/PlanificationPage.vue index 207d825..7b8c757 100644 --- a/apps/ops/src/pages/PlanificationPage.vue +++ b/apps/ops/src/pages/PlanificationPage.vue @@ -1021,8 +1021,8 @@ - - + +
{{ suggestDlg.mode === 'config' ? 'Techniciens disponibles' : 'Répartition suggérée' }}
@@ -4445,6 +4445,9 @@ const suggestSelCount = computed(() => Object.values(suggestDlg.techSel).filter( // Les chips « ⏰ en retard » / « Sans date » ne sont pas des jours calendaires → les jobs correspondants sont placés AUJOURD'HUI. Non destructif (revue avant d'appliquer). const suggestDay = ref('') const suggestWindow = computed(() => { + // Vue Tournées : la fenêtre = EXACTEMENT le jour sélectionné (autorité = la bande de dates), jamais les chips de date du pool. + // → « Suggérer » ne balaie PAS les jobs en retard (date < jour choisi) sur ce jour ; seuls les jobs DUS ce jour-là sont répartis. + if (boardView.value === 'routes' && routesDay.value) return [routesDay.value] const f = assignDateFilter.value || [] if (!f.length) return [suggestDay.value || todayISO()] // aucun chip coché → sélecteur de jour du dialogue const days = new Set(f.filter(iso => iso !== '__overdue__' && iso !== 'Sans date')) // jours concrets cochés (auj./futur) @@ -5730,6 +5733,15 @@ onBeforeRouteLeave(() => { if (dirty.value && !window.confirm(DIRTY_MSG)) return .suggest-entry { display: flex; align-items: center; gap: 2px; padding: 4px 6px; border-radius: 6px; font-size: 12.5px; } .suggest-entry:hover { background: #f8fafc; } .suggest-entry-t { flex: 1; min-width: 0; } +/* Mobile : la rangée d'un job (badges, durée, AM/PM, actions) dépasse souvent l'écran → + défilement horizontal de la rangée (au lieu de rogner la fin), sujet borné mais lisible. */ +@media (max-width: 600px) { + .suggest-entry { flex-wrap: nowrap; overflow-x: auto; overflow-y: hidden; -webkit-overflow-scrolling: touch; } + .suggest-entry > * { flex-shrink: 0; } + .suggest-entry .suggest-entry-t, .suggest-entry .suggest-clk { flex: 0 0 auto; min-width: 130px; max-width: 62vw; } + .suggest-entry::-webkit-scrollbar { height: 5px; } + .suggest-entry::-webkit-scrollbar-thumb { background: #cbd5e1; border-radius: 3px; } +} .suggest-tech-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); gap: 6px; } .suggest-tech-chip { display: flex; align-items: center; gap: 6px; padding: 5px 8px; border: 1px solid #e2e8f0; border-radius: 8px; cursor: pointer; font-size: 12.5px; background: #fff; user-select: none; } .suggest-tech-chip:hover { background: #f8fafc; }