Browse Source

修复Column\Filter\In 搜索无法选中的bug

jqh 5 years ago
parent
commit
4cc3ff24b4

+ 20 - 24
src/Grid/Column/Filter.php

@@ -7,6 +7,7 @@ use Dcat\Admin\Grid\Model;
 use Dcat\Admin\Support\Helper;
 use Illuminate\Contracts\Support\Renderable;
 use Illuminate\Support\Arr;
+use Illuminate\Support\Facades\URL;
 
 abstract class Filter implements Renderable
 {
@@ -23,7 +24,7 @@ abstract class Filter implements Renderable
     /**
      * @var string
      */
-    protected $columnName;
+    protected $getColumnName;
 
     /**
      * @var \Closure[]
@@ -46,7 +47,7 @@ abstract class Filter implements Renderable
             $this->addResetButton();
 
             $this->parent->grid()->model()->treeUrlWithoutQuery(
-                $this->queryName()
+                $this->getQueryName()
             );
         });
 
@@ -82,7 +83,7 @@ abstract class Filter implements Renderable
      */
     public function setColumnName(string $name)
     {
-        $this->columnName = $name;
+        $this->getColumnName = $name;
 
         return $this;
     }
@@ -92,19 +93,19 @@ abstract class Filter implements Renderable
      *
      * @return string
      */
-    public function columnName()
+    public function getColumnName()
     {
-        return $this->columnName ?: $this->parent->getName();
+        return $this->getColumnName ?: $this->parent->getName();
     }
 
     /**
      * @return string
      */
-    public function queryName()
+    public function getQueryName()
     {
         return $this->parent->grid()->getName().
             '_filter_'.
-            $this->columnName();
+            $this->getColumnName();
     }
 
     /**
@@ -116,7 +117,7 @@ abstract class Filter implements Renderable
      */
     public function value($default = '')
     {
-        return request($this->queryName(), $default);
+        return request($this->getQueryName(), $default);
     }
 
     /**
@@ -129,7 +130,7 @@ abstract class Filter implements Renderable
             return;
         }
 
-        $style = $this->shouldDisplay() ? 'style=\'margin:3px 12px\'' : '';
+        $style = $this->shouldDisplay() ? 'style=\'margin:3px 14px\'' : '';
 
         return $this->parent->addHeader(
             "&nbsp;<a class='feather icon-rotate-ccw' href='{$this->urlWithoutFilter()}' {$style}></a>"
@@ -143,20 +144,15 @@ abstract class Filter implements Renderable
      */
     public function formAction()
     {
-        $request = request();
-
-        $query = $request->query();
-        Arr::forget($query, [
-            $this->columnName(),
-            $this->parent->grid()->model()->getPageName(),
-            '_pjax',
-        ]);
-
-        $question = $request->getBaseUrl().$request->getPathInfo() == '/' ? '/?' : '?';
-
-        return count($request->query()) > 0
-            ? $request->url().$question.http_build_query($query)
-            : $request->fullUrl();
+        return Helper::urlWithoutQuery(
+            URL::full(),
+            [
+                $this->getQueryName(),
+                $this->getColumnName(),
+                $this->parent->grid()->model()->getPageName(),
+                '_pjax',
+            ]
+        );
     }
 
     /**
@@ -165,7 +161,7 @@ abstract class Filter implements Renderable
     protected function urlWithoutFilter()
     {
         $query = request()->query();
-        unset($query[$this->queryName()]);
+        unset($query[$this->getQueryName()]);
 
         return Helper::urlWithQuery(url()->current(), $query);
     }

+ 5 - 5
src/Grid/Column/Filter/Between.php

@@ -102,14 +102,14 @@ class Between extends Filter
         }
 
         if (! isset($value['start'])) {
-            return $model->where($this->columnName(), '<=', $value['end']);
+            return $model->where($this->getColumnName(), '<=', $value['end']);
         }
 
         if (! isset($value['end'])) {
-            return $model->where($this->columnName(), '=>', $value['start']);
+            return $model->where($this->getColumnName(), '=>', $value['start']);
         }
 
-        return $model->whereBetween($this->columnName(), array_values($value));
+        return $model->whereBetween($this->getColumnName(), array_values($value));
     }
 
     protected function addScript()
@@ -172,7 +172,7 @@ JS;
         <li>
             <input type="text" 
                 class="form-control input-sm {$this->class['start']}" 
-                name="{$this->queryName()}[start]" 
+                name="{$this->getQueryName()}[start]" 
                 placeholder="{$this->trans('between_start')}" 
                 value="{$value['start']}" 
                 autocomplete="off" />
@@ -181,7 +181,7 @@ JS;
         <li>
             <input type="text" 
                 class="form-control input-sm {$this->class['start']}" 
-                name="{$this->queryName()}[end]"  
+                name="{$this->getQueryName()}[end]"  
                 placeholder="{$this->trans('between_end')}" 
                 value="{$value['end']}" 
                 autocomplete="off"/>

+ 1 - 1
src/Grid/Column/Filter/Checkbox.php

@@ -80,7 +80,7 @@ HTML;
             return <<<HTML
 <li style="margin: 0;padding:4px 0 4px 5px">
     <div class="vs-checkbox-con vs-checkbox-primary checkbox-grid">
-        <input type="checkbox" class="{$this->class['item']}" {$checked} name="{$this->queryName()}[]" value="{$key}">
+        <input type="checkbox" class="{$this->class['item']}" {$checked} name="{$this->getQueryName()}[]" value="{$key}">
         <span class="vs-checkbox"><span class="vs-checkbox--check"><i class="vs-icon feather icon-check"></i></span></span>
          <span>{$label}</span>
     </div>

+ 1 - 1
src/Grid/Column/Filter/Equal.php

@@ -98,7 +98,7 @@ class Equal extends Filter
             return;
         }
 
-        $model->where($this->columnName(), $value);
+        $model->where($this->getColumnName(), $value);
     }
 
     /**

+ 1 - 1
src/Grid/Column/Filter/Gt.php

@@ -19,6 +19,6 @@ class Gt extends Equal
             return;
         }
 
-        $model->where($this->columnName(), '>', $value);
+        $model->where($this->getColumnName(), '>', $value);
     }
 }

+ 1 - 1
src/Grid/Column/Filter/In.php

@@ -41,7 +41,7 @@ class In extends Filter
             return;
         }
 
-        $model->whereIn($this->columnName(), $value);
+        $model->whereIn($this->getColumnName(), $value);
     }
 
     /**

+ 1 - 1
src/Grid/Column/Filter/Input.php

@@ -57,7 +57,7 @@ JS;
     </a>
     <ul class="dropdown-menu" role="menu" style="width: 250px;padding: 10px;left: -70px;border-radius: 0;font-weight:normal;background:#fff;">
         <li>
-            <input placeholder="{$this->placeholder}" type="text" name="{$this->queryName()}" value="{$value}" class="form-control input-sm {$this->class}" autocomplete="off"/>
+            <input placeholder="{$this->placeholder}" type="text" name="{$this->getQueryName()}" value="{$value}" class="form-control input-sm {$this->class}" autocomplete="off"/>
         </li>
         <li class="divider"></li>
         <li class="">

+ 1 - 1
src/Grid/Column/Filter/Like.php

@@ -19,6 +19,6 @@ class Like extends Equal
             return;
         }
 
-        $model->where($this->columnName(), 'like', "%{$value}%");
+        $model->where($this->getColumnName(), 'like', "%{$value}%");
     }
 }

+ 1 - 1
src/Grid/Column/Filter/Lt.php

@@ -19,6 +19,6 @@ class Lt extends Equal
             return;
         }
 
-        $model->where($this->columnName(), '<', $value);
+        $model->where($this->getColumnName(), '<', $value);
     }
 }

+ 1 - 1
src/Grid/Column/Filter/Ngt.php

@@ -19,6 +19,6 @@ class Ngt extends Equal
             return;
         }
 
-        $model->where($this->columnName(), '<=', $value);
+        $model->where($this->getColumnName(), '<=', $value);
     }
 }

+ 1 - 1
src/Grid/Column/Filter/Nlt.php

@@ -19,6 +19,6 @@ class Nlt extends Equal
             return;
         }
 
-        $model->where($this->columnName(), '>=', $value);
+        $model->where($this->getColumnName(), '>=', $value);
     }
 }

+ 1 - 1
src/Grid/Column/Filter/StartWith.php

@@ -19,6 +19,6 @@ class StartWith extends Equal
             return;
         }
 
-        $model->where($this->columnName(), 'like', "{$value}%");
+        $model->where($this->getColumnName(), 'like', "{$value}%");
     }
 }

+ 3 - 3
src/Grid/Column/ValueFilter.php

@@ -35,9 +35,9 @@ class ValueFilter
         return $this->filter->parent();
     }
 
-    public function queryName()
+    public function getQueryName()
     {
-        return $this->filter->queryName();
+        return $this->filter->getQueryName();
     }
 
     public function value()
@@ -81,7 +81,7 @@ class ValueFilter
         $pageName = $this->column()->grid()->model()->getPageName();
 
         $url = request()->fullUrlWithQuery([
-            $this->queryName() => $this->originalValue(),
+            $this->getQueryName() => $this->originalValue(),
             $pageName          => null,
         ]);