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; }