From 455a66aeb9b2c26050bb667416cdd6003902a003 Mon Sep 17 00:00:00 2001 From: louispaulb Date: Sat, 6 Jun 2026 13:19:59 -0400 Subject: [PATCH] =?UTF-8?q?refactor(planif):=20clic=20progressbar=20?= =?UTF-8?q?=E2=86=92=20timeline=20=C3=A9ditable=20Dispatch=20(tech+jour)?= =?UTF-8?q?=20au=20lieu=20du=20popup=20maison?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - réutilisation max + cohérence : le clic sur le progressbar ouvre le tableau Dispatch focalisé sur le tech + le jour cliqué (gotoDispatch(t, d.iso)) = LE timeline éditable (drag-drop réordonner, supprimer/désaffecter) - retire le popup cellJobsMenu (réordonner/priorité) → règle aussi le chevauchement avec l'infobulle mouseover - (endpoint /roster/reorder-jobs conservé, réutilisable ; le réordonnancement se fait désormais côté Dispatch) Co-Authored-By: Claude Opus 4.8 (1M context) --- apps/ops/src/pages/PlanificationPage.vue | 54 +++--------------------- 1 file changed, 6 insertions(+), 48 deletions(-) diff --git a/apps/ops/src/pages/PlanificationPage.vue b/apps/ops/src/pages/PlanificationPage.vue index 555a7b4..aeb247c 100644 --- a/apps/ops/src/pages/PlanificationPage.vue +++ b/apps/ops/src/pages/PlanificationPage.vue @@ -183,7 +183,7 @@
Absent · {{ absenceLabel(t.id, d.iso) }}
@@ -986,25 +956,13 @@ function panelUp () { _panelDrag = null; document.removeEventListener('mousemove // Réutilise les helpers de cellule (cellBands/cellBlocks/cellJobs/cellPct) → 0 nouvel appel réseau. const timelineDlg = reactive({ open: false, tech: null }) function openTimeline (t) { timelineDlg.tech = t; timelineDlg.open = true } -// ── Menu « jobs de la cellule » : détail + réordonner / re-prioriser (clic sur le progressbar) ── -const cellJobsMenu = reactive({ show: false, target: null, tech: null, day: null, list: [], saving: false }) -function openCellJobs (t, d, ev) { - cellJobsMenu.tech = t; cellJobsMenu.day = d - cellJobsMenu.list = cellJobs(t.id, d.iso).map(j => ({ ...j })) // copie ordonnée (route_order → priorité → heure) - cellJobsMenu.target = (ev && ev.currentTarget) || null - cellJobsMenu.show = true -} -function moveCellJob (i, dir) { const l = cellJobsMenu.list; const j = i + dir; if (j < 0 || j >= l.length) return; const [x] = l.splice(i, 1); l.splice(j, 0, x) } -async function saveCellOrder () { - const updates = cellJobsMenu.list.map((j, i) => ({ job: j.name, route_order: i + 1, priority: j.priority })) - cellJobsMenu.saving = true - try { const r = await roster.reorderJobs(updates); cellJobsMenu.show = false; await loadWeek(); $q.notify({ type: 'positive', message: (r.updated || 0) + ' job(s) réordonné(s)', timeout: 2000 }) } catch (e) { err(e) } finally { cellJobsMenu.saving = false } -} -// Deep-link vers le tableau Dispatch focalisé sur la ressource + son 1er jour avec jobs (sinon début de semaine). -function gotoDispatch (t) { +// (Clic sur le progressbar → gotoDispatch : on ouvre le timeline ÉDITABLE du tableau Dispatch, drag-drop + suppression, +// plutôt qu'un popup maison — réutilisation max + cohérence. Le réordonnancement/priorité se fait là-bas.) +// Deep-link vers le tableau Dispatch focalisé sur la ressource + le jour cliqué (sinon 1er jour de la semaine). +function gotoDispatch (t, dateIso) { const q = {} if (t) q.tech = t.id - q.date = (timelineDays.value[0] && timelineDays.value[0].iso) || start.value + q.date = dateIso || (timelineDays.value[0] && timelineDays.value[0].iso) || start.value router.push({ path: '/dispatch', query: q }) } const timelineDays = computed(() => {