diff --git a/apps/ops/src/components/shared/RouteMap.vue b/apps/ops/src/components/shared/RouteMap.vue index 0e22235..3b444f5 100644 --- a/apps/ops/src/components/shared/RouteMap.vue +++ b/apps/ops/src/components/shared/RouteMap.vue @@ -103,11 +103,16 @@ function renderPins (list) { for (const p of (list || [])) { if (!okLL(p.lon, p.lat)) continue const color = p.color || '#f97316' - const wrap = document.createElement('div'); wrap.className = 'rm-pin' - wrap.innerHTML = '' + // MÊME rendu que les arrêts assignés (pastille round-rect horizontale + icône material via ), + // coloré priorité (orange = non assigné), SANS numéro d'ordre. Icône = markerIcon (ligature material fiable). + const wrap = document.createElement('div'); wrap.className = 'rm-mk rm-mk-pin' + const disc = document.createElement('div'); disc.className = 'rm-pill'; disc.style.background = color + const ic = /^[a-z0-9_]+$/.test(String(p.icon || '')) ? p.icon : 'place' + disc.innerHTML = '' + ic + '' + wrap.appendChild(disc) wrap.title = (p.subject || 'Job') + (p.city ? ' · ' + p.city : '') + ' — non assigné' wrap.addEventListener('click', () => emit('pin-click', p)) - const mk = new mapboxgl.Marker({ element: wrap, anchor: 'bottom' }).setLngLat([+p.lon, +p.lat]).addTo(map) + const mk = new mapboxgl.Marker({ element: wrap, anchor: 'center' }).setLngLat([+p.lon, +p.lat]).addTo(map) pinMk.push({ mk, el: wrap }) } } diff --git a/apps/ops/src/pages/PlanificationPage.vue b/apps/ops/src/pages/PlanificationPage.vue index cb2f925..5d492f9 100644 --- a/apps/ops/src/pages/PlanificationPage.vue +++ b/apps/ops/src/pages/PlanificationPage.vue @@ -4818,7 +4818,7 @@ const routeDayUnassignedView = computed(() => { const _jlat = j => (j.latitude != null ? +j.latitude : (j.lat != null ? +j.lat : null)) const _jlon = j => (j.longitude != null ? +j.longitude : (j.lon != null ? +j.lon : null)) // Gouttes carte = non-assignés du jour (filtrés secteur) qui ont des coordonnées ; couleur = priorité -const routeUnassignedPins = computed(() => routeDayUnassignedView.value.filter(j => { const la = _jlat(j); const lo = _jlon(j); return la != null && lo != null && isFinite(la) && isFinite(lo) && Math.abs(la) > 0.01 }).map(j => ({ lat: _jlat(j), lon: _jlon(j), subject: j.subject || j.service_type || j.name, name: j.name, color: prioColor(j.priority), city: jobCity(j), job: j }))) +const routeUnassignedPins = computed(() => routeDayUnassignedView.value.filter(j => { const la = _jlat(j); const lo = _jlon(j); return la != null && lo != null && isFinite(la) && isFinite(lo) && Math.abs(la) > 0.01 }).map(j => ({ lat: _jlat(j), lon: _jlon(j), subject: j.subject || j.service_type || j.name, name: j.name, color: prioColor(j.priority), city: jobCity(j), icon: markerIcon(j.required_skill || j.service_type), job: j }))) // ── Deep-link (?day=YYYY-MM-DD & ?skill=…) + action « planifier des quarts » du slot-finder ── const route = useRoute()