فهرست منبع

make in the filter

azam 4 سال پیش
والد
کامیت
49e1223645

+ 30 - 0
app/Http/Requests/ProductRequest.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace App\Http\Requests;
+
+use Illuminate\Foundation\Http\FormRequest;
+
+class ProductRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return false;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            //
+        ];
+    }
+}

+ 15 - 18
packages/product/src/Http/Controllers/ProductController.php

@@ -8,6 +8,7 @@ use Packages\Product\Models\Product;
 use Illuminate\Http\Request;
 use App\Models\Category;
 use phpDocumentor\Reflection\Types\Compound;
+use PhpParser\Builder;
 
 class ProductController extends Controller
 {
@@ -24,19 +25,16 @@ class ProductController extends Controller
 
         $products = Product::query()->orderBy('id', 'DESC');
 
-        if(request()->has('productName') && request('productName') != '')
-            $products = $products->whereRaw('title = ?', [ request('productName')]);
-
-        if(request()->has('productName') && request('productSlug') != '')
-            $products = $products->whereRaw('slug = ?', [ request('productSlug')]);
-
-//        if(request()->has('productName') && request('productName') != '')
-//            $products = $products->whereRaw('slug like ?', ['%' . request('productName') . '%']);
-//
-//        if(request()->has('productName') && request('productName') != '')
-//            $products = $products->whereRaw('discription like ?', ['%' . request('productName') . '%']);
+        if (request()->has('productCategory') && request('productCategory') != '')
+            $products = $products->whereHas('categories', function ($query) {
+                $query->whereRaw('id = ?', [request('productCategory')]);
+            });
 
+        if (request()->has('productStatus') && request('productStatus') != '')
+            $products = $products->whereRaw('status = ?', [request('productStatus')]);
 
+        if (request()->has('productName') && request('productName') != '')
+            $products = $products->whereRaw('title = ?', [request('productName')]);
 
         $products = $products->paginate();
 
@@ -59,19 +57,20 @@ class ProductController extends Controller
         $validatedData = $request->validate([
             'title' => 'required|max:100',
             'price' => 'required',
+            'type' => 'required',
             'status' => 'required',
             'discription' => 'required',
-            'type' => 'required',
+
             'categories.*' => 'required',
 
 
         ], [
             'title.required' => 'فیلد عنوان الزامی می باشد.',
             'price.required' => 'فیلد قیمت الزامی می باشد.',
+            'type.required' => 'فیلد نوع محصول الزامی می باشد.',
             'status.required' => 'فیلد وضعیت الزامی می باشد.',
             'discription.required' => 'فیلد توضیحات الزامی می باشد.',
-            'type.required' => 'فیلد نوع محصول الزامی می باشد.',
-            'categories.required' => 'فیلد دسته بندی محصول الزامی می باشد.',
+            'categories[].required' => 'فیلد دسته بندی محصول الزامی می باشد.',
 
         ]);
 
@@ -113,18 +112,18 @@ class ProductController extends Controller
         $validatedData = $request->validate([
             'title' => 'required|max:100',
             'price' => 'required',
+            'type' => 'required',
             'status' => 'required',
             'discription' => 'required',
-            'type' => 'required',
             'categories.*' => 'required',
 
 
         ], [
             'title.required' => 'فیلد عنوان الزامی می باشد.',
             'price.required' => 'فیلد قیمت الزامی می باشد.',
+            'type.required' => 'فیلد نوع محصول الزامی می باشد.',
             'status.required' => 'فیلد وضعیت الزامی می باشد.',
             'discription.required' => 'فیلد توضیحات الزامی می باشد.',
-            'type.required' => 'فیلد نوع محصول الزامی می باشد.',
             'categories.required' => 'فیلد دسته بندی محصول الزامی می باشد.',
 
 
@@ -167,6 +166,4 @@ class ProductController extends Controller
     }
 
 
-
-
 }

+ 48 - 0
packages/product/src/Http/Requests/ProductRequest.php

@@ -0,0 +1,48 @@
+<?php
+
+namespace Packages\Product\Http\Requests;
+use Packages\Product\Http\Controllers\Product;
+use Illuminate\Foundation\Http\FormRequest;
+
+class ProductRequest extends FormRequest
+{
+    /**
+     * Determine if the user is authorized to make this request.
+     *
+     * @return bool
+     */
+    public function authorize()
+    {
+        return true;
+    }
+
+    /**
+     * Get the validation rules that apply to the request.
+     *
+     * @return array
+     */
+    public function rules()
+    {
+        return [
+            'title' => 'required|max:100',
+            'price' => 'required',
+            'type' => 'required',
+            'status' => 'required',
+            'discription' => 'required',
+            'categories.*' => 'required',
+
+        ];
+    }
+    public function messages()
+    {
+        return [
+            'title.required' => 'فیلد عنوان الزامی می باشد.',
+            'price.required' => 'فیلد قیمت الزامی می باشد.',
+            'type.required' => 'فیلد نوع محصول الزامی می باشد.',
+            'status.required' => 'فیلد وضعیت الزامی می باشد.',
+            'discription.required' => 'فیلد توضیحات الزامی می باشد.',
+            'categories[].required' => 'فیلد دسته بندی محصول الزامی می باشد.',
+
+        ];
+    }
+}

+ 125 - 90
packages/product/src/views/index.blade.php

@@ -1,10 +1,15 @@
 @component('panel.layouts.component', ['title' => 'محصولات'])
 
     @slot('style')
+        <style>
+            .btnSearch {
+                margin-top: 10px;
+            }
+        </style>
     @endslot
 
     @slot('subject')
-        <h1><i class="fa fa-users"></i> محصولات </h1>
+        <h1><i class="fa fa-users"></i>لیست محصولات </h1>
         <p>لیست محصولاتی تعریف شده برای مدیریت سطوح دسترسی.</p>
     @endslot
 
@@ -17,105 +22,124 @@
             <div class="col-md-12">
                 @component('product::components.message')
                 @endcomponent
-                @component('components.collapse-card' , ['title' => 'لیست محصولات'])
+                @component('components.collapse-card' , ['title' => 'جست جو محصولات'])
                     @slot('body')
-                        @component('components.collapse-search')
-                            @slot('form')
-                                <form class="clearfix" method="GET" action="">
-                                    <div class="form-group col-3">
-                                        <label for="categories">{{ __(' نام محصول') }}</label>
-                                        <input type="text" class="form-control"
-                                               id="query" name="productName"
-                                               value="{{ request()->query('productName') }}"
-                                               placeholder=" جستجو بر اساس نام محصول  ...">
-                                        <label for="categories">{{ __('دسته بندبی محصول') }}</label>
-                                        <input type="text" class="form-control "
-                                               id="query" name="productSlug"
-                                               value="{{ request()->query('productSlug') }}"
-                                               placeholder=" جستجو بر اساس نام محصول  ...">
-                                        <label for="categories">{{ __(' دسته بندی') }}</label>
-                                        <input type="text" class="form-control"
-                                               id="query" name="productCategory"
-                                               value="{{ request()->query('productCategory') }}"
-                                               placeholder=" جستجو بر اساس نام محصول ، slug ، وضعیت محصول ...">
+
+                        <form action="">
+
+
+                            <form method="GET" action="">
+                                <div class="form-row">
+                                    <div class="col">
+                                        <label for="categories">{{ __(' نام محصول:') }}</label>
+                                        <input type="text" class="form-control" placeholder="محصول..."
+                                               name="productName" value="{{ request()->query('productName') }}">
                                     </div>
-                                    <button type="submit" class="btn btn-primary float-left">جستجو</button>
-                                </form>
-                                {{--                                <p>{{$products->count()}}{{$request()->input('query')}} برای مورد  یافت شد'</p>--}}
-                            @endslot
-                        @endcomponent
-
-                        <div class="mt-4">
-                            <a href="{{ route('products.create') }}" type="button" class="btn btn-primary"><i
-                                    class="fa fa-plus"></i> ایجاد محصول</a>
-                        </div>
-
-                        @component('components.table')
-                            @slot('thead')
-                                <tr>
-                                    <th>شماره</th>
-                                    <th>نام</th>
-                                    <th>slug</th>
-                                    <th> sku</th>
-                                    <th>قیمت</th>
-                                    <th> قیمت فروش ویژه</th>
-                                    <th> نویسنده</th>
-                                    <th>وضعیت</th>
-                                    <th>نوع</th>
-
-                                    <th>توضیحات</th>
-                                    <th>دسته بندی</th>
-                                    <th> مدیریت</th>
-                                </tr>
-                            @endslot
-                            @slot('tbody')
-                                @forelse ($products as $product)
+                                    <div class="col">
+                                        <label for="categories">{{ __(' نام دسته بندی:') }}</label>
+                                        <select type="text" class="form-control" placeholder="دسته بندی..."
+                                                name="productCategory"
+                                                value="{{ request()->query('productCategory') }}">
+                                            <option value="">همه</option>
 
-                                    <tr>
-                                        <td>{{$product->id}}</td>
-                                        <td>{{$product->title}}</td>
-                                        <td>{{$product->slug}}</td>
-                                        <td>{{$product->sku}}</td>
-                                        <td>{{$product->price}}</td>
-                                        <td>{{$product->sale_price}}</td>
-                                        <td>{{$product->user->name}}</td>
-                                        <td>{{$product->status}}</td>
-                                        <td>{{$product->type}}</td>
-
-                                        <td><?php  echo mb_substr($product->discription, 0, 15, 'UTF8') . '...'?></td>
-                                        <td>
-                                            @foreach($product->categories->pluck('title') as $category)
-                                                <span>{{$category}}</span>
+                                            @foreach($categories as $cat)
+
+                                                <option value={{$cat->id}} {{(request()->has('productStatus') && request()->query('productStatus') == "$cat->id") ? 'selected'
+                                               : ''}}>{{$cat->title}}</option>
                                             @endforeach
-                                        </td>
-                                        <td class="d-flex">
-                                            <a href="{{route('products.edit', $product->id)}}"
-                                               class="btn btn-sm btn-primary mr-2">ویرایش</a>
-                                            <form
-                                                action="{{route('products.destroy', $product->id)}}"
-                                                method="POST"
-                                                onsubmit="return confirm('آیا مطمئن هستید؟');"
-                                            >
-                                                @csrf
-                                                @method('DELETE')
-                                                <button type="submit" class="btn btn-sm btn-danger">حذف</button>
-                                            </form>
-                                        </td>
-                                    </tr>
-                                @empty
+                                        </select>
+                                    </div>
+                                    <div class="col">
+                                        <label for="categories">{{ __('  وضعیت:') }}</label>
+                                        <select type="text" class="form-control" placeholder="وضعیت..."
+                                                name="productStatus" value="{{ request()->query('productStatus') }}">
+                                            <option value="">همه</option>
+                                            <option value=1 {{(request()->has('productStatus') && request()->query('productStatus') == "1") ? 'selected'
+                                               : ''}}>موجود
+                                            </option>
+                                            <option value=0 {{(request()->has('productStatus') && request()->query('productStatus') ==" 0") ?
+ 'selected': ''}}>ناموجود
+                                            </option>
+                                        </select>
+                                    </div>
+                                </div>
+
+                                <button type="submit" class="btn btn-primary float-left btnSearch" id="show">جستجو
+                                </button>
+                                <p class="searchNaum">{{$products->count()}}{{ __(' :مورد یافت شد.') }}</p>
+                            </form>
+
+                            <div class="mt-4">
+                                <a href="{{ route('products.create') }}" type="button" class="btn btn-primary"><i
+                                        class="fa fa-plus"></i> ایجاد محصول</a>
+                            </div>
+
+                            @component('components.table')
+                                @slot('thead')
                                     <tr>
-                                        <td colspan="5" class="text-center">موردی برای نمایش وجود ندارد.</td>
+                                        <th>شماره</th>
+                                        <th>نام</th>
+                                        <th>slug</th>
+                                        <th> sku</th>
+                                        <th>قیمت</th>
+                                        <th> قیمت فروش ویژه</th>
+                                        <th> نویسنده</th>
+                                        <th>وضعیت</th>
+                                        <th>نوع</th>
+
+                                        <th>توضیحات</th>
+                                        <th>دسته بندی</th>
+                                        <th> مدیریت</th>
                                     </tr>
-                                @endforelse
-                            @endslot
+                                @endslot
+                                @slot('tbody')
+                                    @forelse ($products as $product)
+
+                                        <tr>
+                                            <td>{{$product->id}}</td>
+                                            <td>{{$product->title}}</td>
+                                            <td>{{$product->slug}}</td>
+                                            <td>{{$product->sku}}</td>
+                                            <td>{{$product->price}}</td>
+                                            <td>{{$product->sale_price}}</td>
+                                            <td>{{$product->user->name}}</td>
+                                            <td>{{$product->status}}</td>
+                                            <td>{{$product->type}}</td>
+
+                                            <td><?php  echo mb_substr($product->discription, 0, 15, 'UTF8') . '...'?></td>
+                                            <td>
+                                                @foreach($product->categories->pluck('title') as $category)
+                                                    <span>{{$category}}{{'،'}}</span>
+                                                @endforeach
+                                            </td>
+                                            <td class="d-flex">
+                                                <a href="{{route('products.edit', $product->id)}}"
+                                                   class="btn btn-sm btn-primary mr-2">ویرایش</a>
+                                                <form
+                                                    action="{{route('products.destroy', $product->id)}}"
+                                                    method="POST"
+                                                    onsubmit="return confirm('آیا مطمئن هستید؟');"
+                                                >
+                                                    @csrf
+                                                    @method('DELETE')
+                                                    <button type="submit" class="btn btn-sm btn-danger">حذف</button>
+                                                </form>
+                                            </td>
+                                        </tr>
+                                    @empty
+                                        <tr>
+                                            <td colspan="5" class="text-center">موردی برای نمایش وجود ندارد.</td>
+                                        </tr>
+                        @endforelse
+                    @endslot
 
-                        @endcomponent
+                @endcomponent
 
-                        {{--Paginate section--}}
+                {{--Paginate section--}}
 
-                        {{ $products->withQueryString()->links() }}
+                {{ $products->withQueryString()->links() }}
 
-                    @endslot
+                @endslot
                 @endcomponent
             </div>
         </div>
@@ -124,6 +148,17 @@
     @endslot
 
     @slot('script')
+        <script>
+
+
+            $(document).ready(function(){
+                $("#show").click(function(){
+                    $("#searchNaum").toggle();
+                });
+            });
+
+        </script>
+
     @endslot
 
 @endcomponent

+ 11 - 5
packages/product/src/views/product/create.blade.php

@@ -16,6 +16,9 @@
              .py-5 {
                  padding-top: 0 !important;
             }
+            select.select2{
+                background-color: hsl(315, 22%, 86%);
+            }
         </style>
     @endslot
     @slot('subject')
@@ -123,7 +126,7 @@
                                     <div class="form-group">
                                         <label for="status">{{ __(' وضعیت محصول') }}</label><i class="required">&nbsp; *</i>
                                         <select id="status" type="text"
-                                                class="form-control select2 @error('status') is-invalid @enderror" name="status"
+                                                class="form-control  @error('status') is-invalid @enderror" name="status"
                                                 value="{{ old('status') }}"  autocomplete="status" >
                                             <option value="">انتخاب کنید</option>
                                             <option value="1">موجود</option>
@@ -138,9 +141,8 @@
                                         <div class="form-group">
                                             <label for="categories">{{ __(' دسته بندی') }}</label><i class="required">&nbsp; *</i>
                                             <select id="select2" type="text"
-                                                    class="form-control select2  @error('categories') is-invalid @enderror" name="categories"
-                                                       autocomplete="categories"  multiple>
-                                                <option value="">انتخاب کنید</option>
+                                                    class="form-control select2 @error('categories[]') is-invalid @enderror" name="categories[]"
+                                                    required  autocomplete="categories[]"  multiple value="انتخاب کنید...">
 
 
                                                 @foreach($categories as $cat)
@@ -195,7 +197,11 @@
     @endslot
 
     @slot('script')
-
+{{--        <script>--}}
+{{--            $(document).ready(function () {--}}
+{{--                $('.select2').select2();--}}
+{{--            });--}}
+{{--        </script>--}}
     @endslot
 
 @endcomponent

+ 2 - 2
packages/product/src/views/product/edit.blade.php

@@ -120,8 +120,8 @@
                                         <div class="form-group">
                                             <label for="categories[]">{{ __(' دسته بندی') }}</label><i class="required">&nbsp; *</i>
                                             <select id="categories" type="text"
-                                                    class="form-control @error('categories[]') is-invalid @enderror" name="categories[]"
-                                                      autocomplete="categories[]">
+                                                    class="form-control select2 @error('categories[]') is-invalid @enderror" name="categories[]"
+                                                      autocomplete="categories[]" multiple>
                                                 @foreach($categories as $cat)
                                                     <option value="{{$cat->id}}" <?php
                                                         if (in_array($cat->id,$product->categories->pluck('id')->toArray()))echo 'selected'

+ 1 - 3
resources/js/app.js

@@ -5,6 +5,4 @@ require('./bootstrap');
 require('sweetalert');
 require('owl.carousel');
 require('croppie/croppie');
-require('select2/dist/js/select2.js');
-require('select2/src/js/select2/dropdown/closeOnSelect.js');
-require('select2/src/js/select2/i18n/en.js');
+window.select2 = require('select2/dist/js/select2.js');

+ 11 - 0
resources/js/panel/panel.js

@@ -1,4 +1,5 @@
 require('../app');
+// require('select2/dist/js/select2.min.js')
 
 // Sidebar Tree View Menu
 (function () {
@@ -28,3 +29,13 @@ require('../app');
 	$("[data-toggle='tooltip']").tooltip();
 
 })();
+// price ،
+  $('input.price').keyup(function () {
+    const price = $(this).val().replace(/[^0-9]+/g, '');
+    $(this).val(new Intl.NumberFormat().format(price));
+  });
+// use the select2
+
+  $(document).ready(function () {
+    $('.select2').select2();
+  });

+ 1 - 0
resources/sass/panel/panel.scss

@@ -1,6 +1,7 @@
 @import '../fonts/awesome/awesome-font.css';
 @import '../fonts/iransans/iransans-font.css';
 @import '../app';
+@import '~select2/dist/css/select2.min.css';
 
 // This files are essential for the theme
 //@import './core/customize-bootstrap';

+ 1 - 0
resources/views/panel/layouts/app.blade.php

@@ -17,6 +17,7 @@
 
     <!-- Styles -->
     <link href="{{ mix('css/panel.css') }}" rel="stylesheet">
+{{--    <link href="node_modules/select2/dist/css/select2.min.css" rel="stylesheet" />--}}
 
     @yield('style')
 

+ 1 - 1
resources/views/panel/layouts/sidebar.blade.php

@@ -17,7 +17,7 @@
                 <li><a class="treeview-item pl-3" href="{{ route('permissions.index') }}"><i class="icon fa fa-circle-o"></i>‌دسترسی‌ها</a></li>
             </ul>
         </li>
-        <li class="treeview"><a class="app-menu__item" href="{{ route('products.index') }}" data-toggle="treeview"><i class="app-menu__icon fa fa-users"></i><span class="app-menu__label">محصولات  </span><i class="treeview-indicator fa fa-angle-left"></i></a>
+        <li class="treeview"><a class="app-menu__item" href="" data-toggle="treeview"><i class="app-menu__icon fa fa-users"></i><span class="app-menu__label">محصولات  </span><i class="treeview-indicator fa fa-angle-left"></i></a>
             <ul class="treeview-menu">
                 <li><a class="treeview-item pl-3" href="{{ route('products.index') }}"><i class="icon fa fa-circle-o"></i> محصولات </a></li>
                 <li><a class="treeview-item pl-3" href="{{ route('products.create') }}"><i class="icon fa fa-circle-o"></i>ایجاد محصول</a></li>