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()