{{-- resources/views/superadmin/iman-room/members-logs.blade.php --}} @extends('layouts.superadmin') @section('title','غرفة إيمان — سجلات الأعضاء') @section('content') @php $viewMode = $view ?? 'table'; $sortKey = $sort ?? 'points'; $dirKey = $dir ?? 'desc'; $compareEnabled = (bool)($compare_enabled ?? false); $male = $gender['male'] ?? ['members'=>0,'points'=>0,'hours'=>0,'records'=>0,'live_confirmed_hours'=>0]; $female = $gender['female'] ?? ['members'=>0,'points'=>0,'hours'=>0,'records'=>0,'live_confirmed_hours'=>0]; $maleHours = (float)($male['hours'] ?? 0); $femaleHours = (float)($female['hours'] ?? 0); $sumHours = max(0.0001, $maleHours + $femaleHours); $malePct = round(($maleHours / $sumHours) * 100, 1); $femalePct = round(($femaleHours / $sumHours) * 100, 1); $qsKeep = function(array $merge = []) { $all = array_merge(request()->all(), $merge); return http_build_query($all); }; $badge = [ 'ok' => 'border-emerald-400/20 bg-emerald-500/10 text-emerald-200', 'warn' => 'border-amber-400/20 bg-amber-500/10 text-amber-200', 'bad' => 'border-rose-400/20 bg-rose-500/10 text-rose-200', 'info' => 'border-cyan-400/20 bg-cyan-500/10 text-cyan-200', 'muted'=> 'border-white/10 bg-white/5 text-white/70', ]; $toneChip = function($t){ return match($t){ 'points' => ['fa-solid fa-bolt', 'from-fuchsia-300 via-fuchsia-200 to-cyan-200'], 'hours' => ['fa-solid fa-hourglass-half', 'from-emerald-200 via-cyan-200 to-sky-200'], 'records'=> ['fa-solid fa-layer-group', 'from-amber-200 via-rose-200 to-fuchsia-200'], 'live_hours' => ['fa-solid fa-wifi', 'from-sky-200 via-cyan-200 to-emerald-200'], default => ['fa-solid fa-ranking-star', 'from-fuchsia-300 via-fuchsia-200 to-cyan-200'], }; }; [$sortIcon, $sortGrad] = $toneChip($sortKey); $safeNumber = fn($n, $dec=0) => is_null($n) ? '—' : number_format((float)$n, $dec); @endphp
{{-- HERO --}}
غرفة إيمان — سجلات الأعضاء • Members Logs

سجلات الأعضاء

قراءة ذكية للنقاط + الساعات + عدد السجلات، مع مقارنة اختيارية، ومقارنة بين الجنسين.

أعضاء: {{ $safeNumber($totals['members'] ?? 0) }} سجلات: {{ $safeNumber($totals['records'] ?? 0) }} نقاط: {{ $safeNumber($totals['points'] ?? 0) }} ساعات: {{ $safeNumber($totals['hours'] ?? 0, 2) }} لايف مؤكد: {{ $safeNumber($totals['live_confirmed_hours'] ?? 0, 2) }}س
{{-- FILTER PANEL --}}
فلترة + مقارنة + عرض
Members Logs Controls
تصفير الفلاتر
@if($compareEnabled)
المقارنة مفعّلة: {{ $compare_from }} → {{ $compare_to }}
@else
المقارنة غير مفعّلة (اختر "الشهر السابق" أو "مخصصة" مع تاريخين صحيحين).
@endif
{{-- GENDER COMPARE + AI --}}
{{-- Gender compare --}}
مقارنة الجنسين
Gender Insight
ذكور
{{ $safeNumber($male['hours'] ?? 0, 2) }}س
نسبة ساعات: {{ $malePct }}%
إناث
{{ $safeNumber($female['hours'] ?? 0, 2) }}س
نسبة ساعات: {{ $femalePct }}%
ذكور
{{ $safeNumber($male['members'] ?? 0) }} عضو
نقاط: {{ $safeNumber($male['points'] ?? 0) }}
سجلات: {{ $safeNumber($male['records'] ?? 0) }}
إناث
{{ $safeNumber($female['members'] ?? 0) }} عضو
نقاط: {{ $safeNumber($female['points'] ?? 0) }}
سجلات: {{ $safeNumber($female['records'] ?? 0) }}
* المقارنة هنا على الساعات ضمن الفترة المحددة.
{{-- AI --}}
تحليل AI
{{ $ai['summary'] ?? 'تحليل ذكي' }}
@foreach(($ai['tips'] ?? []) as $tip)
{{ $tip }}
@endforeach @if(empty($ai['tips']))
لا يوجد Insights حالياً.
@endif
{{-- HR --}}
{{-- LIST HEADER --}}
قائمة الأعضاء ضمن الفترة
النتائج
{{-- TABLE VIEW --}} @if($viewMode === 'table')
@if($compareEnabled) @endif @forelse($rows as $r) @php $name = $r['name'] ?? ($r['username'] ?? '—'); $username = $r['username'] ?? null; $genderV = $r['gender'] ?? null; $avatar = $r['avatar'] ?? null; $points = (int)($r['points'] ?? 0); $hours = (float)($r['hours'] ?? 0); $records= (int)($r['records'] ?? 0); $pos = (int)($r['positive_points'] ?? 0); $neg = (int)($r['negative_points'] ?? 0); $liveH = (float)($r['live_confirmed_hours'] ?? 0); $deltaPoints = $r['delta_points'] ?? null; $deltaHours = $r['delta_hours'] ?? null; $deltaRecs = $r['delta_records'] ?? null; $deltaLive = $r['delta_live_confirmed_hours'] ?? null; $deltaCls = function($v){ if (is_null($v)) return 'text-white/50'; if ($v > 0) return 'text-emerald-200'; if ($v < 0) return 'text-rose-200'; return 'text-amber-200'; }; $genderChip = match($genderV){ 'female' => 'border-pink-400/20 bg-pink-500/10 text-pink-200', 'male' => 'border-emerald-400/20 bg-emerald-500/10 text-emerald-200', default => 'border-white/10 bg-white/5 text-white/70', }; @endphp {{-- Member --}} {{-- Metrics --}} @if($compareEnabled) @endif @empty @endforelse
العضو النقاط الساعات السجلات نقاط + نقاط - لايف مؤكدΔ نقاط Δ ساعات Δ سجلات Δ لايف
@if($avatar) avatar @else {{ mb_substr($name,0,1) }} @endif
{{ $name }}
@if($username) @{{ $username }} @endif {{ $genderV === 'female' ? 'صبايا' : ($genderV === 'male' ? 'شباب' : '—') }}
{{ number_format($points) }} {{ number_format($hours, 2) }} {{ number_format($records) }} {{ number_format($pos) }} {{ number_format($neg) }} {{ number_format($liveH, 2) }}س {{ is_null($deltaPoints) ? '—' : (($deltaPoints>0?'+':'') . $deltaPoints) }} {{ is_null($deltaHours) ? '—' : (($deltaHours>0?'+':'') . number_format((float)$deltaHours, 2)) }} {{ is_null($deltaRecs) ? '—' : (($deltaRecs>0?'+':'') . $deltaRecs) }} {{ is_null($deltaLive) ? '—' : (($deltaLive>0?'+':'') . number_format((float)$deltaLive, 2)) }}
لا يوجد بيانات ضمن هذه الفترة.
* الجدول قابل للتمرير أفقياً على الهاتف.
@endif {{-- CARDS VIEW --}} @if($viewMode === 'cards')
@forelse($rows as $r) @php $name = $r['name'] ?? ($r['username'] ?? '—'); $username = $r['username'] ?? null; $genderV = $r['gender'] ?? null; $avatar = $r['avatar'] ?? null; $points = (int)($r['points'] ?? 0); $hours = (float)($r['hours'] ?? 0); $records= (int)($r['records'] ?? 0); $pos = (int)($r['positive_points'] ?? 0); $neg = (int)($r['negative_points'] ?? 0); $liveH = (float)($r['live_confirmed_hours'] ?? 0); $deltaPoints = $r['delta_points'] ?? null; $deltaHours = $r['delta_hours'] ?? null; $deltaRecs = $r['delta_records'] ?? null; $deltaLive = $r['delta_live_confirmed_hours'] ?? null; $deltaCls = function($v){ if (is_null($v)) return 'text-white/50'; if ($v > 0) return 'text-emerald-200'; if ($v < 0) return 'text-rose-200'; return 'text-amber-200'; }; $genderChip = match($genderV){ 'female' => 'border-pink-400/20 bg-pink-500/10 text-pink-200', 'male' => 'border-emerald-400/20 bg-emerald-500/10 text-emerald-200', default => 'border-white/10 bg-white/5 text-white/70', }; @endphp
@if($avatar) avatar @else {{ mb_substr($name,0,1) }} @endif
{{ $name }}
@if($username) @{{ $username }} @endif {{ $genderV === 'female' ? 'صبايا' : ($genderV === 'male' ? 'شباب' : '—') }}
النقاط
{{ number_format($points) }}
@if($compareEnabled)
Δ {{ is_null($deltaPoints) ? '—' : (($deltaPoints>0?'+':'') . $deltaPoints) }}
@endif
الساعات
{{ number_format($hours, 2) }}
@if($compareEnabled)
Δ {{ is_null($deltaHours) ? '—' : (($deltaHours>0?'+':'') . number_format((float)$deltaHours,2)) }}
@endif
عدد السجلات
{{ number_format($records) }}
@if($compareEnabled)
Δ {{ is_null($deltaRecs) ? '—' : (($deltaRecs>0?'+':'') . $deltaRecs) }}
@endif
لايف مؤكد
{{ number_format($liveH, 2) }}س
@if($compareEnabled)
Δ {{ is_null($deltaLive) ? '—' : (($deltaLive>0?'+':'') . number_format((float)$deltaLive,2)) }}
@endif
نقاط +
{{ number_format($pos) }}
نقاط -
{{ number_format($neg) }}
* ترتيب حسب: {{ $sortKey }} • اتجاه: {{ $dirKey }}
@empty
لا يوجد بيانات ضمن هذه الفترة.
@endforelse
@endif
{{-- JS صغير جداً بدون تعارض --}} @endsection