@extends('layouts.vuexy') @section('title', 'Dashboard') @php $fmtMoney = fn ($v) => $v === null ? '—' : number_format($v, 2).' €'; $fmtPct = fn ($v) => $v === null ? '—' : number_format($v, 2).' %'; $fmtNum = fn ($v) => $v === null ? '—' : number_format($v); $fmtRoas = fn ($v) => $v === null ? '—' : number_format($v, 2).'x'; @endphp @section('content')

Rendimiento agregado de todas las campañas, leído de performance_snapshots.

@if ($lastSync) Última sincronización: {{ $lastSync->started_at->diffForHumans() }} {{ $lastSync->status }} @else Todavía no se ha corrido marketing:sync-insights. @endif
@if ($rows->every(fn ($r) => ! $r->has_data))
Todavía no hay métricas. Van a aparecer aquí automáticamente cuando las campañas estén publicadas en Facebook (Fase 3) y corra marketing:sync-insights. Mientras tanto puedes generar datos de ejemplo con php artisan marketing:seed-demo-performance <id de una campaña>.
@else
@foreach ([ ['Impresiones', $fmtNum($totals->impressions), 'tabler-eye'], ['Clics', $fmtNum($totals->clicks), 'tabler-click'], ['CTR', $fmtPct($totals->ctr), 'tabler-percentage'], ['Gasto total', $fmtMoney($totals->spend), 'tabler-coin'], ['CPI', $fmtMoney($totals->cpi), 'tabler-download'], ['CPA', $fmtMoney($totals->cpa), 'tabler-shopping-cart'], ['ROAS', $fmtRoas($totals->roas), 'tabler-trending-up'], ] as [$label, $value, $icon])
{{ $label }}

{{ $value }}

@endforeach
Comparativa por campaña
@foreach ($rows as $row) @endforeach
Campaña Restaurante Impresiones Clics CTR Gasto CPI CPA ROAS
{{ $row->campaign->name }} @if ($row->is_simulated) Datos de ejemplo @endif {{ $row->campaign->restaurant_name }} {{ $row->has_data ? $fmtNum($row->impressions) : '—' }} {{ $row->has_data ? $fmtNum($row->clicks) : '—' }} {{ $fmtPct($row->ctr) }} {{ $row->has_data ? $fmtMoney($row->spend) : '—' }} {{ $fmtMoney($row->cpi) }} {{ $fmtMoney($row->cpa) }} {{ $fmtRoas($row->roas) }}
@endif @endsection