diff --git a/README.md b/README.md index 90aaad2..3ceea38 100755 --- a/README.md +++ b/README.md @@ -4,8 +4,50 @@ Fork From [jqhph/dcat-admin](https://github.com/jqhph/dcat-admin) ## 安装 +- `composer` 镜像(可选): `composer config repo.packagist composer https://mirrors.aliyun.com/composer/` - `composer config repositories.peidikeji/dcat-admin git https://gitea.peidikeji.cn/pdkj/dcat-admin.git` - `composer require peidikeji/dcat-admin` +- 修改 `config/app.php` + +```php +return [ + 'timezone' => env('TIMEZONE', 'Asia/Chongqing'), + 'locale' => 'zh_CN', + 'faker_locale' => 'zh_CN', +]; +``` + +- 修改 `app\Providers\AppServiceProvider.php` + +```php +use Illuminate\Support\Facades\Schema; +use Illuminate\Http\Resources\Json\JsonResource; + + public function boot() + { + Schema::defaultStringLength(191); + JsonResource::withoutWrapping(); + } +``` + +- 修改`.env` 中的数据库配置 + +``` +APP_URL=网站域名(如: https://laravel.com) + +LOG_DEPRECATIONS_CHANNEL=null(删除本项) + +DB_CONNECTION=mysql +DB_HOST=127.0.0.1 +DB_PORT=3306 +DB_DATABASE=laravel +DB_USERNAME=root +DB_PASSWORD= +``` + +- `php artisan admin:publish` +- `php artisan admin:install` +- 进入管理后台 `{host}/admin`, admin, admin ## 改动 diff --git a/packages/article/.gitignore b/packages/article/.gitignore deleted file mode 100644 index 9d4b362..0000000 --- a/packages/article/.gitignore +++ /dev/null @@ -1,7 +0,0 @@ -.DS_Store -phpunit.phar -/vendor -composer.phar -composer.lock -*.project -.idea/ \ No newline at end of file diff --git a/packages/article/README.md b/packages/article/README.md deleted file mode 100644 index 838df4c..0000000 --- a/packages/article/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# Dcat Admin Extension - - diff --git a/packages/article/composer.json b/packages/article/composer.json deleted file mode 100644 index 670a32d..0000000 --- a/packages/article/composer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "peidikeji/article", - "alias": "文章管理", - "description": "文章管理", - "type": "library", - "keywords": ["dcat-admin", "extension"], - "homepage": "https://github.com/peidikeji/article", - "license": "MIT", - "authors": [ - { - "name": "liutk", - "email": "961510893@qq.com" - } - ], - "require": { - "php": ">=7.1.0" - }, - "autoload": { - "psr-4": { - "Peidikeji\\Article\\": "src/" - } - }, - "extra": { - "dcat-admin": "Peidikeji\\Article\\ArticleServiceProvider", - "laravel": { - "providers": [ - "Peidikeji\\Article\\ArticleServiceProvider" - ] - } - } -} diff --git a/packages/article/resources/lang/en/article-category.php b/packages/article/resources/lang/en/article-category.php deleted file mode 100644 index 0b67a5f..0000000 --- a/packages/article/resources/lang/en/article-category.php +++ /dev/null @@ -1,3 +0,0 @@ - [ - 'ArticleCategory' => '文章分类', - 'article-categories'=> '文章分类', - ], - 'fields' => [ - 'parent_id' => '上级', - 'name' => '名称', - 'key' => 'KEY', - 'is_enable' => '可用状态', - 'is_recommend' => '推荐状态', - 'sort' => '排序', - 'remarks' => '备注' - ], - 'options' => [ - ], -]; diff --git a/packages/article/resources/lang/zh_CN/article.php b/packages/article/resources/lang/zh_CN/article.php deleted file mode 100644 index d6678d9..0000000 --- a/packages/article/resources/lang/zh_CN/article.php +++ /dev/null @@ -1,31 +0,0 @@ - [ - 'Article' => '文章管理', - 'articles'=> '文章管理', - ], - 'fields' => [ - 'title' => '标题', - 'sub_title' => '副标题', - 'author' => '作者', - 'author_name' => '作者', - 'category_id' => '分类', - 'category'=>[ - 'name' => '分类', - ], - 'admin_user_id' => '创建人', - 'cover' => '封面', - 'media_path' => '媒体资源', - 'is_recommend' => '推荐状态', - 'content' => '内容', - 'is_enable' => '可用状态', - 'sort' => '排序', - 'published_at' => '发布时间', - 'remarks' => '备注', - 'like_nums' => '点赞数', - 'read_nums' => '浏览数' - ], - 'options' => [ - ], -]; diff --git a/packages/article/resources/views/.keep b/packages/article/resources/views/.keep deleted file mode 100644 index e69de29..0000000 diff --git a/packages/article/src/ArticleServiceProvider.php b/packages/article/src/ArticleServiceProvider.php deleted file mode 100644 index b5a11c7..0000000 --- a/packages/article/src/ArticleServiceProvider.php +++ /dev/null @@ -1,27 +0,0 @@ -''] - - public function grid(){ - return Grid::make(new ArticleCategory(), function ($grid) { - $grid->disableRowSelector(); - - $grid->model()->sort(); - $grid->column('name')->tree(true, false); - $grid->column('key'); - $grid->column('sort')->editable(['mask' => '{alias:\'numeric\',min:0,max:999}']); - $grid->column('is_enable')->if(function(){ - return !config('admin.permission.enable') || Admin::user()->can('dcat.admin.article_categories.edit'); - })->then(function (GridColumn $column) { - $column->switch(); - })->else(function (GridColumn $column) { - $column->bool(); - }); - $grid->column('is_recommend') - ->if(function(){ - return !config('admin.permission.enable') || Admin::user()->can('dcat.admin.article_categories.edit'); - })->then(function (GridColumn $column) { - $column->switch(); - })->else(function (GridColumn $column) { - $column->bool(); - }); - - $grid->model()->orderBy('sort', 'desc'); - $grid->model()->orderBy('created_at', 'desc'); - - $grid->setDialogFormDimensions('50%', '70%'); - $grid->disableCreateButton(!(!config('admin.permission.enable') || Admin::user()->can('dcat.admin.article_categories.create'))); - $grid->enableDialogCreate(); - - $grid->actions(function (Grid\Displayers\Actions $actions) { - $actions->disableView(); - $actions->disableEdit(); - $actions->quickEdit(!config('admin.permission.enable') || Admin::user()->can('dcat.admin.article_categories.edit')); - $actions->delete(!config('admin.permission.enable') || Admin::user()->can('dcat.admin.article_categories.destroy')); - }); - - $grid->filter(function (Grid\Filter $filter) { - $filter->panel(); - $filter->expand(); - $filter->like('name')->width(3); - $filter->like('key')->width(3); - $filter->equal('parent_id', '上级分类')->select(ArticleCategory::selectOptions())->width(3); - }); - - }); - } - - public function form() - { - return Form::make(new ArticleCategory(), function (Form $form) { - - $form->select('parent_id')->help('不选默认为顶级')->options(ArticleCategory::selectOptions())->default(0); - $form->text('name')->required(); - $unique = Rule::unique((new ArticleCategory())->getTable(), 'key'); - if ($form->isCreating()) { - $form->text('key')->help('不填则自动生成, 唯一')->rules([$unique]); - } else { - $form->text('key')->required()->help('唯一')->rules([$unique->ignore($form->getKey())]); - } - $form->number('sort') - ->min(0) - ->default(0) - ->help('数值越大, 越靠前'); - $form->switch('is_enable')->default(0); - $form->switch('is_recommend')->default(0); - $form->text('remarks'); - $form->hidden('level')->default(1); - - $form->keyValue('ext', '扩展字段')->default($this->extDefaults)->setKeyLabel('键名')->setValueLabel('键值') - ->saving(function($v){ - return json_encode($v ?? []); - }); - - $controller = $this; - $form->saving(function (Form $form) use ($controller) { - if ($form->isCreating() && !$form->key) { - $form->key = $controller->generateKey(); - } - }); - - $form->saved(function (Form $form) { - if ($form->isEditing() && $form->input('is_enable') !== null && $form->input('is_enable') != $form->model()->is_enable) { - //处理分类子级状态同步(层级)父级 - ArticleCategory::where('path', 'like', "%-".$form->model()->id."-%")->update(['is_enable' => $form->is_enable]); - //处理父级状态 - if($form->is_enable){ - //如果状态是开启,判断(层级)父级是否开启 - $exPath = trim('-', $form->model()->path); - $parentIds = $exPath ? explode('-', $exPath) : []; - if($parentIds){ - ArticleCategory::whereIn('id', $parentIds)->update(['is_enable' => $form->is_enable]); - } - } - } - }); - - $form->deleting(function (Form $form) { - $hasArticles = Article::where('category_id', $form->getKey())->exists(); - if ($hasArticles) { - return $form->response()->error('需要先删除该分类下的文章'); - } - $hasChildren = ArticleCategory::where('parent_id', $form->getKey())->exists(); - if ($hasChildren) { - return $form->response()->error('需要先删除该分类下的子级'); - } - }); - - - }); - } - - protected function generateKey() - { - do { - $id = ArticleCategory::max('id') + 1; - $key = 'category-' . $id; - } while (ArticleCategory::where('key', $key)->exists()); - - return $key; - } -} diff --git a/packages/article/src/Http/Controllers/ArticleController.php b/packages/article/src/Http/Controllers/ArticleController.php deleted file mode 100644 index 2d6e7a1..0000000 --- a/packages/article/src/Http/Controllers/ArticleController.php +++ /dev/null @@ -1,136 +0,0 @@ -''] - - public function grid(){ - return Grid::make(Article::with(['category', 'adminUser']), function ($grid) { - $grid->disableRowSelector(); - $grid->column('category.name')->label(); - $grid->column('title')->display(function ($v) { - if (mb_strlen($v) > 20) { - return mb_substr($v, 0, 17) . '...'; - } else { - return $v; - } - }); - $grid->column('cover')->image(100, 100); - $grid->column('author_name')->display(function (){ - return $this->author_name; - }); - $grid->column('like_nums'); - $grid->column('read_nums'); - $grid->column('sort')->editable(['mask' => '{alias:\'numeric\',min:0,max:999}']); - $grid->column('published_at'); - $grid->column('is_enable')->if(function(){ - return !config('admin.permission.enable') || Admin::user()->can('dcat.admin.articles.edit'); - })->then(function (GridColumn $column) { - $column->switch(); - })->else(function (GridColumn $column) { - $column->bool(); - }); - $grid->column('is_recommend')->if(function(){ - return !config('admin.permission.enable') || Admin::user()->can('dcat.admin.articles.edit'); - })->then(function (GridColumn $column) { - $column->switch(); - })->else(function (GridColumn $column) { - $column->bool(); - }); - - // $grid->column('remarks'); - - $grid->model()->orderBy('sort', 'desc'); - $grid->model()->orderBy('created_at', 'desc'); - - - $grid->setDialogFormDimensions('50%', '70%'); - $grid->disableCreateButton(!(!config('admin.permission.enable') || Admin::user()->can('dcat.admin.articles.create'))); - $grid->enableDialogCreate(); - - $grid->actions(function (Grid\Displayers\Actions $actions) { - $actions->disableView(); - $actions->disableEdit(); - $actions->quickEdit(!config('admin.permission.enable') || Admin::user()->can('dcat.admin.articles.edit')); - $actions->delete(!config('admin.permission.enable') || Admin::user()->can('dcat.admin.articles.destroy')); - }); - - $grid->filter(function (Grid\Filter $filter) { - $filter->panel(); - $filter->expand(); - $filter->equal('category_id', '分类')->select(ArticleCategory::selectOptions())->width(3); - $filter->like('title')->width(3); - $filter->between('published_at')->datetime()->width(7); - }); - }); - } - - public function form() - { - return Form::make(new Article(), function($form){ - $form->select('category_id')->options(ArticleCategory::selectOptions(false)); - $form->text('title')->required(); - $form->text('sub_title'); - $form->image('cover') - ->uniqueName() - ->move('articles/'.Carbon::now()->toDateString()) - ->saveFullUrl() - ->autoSave(false) - ->autoUpload() - ->removable(false)//禁止用户从页面点击删除服务器上的文件,可以实现图片覆盖上传效果 - ->retainable(); - $form->text('author'); - $form->file('media_path')->chunked() - ->accept('mp4,mp3', 'mp4/*,mp3/*') - ->move('articles-media/'.Carbon::now()->toDateString()) - ->maxSize(204800)//默认最大200M - ->saveFullUrl() - ->removable(false) - ->autoUpload()->autoSave(false); - - $form->datetime('published_at'); - $form->switch('is_enable')->default(0); - $form->switch('is_recommend')->default(0); - $form->number('sort')->min(0)->default(0); - $form->text('remarks'); - - $form->keyValue('ext', '扩展字段')->default($this->extDefaults)->setKeyLabel('键名')->setValueLabel('键值') - ->saving(function($v){ - return json_encode($v ?? []); - }); - - $form->editor('content')->options([ - 'plugins' => [ - 'image', - 'lists', - 'preview', - 'fullscreen', - 'table', - ], - 'toolbar' => [ - 'undo redo | preview fullscreen | styleselect | fontsizeselect bold italic underline strikethrough forecolor backcolor | image blockquote removeformat codesample', - 'alignleft aligncenter alignright alignjustify| indent outdent bullist numlist table subscript superscript | code', - ] - ])->height('800'); - Admin::style(<<names('article_categories'); -} - -if(! Route::has('dcat.admin.articles.index')){ - Route::resource('articles', Controllers\ArticleController::class); -} diff --git a/packages/article/src/Models/Article.php b/packages/article/src/Models/Article.php deleted file mode 100644 index cccf062..0000000 --- a/packages/article/src/Models/Article.php +++ /dev/null @@ -1,75 +0,0 @@ -admin_user_id = Admin::user()->id; - // 添加/修改分类时, 更新 category_path - if ($model->isDirty('category_id')) { - $model->category_path = ArticleCategory::where('id', $model->category_id)->value('path') . $model->category_id . '-'; - } - }); - } - - public function category() - { - return $this->belongsTo(ArticleCategory::class, 'category_id'); - } - - public function adminUser() - { - return $this->belongsTo(Administrator::class, 'admin_user_id'); - } - - public function getAuthorNameAttribute() - { - return $this->attributes['author'] ?? ($this->attributes['admin_user_id'] ? (Administrator::find($this->attributes['admin_user_id'])?->name ?? '未知') : '未知'); - } - - //public function image(): Attribute - //{ - // return Attribute::make( - // get: fn ($v) => $v ?: 'https://via.placeholder.com/640x480.png', - // set: fn ($v) => $v ?: 'https://via.placeholder.com/640x480.png', - // ); - //} - - public function scopeSort($q) - { - return $q->orderBy('sort', 'desc')->latest('published_at')->latest('id'); - } - - public function scopePublish($q) - { - return $q->where('published_at', '<=', now()); - } -} diff --git a/packages/article/src/Models/ArticleCategory.php b/packages/article/src/Models/ArticleCategory.php deleted file mode 100644 index 859d989..0000000 --- a/packages/article/src/Models/ArticleCategory.php +++ /dev/null @@ -1,70 +0,0 @@ -parent_id) { - // 将层级设为 1 - $category->level = 1; - // 将 path 设为 - - $category->path = '-'; - } else { - // 将层级设为父类目的层级 + 1 - $category->level = $category->parent->level + 1; - // 将 path 值设为父类目的 path 追加父类目 ID 以及最后跟上一个 - 分隔符 - $category->path = $category->parent->path . $category->parent_id . '-'; - } - }); - } - - public static function selectOptions($root = true) - { - $rootText = '顶级'; - - $options = (new static())->withQuery(function ($q) { - return $q->sort(); - })->buildSelectOptions(); - - return collect($options)->when($root, fn ($c) => $c->prepend($rootText, 0))->all(); - } - - public function articles() - { - return $this->hasMany(Article::class, 'category_id'); - } - - public function parent() - { - return $this->belongsTo(static::class, 'parent_id'); - } - - public function children() - { - return $this->hasMany(static::class, 'parent_id')->sort(); - } - - public function scopeSort($q) - { - return $q->orderBy('sort', 'desc')->orderBy('id'); - } -} diff --git a/packages/article/src/Setting.php b/packages/article/src/Setting.php deleted file mode 100644 index 1e96681..0000000 --- a/packages/article/src/Setting.php +++ /dev/null @@ -1,14 +0,0 @@ -text('key1')->required(); - $this->text('key2')->required(); - } -} diff --git a/packages/article/updates/AddMediaToArticleTable.php b/packages/article/updates/AddMediaToArticleTable.php deleted file mode 100644 index be5203e..0000000 --- a/packages/article/updates/AddMediaToArticleTable.php +++ /dev/null @@ -1,35 +0,0 @@ -string('media_path')->nullable()->comment('资源地址'); - }); - } - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('articles', function (Blueprint $table) { - // - $table->dropColumn('media_path'); - }); - } -}; diff --git a/packages/article/updates/AddnumToArticleTable.php b/packages/article/updates/AddnumToArticleTable.php deleted file mode 100644 index 0239986..0000000 --- a/packages/article/updates/AddnumToArticleTable.php +++ /dev/null @@ -1,36 +0,0 @@ -unsignedBigInteger('like_nums')->default(0)->comment('点赞数'); - $table->unsignedBigInteger('read_nums')->default(0)->comment('阅读数'); - }); - } - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::table('articles', function (Blueprint $table) { - // - $table->dropColumn(['like_nums', 'read_nums']); - }); - } -}; diff --git a/packages/article/updates/ArticlePermissionSeeder.php b/packages/article/updates/ArticlePermissionSeeder.php deleted file mode 100644 index 533ff10..0000000 --- a/packages/article/updates/ArticlePermissionSeeder.php +++ /dev/null @@ -1,70 +0,0 @@ - ['name' => '文章分类管理', 'curd' => true], - 'articles' => ['name' => '文章管理', 'curd' => true], - ]; - $this->createPermissionData($permissions); - } - - /** - * 插入权限 - * - * @param array $permissions - * @param string $key - * @param integer $pId - */ - public function createPermissionData(array $permissions, string $key = '', int $pId = 0) - { - $curdArr = [ - 'index' => '列表', - 'create' => '新增', - 'edit' => '修改', - 'destroy' => '删除', - 'show' => '详情', - ]; - foreach ($permissions as $slug => $permission) { - //是否已存在该权限 - $slugKey = 'dcat.admin.' . ($key ? $key . '.' . $slug : $slug); - - - $pper = Permission::updateOrCreate(['slug' => $slugKey], ['name' => is_string($permission) ? $permission : $permission['name'], 'parent_id' => $pId]); - - if (!is_string($permission)) { - if (!isset($permission['children'])) { - $permission['children'] = []; - } - //判断是否默认插入curd权限 - if (isset($permission['curd']) && $permission['curd']) { - if (is_array($permission['curd'])) { - $permission['curd'] = array_reverse($permission['curd']); - foreach ($permission['curd'] as $value) { - $permission['children'] = array_merge([$value => $curdArr[$value]], $permission['children']); - } - } else { - $permission['children'] = array_merge($curdArr, $permission['children']); - } - } - - if (count($permission['children']) > 0) { - $_key = $permission['curd'] !== false ? ($key ? $key . '.' . $slug : $slug) : $key; - $this->createPermissionData($permission['children'], $_key ?? $slug, $pper->id); - } - } - } - } -} diff --git a/packages/article/updates/CreateArticleTable.php b/packages/article/updates/CreateArticleTable.php deleted file mode 100644 index 4dff730..0000000 --- a/packages/article/updates/CreateArticleTable.php +++ /dev/null @@ -1,70 +0,0 @@ -id(); - $table->string('name')->comment('名称'); - $table->string('key')->unique()->nullable()->comment('key'); - $table->unsignedTinyInteger('is_recommend')->default(0)->comment('推荐状态'); - $table->unsignedTinyInteger('is_enable')->default(1)->comment('可用状态'); - $table->unsignedBigInteger('parent_id')->default(0)->comment('上级ID'); - $table->unsignedInteger('level')->default(1)->comment('层级'); - $table->string('path')->default('-')->comment('所有的父级ID'); - $table->unsignedInteger('sort')->default(0)->comment('排序 desc'); - $table->string('remarks')->nullable()->comment('备注'); - - $table->text('ext')->nullable()->comment('扩展字段,可用于SEO配置等'); - - $table->timestamps(); - }); - } - - if (!Schema::hasTable('articles')) { - Schema::create('articles', function (Blueprint $table) { - $table->id(); - $table->unsignedBigInteger('category_id')->nullable()->comment('分类ID'); - $table->string('category_path')->default('-')->comment('分类 path'); - $table->unsignedBigInteger('admin_user_id')->comment('创建人'); - $table->string('title')->comment('文章标题'); - $table->string('sub_title')->nullable()->comment('副标题'); - $table->string('author')->nullable()->comment('作者'); - $table->string('cover')->nullable()->comment('封面'); - $table->longText('content')->nullable()->comment('文章内容'); - $table->timestamp('published_at')->nullable()->comment('发布时间'); - $table->unsignedInteger('sort')->default(1)->comment('排序 desc'); - $table->string('remarks')->nullable()->comment('备注'); - - $table->unsignedTinyInteger('is_recommend')->default(0)->comment('推荐状态'); - $table->unsignedTinyInteger('is_enable')->default(1)->comment('可用状态'); - - $table->text('ext')->nullable()->comment('扩展字段,可用于SEO配置等'); - - $table->timestamps(); - }); - } - } - - /** - * Reverse the migrations. - * - * @return void - */ - public function down() - { - Schema::dropIfExists('articles'); - Schema::dropIfExists('article_categories'); - } -}; diff --git a/packages/article/version.php b/packages/article/version.php deleted file mode 100644 index 34f933b..0000000 --- a/packages/article/version.php +++ /dev/null @@ -1,16 +0,0 @@ - [ - '初始化文章管理', - 'CreateArticleTable.php', - ], - '1.0.1' => [ - '文章添加点赞,浏览字段', - 'AddnumToArticleTable.php', - ], - '1.0.2' => [ - '文章添加媒体内容', - 'AddMediaToArticleTable.php', - ], -]; diff --git a/packages/banner/README.md b/packages/banner/README.md index 838df4c..10fd682 100644 --- a/packages/banner/README.md +++ b/packages/banner/README.md @@ -1,3 +1,60 @@ -# Dcat Admin Extension +# Dact-Admin Extension Banner +广告管理 +## 权限 + +```php +$permissions = [ + 'image' => ['name' => '广告管理', 'curd' => false, 'children' => [ + 'banner_ads' => ['name' => '广告位置', 'curd' => true], + 'banners' => ['name' => '广告内容', 'curd' => true], + ]], +]; +``` + +## 菜单 + +```php +$menus = [ + ['title' => '广告管理', 'icon' => 'feather icon-image', 'uri' => '', 'permission' => ['banner_ads', 'banners'], 'children' => [ + ['title' => '广告位置', 'icon' => '', 'uri' => '/banner-ads', 'permission' => 'banner_ads'], + ['title' => '广告内容', 'icon' => '', 'uri' => '/banners', 'permission' => 'banners'], + ]] +]; +``` + +## 接口文档 + +[Apifox](https://www.apifox.cn/apidoc/shared-86eb60cb-ba8f-46c6-b718-f33f99de5e7d/api-39896291) + +## 数据表 + +### 广告位: banner_ads + +| column | type | nullable | default | comment | +| - | - | - | - | - | +| id | bigint | not null | - | 主键 | +| name | varchar(100) | not null | - | 名称 | +| key | varchar(100) | not null | - | 关键字(unique) | +| width | integer | null | - | 建议尺寸 | +| height | integer | null | - | 建议尺寸 | +| is_enable | integer | not null | 1 | 是否可用 | +| remarks | varchar(100) | null | - | 备注 | +| created_at | timestamp | null | - | 创建时间 | +| updated_at | timestamp | null | - | 更新时间 | + +### 广告图: banner + +| column | type | nullable | default | comment | +| - | - | - | - | - | +| id | bigint | not null | - | 主键 | +| ad_id | bigint | not null | - | 位置 id | +| path | varchar(191) | not null | - | 图片地址 | +| name | varchar(191) | null | - | 名称 | +| sort | integer | not null | 1 | 排序(asc) | +| is_enable | integer | not null | 1 | 是否可用 | +| ext | json | null | - | 其他配置 | +| remarks | varchar(191) | null | - | 备注 | +| created_at | timestamp | null | - | 创建时间 | +| updated_at | timestamp | null | - | 更新时间 | diff --git a/packages/banner/resources/lang/zh_CN/banner.php b/packages/banner/resources/lang/zh_CN/banner.php index 06f30b9..805dac7 100644 --- a/packages/banner/resources/lang/zh_CN/banner.php +++ b/packages/banner/resources/lang/zh_CN/banner.php @@ -12,7 +12,10 @@ return [ 'sort'=>'排序', 'is_enable'=>'启用', 'remarks'=> '备注', - 'ext'=>'扩展字段' + 'ext'=>'扩展字段', + 'ad' => [ + 'name' => '广告位' + ], ], 'options' => [ ], diff --git a/packages/banner/src/BannerAdFilter.php b/packages/banner/src/BannerAdFilter.php deleted file mode 100644 index 9a504ab..0000000 --- a/packages/banner/src/BannerAdFilter.php +++ /dev/null @@ -1,28 +0,0 @@ - [input_key1, input_key2]]. - * - * @var array - */ - public $relations = []; - - public function q($v) - { - $this->where(function ($q) use ($v) { - $q->where('key', 'like', '%'.$v.'%')->orWhere('name', 'like', '%'.$v.'%'); - }); - } - - public function key($v) - { - $this->where('key', $v); - } -} diff --git a/packages/banner/src/BannerFilter.php b/packages/banner/src/BannerFilter.php deleted file mode 100644 index 3f0cbbd..0000000 --- a/packages/banner/src/BannerFilter.php +++ /dev/null @@ -1,23 +0,0 @@ - [input_key1, input_key2]]. - * - * @var array - */ - public $relations = []; - - public function q($v) - { - $this->where(function ($q) use ($v) { - $q->where('key', 'like', '%'.$v.'%')->orWhere('name', 'like', '%'.$v.'%'); - }); - } -} diff --git a/packages/banner/src/BannerServiceProvider.php b/packages/banner/src/BannerServiceProvider.php index 56a874b..c1ce9da 100644 --- a/packages/banner/src/BannerServiceProvider.php +++ b/packages/banner/src/BannerServiceProvider.php @@ -3,21 +3,17 @@ namespace Peidikeji\Banner; use Dcat\Admin\Extend\ServiceProvider; -use Dcat\Admin\Admin; class BannerServiceProvider extends ServiceProvider { - - public function register() - { - // - } + // protected $menu = [ + // ['parent' => '', 'title' => '广告管理', 'icon' => 'feather icon-image', 'uri' => ''], + // ['parent' => '广告管理', 'title' => '广告位置', 'icon' => '', 'uri' => 'banner-ads'], + // ['parent' => '广告管理', 'title' => '广告内容', 'icon' => '', 'uri' => 'banners'], + // ]; public function init() { parent::init(); - - // - } } diff --git a/packages/banner/src/Http/Controllers/BannerAdController.php b/packages/banner/src/Http/Admin/BannerAdController.php similarity index 88% rename from packages/banner/src/Http/Controllers/BannerAdController.php rename to packages/banner/src/Http/Admin/BannerAdController.php index 38c5b64..e4c0b0a 100644 --- a/packages/banner/src/Http/Controllers/BannerAdController.php +++ b/packages/banner/src/Http/Admin/BannerAdController.php @@ -1,6 +1,6 @@ all()); + $query = BannerAd::query(); + + if ($request->filled('q')) { + $query->where('name', 'like', '%'.$request->input('q').'%'); + } $query->select(['id', 'name as text', 'width', 'height']); @@ -73,16 +77,15 @@ class BannerAdController extends AdminController $form->text('key')->required()->rules([Rule::unique((new BannerAd())->getTable())]); $form->number('width')->min(0); $form->number('height')->min(0); - $form->switch('is_enable'); + $form->switch('is_enable')->default(1); $form->text('remarks'); }); } - public function destroy($id){ + public function destroy($id) + { //如果该广告位下还有内容,则一起删除 - Banner::where([ - 'ad_id' => $id - ])->delete(); + Banner::where(['ad_id' => $id])->delete(); return parent::destroy($id); } diff --git a/packages/banner/src/Http/Controllers/BannerController.php b/packages/banner/src/Http/Admin/BannerController.php similarity index 63% rename from packages/banner/src/Http/Controllers/BannerController.php rename to packages/banner/src/Http/Admin/BannerController.php index e236cfe..e7ec072 100644 --- a/packages/banner/src/Http/Controllers/BannerController.php +++ b/packages/banner/src/Http/Admin/BannerController.php @@ -1,62 +1,33 @@ ''] - - public function json(Request $request) - { - $keys = (array) $request->input('keys'); - - if (empty($keys)) { - return response()->json([]); - } - - - $ads = BannerAd::with([ - 'banners' => function ($query) { - $query->enable()->latest('sort'); - }, - ])->enable()->whereIn('key', $keys)->get(); - - $mapAds = $ads->mapWithKeys(function ($item) use ($request) { - return [ - $item->key => BannerResource::collection($item->banners)->resolve($request), - ]; - }); - - foreach ($keys as $key) { - if (! $mapAds->has($key)) { - $mapAds->put($key, []); - } - } - - return response()->json($mapAds); - } + protected $extDefaults = []; protected function grid() { - return Grid::make(new Banner(), function ($grid) { + return Grid::make(Banner::with(['ad']), function (Grid $grid) { + $grid->model()->sort(); + $grid->disableRowSelector(); - $grid->column('path')->image(100); + $grid->column('ad.name'); + $grid->column('path')->image('', 50); $grid->column('name'); $grid->column('sort'); - $grid->column('is_enable')->if(function(){ + $grid->column('is_enable')->if(function () { return !config('admin.permission.enable') || Admin::user()->can('dcat.admin.banners.edit'); })->then(function (GridColumn $column) { $column->switch(); @@ -64,16 +35,16 @@ class BannerController extends AdminController $column->bool(); }); $grid->column('ext') - ->if(function(){ - return $this->ext; - })->then(function (GridColumn $column) { - $column->display('展开')->expand(function () { - // 返回显示的详情 - $card = new Card(null, sprintf('
%s
', json_encode($this->ext, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))); + ->if(function () { + return $this->ext; + })->then(function (GridColumn $column) { + $column->display('展开')->expand(function () { + // 返回显示的详情 + $card = new Card(null, sprintf('
%s
', json_encode($this->ext, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE))); - return "
$card
"; + return "
$card
"; + }); }); - }); $grid->column('remarks'); @@ -91,16 +62,18 @@ class BannerController extends AdminController $grid->filter(function (Grid\Filter $filter) { $filter->panel(); $filter->expand(); + $filter->equal('ad_id')->select(BannerAd::pluck('name', 'id'))->width(3); $filter->like('name')->width(3); }); }); } - protected function form(){ + protected function form() + { return Form::make(new Banner(), function (Form $form) { $form->select('ad_id') - ->options('api/banner-ads') - ->required(); + ->options('api/banner-ads') + ->required(); $form->text('name'); $form->image('path') ->uniqueName() @@ -108,11 +81,11 @@ class BannerController extends AdminController ->saveFullUrl() ->autoSave(false) ->autoUpload() - ->removable(false)//禁止用户从页面点击删除服务器上的文件,可以实现图片覆盖上传效果 + ->removable(false) //禁止用户从页面点击删除服务器上的文件,可以实现图片覆盖上传效果 ->retainable() ->required()->help('建议尺寸:'); - Admin::script( - <<number('sort') - ->min(0) - ->help('数值越大, 越靠前'); + ->min(0) + ->help('数值越小, 越靠前'); $form->keyValue('ext')->default($this->extDefaults)->setKeyLabel('键名')->setValueLabel('键值'); - $form->switch('is_enable'); + $form->switch('is_enable')->default(1); $form->text('remarks'); }); } diff --git a/packages/banner/src/Http/Api/BannerController.php b/packages/banner/src/Http/Api/BannerController.php new file mode 100644 index 0000000..7d04027 --- /dev/null +++ b/packages/banner/src/Http/Api/BannerController.php @@ -0,0 +1,35 @@ +validate([ + 'key' => 'required' + ]); + $keys = $request->input('key'); + $keys = is_array($keys) ? $keys : explode(',', $keys); + + $ads = BannerAd::with([ + 'banners' => function ($query) { + $query->enable()->sort(); + }, + ])->enable()->whereIn('key', $keys)->get(); + + $data = []; + foreach ($keys as $key) { + $ad = $ads->where('key', $key)->first(); + $data[$key] = $ad ? BannerResource::collection($ad->banners) : []; + } + + return $this->json($data); + } + +} diff --git a/packages/banner/src/Http/Resources/BannerResource.php b/packages/banner/src/Http/Resources/BannerResource.php index 4adb6d7..cfbb007 100644 --- a/packages/banner/src/Http/Resources/BannerResource.php +++ b/packages/banner/src/Http/Resources/BannerResource.php @@ -6,12 +6,6 @@ use Illuminate\Http\Resources\Json\JsonResource; class BannerResource extends JsonResource { - /** - * Transform the resource into an array. - * - * @param \Illuminate\Http\Request $request - * @return array|\Illuminate\Contracts\Support\Arrayable|\JsonSerializable - */ public function toArray($request) { return [ diff --git a/packages/banner/src/Http/routes.php b/packages/banner/src/Http/routes.php index ab3ef77..6ec9e7a 100644 --- a/packages/banner/src/Http/routes.php +++ b/packages/banner/src/Http/routes.php @@ -1,15 +1,16 @@ name('api.banner_ads'); + Route::get('api/banner-ads', [BannerAdController::class, 'list'])->name('api.banner_ads'); } if(! Route::has('dcat.admin.banner_ads.index')){ - Route::resource('banner-ads', Controllers\BannerAdController::class)->names('banner_ads'); + Route::resource('banner-ads', BannerAdController::class)->names('banner_ads'); } if(! Route::has('dcat.admin.banners.index')){ - Route::resource('banners', Controllers\BannerController::class); + Route::resource('banners', BannerController::class); } diff --git a/packages/banner/src/Http/web.php b/packages/banner/src/Http/web.php index a7e14ea..baec154 100644 --- a/packages/banner/src/Http/web.php +++ b/packages/banner/src/Http/web.php @@ -1,9 +1,9 @@ 'api', 'prefix' => 'api'], function () { - Route::get('banners', [BannerController::class, 'json']); + Route::get('banner', [BannerController::class, 'index']); }); diff --git a/packages/banner/src/Models/Banner.php b/packages/banner/src/Models/Banner.php index 752bd7f..78befcf 100644 --- a/packages/banner/src/Models/Banner.php +++ b/packages/banner/src/Models/Banner.php @@ -2,14 +2,13 @@ namespace Peidikeji\Banner\Models; -use EloquentFilter\Filterable; use Illuminate\Database\Eloquent\Model; use Dcat\Admin\Traits\HasDateTimeFormatter; use Illuminate\Database\Eloquent\Factories\HasFactory; class Banner extends Model { - use HasFactory, HasDateTimeFormatter, Filterable; + use HasFactory, HasDateTimeFormatter; protected $fillable = ['ad_id', 'path', 'name', 'sort', 'is_enable', 'ext', 'remarks']; @@ -22,7 +21,13 @@ class Banner extends Model return $this->belongsTo(BannerAd::class, 'ad_id'); } - public function scopeEnable($query){ + public function scopeEnable($query) + { return $query->where('is_enable', 1); } + + public function scopeSort($q) + { + return $q->orderBy('sort'); + } } diff --git a/packages/banner/src/Models/BannerAd.php b/packages/banner/src/Models/BannerAd.php index e2a1e48..0f43c17 100644 --- a/packages/banner/src/Models/BannerAd.php +++ b/packages/banner/src/Models/BannerAd.php @@ -2,23 +2,16 @@ namespace Peidikeji\Banner\Models; -use EloquentFilter\Filterable; -use Peidikeji\Banner\BannerAdFilter; use Illuminate\Database\Eloquent\Model; use Dcat\Admin\Traits\HasDateTimeFormatter; use Illuminate\Database\Eloquent\Factories\HasFactory; class BannerAd extends Model { - use HasFactory, HasDateTimeFormatter, Filterable; + use HasFactory, HasDateTimeFormatter; protected $fillable = ['name', 'key', 'width', 'height', 'is_enable', 'remarks']; - public function modelFilter() - { - return BannerAdFilter::class; - } - public function banners() { return $this->hasMany(Banner::class, 'ad_id'); diff --git a/packages/banner/src/Setting.php b/packages/banner/src/Setting.php deleted file mode 100644 index 88820ad..0000000 --- a/packages/banner/src/Setting.php +++ /dev/null @@ -1,14 +0,0 @@ -text('key1')->required(); - $this->text('key2')->required(); - } -} diff --git a/packages/banner/updates/BannerPermissionSeeder.php b/packages/banner/updates/BannerPermissionSeeder.php deleted file mode 100644 index 785bd62..0000000 --- a/packages/banner/updates/BannerPermissionSeeder.php +++ /dev/null @@ -1,71 +0,0 @@ - ['name' => '广告位管理', 'curd' => true], - 'banners' => ['name' => '广告图管理', 'curd' => true], - ]; - $this->createPermissionData($permissions); - } - - /** - * 插入权限 - * - * @param array $permissions - * @param string $key - * @param integer $pId - */ - public function createPermissionData(array $permissions, string $key = '', int $pId = 0) - { - $curdArr = [ - 'index' => '列表', - 'create' => '新增', - 'edit' => '修改', - 'destroy' => '删除', - 'show' => '详情', - ]; - foreach ($permissions as $slug => $permission) { - //是否已存在该权限 - $slugKey = 'dcat.admin.' . ($key ? $key . '.' . $slug : $slug); - - - $pper = Permission::updateOrCreate(['slug' => $slugKey], ['name' => is_string($permission) ? $permission : $permission['name'], 'parent_id' => $pId]); - - if (!is_string($permission)) { - if (!isset($permission['children'])) { - $permission['children'] = []; - } - //判断是否默认插入curd权限 - if (isset($permission['curd']) && $permission['curd']) { - if (is_array($permission['curd'])) { - $permission['curd'] = array_reverse($permission['curd']); - foreach ($permission['curd'] as $value) { - $permission['children'] = array_merge([$value => $curdArr[$value]], $permission['children']); - } - } else { - $permission['children'] = array_merge($curdArr, $permission['children']); - } - } - - if (count($permission['children']) > 0) { - $_key = $permission['curd'] !== false ? ($key ? $key . '.' . $slug : $slug) : $key; - $this->createPermissionData($permission['children'], $_key ?? $slug, $pper->id); - } - } - } - } -} diff --git a/packages/banner/updates/CreateBannerTable.php b/packages/banner/updates/CreateBannerTable.php index 48f7342..33adb9a 100644 --- a/packages/banner/updates/CreateBannerTable.php +++ b/packages/banner/updates/CreateBannerTable.php @@ -33,7 +33,7 @@ class CreateBannerTable extends Migration $table->unsignedBigInteger('ad_id')->comment('位置ID'); $table->string('path')->comment('地址'); $table->string('name')->nullable()->comment('名称'); - $table->unsignedInteger('sort')->comment('排序'); + $table->unsignedInteger('sort')->default(1)->comment('排序(asc)'); $table->unsignedTinyInteger('is_enable')->default(1)->comment('可用状态'); $table->text('ext')->nullable()->comment('扩展字段,可用于跳转配置等'); $table->string('remarks')->nullable()->comment('备注'); diff --git a/packages/banner/version.php b/packages/banner/version.php index 92bf9e9..6c09ca3 100644 --- a/packages/banner/version.php +++ b/packages/banner/version.php @@ -2,7 +2,6 @@ return [ '1.0.0' => [ - '初始化广告管理插件', 'CreateBannerTable.php', ], ]; diff --git a/packages/keywords/README.md b/packages/keywords/README.md index c2d5851..7b00315 100644 --- a/packages/keywords/README.md +++ b/packages/keywords/README.md @@ -11,3 +11,19 @@ | parent_id | bigint unsigned | notnull | 0 | - | 上级id | | type_key | string(191) | nullable | - | - | 上级的key | | level | int unsigned | - | 1 | - | 所属层级 | + +## 权限 + +```php +$permissions = [ + 'keywords' => ['name' => '字典管理', 'curd' => true], +]; +``` + +## 菜单 + +```php +$menus = [ + ['title' => '字典管理', 'icon' => '', 'uri' => '/keywords', 'permission' => 'keywords'], +]; +``` diff --git a/packages/keywords/composer.json b/packages/keywords/composer.json index 5c934b3..31cedaa 100644 --- a/packages/keywords/composer.json +++ b/packages/keywords/composer.json @@ -4,7 +4,7 @@ "description": "字典表管理", "type": "library", "keywords": ["dcat-admin", "extension"], - "homepage": "https://gitee.com/paddy_technology/dcat-admin-extension-keywords", + "homepage": "https://gitea.peidikeji.cn/pdkj/dcat-admin/src/branch/master/packages/keywords", "license": "MIT", "authors": [ { @@ -12,9 +12,6 @@ "email": "1163816051@qq.com" } ], - "require": { - "php": ">=7.1.0" - }, "autoload": { "psr-4": { "Peidikeji\\Keywords\\": "src/" diff --git a/packages/keywords/resources/lang/zh_CN/keywords.php b/packages/keywords/resources/lang/zh_CN/keywords.php index 35604d2..6840b70 100644 --- a/packages/keywords/resources/lang/zh_CN/keywords.php +++ b/packages/keywords/resources/lang/zh_CN/keywords.php @@ -7,7 +7,7 @@ return [ ], 'fields' => [ 'name' => '名称', - 'key' => '键', + 'key' => 'Key', 'value' => '值', 'parent_id' => '上级', ], diff --git a/packages/keywords/src/Http/Controllers/KeywordsController.php b/packages/keywords/src/Http/Admin/KeywordsController.php similarity index 80% rename from packages/keywords/src/Http/Controllers/KeywordsController.php rename to packages/keywords/src/Http/Admin/KeywordsController.php index f56361a..2e7a13c 100644 --- a/packages/keywords/src/Http/Controllers/KeywordsController.php +++ b/packages/keywords/src/Http/Admin/KeywordsController.php @@ -1,6 +1,6 @@ all()); - - $list = $query->get(); - - return response()->json(['code' => 200, 'data' => KeywordResource::collection($list), 'message' => '']); - } - - public function jsonOne($key) - { - $info = Keywords::where('key', $key)->firstOrFail(); - - return response()->json(['code' => 200, 'data' => KeywordResource::make($info), 'message' => '']); - } - protected function grid() { return Grid::make(new Keywords(), function ($grid) { @@ -84,13 +67,13 @@ class KeywordsController extends AdminController protected function form() { return Form::make(new Keywords(), function (Form $form) { - $form->select('parent_id')->ajax(admin_url('api/keywords?'.http_build_query(['_paginate' => 1, 'parent_id' => '0']))); + $form->select('parent_id')->ajax(admin_url('api/keywords?'.http_build_query(['_paginate' => 1, 'parent_id' => '0'])))->model(Keywords::class, 'id', 'name'); $unique = Rule::unique((new Keywords())->getTable()); if ($form->isEditing()) { $unique->ignore($form->getKey()); } - $form->text('key')->required()->rules([$unique]); + $form->text('key')->required()->rules([$unique])->help('不能重复'); $form->text('name')->required(); $form->text('value'); diff --git a/packages/keywords/src/Http/Api/KeywordsController.php b/packages/keywords/src/Http/Api/KeywordsController.php new file mode 100644 index 0000000..f48abda --- /dev/null +++ b/packages/keywords/src/Http/Api/KeywordsController.php @@ -0,0 +1,27 @@ +all()); + + $list = $query->get(); + + return $this->json(KeywordResource::collection($list)); + } + + public function show($key) + { + $info = Keywords::where(fn($q) => $q->where('key', $key)->orWhere('id', $key))->firstOrFail(); + + return $this->json(KeywordResource::make($info)); + } +} diff --git a/packages/keywords/src/Http/Resources/KeywordResource.php b/packages/keywords/src/Http/Resources/KeywordResource.php index e911669..552f313 100644 --- a/packages/keywords/src/Http/Resources/KeywordResource.php +++ b/packages/keywords/src/Http/Resources/KeywordResource.php @@ -20,6 +20,8 @@ class KeywordResource extends JsonResource 'key' => $this->key, 'type_key' => $this->type_key, 'value' => $this->value, + 'parent_id' => $this->parent_id, + 'level' => $this->level, ]; } } diff --git a/packages/keywords/src/Http/routes.php b/packages/keywords/src/Http/routes.php index f596189..459fcfb 100644 --- a/packages/keywords/src/Http/routes.php +++ b/packages/keywords/src/Http/routes.php @@ -1,6 +1,6 @@ 'api', 'prefix' => 'api'], function () { - Route::get('keywords', [KeywordsController::class, 'json']); - Route::get('keywords/{key}', [KeywordsController::class, 'jsonOne']); + Route::get('keywords', [KeywordsController::class, 'index']); + Route::get('keywords/{key}', [KeywordsController::class, 'show']); }); diff --git a/packages/keywords/src/KeywordsServiceProvider.php b/packages/keywords/src/KeywordsServiceProvider.php index 0b87e1d..204193f 100644 --- a/packages/keywords/src/KeywordsServiceProvider.php +++ b/packages/keywords/src/KeywordsServiceProvider.php @@ -6,17 +6,12 @@ use Dcat\Admin\Extend\ServiceProvider; class KeywordsServiceProvider extends ServiceProvider { - protected $menu = [ - // ['title' => 'Keywords', 'uri' => 'keywords', 'icon' => ''], - ]; + // protected $menu = [ + // ['title' => 'Keywords', 'uri' => 'keywords', 'icon' => 'feather icon-list'], + // ]; public function init() { parent::init(); } - - // public function settingForm() - // { - // return new Setting($this); - // } } diff --git a/packages/keywords/src/Setting.php b/packages/keywords/src/Setting.php deleted file mode 100644 index 8f9ecb1..0000000 --- a/packages/keywords/src/Setting.php +++ /dev/null @@ -1,14 +0,0 @@ -text('key1')->required(); - $this->text('key2')->required(); - } -} diff --git a/packages/keywords/updates/KeywordsTableSeeder.php b/packages/keywords/updates/KeywordsTableSeeder.php deleted file mode 100644 index 2a786ce..0000000 --- a/packages/keywords/updates/KeywordsTableSeeder.php +++ /dev/null @@ -1,56 +0,0 @@ - ['name' => '字典管理', 'curd' => true] - ]; - // Permission::where('slug', 'like', 'dcat.admin.keywords%')->delete(); - $this->createPermissionData($permissions); - } - - protected function createPermissionData(array $permissions, string $key = '', int $pId = 0) - { - $curdArr = [ - 'index' => '列表', - 'create' => '新增', - 'edit' => '修改', - 'destroy' => '删除', - 'show' => '详情', - ]; - foreach ($permissions as $slug => $permission) { - //是否已存在该权限 - $slugKey = 'dcat.admin.' . ($key ? $key . '.' . $slug : $slug); - - $pper = Permission::updateOrCreate(['slug' => $slugKey], ['name' => is_string($permission) ? $permission : $permission['name'], 'parent_id' => $pId]); - - if (!is_string($permission)) { - if (!isset($permission['children'])) { - $permission['children'] = []; - } - //判断是否默认插入curd权限 - if (isset($permission['curd']) && $permission['curd']) { - if (is_array($permission['curd'])) { - $permission['curd'] = array_reverse($permission['curd']); - foreach ($permission['curd'] as $value) { - $permission['children'] = array_merge([$value => $curdArr[$value]], $permission['children']); - } - } else { - $permission['children'] = array_merge($curdArr, $permission['children']); - } - } - - if (count($permission['children']) > 0) { - $_key = $permission['curd'] !== false ? ($key ? $key . '.' . $slug : $slug) : $key; - $this->createPermissionData($permission['children'], $_key ?? $slug, $pper->id); - } - } - } - } -} diff --git a/packages/keywords/version.php b/packages/keywords/version.php index 8a8e79a..4698188 100644 --- a/packages/keywords/version.php +++ b/packages/keywords/version.php @@ -3,6 +3,5 @@ return [ '1.0.0' => [ 'CreateKeywordsTable.php', - 'KeywordsTableSeeder.php' ], ]; diff --git a/packages/setting/README.md b/packages/setting/README.md index 838df4c..8cacfa4 100644 --- a/packages/setting/README.md +++ b/packages/setting/README.md @@ -1,3 +1,29 @@ -# Dcat Admin Extension +# Dcat Admin Extension Setting +配置管理, 使用 `dcat-admin` 原有的数据表 `admin_settings` +## 数据表 + +| column | type | nullable | default | comment | +| - | - | - | - | - | +| slug | varchar(100) | not null | - | 主键 | +| name | varchart(100) | null | - | 名称 | +| value | longtext | null | - | 内容 | +| created_at | timestamp | null | - | 创建时间 | +| updated_at | timestamp | null | - | 更新时间 | + +## 权限 + +```php +$permissions = [ + 'settings' => ['name' => '配置管理', 'curd' => true], +]; +``` + +## 菜单 + +```php +$menus = [ + ['title' => '配置管理', 'icon' => '', 'uri' => '/settings', 'permission' => 'settings'], +]; +``` diff --git a/packages/setting/composer.json b/packages/setting/composer.json index 821c80a..6deabd5 100644 --- a/packages/setting/composer.json +++ b/packages/setting/composer.json @@ -3,8 +3,8 @@ "alias": "setting", "description": "Setting", "type": "library", - "keywords": ["dcat-admin", "extension"], - "homepage": "https://github.com/peidikeji/setting", + "keywords": ["dcat-admin", "extension", "setting"], + "homepage": "https://gitea.peidikeji.cn/pdkj/dcat-admin/src/branch/master/packages/setting", "license": "MIT", "authors": [ { @@ -12,9 +12,6 @@ "email": "1163816051@qq.com" } ], - "require": { - "php": ">=7.1.0" - }, "autoload": { "psr-4": { "Peidikeji\\Setting\\": "src/" diff --git a/packages/setting/src/Http/Controllers/SettingController.php b/packages/setting/src/Http/Controllers/SettingController.php index aaf10fb..cd30616 100644 --- a/packages/setting/src/Http/Controllers/SettingController.php +++ b/packages/setting/src/Http/Controllers/SettingController.php @@ -12,7 +12,7 @@ use Dcat\Admin\Http\Controllers\AdminController; class SettingController extends AdminController { - protected $translation = 'peidikeji.setting::setting'; + protected $translation = 'peidikeji.dcat-admin-extension-setting::setting'; protected function grid() { @@ -23,13 +23,13 @@ class SettingController extends AdminController $grid->column('name'); $grid->column('value'); - $grid->disableCreateButton(!(!config('admin.permission.enable') || Admin::user()->can('dcat.admin.settings.create'))); + $grid->showCreateButton(Admin::user()->can('dcat.admin.settings.create')); $grid->enableDialogCreate(); $grid->actions(function (Grid\Displayers\Actions $actions) { $actions->disableView(); $actions->disableEdit(); - $actions->quickEdit(!config('admin.permission.enable') || Admin::user()->can('dcat.admin.settings.edit')); + $actions->quickEdit(Admin::user()->can('dcat.admin.settings.edit')); }); $grid->quickSearch(['slug', 'name', 'value'])->placeholder('输入 key/名称/value 搜索'); diff --git a/packages/setting/src/Setting.php b/packages/setting/src/Setting.php deleted file mode 100644 index 4501af3..0000000 --- a/packages/setting/src/Setting.php +++ /dev/null @@ -1,14 +0,0 @@ -text('key1')->required(); - $this->text('key2')->required(); - } -} diff --git a/packages/setting/src/SettingServiceProvider.php b/packages/setting/src/SettingServiceProvider.php index 99710d7..6a76ec9 100644 --- a/packages/setting/src/SettingServiceProvider.php +++ b/packages/setting/src/SettingServiceProvider.php @@ -3,29 +3,19 @@ namespace Peidikeji\Setting; use Dcat\Admin\Extend\ServiceProvider; -use Dcat\Admin\Admin; class SettingServiceProvider extends ServiceProvider { - protected $menu = [ - // ['title' => 'Setting', 'uri' => 'keywords', 'icon' => ''], - ]; + // protected $menu = [ + // ['title' => '配置管理', 'uri' => 'settings', 'icon' => 'fa fa-gear'], + // ]; public function register() { - // } public function init() { parent::init(); - - // - } - - // public function settingForm() - // { - // return new Setting($this); - // } } diff --git a/packages/setting/updates/SettingPermissionSeeder.php b/packages/setting/updates/SettingPermissionSeeder.php deleted file mode 100644 index 5cf8563..0000000 --- a/packages/setting/updates/SettingPermissionSeeder.php +++ /dev/null @@ -1,69 +0,0 @@ - ['name' => '配置管理', 'curd' => true], - ]; - $this->createPermissionData($permissions); - } - - /** - * 插入权限 - * - * @param array $permissions - * @param string $key - * @param integer $pId - */ - public function createPermissionData(array $permissions, string $key = '', int $pId = 0) - { - $curdArr = [ - 'index' => '列表', - 'create' => '新增', - 'edit' => '修改', - 'destroy' => '删除', - 'show' => '详情', - ]; - foreach ($permissions as $slug => $permission) { - //是否已存在该权限 - $slugKey = 'dcat.admin.' . ($key ? $key . '.' . $slug : $slug); - - - $pper = Permission::updateOrCreate(['slug' => $slugKey], ['name' => is_string($permission) ? $permission : $permission['name'], 'parent_id' => $pId]); - - if (!is_string($permission)) { - if (!isset($permission['children'])) { - $permission['children'] = []; - } - //判断是否默认插入curd权限 - if (isset($permission['curd']) && $permission['curd']) { - if (is_array($permission['curd'])) { - $permission['curd'] = array_reverse($permission['curd']); - foreach ($permission['curd'] as $value) { - $permission['children'] = array_merge([$value => $curdArr[$value]], $permission['children']); - } - } else { - $permission['children'] = array_merge($curdArr, $permission['children']); - } - } - - if (count($permission['children']) > 0) { - $_key = $permission['curd'] !== false ? ($key ? $key . '.' . $slug : $slug) : $key; - $this->createPermissionData($permission['children'], $_key ?? $slug, $pper->id); - } - } - } - } -} diff --git a/packages/setting/version.php b/packages/setting/version.php index 9bac31a..65ff79e 100644 --- a/packages/setting/version.php +++ b/packages/setting/version.php @@ -4,9 +4,5 @@ return [ '1.0.0' => [ '初始化配置管理', 'CreateAdminSettingsTable.php', - ], - '1.0.1' => [ - '添加配置管理权限迁移文件', - 'SettingPermissionSeeder.php' ] ]; diff --git a/src/Models/Setting.php b/src/Models/Setting.php new file mode 100644 index 0000000..29d902a --- /dev/null +++ b/src/Models/Setting.php @@ -0,0 +1,31 @@ +init(); + + parent::__construct($attributes); + } + + protected function init() + { + $connection = config('admin.database.connection') ?: config('database.default'); + + $this->setConnection($connection); + + $this->setTable(config('admin.database.settings_table') ?: 'admin_settings'); + } +} diff --git a/src/Widgets/Form.php b/src/Widgets/Form.php index 5af92c5..1979daa 100755 --- a/src/Widgets/Form.php +++ b/src/Widgets/Form.php @@ -140,7 +140,7 @@ class Form implements Renderable * * @var array */ - protected $buttons = ['reset' => true, 'submit' => true]; + protected $buttons = ['reset' => true, 'submit' => true, 'back' => false]; /** * @var bool @@ -489,6 +489,13 @@ class Form implements Renderable return $this; } + public function backButton(bool $value = true) + { + $this->buttons['back'] = $value; + + return $this; + } + /** * Disable reset button. * @@ -500,6 +507,11 @@ class Form implements Renderable return $this->resetButton(! $value); } + public function disableBackButton(bool $value = true) + { + return $this->backButton(! $value); + } + /** * Disable submit button. * @@ -623,7 +635,7 @@ class Form implements Renderable return <<
 
-
{$this->renderResetButton()}{$this->renderSubmitButton()}
+
{$this->renderBackButton()}{$this->renderResetButton()}{$this->renderSubmitButton()}
HTML; } @@ -644,6 +656,15 @@ HTML; } } + protected function renderBackButton() + { + if (! empty($this->buttons['back'])) { + $back = trans('admin.back'); + + return " {$back}"; + } + } + /** * 提交按钮文本. *