_hierarchical_list.blade.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. {{--
  2. Partial: иерархический список марок/моделей с алфавитным фильтром и аккордеоном.
  3. Переменные из родителя: $section, $items
  4. --}}
  5. @php
  6. $letters = $items
  7. ->map(fn($m) => mb_strtoupper(mb_substr($m->value, 0, 1, 'UTF-8')))
  8. ->unique()->sort()->values();
  9. @endphp
  10. {{-- Алфавитная навигация --}}
  11. <div class="alpha-nav-wrap mb-4">
  12. <div class="alpha-nav">
  13. <button class="alpha-btn active" data-letter="" title="Показать все"><span>Все</span></button>
  14. @foreach($letters as $letter)
  15. <button class="alpha-btn" data-letter="{{ $letter }}" title="{{ $letter }}"><span>{{ $letter }}</span></button>
  16. @endforeach
  17. </div>
  18. </div>
  19. <div class="d-flex align-items-center mb-3">
  20. <span class="text-muted small">
  21. Показано: <strong id="visible-count">{{ $items->count() }}</strong> из {{ $items->count() }}
  22. </span>
  23. </div>
  24. {{-- Карточки марок --}}
  25. @forelse($items as $parent)
  26. <div class="card card-primary card-outline mb-2 make-card collapsed-card"
  27. data-letter="{{ mb_strtoupper(mb_substr($parent->value, 0, 1, 'UTF-8')) }}">
  28. <div class="card-header" style="cursor:pointer" data-card-widget="collapse">
  29. <h3 class="card-title d-flex align-items-center">
  30. @if($section->code === 'makes' && $parent->logo)
  31. <img src="{{ asset('storage/' . $parent->logo) }}" alt="{{ $parent->value }}"
  32. style="width:26px;height:26px;object-fit:contain;margin-right:8px;background:#f4f4f4;border-radius:3px;padding:2px">
  33. @else
  34. <span class="alpha-badge mr-2">{{ mb_strtoupper(mb_substr($parent->value, 0, 1, 'UTF-8')) }}</span>
  35. @endif
  36. {{ $parent->value }}
  37. <small class="text-muted ml-2" style="font-size:11px">
  38. {{ $parent->children->count() }} {{ trans_choice('модель|модели|моделей', $parent->children->count()) }}
  39. </small>
  40. </h3>
  41. <div class="card-tools">
  42. <a href="{{ route('admin.manuals.value.create', [$section, 'parent_id' => $parent->id]) }}"
  43. class="btn btn-xs btn-success mr-1" onclick="event.stopPropagation()">
  44. <i class="fas fa-plus"></i>
  45. </a>
  46. <a href="{{ route('admin.manuals.value.edit', [$section, $parent]) }}"
  47. class="btn btn-xs btn-info mr-1" onclick="event.stopPropagation()">
  48. <i class="fas fa-edit"></i>
  49. </a>
  50. <form action="{{ route('admin.manuals.value.destroy', [$section, $parent]) }}"
  51. method="POST" class="d-inline"
  52. onsubmit="return confirm('Удалить {{ addslashes($parent->value) }} и все модели?')"
  53. onclick="event.stopPropagation()">
  54. @csrf @method('DELETE')
  55. <button class="btn btn-xs btn-danger mr-1"><i class="fas fa-trash"></i></button>
  56. </form>
  57. <button type="button" class="btn btn-tool">
  58. <i class="fas fa-plus"></i>
  59. </button>
  60. </div>
  61. </div>
  62. <div class="card-body p-0" style="display:none">
  63. @if($parent->children->isNotEmpty())
  64. <table class="table table-sm table-hover mb-0">
  65. <tbody>
  66. @foreach($parent->children as $child)
  67. <tr>
  68. <td class="pl-4">{{ $child->value }}</td>
  69. <td class="text-muted" style="width:60px">#{{ $child->id }}</td>
  70. <td style="width:80px" class="text-right">
  71. <a href="{{ route('admin.manuals.value.edit', [$section, $child]) }}"
  72. class="btn btn-xs btn-info"><i class="fas fa-edit"></i></a>
  73. <form action="{{ route('admin.manuals.value.destroy', [$section, $child]) }}"
  74. method="POST" class="d-inline"
  75. onsubmit="return confirm('Удалить {{ addslashes($child->value) }}?')">
  76. @csrf @method('DELETE')
  77. <button class="btn btn-xs btn-danger"><i class="fas fa-trash"></i></button>
  78. </form>
  79. </td>
  80. </tr>
  81. @endforeach
  82. </tbody>
  83. </table>
  84. @else
  85. <p class="text-muted text-center py-2 mb-0 small">Моделей нет</p>
  86. @endif
  87. </div>
  88. </div>
  89. @empty
  90. <div class="alert alert-info">
  91. Значения не найдены.
  92. <a href="{{ route('admin.manuals.value.create', $section) }}">Добавить первое</a>
  93. </div>
  94. @endforelse
  95. <div id="no-results" class="alert alert-warning" style="display:none">
  96. <i class="fas fa-search mr-1"></i> Марок на эту букву не найдено.
  97. </div>