azam 4 роки тому
батько
коміт
ad6ac19f1e

+ 1 - 1
app/Models/Category.php

@@ -7,7 +7,7 @@ use Illuminate\Database\Eloquent\Model;
 use Illuminate\Database\Eloquent\SoftDeletes;
 class Category extends Model
 {
-    protected $guarded = [] ;
+    protected $fillable = ['title', 'parent', 'category_type', 'creator_id', 'slug', 'discription'];
 
     use SoftDeletes;
 

+ 5 - 0
package-lock.json

@@ -7766,6 +7766,11 @@
             "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=",
             "dev": true
         },
+        "select2": {
+            "version": "4.0.13",
+            "resolved": "https://registry.npmjs.org/select2/-/select2-4.0.13.tgz",
+            "integrity": "sha512-1JeB87s6oN/TDxQQYCvS5EFoQyvV6eYMZZ0AeA4tdFDYWN3BAGZ8npr17UBFddU0lgAt3H0yjX3X6/ekOj1yjw=="
+        },
         "selfsigned": {
             "version": "1.10.7",
             "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.7.tgz",

+ 2 - 1
package.json

@@ -26,6 +26,7 @@
     "dependencies": {
         "bootstrap-v4-rtl": "^4.4.1-2",
         "croppie": "^2.6.4",
-        "owl.carousel": "^2.3.4"
+        "owl.carousel": "^2.3.4",
+        "select2": "^4.0.13"
     }
 }

+ 41 - 19
packages/product/src/Http/Controllers/ProductController.php

@@ -20,8 +20,26 @@ class ProductController extends Controller
     public function index()
     {
 
-        $products = Product::orderBy('id', 'DESC')->paginate(20);
         $categories = Category::orderBy('id', 'DESC')->get();
+
+        $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') . '%']);
+
+
+
+        $products = $products->paginate();
+
         return view('product::index', compact('products', 'categories'));
 
     }
@@ -30,7 +48,7 @@ class ProductController extends Controller
     public function create()
     {
         $categories = Category::orderBy('id', 'DESC')->get();
-        return view('product::product.create', compact( 'categories'));
+        return view('product::product.create', compact('categories'));
     }
 
 // *********************************************************save products ******************
@@ -44,7 +62,7 @@ class ProductController extends Controller
             'status' => 'required',
             'discription' => 'required',
             'type' => 'required',
-            'categories[]' => 'required',
+            'categories.*' => 'required',
 
 
         ], [
@@ -53,7 +71,7 @@ class ProductController extends Controller
             'status.required' => 'فیلد وضعیت الزامی می باشد.',
             'discription.required' => 'فیلد توضیحات الزامی می باشد.',
             'type.required' => 'فیلد نوع محصول الزامی می باشد.',
-            'categories[].required' => 'فیلد دسته بندی محصول الزامی می باشد.',
+            'categories.required' => 'فیلد دسته بندی محصول الزامی می باشد.',
 
         ]);
 
@@ -64,18 +82,18 @@ class ProductController extends Controller
 //        $data = array_merge($request->except('categories'), ['creator_id' => auth()->user()->id]);
 
         $data = [
-          'title' => $request->title,
-          'slug' => $request->slug,
-          'sku' => $request->sku,
-          'price' => $request->price,
-          'sale_price' =>$request->sale_price ,
-          'type' =>$request->type ,
-          'status' =>$request->status ,
-          'discription' =>$request->discription ,
-          'creator_id' => auth()->user()->id
+            'title' => $request->title,
+            'slug' => $request->slug,
+            'sku' => $request->sku,
+            'price' => $request->price,
+            'sale_price' => $request->sale_price,
+            'type' => $request->type,
+            'status' => $request->status,
+            'discription' => $request->discription,
+            'creator_id' => auth()->user()->id
         ];
         $product = Product::create($data);
-         $product->categories()->sync($request->categories);
+        $product->categories()->sync($request->categories);
         $msg = 'ذخیره محصول با موفقیت انجام شد ';
         return redirect(route('products.edit', $product->id))->with('success', $msg);
     }
@@ -98,6 +116,7 @@ class ProductController extends Controller
             'status' => 'required',
             'discription' => 'required',
             'type' => 'required',
+            'categories.*' => 'required',
 
 
         ], [
@@ -106,7 +125,7 @@ class ProductController extends Controller
             'status.required' => 'فیلد وضعیت الزامی می باشد.',
             'discription.required' => 'فیلد توضیحات الزامی می باشد.',
             'type.required' => 'فیلد نوع محصول الزامی می باشد.',
-
+            'categories.required' => 'فیلد دسته بندی محصول الزامی می باشد.',
 
 
         ]);
@@ -121,10 +140,10 @@ class ProductController extends Controller
             'slug' => $request->slug,
             'sku' => $request->sku,
             'price' => $request->price,
-            'sale_price' =>$request->sale_price ,
-            'type' =>$request->type ,
-            'status' =>$request->status ,
-            'discription' =>$request->discription ,
+            'sale_price' => $request->sale_price,
+            'type' => $request->type,
+            'status' => $request->status,
+            'discription' => $request->discription,
             'creator_id' => auth()->user()->id
         ];
 
@@ -137,6 +156,7 @@ class ProductController extends Controller
     }
 
     //***************************** delete products*****************************************
+
     public function destroy(Product $product)
     {
 
@@ -147,4 +167,6 @@ class ProductController extends Controller
     }
 
 
+
+
 }

+ 1 - 1
packages/product/src/Models/Product.php

@@ -11,7 +11,7 @@ class Product extends Model
 {
     use SoftDeletes;
 
-    protected $fillable = ['title', 'discription', 'price', 'creator_id', 'type', 'status', 'sale_price', 'sku', 'slug', 'categories[]'];
+    protected $fillable = ['title', 'discription', 'price', 'creator_id', 'type', 'status', 'sale_price', 'sku', 'slug'];
     //protected $guarded = [];
 
     public function user()

+ 3 - 1
packages/product/src/routes/web.php

@@ -8,7 +8,9 @@ Route::group([
     'prefix' => 'panel'
 ], function() {
 
-Route::resource('products','ProductController');
+    Route::resource('products','ProductController');
+;
+    Route::post('products/{product}', 'ProductController@index')->name('products.search');
 
 
 

+ 31 - 41
packages/product/src/views/index.blade.php

@@ -15,22 +15,36 @@
     @slot('content')
         <div class="row">
             <div class="col-md-12">
+                @component('product::components.message')
+                @endcomponent
                 @component('components.collapse-card' , ['title' => 'لیست محصولات'])
                     @slot('body')
                         @component('components.collapse-search')
                             @slot('form')
-                                <form class="clearfix">
+                                <form class="clearfix" method="GET" action="">
                                     <div class="form-group">
-                                        <label for="text-name-input">نام محصول</label>
-                                        <input type="text" class="form-control" id="text-name-input"
-                                               placeholder="نام محصول">
+
+                                        <input type="text" class="form-control"
+                                               id="query" name="productName"
+                                               value="{{ request()->query('productName') }}"
+                                               placeholder=" جستجو بر اساس نام محصول ، slug ، وضعیت محصول ...">
+
+                                        <input type="text" class="form-control"
+                                               id="query" name="productSlug"
+                                               value="{{ request()->query('productSlug') }}"
+                                               placeholder=" جستجو بر اساس نام محصول ، slug ، وضعیت محصول ...">
+
+                                        <input type="text" class="form-control"
+                                               id="query" name="productCategory"
+                                               value="{{ request()->query('productCategory') }}"
+                                               placeholder=" جستجو بر اساس نام محصول ، slug ، وضعیت محصول ...">
                                     </div>
                                     <button type="submit" class="btn btn-primary float-left">جستجو</button>
                                 </form>
+                                {{--                                <p>{{$products->count()}}{{$request()->input('query')}} برای مورد  یافت شد'</p>--}}
                             @endslot
                         @endcomponent
-                        @component('product::components.message')
-                        @endcomponent
+
                         <div class="mt-4">
                             <a href="{{ route('products.create') }}" type="button" class="btn btn-primary"><i
                                     class="fa fa-plus"></i> ایجاد محصول</a>
@@ -58,42 +72,18 @@
                                 @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>
-                                            {{$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(strip_tags($product->discription), 0, 15, 'UTF8') . '...'?>
-                                        </td>
-                                        <td>
-
                                             @foreach($product->categories->pluck('title') as $category)
                                                 <span>{{$category}}</span>
                                             @endforeach

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

@@ -33,7 +33,8 @@
                     <div class="col-lg-11 col-md-11 mx-auto">
                         <div class="card">
                             <div class="card-header"><strong>{{ __('ثبت محصول جدید') }}</strong></div>
-
+                            @component('product::components.message')
+                            @endcomponent
                             <div class="card-body mx-lg-5 px-lg-3">
                                 <form method="POST" action="{{ route('products.store') }}">
                                     @csrf
@@ -136,9 +137,9 @@
                                     </div>
                                         <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[]"
-                                                    value="{{ old('categories[]') }}"   autocomplete="categories[]">
+                                            <select id="select2" type="text"
+                                                    class="form-control select2 @error('categories') is-invalid @enderror" name="categories"
+                                                       autocomplete="categories">
                                                 <option value="">انتخاب کنید</option>
                                                 @foreach($categories as $cat)
 
@@ -146,7 +147,11 @@
                                                 @endforeach
                                             </select>
 
-
+                                            @error('categories[]')
+                                            <span class="invalid-feedback" role="alert">
+                                            <strong>{{ $message }}</strong>
+                                        </span>
+                                            @enderror
 
                                         </div>
 

+ 12 - 7
packages/product/src/views/product/edit.blade.php

@@ -29,8 +29,11 @@
     @slot('content')
         <div class="auth-background h-auto py-5">
             <div class="container py-5">
+                @component('product::components.message')
+                @endcomponent
                 <div class="row align-items-center">
-                    <div class="col-lg-11 col-md-11 mx-auto">
+
+                    <div class="col-lg-12 col-md-12 mx-auto">
                         <div class="card">
                             <div class="card-header"><strong>{{ __('ویرایش محصول جدید') }}</strong></div>
 
@@ -48,7 +51,7 @@
                                             <input id="title" type="text"
                                                    class="form-control @error('title') is-invalid @enderror"
                                                    name="title"
-                                                   value="{{$product->title}}" required autocomplete="title" autofocus>
+                                                   value="{{$product->title}}"  autocomplete="title" autofocus>
 
                                             @error('title')
                                             <span class="invalid-feedback" role="alert">
@@ -92,7 +95,7 @@
                                             <input id="price" type="text"
                                                    class="form-control price @error('price') is-invalid @enderror"
                                                    name="price"
-                                                   value="{{$product->price}}" required autocomplete="price" autofocus>
+                                                   value="{{$product->price}}"  autocomplete="price" autofocus>
 
                                             @error('price')
                                             <span class="invalid-feedback" role="alert">
@@ -106,7 +109,7 @@
                                             <input id="sale_price" type="text"
                                                    class="form-control price @error('sale_price') is-invalid @enderror"
                                                    name="sale_price"
-                                                   value="{{$product->sale_price}}" required autocomplete="sale_price">
+                                                   value="{{$product->sale_price}}"  autocomplete="sale_price">
 
                                             @error('sale_price')
                                             <span class="invalid-feedback" role="alert">
@@ -118,9 +121,11 @@
                                             <label for="categories[]">{{ __(' دسته بندی') }}</label><i class="required">&nbsp; *</i>
                                             <select id="categories" type="text"
                                                     class="form-control @error('categories[]') is-invalid @enderror" name="categories[]"
-                                                     required autocomplete="categories[]">
+                                                      autocomplete="categories[]">
                                                 @foreach($categories as $cat)
-                                                    <option value="{{$cat->id}}" >{{$cat->title}}</option>
+                                                    <option value="{{$cat->id}}" <?php
+                                                        if (in_array($cat->id,$product->categories->pluck('id')->toArray()))echo 'selected'
+                                                        ?>>{{$cat->title}}</option>
                                                 @endforeach
                                             </select>
 
@@ -135,7 +140,7 @@
                                             <label for="type">{{ __(' نوع محصول') }}</label><i class="required">&nbsp; *</i>
                                             <select id="type" type="text"
                                                     class="form-control @error('type') is-invalid @enderror" name="type"
-                                                    required autocomplete="type">
+                                                     autocomplete="type">
                                                 <option value="0" @if($product->type==='ساده') selected='selected' @endif>ساده</option>
                                                 <option value="1" @if($product->type==='متغیر') selected='selected' @endif>متغیر</option>
                                                 <option value="2" @if($product->type==='باندل') selected='selected' @endif>باندل</option>

+ 1 - 0
resources/js/app.js

@@ -5,3 +5,4 @@ require('./bootstrap');
 require('sweetalert');
 require('owl.carousel');
 require('croppie/croppie');
+require('select2/dist/js/select2');

+ 1 - 0
resources/sass/app.scss

@@ -7,6 +7,7 @@
 // Plugins
 @import '~owl.carousel/dist/assets/owl.carousel.css';
 @import '~croppie/croppie.css';
+@import '~select2/dist/css/select2.css';
 
 body{
     font-family: iransans;

+ 6 - 5
resources/views/panel/categories/create.blade.php

@@ -69,7 +69,7 @@
 
                                     </div>
                                     <div class="form-group">
-                                        <label for="parent">  {{ __('parent  ') }}</label><i class="required">&nbsp;*</i>
+                                        <label for="parent">  {{ __('parent') }}</label><i class="required">&nbsp;*</i>
                                         <input id="parent" type="text"
                                                class="form-control @error('parent') is-invalid @enderror"
                                                name="parent" value="{{ old('parent') }}"
@@ -89,10 +89,11 @@
                                         <select id="category_type" type="text"
                                                 class="form-control @error('category_type') is-invalid @enderror"
                                                 name="category_type"
-                                                required autocomplete="category_type">
-                                            <option value="1">محصولات</option>
-                                            <option value="0">اخبار</option>
-                                            <option value="0">دسته بندی</option>
+                                                 autocomplete="category_type">
+                                            <option value="">انتخاب کنید</option>
+                                            <option value="0">محصولات</option>
+                                            <option value="1">اخبار</option>
+                                            <option value="2">دسته بندی</option>
                                         </select>
 
                                         @error('category_type')