index.blade.php 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. @extends('layouts.app')
  2. @section('content')
  3. <div class="container-fluid">
  4. <div class="row align-items-center">
  5. <div class="col-5">
  6. <div class="">Всего найдено: {{ $products->total() }}</div>
  7. {{ $products->links() }}
  8. Выбрано: <span id="count_selected">0</span>
  9. <button class="btn btn-sm btn-primary mx-3" onclick="select_export()">Экспорт</button>
  10. <button class="btn btn-sm btn-primary" onclick="reset_selected()">Сбросить выбор</button>
  11. </div>
  12. <div class="col-7">
  13. <form class="" action="" method="get">
  14. <div class="row my-2 justify-content-center">
  15. <div class="col">
  16. <label class="form-label" for="s">Поиск</label>
  17. <input class="form-control form-control-sm"
  18. value="{{ $s ?? '' }}"
  19. type="text" id="s" name="s" placeholder="Поиск">
  20. </div>
  21. <div class="col">
  22. <label class="form-label " for="series">Серия</label>
  23. <select class="form-select form-select-sm" name="s_series" id="series">
  24. <option value="">Все</option>
  25. @foreach($series as $ser)
  26. <option {{ (isset($s_series) && ($ser->series == $s_series)) ? 'selected' : '' }} >{{ $ser->series }}</option>
  27. @endforeach
  28. </select>
  29. </div>
  30. <div class="col">
  31. <label class="form-label " for="price_min">Цена от</label>
  32. <input class="form-control form-control-sm"
  33. value="{{ $s_price_min ?? '' }}"
  34. type="number" id="price_min" name="s_price_min">
  35. </div>
  36. <div class="col">
  37. <label class="form-label " for="price_max">Цена до</label>
  38. <input class="form-control form-control-sm"
  39. value="{{ $s_price_max ?? '' }}"
  40. type="number" id="price_max" name="s_price_max">
  41. </div>
  42. <div class="col-auto">
  43. <label class="form-label" for="perpage">На странице</label>
  44. <select class="form-select form-select-sm" id="perpage" name="perpage">
  45. <option {{ (isset($perpage) && ($perpage == 20)) ? 'selected' : '' }} value="20">20
  46. </option>
  47. <option {{ (isset($perpage) && ($perpage == 100)) ? 'selected' : '' }} value="100">100
  48. </option>
  49. <option {{ (isset($perpage) && ($perpage == 10000)) ? 'selected' : '' }} value="10000">
  50. Все
  51. </option>
  52. </select>
  53. </div>
  54. <div class="col-1">
  55. <button id="sb" class="btn btn-primary mt-4" type="submit">Поиск</button>
  56. </div>
  57. </div>
  58. </form>
  59. </div>
  60. </div>
  61. <div class="row">
  62. <div class="col-12">
  63. <table class="table">
  64. <thead>
  65. <tr class="align-middle">
  66. <th class="text-center">Артикул, Серия<br>
  67. <label><input type="checkbox" class="check_all" onchange="toggle(this)">&nbsp;Все</label>
  68. </th>
  69. <th>Группа <br> Наименование <br> Наименование под образец формы</th>
  70. <th>Цена</th>
  71. <th>Характеристики</th>
  72. <th>Техническое описание</th>
  73. <th>Создан / Изменён</th>
  74. <th>Изображение</th>
  75. </thead>
  76. </tr>
  77. <tbody>
  78. @foreach($products as $product)
  79. <tr class="align-middle prod-tr">
  80. <td class="text-center">
  81. <label>
  82. <input type="checkbox" onchange="select_product({{ $product->id }}, this)" class="form-check-inline me-0 prd-chk" name="ids" value="{{ $product->id }}"><br>
  83. {{ $product->article }}<br>
  84. {{ $product->series }}
  85. </label>
  86. </td>
  87. <td>
  88. <a href="{{ route('view_product', $product->id) }}">
  89. <strong>Группа:</strong> {{ $product->product_group }}<br>
  90. <strong>Наименование:</strong> {{ $product->name }}<br>
  91. <strong>Наименование под образец формы:</strong> {{ $product->name_for_form }}
  92. </a>
  93. </td>
  94. <td>{!! number_format($product->price, 2, ',', '&nbsp') !!}</td>
  95. <td>{!! nl2br($product->characteristics) !!}</td>
  96. <td>{!! Str::words(nl2br($product->tech_description), 70) !!}</td>
  97. <td>{!! date('d.m.Y_H:i', strtotime($product->created_at)) . '<br>' .date('d.m.Y_H:i', strtotime($product->updated_at)) !!}</td>
  98. <td class="text-center align-middle">
  99. @empty($product->image_path)
  100. Нет изображения
  101. @else
  102. <img class="img-fluid"
  103. src="{{ '/' . env('IMAGES_PATH', '/fill_images_path_in_env') . '/' . $product->image_path }}"
  104. alt="{{ $product->article }}">
  105. @endempty
  106. </td>
  107. </tr>
  108. @endforeach
  109. </tbody>
  110. </table>
  111. <div class="d-flex">
  112. {{ $products->links() }}
  113. </div>
  114. </div>
  115. </div>
  116. </div>
  117. <form action="{{ route('select_export') }}" method="post" class="visually-hidden" id="select_export">
  118. @csrf
  119. <textarea name="ids" id="ids"></textarea>
  120. </form>
  121. <script>
  122. function toggle(source) {
  123. let checkboxes = document.querySelectorAll('.prd-chk');
  124. for(let i =0; i < checkboxes.length; i++){
  125. checkboxes[i].checked = source.checked;
  126. select_product(checkboxes[i].value, source);
  127. }
  128. calc_selected();
  129. }
  130. function select_product(id, status){
  131. let selected_products = JSON.parse(localStorage.getItem('selected_products'));
  132. if(!selected_products) selected_products = [];
  133. console.log(status.checked);
  134. if(status.checked){
  135. // console.log('select '+id);
  136. if(!selected_products.includes(id)){
  137. selected_products.push(id);
  138. }
  139. } else {
  140. // console.log('deselect '+id);
  141. const index = selected_products.indexOf(id);
  142. if(index > -1){
  143. selected_products.splice(index, 1);
  144. }
  145. }
  146. localStorage.setItem('selected_products', JSON.stringify(selected_products));
  147. calc_selected();
  148. }
  149. function calc_selected(){
  150. let selected_products = JSON.parse(localStorage.getItem('selected_products'));
  151. if(!selected_products) selected_products = [];
  152. document.getElementById('count_selected').innerText = selected_products.length;
  153. let checkboxes = document.querySelectorAll('.prd-chk');
  154. for(let i =0; i < checkboxes.length; i++){
  155. if(selected_products.includes(checkboxes[i].value)){
  156. checkboxes[i].checked = true;
  157. }
  158. }
  159. }
  160. function reset_selected(){
  161. localStorage.setItem('selected_products', JSON.stringify([]));
  162. let checkboxes = document.querySelectorAll('.prd-chk');
  163. for(let i =0; i < checkboxes.length; i++) {
  164. checkboxes[i].checked = false;
  165. }
  166. document.querySelector('.check_all').checked = false;
  167. calc_selected();
  168. }
  169. function select_export(){
  170. let selected_products = localStorage.getItem('selected_products')
  171. //document.location = '{{ route('select_export') }}?ids='+selected_products;
  172. document.getElementById('ids').value = selected_products;
  173. document.getElementById('select_export').submit();
  174. }
  175. calc_selected();
  176. </script>
  177. @endsection