Sfoglia il codice sorgente

Added search for table

Alexander Musikhin 10 mesi fa
parent
commit
5bef8aa05d

+ 18 - 0
app/Http/Controllers/ProductController.php

@@ -63,6 +63,13 @@ class ProductController extends Controller
             ]
         ];
 
+        $this->data['searchFields'] = [
+            'nomenclature_number',
+            'article',
+            'name_tz',
+            'manufacturer_name',
+            'note',
+        ];
 
         // fill filters
         $this->data['filters'] = $filters;
@@ -99,6 +106,17 @@ class ProductController extends Controller
             }
         }
 
+        // accept search
+        if(!empty($request->s)) {
+            $s = $request->s;
+            $searchFields = $this->data['searchFields'];
+            $q->where(function ($query) use ($searchFields, $s) {
+                foreach ($searchFields as $searchField) {
+                    $query->orWhere($searchField, 'LIKE', '%' . $s . '%');
+                }
+            });
+        }
+
         // ------- setup sort and order --------------------------------------------------------------------------------
         $this->data['sortBy'] = (!empty($request->sortBy))
             ? Str::replace('_txt', '', $request->sortBy) // remove '_txt' fields modifier

+ 1 - 1
resources/views/catalog/index.blade.php

@@ -45,7 +45,7 @@
     </div>
 
 
-    <!-- Модальное окно -->
+    <!-- Модальное окно импорта-->
     <div class="modal fade" id="importModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
         <div class="modal-dialog modal-fullscreen-sm-down">
             <div class="modal-content">

+ 54 - 2
resources/views/partials/table.blade.php

@@ -143,7 +143,41 @@
     </div>
 </div>
 
-@dump($filters, $ranges, $dates)
+<!-- Модальное окно поиска -->
+<div class="modal fade" id="table_{{ $id }}_modal_search" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
+    <div class="modal-dialog modal-fullscreen-sm-down modal-lg">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h1 class="modal-title fs-5" id="exampleModalLabel">Поиск</h1>
+                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button>
+            </div>
+            <div class="modal-body">
+                <div>
+                    Поиск ведётся по следующим колонкам:
+                    <span class="fst-italic">
+                        @foreach($searchFields as $searchField)
+                            {{ $header[$searchField] }}
+                            @if(!$loop->last),@endif
+                        @endforeach
+                    </span>
+                </div>
+                <form class="search-form">
+                    @include('partials.input', [
+                        'name'  => 's',
+                        'title' => 'Поиск',
+                        'placeholder' => 'что ищем?',
+                        'value' => request()->s ?? '',
+                    ])
+                </form>
+
+            </div>
+            <div class="modal-footer">
+                <button type="button" class="btn btn-primary accept-search" data-bs-dismiss="modal">Найти</button>
+                <button type="button" class="btn btn-outline-secondary reset-search" data-bs-dismiss="modal">Сбросить</button>
+            </div>
+        </div>
+    </div>
+</div>
 
 @push('scripts')
     <script type="module">
@@ -202,6 +236,7 @@
                     currentUrl.searchParams.delete(filter.name);
                 }
             });
+            currentUrl.searchParams.delete('page');
             document.location.href = currentUrl.href;
         });
 
@@ -211,10 +246,27 @@
             $.each(filters, function (id, filter) {
                 currentUrl.searchParams.delete(filter.name);
             });
+            currentUrl.searchParams.delete('page');
             document.location.href = currentUrl.href;
         });
 
+        $('.accept-search').on('click', function () {
+            let s = $('.search-form input').val();
+            let currentUrl = new URL(document.location.href);
+            if(s !== '') {
+                    currentUrl.searchParams.set('s', s);
+                } else {
+                    currentUrl.searchParams.delete('s');
+                }
+            currentUrl.searchParams.delete('page');
+            document.location.href = currentUrl.href;
+        });
 
-
+        $('.reset-search').on('click', function () {
+            let currentUrl = new URL(document.location.href);
+            currentUrl.searchParams.delete('s');
+            currentUrl.searchParams.delete('page');
+            document.location.href = currentUrl.href;
+        });
     </script>
 @endpush