Adição de Mata com os pontos da onde foi entreque e corrige o filtro ao vivo

This commit is contained in:
2026-06-29 21:06:08 -03:00
parent 6b899ebafa
commit 7d6c79f878
5 changed files with 144 additions and 27 deletions

View File

@@ -1,15 +1,31 @@
<%# locals: metricas (Analytics::OperacaoMetricas) %>
<% pontos = metricas.pontos_mapa %>
<div class="bg-[#1a1a1a] rounded-2xl border border-white/5 p-6">
<div class="flex items-center justify-between mb-4">
<p class="text-gray-400 text-sm font-medium">Mapa de Calor de Entregas</p>
<span class="text-xs text-gray-500"><%= pontos.size %> pontos</span>
<% heat = metricas.pontos_mapa %>
<% pontos = metricas.pontos_detalhados %>
<div class="mapa-box bg-[#1a1a1a] rounded-2xl border border-white/5 p-6">
<div class="flex flex-wrap items-center justify-between gap-3 mb-4">
<p class="text-gray-400 text-sm font-medium">Mapa de Entregas</p>
<div class="flex items-center gap-2">
<div class="map-toggle inline-flex rounded-lg overflow-hidden border border-white/10 text-xs">
<button type="button" data-view="heat"
class="px-3 py-1.5 bg-orange-500 text-black font-semibold">🔥 Calor</button>
<button type="button" data-view="pontos"
class="px-3 py-1.5 text-gray-300 hover:text-white">📍 Pontos (<%= pontos.size %>)</button>
</div>
<button type="button" class="map-fullscreen px-3 py-1.5 rounded-lg border border-white/10 text-gray-300 hover:text-white text-xs" title="Ver em tela cheia">
⛶ Tela cheia
</button>
</div>
</div>
<% if pontos.empty? %>
<% if heat.empty? && pontos.empty? %>
<p class="text-center py-8 text-gray-500 text-sm">Sem coordenadas para exibir no período.</p>
<% else %>
<div class="mapa-calor h-96 rounded-xl overflow-hidden"
<div class="mapa-calor w-full h-[70vh] min-h-[480px] rounded-xl overflow-hidden bg-[#1a1a1a]"
data-heat="<%= heat.to_json %>"
data-pontos="<%= pontos.to_json %>"
data-centro="<%= metricas.centro_mapa.to_json %>"></div>
<p class="text-xs text-gray-600 mt-2">
🔥 Calor mostra a densidade · 📍 Pontos mostra cada entrega (clique no marcador para detalhes; coordenada de check-out).
</p>
<% end %>
</div>