jqh 5 年之前
父節點
當前提交
dbd336f54a

+ 1 - 3
resources/assets/dcat/extra/grid-extend.js

@@ -223,10 +223,8 @@
                 prev = row.prevAll('tr').first(),
                 next = row.nextAll('tr').first();
 
-            $.ajax({
-                type: 'POST',
+            $.put({
                 url: _this.options.url.replace(':key', key),
-                data: {_method:'PUT', _orderable:direction},
                 success: function(data){
                     Dcat.loading(false);
                     _this._req = 0;

+ 2 - 10
resources/assets/dcat/js/bootstrappers/DataActions.js

@@ -18,12 +18,8 @@ let defaultActions = {
 
             Dcat.confirm(lang.delete_confirm, msg, function () {
                 Dcat.NP.start();
-                $.ajax({
-                    method: 'post',
+                $.delete({
                     url: url,
-                    data: {
-                        _method: 'delete',
-                    },
                     success: function (data) {
                         Dcat.NP.done();
                         if (data.status) {
@@ -50,12 +46,8 @@ let defaultActions = {
             }
             Dcat.confirm(lang.delete_confirm, keys.join(', '), function () {
                 Dcat.NP.start();
-                $.ajax({
-                    method: 'post',
+                $.delete({
                     url: url + '/' + keys.join(','),
-                    data: {
-                        _method: 'delete',
-                    },
                     success: function (data) {
                         Dcat.NP.done();
                         if (data.status) {

+ 18 - 0
resources/assets/dcat/js/extensions/Ajax.js

@@ -4,6 +4,24 @@ export default class Ajax {
         this.dcat = Dcat;
 
         Dcat.handleAjaxError = this.handleAjaxError.bind(this)
+
+        this.init(Dcat)
+    }
+
+    init(Dcat) {
+        $.delete = function (options) {
+            options.type = 'POST';
+            options.data = {_method: 'DELETE'};
+
+            return $.ajax(options);
+        };
+
+        $.put = function (options) {
+            options.type = 'POST';
+            Object.assign(options.data, {_method: 'PUT'});
+
+            return $.ajax(options);
+        };
     }
 
     handleAjaxError(xhr, text, msg) {

+ 1 - 1
resources/assets/dcat/sass/components/_table.scss

@@ -42,7 +42,7 @@ table.dataTable {
 
 .table td {
   padding: .55rem;
-  //height: 62px;
+  height: 48px;
   line-height: 1.42857;
 }
 

+ 1 - 1
resources/assets/dcat/sass/theme/_primary.scss

@@ -3,4 +3,4 @@
 $primary: $indigo;
 //$primary: #4e9876; // green
 //$primary: #5686d4; // blue
-//$primary: #4199de; //blue-light
+//$primary: #62a8ea; //blue-light

+ 5 - 2
resources/views/grid/table.blade.php

@@ -1,13 +1,16 @@
 
 <div class="card dcat-box dt-bootstrap4">
 
-    @include('admin::grid.table-toolbar')
+    <div class="card-header d-block pb-0" style="border: 0;padding: 1.5rem">
+        @include('admin::grid.table-toolbar')
+        <hr class="mb-0" />
+    </div>
 
     {!! $grid->renderFilter() !!}
 
     {!! $grid->renderHeader() !!}
 
-    <div class="table-responsive table-wrapper complex-container table-middle" style="{!! $grid->option('show_bordered') ? 'padding:3px 10px 10px' : '' !!};border-bottom: 1px solid #f8f8f8!important;">
+    <div class="card-body table-responsive table-wrapper complex-container table-middle" style="{!! $grid->option('show_bordered') ? 'padding:3px 10px 10px' : '' !!};border-bottom: 1px solid #f8f8f8!important;">
         <table class="{{ $grid->formatTableClass() }}" id="{{ $tableId }}" >
             <thead>
             @if ($headers = $grid->getComplexHeaders())

+ 143 - 131
src/Admin.php

@@ -36,27 +36,12 @@ class Admin
      *
      * @var string
      */
-    const VERSION = '1.7.3';
+    const VERSION = '2.0.0-beta';
 
     /**
      * @var string
      */
-    public static $metaTitle;
-
-    /**
-     * @var string
-     */
-    public static $favicon;
-
-    /**
-     * @var array
-     */
-    public static $jsVariables = [];
-
-    /**
-     * @var string
-     */
-    public static $pjaxContainerId = 'pjax-container';
+    private static $defaultPjaxContainerId = 'pjax-container';
 
     /**
      * 版本.
@@ -100,10 +85,10 @@ class Admin
     public static function title($title = null)
     {
         if ($title === null) {
-            return static::$metaTitle ?: config('admin.title');
+            return static::context()->metaTitle ?: config('admin.title');
         }
 
-        static::$metaTitle = $title;
+        static::context()->metaTitle = $title;
     }
 
     /**
@@ -113,11 +98,11 @@ class Admin
      */
     public static function favicon($favicon = null)
     {
-        if (is_null($favicon)) {
-            return static::$favicon;
+        if ($favicon === null) {
+            return static::context()->favicon;
         }
 
-        static::$favicon = $favicon;
+        static::context()->favicon = $favicon;
     }
 
     /**
@@ -157,7 +142,21 @@ class Admin
      */
     public static function disablePjax()
     {
-        static::$pjaxContainerId = null;
+        static::context()->pjaxContainerId = false;
+    }
+
+    /**
+     * @return string|void
+     */
+    public static function getPjaxContainerId()
+    {
+        $id = static::context()->pjaxContainerId;
+
+        if ($id === false) {
+            return;
+        }
+
+        return $id ?: static::$defaultPjaxContainerId;
     }
 
     /**
@@ -186,105 +185,6 @@ class Admin
         return app('admin.setting');
     }
 
-    /**
-     * 注册路由.
-     *
-     * @return void
-     */
-    public static function routes()
-    {
-        $attributes = [
-            'prefix'     => config('admin.route.prefix'),
-            'middleware' => config('admin.route.middleware'),
-            'as'         => static::app()->getName().'.',
-        ];
-
-        if (config('admin.auth.enable', true)) {
-            app('router')->group($attributes, function ($router) {
-                /* @var \Illuminate\Routing\Router $router */
-                $router->namespace('Dcat\Admin\Http\Controllers')->group(function ($router) {
-                    /* @var \Illuminate\Routing\Router $router */
-                    $router->resource('auth/users', 'UserController');
-                    $router->resource('auth/menu', 'MenuController', ['except' => ['create', 'show']]);
-
-                    if (config('admin.permission.enable')) {
-                        $router->resource('auth/roles', 'RoleController');
-                        $router->resource('auth/permissions', 'PermissionController');
-                    }
-                });
-
-                $authController = config('admin.auth.controller', AuthController::class);
-
-                $router->get('auth/login', $authController.'@getLogin');
-                $router->post('auth/login', $authController.'@postLogin');
-                $router->get('auth/logout', $authController.'@getLogout');
-                $router->get('auth/setting', $authController.'@getSetting');
-                $router->put('auth/setting', $authController.'@putSetting');
-            });
-        }
-
-        static::registerHelperRoutes();
-    }
-
-    /**
-     * 注册api路由.
-     *
-     * @param string $as
-     *
-     * @return void
-     */
-    public static function registerApiRoutes(string $as = null)
-    {
-        $attributes = [
-            'prefix'     => admin_base_path('dcat-api'),
-            'middleware' => config('admin.route.middleware'),
-            'as'         => $as ?: static::app()->getApiRoutePrefix(Application::DEFAULT),
-        ];
-
-        app('router')->group($attributes, function ($router) {
-            /* @var \Illuminate\Routing\Router $router */
-            $router->namespace('Dcat\Admin\Http\Controllers')->group(function ($router) {
-                /* @var \Illuminate\Routing\Router $router */
-                $router->post('action', 'HandleActionController@handle')->name('action');
-                $router->post('form', 'HandleFormController@handle')->name('form');
-                $router->post('form/upload', 'HandleFormController@uploadFile')->name('form.upload');
-                $router->post('form/destroy-file', 'HandleFormController@destroyFile')->name('form.destroy-file');
-                $router->post('value', 'ValueController@handle')->name('value');
-                $router->get('render', 'RenderableController@handle')->name('render');
-                $router->post('tinymce/upload', 'TinymceController@upload')->name('tinymce.upload');
-                $router->post('editor-md/upload', 'EditorMDController@upload')->name('editor-md.upload');
-            });
-        });
-    }
-
-    /**
-     * 注册开发工具路由.
-     *
-     * @return void
-     */
-    public static function registerHelperRoutes()
-    {
-        if (! config('admin.helpers.enable', true) || ! config('app.debug')) {
-            return;
-        }
-
-        $attributes = [
-            'prefix'     => config('admin.route.prefix'),
-            'middleware' => config('admin.route.middleware'),
-            'as'         => static::app()->getName().'.',
-        ];
-
-        app('router')->group($attributes, function ($router) {
-            /* @var \Illuminate\Routing\Router $router */
-            $router->get('helpers/scaffold', 'Dcat\Admin\Http\Controllers\ScaffoldController@index');
-            $router->post('helpers/scaffold', 'Dcat\Admin\Http\Controllers\ScaffoldController@store');
-            $router->post('helpers/scaffold/table', 'Dcat\Admin\Http\Controllers\ScaffoldController@table');
-            $router->get('helpers/icons', 'Dcat\Admin\Http\Controllers\IconController@index');
-            $router->resource('helpers/extensions', 'Dcat\Admin\Http\Controllers\ExtensionController', ['only' => ['index', 'store', 'update']]);
-            $router->post('helpers/extensions/import', 'Dcat\Admin\Http\Controllers\ExtensionController@import');
-        });
-    }
-
     /**
      * 创建数据仓库实例.
      *
@@ -417,20 +317,132 @@ class Admin
     /**
      * 获取js配置.
      *
+     * @param array|null $variables
+     *
      * @return string
      */
-    public static function jsVariables()
+    public static function jsVariables(array $variables = null)
     {
+        $jsVariables = static::context()->jsVariables ?: [];
+
+        if ($variables !== null) {
+            static::context()->jsVariables = array_merge(
+                $jsVariables,
+                $variables
+            );
+
+            return;
+        }
+
         $sidebarStyle = config('admin.layout.sidebar_style') ?: 'light';
+        
+        $jsVariables['pjax_container_selector'] = '#'.static::getPjaxContainerId();
+        $jsVariables['token'] = csrf_token();
+        $jsVariables['lang'] = __('admin.client') ?: [];
+        $jsVariables['colors'] = static::color()->all();
+        $jsVariables['dark_mode'] = Str::contains(config('admin.layout.body_class'), 'dark-mode');
+        $jsVariables['sidebar_dark'] = config('admin.layout.sidebar_dark') || ($sidebarStyle === 'dark');
+        $jsVariables['sidebar_light_style'] = in_array($sidebarStyle, ['dark', 'light'], true) ? 'sidebar-light-primary' : 'sidebar-primary';
+
+        return json_encode($jsVariables);
+    }
+
+    /**
+     * 注册路由.
+     *
+     * @return void
+     */
+    public static function routes()
+    {
+        $attributes = [
+            'prefix'     => config('admin.route.prefix'),
+            'middleware' => config('admin.route.middleware'),
+            'as'         => static::app()->getName().'.',
+        ];
 
-        static::$jsVariables['pjax_container_selector'] = '#'.static::$pjaxContainerId;
-        static::$jsVariables['token'] = csrf_token();
-        static::$jsVariables['lang'] = __('admin.client') ?: [];
-        static::$jsVariables['colors'] = static::color()->all();
-        static::$jsVariables['dark_mode'] = Str::contains(config('admin.layout.body_class'), 'dark-mode');
-        static::$jsVariables['sidebar_dark'] = config('admin.layout.sidebar_dark') || ($sidebarStyle === 'dark');
-        static::$jsVariables['sidebar_light_style'] = in_array($sidebarStyle, ['dark', 'light'], true) ? 'sidebar-light-primary' : 'sidebar-primary';
+        if (config('admin.auth.enable', true)) {
+            app('router')->group($attributes, function ($router) {
+                /* @var \Illuminate\Routing\Router $router */
+                $router->namespace('Dcat\Admin\Http\Controllers')->group(function ($router) {
+                    /* @var \Illuminate\Routing\Router $router */
+                    $router->resource('auth/users', 'UserController');
+                    $router->resource('auth/menu', 'MenuController', ['except' => ['create', 'show']]);
+
+                    if (config('admin.permission.enable')) {
+                        $router->resource('auth/roles', 'RoleController');
+                        $router->resource('auth/permissions', 'PermissionController');
+                    }
+                });
+
+                $authController = config('admin.auth.controller', AuthController::class);
+
+                $router->get('auth/login', $authController.'@getLogin');
+                $router->post('auth/login', $authController.'@postLogin');
+                $router->get('auth/logout', $authController.'@getLogout');
+                $router->get('auth/setting', $authController.'@getSetting');
+                $router->put('auth/setting', $authController.'@putSetting');
+            });
+        }
 
-        return json_encode(static::$jsVariables);
+        static::registerHelperRoutes();
+    }
+
+    /**
+     * 注册api路由.
+     *
+     * @param string $as
+     *
+     * @return void
+     */
+    public static function registerApiRoutes(string $as = null)
+    {
+        $attributes = [
+            'prefix'     => admin_base_path('dcat-api'),
+            'middleware' => config('admin.route.middleware'),
+            'as'         => $as ?: static::app()->getApiRoutePrefix(Application::DEFAULT),
+        ];
+
+        app('router')->group($attributes, function ($router) {
+            /* @var \Illuminate\Routing\Router $router */
+            $router->namespace('Dcat\Admin\Http\Controllers')->group(function ($router) {
+                /* @var \Illuminate\Routing\Router $router */
+                $router->post('action', 'HandleActionController@handle')->name('action');
+                $router->post('form', 'HandleFormController@handle')->name('form');
+                $router->post('form/upload', 'HandleFormController@uploadFile')->name('form.upload');
+                $router->post('form/destroy-file', 'HandleFormController@destroyFile')->name('form.destroy-file');
+                $router->post('value', 'ValueController@handle')->name('value');
+                $router->get('render', 'RenderableController@handle')->name('render');
+                $router->post('tinymce/upload', 'TinymceController@upload')->name('tinymce.upload');
+                $router->post('editor-md/upload', 'EditorMDController@upload')->name('editor-md.upload');
+            });
+        });
+    }
+
+    /**
+     * 注册开发工具路由.
+     *
+     * @return void
+     */
+    public static function registerHelperRoutes()
+    {
+        if (! config('admin.helpers.enable', true) || ! config('app.debug')) {
+            return;
+        }
+
+        $attributes = [
+            'prefix'     => config('admin.route.prefix'),
+            'middleware' => config('admin.route.middleware'),
+            'as'         => static::app()->getName().'.',
+        ];
+
+        app('router')->group($attributes, function ($router) {
+            /* @var \Illuminate\Routing\Router $router */
+            $router->get('helpers/scaffold', 'Dcat\Admin\Http\Controllers\ScaffoldController@index');
+            $router->post('helpers/scaffold', 'Dcat\Admin\Http\Controllers\ScaffoldController@store');
+            $router->post('helpers/scaffold/table', 'Dcat\Admin\Http\Controllers\ScaffoldController@table');
+            $router->get('helpers/icons', 'Dcat\Admin\Http\Controllers\IconController@index');
+            $router->resource('helpers/extensions', 'Dcat\Admin\Http\Controllers\ExtensionController', ['only' => ['index', 'store', 'update']]);
+            $router->post('helpers/extensions/import', 'Dcat\Admin\Http\Controllers\ExtensionController@import');
+        });
     }
 }

+ 3 - 3
src/Color.php

@@ -78,9 +78,9 @@ class Color
         ],
         'blue-light' => [
             'colors' => [
-                'primary'        => '#4199de',
-                'primary-darker' => '#278bd9',
-                'link'           => '#278bd9',
+                'primary'        => '#62a8ea',
+                'primary-darker' => '#62a8ea',
+                'link'           => '#62a8ea',
             ],
         ],
         'blue-dark' => [

+ 1 - 1
src/Form/Builder.php

@@ -761,7 +761,7 @@ class Builder
             $html[] = "$name=\"$value\"";
         }
 
-        return '<form '.implode(' ', $html).' pjax-container>';
+        return '<form '.implode(' ', $html).' '.Admin::getPjaxContainerId().'>';
     }
 
     /**

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

@@ -39,7 +39,7 @@ JS;
 
         $allCheck = (count($value) == count($this->options)) ? 'checked' : '';
         $active = empty($value) ? '' : 'active';
-        $pjaxContainer = Admin::$pjaxContainerId;
+        $pjaxContainer = Admin::getPjaxContainerId();
 
         return <<<HTML
 &nbsp;<span class="dropdown">

+ 2 - 3
src/Layout/Content.php

@@ -4,7 +4,6 @@ namespace Dcat\Admin\Layout;
 
 use Closure;
 use Dcat\Admin\Admin;
-use Dcat\Admin\Support\Helper;
 use Dcat\Admin\Traits\HasBuilderEvents;
 use Illuminate\Contracts\Support\Renderable;
 use Illuminate\Support\Str;
@@ -267,7 +266,7 @@ class Content implements Renderable
             $html .= $row->render();
         }
 
-        return Helper::html($html);
+        return $html;
     }
 
     /**
@@ -398,7 +397,7 @@ class Content implements Renderable
             'description'     => $this->description,
             'breadcrumb'      => $this->breadcrumb,
             'configData'      => $this->applyClasses(),
-            'pjaxContainerId' => Admin::$pjaxContainerId,
+            'pjaxContainerId' => Admin::getPjaxContainerId(),
         ], $this->variables);
     }
 

+ 0 - 38
src/Support/Helper.php

@@ -801,44 +801,6 @@ class Helper
         });
     }
 
-    /**
-     * @param string $html
-     *
-     * @return string
-     */
-    public static function html($html)
-    {
-        if (! $html = static::render($html)) {
-            return $html;
-        }
-
-        $url = '[\s]*[\"\']([\s]*[\w-_\?\=\&\.\/]+[^\"\']*)[\"\']';
-        $rel = '(?:rel[\s]*=[\s]*[\"\'][\s]*stylesheet[\s]*[\"\'])*[\s]*';
-        $type = '(?:type[\s]*=[\s]*[\"\'][\s]*text\/javascript[\s]*[\"\'])*[\s]*';
-
-        $link = "/<link[\s]+{$rel}href[\s]*={$url}[\s]*[\/]*>/u";
-        $script = "/<script[\s]+{$type}src[\s]*={$url}>[\s]*<\/[\s]*script>/u";
-
-        $js = $css = [];
-
-        $html = preg_replace_callback($link, function (&$match) use (&$css) {
-            if (! empty($match[1])) {
-                $css[] = $match[1];
-            }
-        }, $html);
-
-        $html = preg_replace_callback($script, function (&$match) use (&$js) {
-            if (! empty($match[1])) {
-                $js[] = $match[1];
-            }
-        }, $html);
-
-        $js && Admin::js($js);
-        $css && Admin::css($css);
-
-        return $html;
-    }
-
     /**
      * Html转义.
      *

+ 2 - 2
src/Support/helpers.php

@@ -382,14 +382,14 @@ if (! function_exists('admin_asset')) {
     }
 }
 
-if (! function_exists('admin_require_assets')) {
+if (! function_exists('admin_assets_require')) {
 
     /**
      * @param $alias
      *
      * @return void
      */
-    function admin_require_assets(?string $alias)
+    function admin_assets_require(?string $alias)
     {
         Admin::asset()->collect($alias);
     }

+ 14 - 22
src/Traits/Renderable.php

@@ -8,33 +8,25 @@ use DOMDocument;
 
 trait Renderable
 {
-    private static $shouldResolveTags = ['style', 'script', 'template'];
+    protected static $shouldResolveTags = ['style', 'script', 'template'];
 
     /**
-     * @var array
-     */
-    public static $html = [];
-
-    /**
-     * @param string $html
+     * @param string|array $content
      *
      * @return null|string
      */
-    public static function html($html = '')
+    public static function html($content = null)
     {
-        $html = static::context()->html;
-
-        if (! empty($html)) {
+        $html = static::context()->html ?: [];
 
-            static::$html = array_merge(
-                static::$html,
-                array_map([Helper::class, 'render'], (array) $html)
-            );
-
-            return;
+        if ($content !== null) {
+            return implode('', array_unique($html));
         }
 
-        return implode('', array_unique(static::$html));
+        static::context()->html = array_merge(
+            $html,
+            array_map([Helper::class, 'render'], (array) $content)
+        );
     }
 
     /**
@@ -159,8 +151,8 @@ trait Renderable
 
         foreach ($element->childNodes as $child) {
             if (
-                $element instanceof DOMElement
-                && in_array($element->tagName, static::$shouldResolveTags, true)
+                $child instanceof DOMElement
+                && in_array($child->tagName, static::$shouldResolveTags, true)
             ) {
                 static::resolve($child);
 
@@ -168,8 +160,8 @@ trait Renderable
             }
 
             $html .= trim($element->ownerDocument->saveHTML($child));
-
-            return $html;
         }
+
+        return $html;
     }
 }