diff --git a/packages/dcat-extension-plus-master/.gitignore b/packages/dcat-extension-plus-master/.gitignore new file mode 100644 index 0000000..9d4b362 --- /dev/null +++ b/packages/dcat-extension-plus-master/.gitignore @@ -0,0 +1,7 @@ +.DS_Store +phpunit.phar +/vendor +composer.phar +composer.lock +*.project +.idea/ \ No newline at end of file diff --git a/packages/dcat-extension-plus-master/LICENSE b/packages/dcat-extension-plus-master/LICENSE new file mode 100644 index 0000000..e2bb263 --- /dev/null +++ b/packages/dcat-extension-plus-master/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 celaraze + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/dcat-extension-plus-master/README.md b/packages/dcat-extension-plus-master/README.md new file mode 100644 index 0000000..cfda9e5 --- /dev/null +++ b/packages/dcat-extension-plus-master/README.md @@ -0,0 +1,55 @@ +# Dcat Plus + +为 DcatAdmin 后台添加增强配置的功能。修改过程利用 DcatAdmin 自带的 `admin_setting()` 方法实现,不会硬编码修改任何 config 文件或者 .env 文件。 + +## 安装方式 + +最新支持 Dcat Admin 2.0.24beta + +`composer require celaraze/dcat-extension-plus` + +或者在后台扩展中,直接上传本插件的 `.zip` 文件即可。 + +### 使用 + +在菜单 `扩展` 中启用扩展后,会自动添加名为 `增强配置` 的菜单。 + +### 功能 + +- 站点标题 + +- 站点 LOGO + +- 站点微缩 LOGO + +- 站点静态资源 URL + +- 调试模式 + +- 语言切换 + +- 移除底部授权 + +- 主题色切换 + +- 菜单样式切换(默认、分离、水平) + +- 表单行操作按钮固定最右 + +- 快速创建选项:表单可用 `selectCreate()` 字段类型,是 `select` 字段的增强,支持在右侧添加快速创建选项的按钮,异步添加值。 + +```PHP +$form->selectCreate('department','部门') + ->options(Department::class) + ->ajax('/api/departments') // 必须使用 api 方式取选项列表,格式同 select 字段的使用方法 + ->url('/departments/create') // 异步打开的页面,这里是部门创建的页面 url + ->required(); +``` + +- 表单详情扩展字段类型:`video`,视频,传入参数和 `image` 相同。 + +`$show->field('name')->video()` + +## 开源协议 + +Dcat Plus 遵循 MIT 开源协议。 diff --git a/packages/dcat-extension-plus-master/composer.json b/packages/dcat-extension-plus-master/composer.json new file mode 100644 index 0000000..e6c1241 --- /dev/null +++ b/packages/dcat-extension-plus-master/composer.json @@ -0,0 +1,35 @@ +{ + "name": "celaraze/dcat-extension-plus", + "description": "增强 DcatAdmin 的使用体验。", + "alias": "Dcat 增强工具", + "type": "library", + "keywords": [ + "dcat-admin", + "extension" + ], + "homepage": "https://github.com/celaraze/dcat-extension-plus", + "license": "MIT", + "authors": [ + { + "name": "Celaraze", + "email": "celaraze@qq.com" + } + ], + "require": { + "php": ">=7.3.0", + "dcat/laravel-admin": "~2.0" + }, + "autoload": { + "psr-4": { + "Celaraze\\DcatPlus\\": "src/" + } + }, + "extra": { + "dcat-admin": "Celaraze\\DcatPlus\\ServiceProvider", + "laravel": { + "providers": [ + "Celaraze\\DcatPlus\\ServiceProvider" + ] + } + } +} diff --git a/packages/dcat-extension-plus-master/logo.png b/packages/dcat-extension-plus-master/logo.png new file mode 100644 index 0000000..356a4bd Binary files /dev/null and b/packages/dcat-extension-plus-master/logo.png differ diff --git a/packages/dcat-extension-plus-master/resources/assets/css/index.css b/packages/dcat-extension-plus-master/resources/assets/css/index.css new file mode 100644 index 0000000..e69de29 diff --git a/packages/dcat-extension-plus-master/resources/assets/js/index.js b/packages/dcat-extension-plus-master/resources/assets/js/index.js new file mode 100644 index 0000000..e69de29 diff --git a/packages/dcat-extension-plus-master/resources/lang/zh_CN/main.php b/packages/dcat-extension-plus-master/resources/lang/zh_CN/main.php new file mode 100644 index 0000000..2270f12 --- /dev/null +++ b/packages/dcat-extension-plus-master/resources/lang/zh_CN/main.php @@ -0,0 +1,15 @@ + '站点域名', + 'site_title' => '站点标题', + 'site_logo_text' => 'LOGO(文字)', + 'site_logo' => 'LOGO', + 'site_logo_mini' => 'LOGO(微缩)', + 'site_debug' => '调试模式', + 'footer_remove' => '移除底部授权', + 'select_create' => '快速创建选项', + 'theme_color' => '主题色', + 'sidebar_style' => '菜单样式', + 'site_lang' => '语言', + 'grid_row_actions_right' => '表单行操作按钮最右' +]; diff --git a/packages/dcat-extension-plus-master/resources/lang/zh_CN/menu.php b/packages/dcat-extension-plus-master/resources/lang/zh_CN/menu.php new file mode 100644 index 0000000..65d4bf1 --- /dev/null +++ b/packages/dcat-extension-plus-master/resources/lang/zh_CN/menu.php @@ -0,0 +1,5 @@ + '增强配置' +]; diff --git a/packages/dcat-extension-plus-master/resources/views/select_create.blade.php b/packages/dcat-extension-plus-master/resources/views/select_create.blade.php new file mode 100644 index 0000000..9939e19 --- /dev/null +++ b/packages/dcat-extension-plus-master/resources/views/select_create.blade.php @@ -0,0 +1,42 @@ +
+ +
+ {!! $label !!} +
+ +
+ +
+ @include('admin::form.error') + + + + + +
+ {!! $createDialog !!} +
+
+ + @include('admin::form.help-block') + +
+
+ +@include('admin::form.select-script') diff --git a/packages/dcat-extension-plus-master/src/Extensions/Form/SelectCreate.php b/packages/dcat-extension-plus-master/src/Extensions/Form/SelectCreate.php new file mode 100644 index 0000000..872c90d --- /dev/null +++ b/packages/dcat-extension-plus-master/src/Extensions/Form/SelectCreate.php @@ -0,0 +1,64 @@ +addDefaultConfig([ + 'allowClear' => true, + 'placeholder' => [ + 'id' => '', + 'text' => $this->placeholder(), + ], + ]); + + $this->formatOptions(); + + $this->addVariables([ + 'options' => $this->options, + 'groups' => $this->groups, + 'configs' => $this->config, + 'cascadeScript' => $this->getCascadeScript(), + 'createDialog' => $this->build() + ]); + + $this->attribute('data-value', implode(',', Helper::array($this->value()))); + + return parent::render(); + } + + protected function build(): string + { + Form::dialog(Support::trans('main.select_create')) + ->click('.create-form') + ->url($this->url) + ->width('1200px') + ->height('800px'); + + $text = Support::trans('main.select_create'); + + return " $text "; + } + + public function url($url): SelectCreate + { + $this->url = $url; + return $this; + } +} diff --git a/packages/dcat-extension-plus-master/src/Extensions/Show/Video.php b/packages/dcat-extension-plus-master/src/Extensions/Show/Video.php new file mode 100644 index 0000000..dc75db6 --- /dev/null +++ b/packages/dcat-extension-plus-master/src/Extensions/Show/Video.php @@ -0,0 +1,32 @@ +value, true); + $return = ''; + foreach ($items as $item) { + if (url()->isValidUrl($item)) { + $src = $item; + } elseif ($server) { + $src = rtrim($server, '/') . '/' . ltrim($item, '/'); + } else { + $disk = config('admin.upload.disk'); + + if (config("filesystems.disks.{$disk}")) { + $src = Storage::disk($disk)->url($item); + } else { + return ''; + } + } + $return .= "  "; + } + return $return; + } +} diff --git a/packages/dcat-extension-plus-master/src/Forms/DcatPlusSiteForm.php b/packages/dcat-extension-plus-master/src/Forms/DcatPlusSiteForm.php new file mode 100644 index 0000000..4d43c2f --- /dev/null +++ b/packages/dcat-extension-plus-master/src/Forms/DcatPlusSiteForm.php @@ -0,0 +1,57 @@ +response() + ->success('站点配置更新成功!') + ->refresh(); + } + + /** + * Build a form here. + */ + public function form() + { + $this->url('site_url', Support::trans('main.site_url')) + ->help('站点域名决定了静态资源(头像、图片等)的显示路径,可以包含端口号,例如 http://chemex.it:8000 。') + ->default(admin_setting('site_url')); + $this->text('site_title', Support::trans('main.site_title')) + ->default(admin_setting('site_title')); + $this->text('site_logo_text', Support::trans('main.site_logo_text')) + ->help('文本LOGO显示的优先度低于图片,当没有上传图片作为LOGO时,此项将生效。') + ->default(admin_setting('site_logo_text')); + $this->image('site_logo', Support::trans('main.site_logo')) + ->autoUpload() + ->uniqueName() + ->default(admin_setting('site_logo')); + $this->image('site_logo_mini', Support::trans('main.site_logo_mini')) + ->autoUpload() + ->uniqueName() + ->default(admin_setting('site_logo_mini')); + $this->switch('site_debug', Support::trans('main.site_debug')) + ->help('开启 debug 模式后将会显示异常捕获信息,关闭则只返回 500 状态码。') + ->default(admin_setting('site_debug')); + $this->radio('site_lang', Support::trans('main.site_lang')) + ->options([ + 'zh_CN' => '中文(简体)', + 'en' => 'English' + ]) + ->default(admin_setting('site_lang')); + } +} diff --git a/packages/dcat-extension-plus-master/src/Forms/DcatPlusUIForm.php b/packages/dcat-extension-plus-master/src/Forms/DcatPlusUIForm.php new file mode 100644 index 0000000..5f1a43f --- /dev/null +++ b/packages/dcat-extension-plus-master/src/Forms/DcatPlusUIForm.php @@ -0,0 +1,61 @@ +response() + ->success('站点配置更新成功!') + ->refresh(); + } + + /** + * Build a form here. + */ + public function form() + { + $this->switch('footer_remove', Support::trans('main.footer_remove')) + ->default(admin_setting('footer_remove')); + $defaultColors = [ + 'default' => '墨蓝', + 'blue' => '蓝', + 'blue-light' => '亮蓝', + 'green' => '墨绿', + ]; + foreach (explode(",", ServiceProvider::setting('additional_theme_colors')) as $value) { + if (!empty($value)) { + [$k, $v] = explode(":", $value); + $defaultColors[$k] = $v; + } + } + + $this->radio('theme_color', Support::trans('main.theme_color')) + ->options($defaultColors) + ->default(admin_setting('theme_color')); + $this->radio('sidebar_style', Support::trans('main.sidebar_style')) + ->options([ + 'default' => '默认', + 'sidebar-separate' => '菜单分离', + 'horizontal_menu' => '水平菜单' + ]) + ->default(admin_setting('sidebar_style')); + $this->switch('grid_row_actions_right', Support::trans('main.grid_row_actions_right')) + ->help('启用后表格行操作按钮将永远贴着最右侧。') + ->default(admin_setting('grid_row_actions_right')); + } +} diff --git a/packages/dcat-extension-plus-master/src/Http/Controllers/DcatPlusSiteController.php b/packages/dcat-extension-plus-master/src/Http/Controllers/DcatPlusSiteController.php new file mode 100644 index 0000000..7f92d2d --- /dev/null +++ b/packages/dcat-extension-plus-master/src/Http/Controllers/DcatPlusSiteController.php @@ -0,0 +1,24 @@ +header('增强配置') + ->description('提供了一些对站点增强的配置') + ->body(function (Row $row) { + $tab = new Tab(); + $tab->add('站点配置', new DcatPlusSiteForm(), true); + $tab->addLink('UI优化', admin_route('dcat-plus.ui.index')); + $row->column(12, $tab->withCard()); + }); + } +} diff --git a/packages/dcat-extension-plus-master/src/Http/Controllers/DcatPlusUIController.php b/packages/dcat-extension-plus-master/src/Http/Controllers/DcatPlusUIController.php new file mode 100644 index 0000000..9244936 --- /dev/null +++ b/packages/dcat-extension-plus-master/src/Http/Controllers/DcatPlusUIController.php @@ -0,0 +1,24 @@ +header('增强配置') + ->description('提供了一些对站点增强的配置') + ->body(function (Row $row) { + $tab = new Tab(); + $tab->addLink('站点配置', admin_route('dcat-plus.site.index')); + $tab->add('UI优化', new DcatPlusUIForm(), true); + $row->column(12, $tab->withCard()); + }); + } +} diff --git a/packages/dcat-extension-plus-master/src/Http/Middleware/AfterInjectDcatPlus.php b/packages/dcat-extension-plus-master/src/Http/Middleware/AfterInjectDcatPlus.php new file mode 100644 index 0000000..98cc5b6 --- /dev/null +++ b/packages/dcat-extension-plus-master/src/Http/Middleware/AfterInjectDcatPlus.php @@ -0,0 +1,23 @@ +initConfig(); + $support->gridRowActionsRight(); + $support->injectFields(); + $support->footerRemove(); + + return $next($request); + } +} diff --git a/packages/dcat-extension-plus-master/src/Http/routes.php b/packages/dcat-extension-plus-master/src/Http/routes.php new file mode 100644 index 0000000..623bbce --- /dev/null +++ b/packages/dcat-extension-plus-master/src/Http/routes.php @@ -0,0 +1,16 @@ +name('dcat-plus.site.index'); + +Route::get('/dcat-plus/ui', [DcatPlusUIController::class, 'index']) + ->name('dcat-plus.ui.index'); + + + diff --git a/packages/dcat-extension-plus-master/src/ServiceProvider.php b/packages/dcat-extension-plus-master/src/ServiceProvider.php new file mode 100644 index 0000000..65c5fe9 --- /dev/null +++ b/packages/dcat-extension-plus-master/src/ServiceProvider.php @@ -0,0 +1,56 @@ + [ + BeforeInjectDcatPlus::class, + ], + 'middle' => [ + MiddleInjectDcatPlus::class, + ], + 'after' => [ + AfterInjectDcatPlus::class, + ] + ]; + protected $menu = [ + [ + 'title' => 'Dcat Plus', + 'uri' => 'dcat-plus/site', + 'icon' => 'feather icon-settings' + ] + ]; + + public function register() + { + // + } + + public function settingForm() + { + return new Setting($this); + } + + public function init() + { + parent::init(); + + } +} diff --git a/packages/dcat-extension-plus-master/src/Setting.php b/packages/dcat-extension-plus-master/src/Setting.php new file mode 100644 index 0000000..54847dc --- /dev/null +++ b/packages/dcat-extension-plus-master/src/Setting.php @@ -0,0 +1,14 @@ +text('additional_theme_colors', 'Additional Theme Colors') + ->help("cssname1:Title1,cssname2:Title2"); + } +} diff --git a/packages/dcat-extension-plus-master/src/Support.php b/packages/dcat-extension-plus-master/src/Support.php new file mode 100644 index 0000000..e6c11a3 --- /dev/null +++ b/packages/dcat-extension-plus-master/src/Support.php @@ -0,0 +1,140 @@ +url(admin_setting('site_logo')); + $logo = ""; + } + + /** + * 处理站点LOGO-MINI自定义 + */ + if (empty(admin_setting('site_logo_mini'))) { + $logo_mini = admin_setting('site_logo_text'); + } else { + $logo_mini = Storage::disk(config('admin.upload.disk'))->url(admin_setting('site_logo_mini')); + $logo_mini = ""; + } + + /** + * 处理站点名称 + */ + $horizontal_menu = false; + if (empty(admin_setting('site_url'))) { + $site_url = 'http://localhost'; + } else { + $site_url = admin_setting('site_url'); + } + + if (empty(admin_setting('site_debug'))) { + $site_debug = true; + } else { + $site_debug = admin_setting('site_debug'); + } + + if (empty(admin_setting('theme_color'))) { + $theme_color = 'blue-light'; + } else { + $theme_color = admin_setting('theme_color'); + } + if (empty(admin_setting('sidebar_style'))) { + $sidebar_style = 'default'; + } else { + $sidebar_style = admin_setting('sidebar_style'); + if ($sidebar_style == 'horizontal_menu') { + $horizontal_menu = true; + } + } + + /** + * 复写admin站点配置 + */ + config([ + 'app.url' => $site_url, + 'app.debug' => (bool)$site_debug, + 'app.locale' => admin_setting('site_lang'), + 'app.fallback_locale' => admin_setting('site_lang'), + + 'admin.title' => admin_setting('site_title'), + 'admin.logo' => $logo, + 'admin.logo-mini' => $logo_mini, + 'admin.layout.color' => $theme_color, + 'admin.layout.body_class' => $sidebar_style, + 'admin.layout.horizontal_menu' => $horizontal_menu + ]); + } + + /** + * 注入字段. + */ + public function injectFields() + { + Form::extend('selectCreate', SelectCreate::class); + Show\Field::extend('video', Video::class); + } + + /** + * 底部授权移除. + */ + public function footerRemove() + { + if (admin_setting('footer_remove')) { + Admin::style( + <<<'CSS' +.main-footer { + display: none; +} +CSS + ); + } + } + + /** + * 行操作按钮最右. + */ + public function gridRowActionsRight() + { + if (admin_setting('grid_row_actions_right')) { + Admin::style( + << [ + '原始版本发布', + ], + '1.0.1' => [ + '增加调试模式开关 & 侧栏子菜单缩进增加', + ], + '1.0.2' => [ + '扩展表单字段 selectCreate 为 select 字段的升级版,支持快速创建。', + ], + '1.0.3' => [ + '增加扩展图标和别名。', + ], + '1.0.4' => [ + '增加表单提交预处理过滤,防止XSS攻击。', + ], + '1.0.5' => [ + '优化表单提交预处理过滤,不再依赖第三方包。', + ], + '1.0.6' => [ + 'selectCreate组件的颜色改为主题色。', + 'UI增加表格行操作按钮紧贴最右侧。' + ], + '1.0.7' => [ + '支持DcatAdmin 2.0.18beta。', + '暂时移除侧栏菜单子菜单缩进(不兼容)。', + '增加水平菜单选项。', + '原先的头部块状显示改为边距优化' + ], + '1.0.8' => [ + '提供了自定义颜色的支持入口', + ], + '1.0.9' => [ + '移除HTML、JS过滤', + '移除部分UI优化' + ], + '1.1.0' => [ + '修复debug配置无效的问题', + '自动注入扩展字段', + '移除了一些无用的配置' + ], + '1.1.1' => [ + '增加详情页视频扩展字段', + ], +]; diff --git a/src/Admin.php b/src/Admin.php index 6321540..86721ff 100755 --- a/src/Admin.php +++ b/src/Admin.php @@ -542,7 +542,7 @@ class Admin $jsVariables['pjax_container_selector'] = $pjaxId ? ('#'.$pjaxId) : ''; $jsVariables['token'] = csrf_token(); - $jsVariables['lang'] = ($lang = __('admin.client')) ? array_merge($lang, $jsVariables['lang'] ?? []) : []; + $jsVariables['lang'] = ($lang = is_array(__('admin.client')) ? __('admin.client'): []) ? array_merge($lang, $jsVariables['lang'] ?? []) : []; $jsVariables['colors'] = static::color()->all(); $jsVariables['dark_mode'] = static::isDarkMode(); $jsVariables['sidebar_dark'] = config('admin.layout.sidebar_dark') || ($sidebarStyle === 'dark'); diff --git a/src/Extend/ServiceProvider.php b/src/Extend/ServiceProvider.php index eacf4f7..642522e 100644 --- a/src/Extend/ServiceProvider.php +++ b/src/Extend/ServiceProvider.php @@ -391,13 +391,13 @@ abstract class ServiceProvider extends LaravelServiceProvider */ public function registerRoutes($callback) { - $this->loadRoutesFrom($callback); - // Admin::app()->routes(function ($router) use ($callback) { - // $router->group([ - // 'prefix' => config('admin.route.prefix'), - // 'middleware' => config('admin.route.middleware'), - // ], $callback); - // }); + // $this->loadRoutesFrom($callback); + Admin::app()->routes(function ($router) use ($callback) { + $router->group([ + 'prefix' => config('admin.route.prefix'), + 'middleware' => config('admin.route.middleware'), + ], $callback); + }); } /**