@extends('layouts.app') @section('title', 'تحليلات زيارات المعرض') @section('page_heading', 'تحليلات زيارات المعرض') @section('content') @php $maxDaily = max(1, (int)$dailyVisits->max('visits')); $maxProd = max(1, (int)$topProducts->max('visits')); $maxBr = max(1, (int)$topBrowsers->max('visits')); $maxRef = max(1, (int)$topReferrers->max('visits')); $breakdown = [ ['صفحة المعرض', $catalogIndexVisits, '#2563eb'], ['صفحات المنتجات', max(0, $productViews - $quickViews), '#16a34a'], ['عرض سريع', $quickViews, '#d97706'], ]; $maxBreak = max(1, collect($breakdown)->max(fn($b) => $b[1])); @endphp {{-- KPIs --}}
@foreach([ ['fa-solid fa-eye','#eff6ff','#2563eb',number_format($totalVisits),__('dashboard.total_visits')], ['fa-solid fa-users','#f0fdf4','#16a34a',number_format($uniqueVisitors),__('dashboard.unique_visitors')], ['fa-solid fa-network-wired','#fffbeb','#d97706',number_format($uniqueIps),'عناوين IP فريدة'], ['fa-solid fa-store','#fef2f2','#dc2626',number_format($catalogIndexVisits),'زيارات المعرض'], ['fa-solid fa-bag-shopping','#f0fdfa','#0d9488',number_format($productViews),__('dashboard.product_views_stat')], ['fa-solid fa-chart-bar','#f8fafc','#64748b',number_format($avgPagesPerVisitor,1),'متوسط صفحات/زائر'], ] as [$ic,$bg,$cl,$val,$lbl])
{{ $val }}
{{ $lbl }}
@endforeach
{{-- Filter --}}
تصفية البيانات
فتح المعرض
@if(request()->hasAny(['start_date','end_date','page_type','visitor'])) إعادة تعيين @endif
{{-- Daily Visits + Top Products --}}
{{-- Daily Visits --}}
الزيارات اليومية
{{ $dailyVisits->count() }} يوم
@forelse($dailyVisits as $day)
{{ $day->visit_date }}
{{ number_format($day->visits) }}
{{ number_format($day->unique_visitors) }} فريد
@empty
لا توجد زيارات في هذه الفترة
@endforelse
{{-- Top Products --}}
أكثر المنتجات مشاهدة
@forelse($topProducts as $item)
{{ Str::limit($item->product?->name ?? 'محذوف', 16) }}
{{ number_format($item->visits) }}
@empty
لا توجد بيانات
@endforelse
{{-- Breakdown + Browsers + Referrers + Top IPs --}}
{{-- Breakdown --}}
توزيع نوع الزيارة
@foreach($breakdown as [$lbl, $val, $clr])
{{ $lbl }}
{{ number_format($val) }}
@endforeach @if($topDevices && $topDevices->count())
@foreach($topDevices as $d) {{ $d->device_type ?? 'غير معروف' }}: {{ number_format($d->visits) }} @endforeach
@endif
{{-- Browsers --}}
المتصفحات
@forelse($topBrowsers as $b)
{{ $b->browser_family ?? 'Unknown' }}
{{ number_format($b->visits) }}
@empty
لا توجد بيانات
@endforelse
{{-- Referrers --}}
المصادر
@forelse($topReferrers as $r)
{{ $r->referrer_host }}
{{ number_format($r->visits) }}
@empty
لا توجد إحالات
@endforelse @if($topCampaigns && $topCampaigns->count())
@foreach($topCampaigns as $c) {{ $c->utm_campaign }}: {{ $c->visits }} @endforeach
@endif
{{-- Top IPs --}}
أعلى عناوين IP
@forelse($topIps as $ip)
{{ $ip->ip_address }}
{{ \Carbon\Carbon::parse($ip->last_visit_at)->format('m-d') }}
{{ number_format($ip->visits) }}
@empty
لا توجد بيانات
@endforelse
{{-- Recent Visits Table --}}
آخر الزيارات التفصيلية
@if($recentVisits && $recentVisits->total()) {{ number_format($recentVisits->total()) }} زيارة @endif
@if($recentVisits && $recentVisits->isEmpty())
لا توجد زيارات
@else
@foreach(['الوقت','الصفحة','IP','الجهاز','المتصفح','النظام','المصدر'] as $h) @endforeach @foreach($recentVisits as $v) @endforeach
{{ $h }}
{{ $v->visited_at ? $v->visited_at->format('Y-m-d H:i') : '—' }} @if($v->page_type === 'catalog_index') المعرض @elseif($v->page_type === 'catalog_product_view') منتج @elseif($v->page_type === 'catalog_product_quick_view') عرض سريع @else {{ $v->page_type }} @endif @if($v->product)
{{ $v->product->name }}
@endif
{{ $v->ip_address ?? '—' }}
{{ $v->device_type ?? '—' }} {{ $v->browser_family ?? '—' }} {{ $v->platform_family ?? '—' }}
{{ $v->referrer_host ?? '—' }}
@if($v->utm_campaign) {{ $v->utm_campaign }} @endif
@if($recentVisits && $recentVisits->hasPages())
{{ $recentVisits->links() }}
@endif @endif
@endsection