From b7b1647ece7cf5480a58df0b27452271080be7e9 Mon Sep 17 00:00:00 2001 From: louispaulb Date: Sat, 4 Jul 2026 23:03:51 -0400 Subject: [PATCH] =?UTF-8?q?feat(ops):=20unassigned-jobs=20strip=20?= =?UTF-8?q?=E2=86=92=20horizontal=20carousel=20(Tourn=C3=A9es)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La bande « N à répartir » sous le sélecteur de jour (vue Tournées) retournait à la ligne sur 2 rangées (max-height 70px, scroll vertical) et PLAFONNAIT à 16 jobs (« +N de plus » cachait le reste). Passée en carrousel horizontal 1 rangée (flex nowrap + overflow-x auto, scroll-snap, barre fine) qui montre TOUS les jobs du jour — compact au-dessus de la carte, tactile/tablette, aligné avec la bande de dates au-dessus. Vérifié live (Tournées, 06/07 = 25 à répartir) : 25 chips rendus (fini le plafond 16), 1 rangée nowrap, scrollWidth 5870 > 1214 = défile bien. Co-Authored-By: Claude Opus 4.8 --- apps/ops/src/pages/PlanificationPage.vue | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/apps/ops/src/pages/PlanificationPage.vue b/apps/ops/src/pages/PlanificationPage.vue index 21094ab..4b1f1bb 100644 --- a/apps/ops/src/pages/PlanificationPage.vue +++ b/apps/ops/src/pages/PlanificationPage.vue @@ -506,12 +506,12 @@ Répartir automatiquement les jobs {{ routeSectorSel.size ? 'du secteur' : 'de ce jour' }} +
- + {{ j.subject || j.service_type || j.name }} {{ j.required_skill || '—' }} - +{{ routeDayUnassignedView.length - 16 }} de plus
@@ -5685,7 +5685,11 @@ onBeforeRouteLeave(() => { if (dirty.value && !window.confirm(DIRTY_MSG)) return /* Bande « jobs dus non assignés » (vue Tournées) : chips secteur (filtrent liste+carte) + chips job + Suggérer */ .rt-unassigned { margin-bottom: 6px; padding: 6px 8px; background: #fff7ed; border: 1px solid #fed7aa; border-radius: 8px; } .rt-ua-top { display: flex; align-items: center; flex-wrap: wrap; gap: 5px; } -.rt-ua-jobs { display: flex; align-items: center; flex-wrap: wrap; gap: 5px; margin-top: 5px; max-height: 70px; overflow-y: auto; } +/* Carrousel : rangée unique qui défile horizontalement (pas de retour à la ligne). */ +.rt-ua-jobs { display: flex; align-items: center; flex-wrap: nowrap; gap: 5px; margin-top: 5px; overflow-x: auto; overflow-y: hidden; padding-bottom: 4px; scroll-snap-type: x proximity; -webkit-overflow-scrolling: touch; overscroll-behavior-x: contain; } +.rt-ua-jobs > .rt-ua-chip { flex: 0 0 auto; scroll-snap-align: start; } +.rt-ua-jobs::-webkit-scrollbar { height: 6px; } +.rt-ua-jobs::-webkit-scrollbar-thumb { background: #fdba74; border-radius: 3px; } .rt-ua-lbl { font-size: 12px; color: #9a3412; display: inline-flex; align-items: center; gap: 3px; } .rt-sect { display: inline-flex; align-items: center; gap: 2px; padding: 2px 8px; border: 1px solid #cbd5e1; border-radius: 12px; background: #fff; font-size: 11.5px; font-weight: 600; color: #475569; cursor: pointer; user-select: none; } .rt-sect.on { background: #6366f1; border-color: #6366f1; color: #fff; }