_dashboard_charts.blade.php 4.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. {{--
  2. Partial: ряд 2 дашборда — графики Chart.js + последние заявки
  3. Переменные: $leadsUnread, $recentLeads
  4. Данные для графиков ($leadsChart, $visitsChart) передаются в @push('js') основного файла
  5. --}}
  6. <div class="row">
  7. {{-- Графики --}}
  8. <div class="col-md-8">
  9. {{-- График заявок --}}
  10. <div class="card card-outline card-primary shadow-sm mb-3">
  11. <div class="card-header">
  12. <h3 class="card-title"><i class="fas fa-chart-line mr-2 text-primary"></i>Заявки за 14 дней</h3>
  13. <div class="card-tools">
  14. <a href="{{ route('admin.leads.index') }}" class="btn btn-sm btn-primary">
  15. Все заявки
  16. </a>
  17. </div>
  18. </div>
  19. <div class="card-body p-2">
  20. <canvas id="chartLeads" height="90"></canvas>
  21. </div>
  22. </div>
  23. {{-- График посещаемости --}}
  24. <div class="card card-outline card-info shadow-sm mb-3">
  25. <div class="card-header">
  26. <h3 class="card-title"><i class="fas fa-chart-bar mr-2 text-info"></i>Посещаемость за 14 дней</h3>
  27. </div>
  28. <div class="card-body p-2">
  29. <canvas id="chartVisits" height="90"></canvas>
  30. </div>
  31. </div>
  32. </div>
  33. {{-- Последние заявки --}}
  34. <div class="col-md-4">
  35. <div class="card card-outline card-danger shadow-sm" style="height:calc(100% - 1rem)">
  36. <div class="card-header">
  37. <h3 class="card-title">
  38. <i class="fas fa-bell mr-2 text-danger"></i>Последние заявки
  39. @if($leadsUnread > 0)
  40. <span class="badge badge-danger ml-1">{{ $leadsUnread }}</span>
  41. @endif
  42. </h3>
  43. <div class="card-tools">
  44. <a href="{{ route('admin.leads.index') }}" class="btn btn-sm btn-outline-secondary">
  45. Все
  46. </a>
  47. </div>
  48. </div>
  49. <div class="card-body p-0" style="overflow-y:auto;max-height:400px">
  50. @forelse($recentLeads as $lead)
  51. <a href="{{ route('admin.leads.show', $lead) }}"
  52. class="d-flex align-items-start p-3 border-bottom {{ is_null($lead->read_at) ? 'bg-light' : '' }}"
  53. style="text-decoration:none;color:inherit;transition:background .15s">
  54. <div class="mr-3 mt-1 flex-shrink-0">
  55. <div style="width:36px;height:36px;border-radius:50%;background:{{ is_null($lead->read_at) ? '#dc3545' : '#6c757d' }};
  56. display:flex;align-items:center;justify-content:center;color:#fff;font-size:14px">
  57. <i class="fas fa-envelope{{ is_null($lead->read_at) ? '' : '-open' }}"></i>
  58. </div>
  59. </div>
  60. <div class="flex-grow-1 min-width-0">
  61. @php
  62. $name = data_get($lead->data, 'name', data_get($lead->data, 'Имя', '—'));
  63. $phone = data_get($lead->data, 'phone', data_get($lead->data, 'Телефон', ''));
  64. @endphp
  65. <div class="font-weight-bold text-truncate small">{{ $name }}</div>
  66. @if($phone)
  67. <div class="text-muted" style="font-size:11px">{{ $phone }}</div>
  68. @endif
  69. <div class="text-muted" style="font-size:11px">
  70. {{ $lead->created_at->diffForHumans() }}
  71. </div>
  72. </div>
  73. @if(is_null($lead->read_at))
  74. <span class="badge badge-danger align-self-center ml-2">NEW</span>
  75. @endif
  76. </a>
  77. @empty
  78. <div class="p-4 text-center text-muted">
  79. <i class="fas fa-inbox fa-2x mb-2 d-block opacity-50"></i>
  80. Заявок пока нет
  81. </div>
  82. @endforelse
  83. </div>
  84. </div>
  85. </div>
  86. </div>