Parcourir la source

Merge branch 'github' into 2.0

jqh il y a 4 ans
Parent
commit
b5e2f4e022

+ 7 - 0
config/admin.php

@@ -161,6 +161,13 @@ return [
         |--------------------------------------------------------------------------
         */
         'grid_action_class' => Dcat\Admin\Grid\Displayers\DropdownActions::class,
+
+        'column_selector' => [
+            'store' => Dcat\Admin\Grid\ColumnSelector\SessionStore::class,
+            'store_params' => [
+                'driver' => 'file',
+            ],
+        ],
     ],
 
     /*

+ 2 - 2
resources/views/partials/navbar.blade.php

@@ -21,7 +21,7 @@
             @endif
 
             <div class="navbar-collapse d-flex justify-content-between">
-                <div class="d-flex align-items-center">
+                <div class="navbar-left d-flex align-items-center">
                     {!! Dcat\Admin\Admin::navbar()->render('left') !!}
                 </div>
 
@@ -37,7 +37,7 @@
                 </div>
                 @endif
 
-                <div class=" d-flex align-items-center">
+                <div class="navbar-right d-flex align-items-center">
                     {!! Dcat\Admin\Admin::navbar()->render() !!}
 
                     <ul class="nav navbar-nav">

+ 7 - 0
src/Console/stubs/config.stub

@@ -158,6 +158,13 @@ return [
         |--------------------------------------------------------------------------
         */
         'grid_action_class' => Dcat\Admin\Grid\Displayers\DropdownActions::class,
+
+        'column_selector' => [
+            'store' => Dcat\Admin\Grid\ColumnSelector\SessionStore::class,
+            'store_params' => [
+                'driver' => 'file',
+            ],
+        ],
     ],
 
     /*

+ 38 - 0
src/Contracts/Grid/ColumnSelectorStore.php

@@ -0,0 +1,38 @@
+<?php
+
+namespace Dcat\Admin\Contracts\Grid;
+
+use Dcat\Admin\Grid;
+
+interface ColumnSelectorStore
+{
+    /**
+     * @param Grid $grid
+     *
+     * @return mixed
+     */
+    public function setGrid(Grid $grid);
+
+    /**
+     * 存储数据.
+     *
+     * @param array $input
+     *
+     * @return void
+     */
+    public function store(array $input);
+
+    /**
+     * 获取数据.
+     *
+     * @return array|null
+     */
+    public function get();
+
+    /**
+     * 移除.
+     *
+     * @return void
+     */
+    public function forget();
+}

+ 1 - 1
src/Form/Builder.php

@@ -631,7 +631,7 @@ class Builder
             $this->addHiddenField((new Hidden('_method'))->value('PUT'));
         }
 
-        $this->addHiddenField((new Hidden('_token'))->value(csrf_token()));
+        $this->addHiddenField((new Hidden('_token'))->value((string) csrf_token()));
 
         $this->addRedirectUrlField();
 

+ 10 - 2
src/Form/Field.php

@@ -537,7 +537,7 @@ class Field implements Renderable
      *
      * @param null $value
      *
-     * @return mixed
+     * @return mixed|$this
      */
     public function value($value = null)
     {
@@ -821,7 +821,7 @@ class Field implements Renderable
     public function placeholder($placeholder = null)
     {
         if ($placeholder === null) {
-            return $this->placeholder ?: trans('admin.input').' '.$this->label;
+            return $this->placeholder ?: $this->defaultPlaceholder();
         }
 
         $this->placeholder = $placeholder;
@@ -829,6 +829,14 @@ class Field implements Renderable
         return $this;
     }
 
+    /**
+     * @return string
+     */
+    protected function defaultPlaceholder()
+    {
+        return trans('admin.input').' '.$this->label;
+    }
+
     /**
      * @param mixed $value
      *

+ 8 - 0
src/Form/Field/SelectTable.php

@@ -145,6 +145,14 @@ class SelectTable extends Field
         $this->options = $values;
     }
 
+    /**
+     * @return string
+     */
+    protected function defaultPlaceholder()
+    {
+        return trans('admin.choose').' '.$this->label;
+    }
+
     protected function setUpTable()
     {
         $this->dialog

+ 5 - 0
src/Grid/Column/Condition.php

@@ -70,6 +70,11 @@ class Condition
         }
     }
 
+    public function end()
+    {
+        return $this->column;
+    }
+
     protected function callCallbacks(array $callbacks)
     {
         if (! $callbacks) {

+ 30 - 0
src/Grid/ColumnSelector/CacheStore.php

@@ -0,0 +1,30 @@
+<?php
+
+namespace Dcat\Admin\Grid\ColumnSelector;
+
+class CacheStore extends SessionStore
+{
+    protected $driver;
+    protected $ttl;
+
+    public function __construct($driver = 'file', $ttl = 25920000)
+    {
+        $this->driver = cache()->driver($driver);
+        $this->ttl = $ttl;
+    }
+
+    public function store(array $input)
+    {
+        $this->driver->put($this->getVisibleColumnsKey(), $input, $this->ttl);
+    }
+
+    public function get()
+    {
+        return $this->driver->get($this->getVisibleColumnsKey());
+    }
+
+    public function forget()
+    {
+        $this->driver->forget($this->getVisibleColumnsKey());
+    }
+}

+ 39 - 0
src/Grid/ColumnSelector/SessionStore.php

@@ -0,0 +1,39 @@
+<?php
+
+namespace Dcat\Admin\Grid\ColumnSelector;
+
+use Dcat\Admin\Contracts\Grid\ColumnSelectorStore;
+use Dcat\Admin\Grid;
+
+class SessionStore implements ColumnSelectorStore
+{
+    /**
+     * @var Grid
+     */
+    protected $grid;
+
+    public function setGrid(Grid $grid)
+    {
+        $this->grid = $grid;
+    }
+
+    public function store(array $input)
+    {
+        session()->put($this->getVisibleColumnsKey(), $input);
+    }
+
+    public function get()
+    {
+        return session()->get($this->getVisibleColumnsKey());
+    }
+
+    public function forget()
+    {
+        session()->remove($this->getVisibleColumnsKey());
+    }
+
+    protected function getVisibleColumnsKey()
+    {
+        return $this->grid->getName().'/'.request()->path();
+    }
+}

+ 26 - 5
src/Grid/Concerns/CanHidesColumns.php

@@ -2,6 +2,7 @@
 
 namespace Dcat\Admin\Grid\Concerns;
 
+use Dcat\Admin\Contracts\Grid\ColumnSelectorStore;
 use Dcat\Admin\Grid;
 use Dcat\Admin\Grid\Tools\ColumnSelector;
 use Dcat\Admin\Support\Helper;
@@ -16,6 +17,11 @@ trait CanHidesColumns
      */
     public $hiddenColumns = [];
 
+    /**
+     * @var ColumnSelectorStore
+     */
+    private $columnSelectorStorage;
+
     /**
      * Remove column selector on grid.
      *
@@ -205,7 +211,7 @@ trait CanHidesColumns
         })->toArray();
     }
 
-    protected function hasColumnSelectorRequestInput()
+    public function hasColumnSelectorRequestInput()
     {
         return $this->request->has($this->getColumnSelectorQueryName());
     }
@@ -216,16 +222,31 @@ trait CanHidesColumns
             return;
         }
 
-        session()->put($this->getVisibleColumnsKey(), $input);
+        $this->getColumnSelectorStorage()->store($input);
     }
 
     protected function getVisibleColumnsFromStorage()
     {
-        return session()->get($this->getVisibleColumnsKey());
+        return $this->getColumnSelectorStorage()->get();
     }
 
-    protected function getVisibleColumnsKey()
+    /**
+     * @return ColumnSelectorStore
+     */
+    public function getColumnSelectorStorage()
     {
-        return $this->getName().'/'.$this->request->path();
+        return $this->columnSelectorStorage ?: ($this->columnSelectorStorage = $this->makeColumnSelectorStorage());
+    }
+
+    protected function makeColumnSelectorStorage()
+    {
+        $store = config('admin.grid.column_selector.store') ?: Grid\ColumnSelector\SessionStore::class;
+        $params = (array) config('admin.grid.column_selector.store_params') ?: [];
+
+        $storage = app($store, $params);
+
+        $storage->setGrid($this);
+
+        return $storage;
     }
 }

+ 8 - 0
src/Grid/Concerns/HasQuickSearch.php

@@ -52,6 +52,14 @@ trait HasQuickSearch
         });
     }
 
+    /**
+     * @return bool
+     */
+    public function allowQuickSearch()
+    {
+        return $this->quickSearch ? true : false;
+    }
+
     /**
      * @return Tools\QuickSearch
      */

+ 1 - 1
src/Grid/Exporters/ExcelExporter.php

@@ -36,6 +36,6 @@ class ExcelExporter extends AbstractExporter
 
         $exporter->headings($this->titles())->download($filename);
 
-        admin_exit();
+        exit;
     }
 }

+ 3 - 1
src/Widgets/Lazy.php

@@ -18,7 +18,9 @@ class Lazy extends Widget
         $this->setRenderable($renderable);
         $this->load($load);
 
-        $this->class(['lazy-box', $this->elementClass = 'lazy-'.Str::random(8)]);
+        $this->elementClass = 'lazy-'.Str::random(10);
+
+        $this->class(['lazy-box']);
     }
 
     /**

+ 3 - 1
src/Widgets/LazyTable.php

@@ -46,7 +46,9 @@ class LazyTable extends Widget
         $this->from($renderable);
         $this->load($load);
 
-        $this->class(['async-table', $this->elementClass = 'async-table-'.Str::random(8)]);
+        $this->elementClass = 'async-table-'.Str::random(10);
+
+        $this->class(['async-table']);
     }
 
     /**

+ 1 - 1
src/Widgets/Modal.php

@@ -74,7 +74,7 @@ class Modal extends Widget
      */
     public function __construct($title = null, $content = null)
     {
-        $this->id('modal-'.Str::random(8));
+        $this->id('modal-'.Str::random(10));
         $this->title($title);
         $this->content($content);
 

+ 2 - 0
src/Widgets/Widget.php

@@ -183,6 +183,8 @@ abstract class Widget implements Renderable
     {
         static::requireAssets();
 
+        $this->class($this->getElementClass(), true);
+
         $html = $this->html();
 
         $this->withScript();