From fb88053b9595852be4e530b702d896de78fc293e Mon Sep 17 00:00:00 2001 From: panliang <1163816051@qq.com> Date: Wed, 27 Jul 2022 12:31:08 +0800 Subject: [PATCH] add packages --- .gitignore | 1 - config/admin.php | 2 +- packages/keywords/.gitignore | 7 ++ packages/keywords/README.md | 13 +++ packages/keywords/composer.json | 31 +++++ .../keywords/resources/lang/en/keywords.php | 3 + .../resources/lang/zh_CN/keywords.php | 16 +++ .../Http/Controllers/KeywordsController.php | 107 ++++++++++++++++++ .../src/Http/Resources/KeywordResource.php | 24 ++++ packages/keywords/src/Http/routes.php | 22 ++++ packages/keywords/src/KeywordsFilter.php | 48 ++++++++ .../keywords/src/KeywordsServiceProvider.php | 22 ++++ packages/keywords/src/Models/Keywords.php | 36 ++++++ packages/keywords/src/Setting.php | 14 +++ .../keywords/updates/CreateKeywordsTable.php | 39 +++++++ packages/keywords/version.php | 7 ++ 16 files changed, 390 insertions(+), 2 deletions(-) create mode 100644 packages/keywords/.gitignore create mode 100644 packages/keywords/README.md create mode 100644 packages/keywords/composer.json create mode 100644 packages/keywords/resources/lang/en/keywords.php create mode 100644 packages/keywords/resources/lang/zh_CN/keywords.php create mode 100644 packages/keywords/src/Http/Controllers/KeywordsController.php create mode 100644 packages/keywords/src/Http/Resources/KeywordResource.php create mode 100644 packages/keywords/src/Http/routes.php create mode 100644 packages/keywords/src/KeywordsFilter.php create mode 100644 packages/keywords/src/KeywordsServiceProvider.php create mode 100644 packages/keywords/src/Models/Keywords.php create mode 100644 packages/keywords/src/Setting.php create mode 100644 packages/keywords/updates/CreateKeywordsTable.php create mode 100644 packages/keywords/version.php diff --git a/.gitignore b/.gitignore index f068106..44eb000 100644 --- a/.gitignore +++ b/.gitignore @@ -10,4 +10,3 @@ pre-dist /laravel-tests *.bak.* .DS_Store -/packages/ diff --git a/config/admin.php b/config/admin.php index aa287af..f8366a4 100755 --- a/config/admin.php +++ b/config/admin.php @@ -363,6 +363,6 @@ return [ 'extension' => [ // When you use command `php artisan admin:ext-make` to generate extensions, // the extension files will be generated in this directory. - 'dir' => base_path('dcat-admin-extensions'), + 'dir' => base_path('vendor/peidikeji/dcat-admin/packages'), ], ]; diff --git a/packages/keywords/.gitignore b/packages/keywords/.gitignore new file mode 100644 index 0000000..9d4b362 --- /dev/null +++ b/packages/keywords/.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/keywords/README.md b/packages/keywords/README.md new file mode 100644 index 0000000..c2d5851 --- /dev/null +++ b/packages/keywords/README.md @@ -0,0 +1,13 @@ +# 字典表管理 + +## 数据表结构 + +| name | type | null | default | index | comment | +| - | - | - | - | - | - | +| id | bigint unsigned | notnull | - | primary, auto_increment | 主键 | +| key | varchar(191) | notnull | - | unique | - | +| value | string(191) | nullable | - | - | - | +| sort | int unsigned | - | 0 | - | 排序(asc) | +| parent_id | bigint unsigned | notnull | 0 | - | 上级id | +| type_key | string(191) | nullable | - | - | 上级的key | +| level | int unsigned | - | 1 | - | 所属层级 | diff --git a/packages/keywords/composer.json b/packages/keywords/composer.json new file mode 100644 index 0000000..5c934b3 --- /dev/null +++ b/packages/keywords/composer.json @@ -0,0 +1,31 @@ +{ + "name": "peidikeji/dcat-admin-extension-keywords", + "alias": "keywords", + "description": "字典表管理", + "type": "library", + "keywords": ["dcat-admin", "extension"], + "homepage": "https://gitee.com/paddy_technology/dcat-admin-extension-keywords", + "license": "MIT", + "authors": [ + { + "name": "panliang", + "email": "1163816051@qq.com" + } + ], + "require": { + "php": ">=7.1.0" + }, + "autoload": { + "psr-4": { + "Peidikeji\\Keywords\\": "src/" + } + }, + "extra": { + "dcat-admin": "Peidikeji\\Keywords\\KeywordsServiceProvider", + "laravel": { + "providers": [ + "Peidikeji\\Keywords\\KeywordsServiceProvider" + ] + } + } +} diff --git a/packages/keywords/resources/lang/en/keywords.php b/packages/keywords/resources/lang/en/keywords.php new file mode 100644 index 0000000..0b67a5f --- /dev/null +++ b/packages/keywords/resources/lang/en/keywords.php @@ -0,0 +1,3 @@ + [ + 'Keywords' => '字典表管理', + 'keywords' => '字典表管理', + ], + 'fields' => [ + 'name' => '名称', + 'key' => '键', + 'value' => '值', + 'parent_id' => '上级', + ], + 'options' => [ + ], +]; diff --git a/packages/keywords/src/Http/Controllers/KeywordsController.php b/packages/keywords/src/Http/Controllers/KeywordsController.php new file mode 100644 index 0000000..281d196 --- /dev/null +++ b/packages/keywords/src/Http/Controllers/KeywordsController.php @@ -0,0 +1,107 @@ +all()); + + $query->select(['id', 'name as text']); + + if ($request->filled('_paginate')) { + $list = $query->paginate(); + } else { + $list = $query->get(); + } + return $list; + } + + public function json(Request $request) + { + $query = Keywords::filter($request->all()); + + $list = $query->get(); + + return KeywordResource::collection($list); + } + + protected function grid() + { + return Grid::make(new Keywords(), function ($grid) { + $grid->column('name')->tree(); + $grid->column('key'); + $grid->column('value'); + + $grid->enableDialogCreate(); + + $grid->quickSearch(['name', 'type_key', 'key']); + }); + } + + /** + * Make a show builder. + * + * @param mixed $id + * + * @return Show + */ + protected function detail($id) + { + return Show::make($id, new Keywords(), function (Show $show) { + $show->field('id'); + $show->field('key'); + $show->field('name'); + $show->field('value'); + $show->field('parent_id'); + }); + } + + /** + * Make a form builder. + * + * @return Form + */ + 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']))); + + $unique = Rule::unique((new Keywords())->getTable()); + if ($form->isEditing()) { + $unique->ignore($form->getKey()); + } + $form->text('key')->required()->rules([$unique]); + + $form->text('name')->required(); + $form->text('value'); + $form->hidden('type_key'); + $form->hidden('level')->default(1); + + $form->saving(function (Form $form) { + if ($form->parent_id) { + $parent = Keywords::findOrFail($form->parent_id); + $form->type_key = $parent->key; + $form->level = $parent->level + 1; + } else { + $form->parent_id = 0; + } + if ($form->isEditing()) { + Keywords::where('parent_id', $form->getKey())->update(['type_key' => $form->key]); + } + }); + }); + } +} diff --git a/packages/keywords/src/Http/Resources/KeywordResource.php b/packages/keywords/src/Http/Resources/KeywordResource.php new file mode 100644 index 0000000..7cebbab --- /dev/null +++ b/packages/keywords/src/Http/Resources/KeywordResource.php @@ -0,0 +1,24 @@ + $this->id, + 'name' => $this->name, + 'key' => $this->key, + 'type_key' => $this->type_key, + ]; + } +} diff --git a/packages/keywords/src/Http/routes.php b/packages/keywords/src/Http/routes.php new file mode 100644 index 0000000..a0f45b6 --- /dev/null +++ b/packages/keywords/src/Http/routes.php @@ -0,0 +1,22 @@ + config('admin.route.prefix'), + 'middleware' => config('admin.route.middleware'), +], function () { + Route::get('api/keywords', [KeywordsController::class, 'list'])->name('api.keywords'); + + Route::resource('keywords', KeywordsController::class)->names('keywords'); +}); + +Route::group([ + 'prefix' => 'api', + 'middleware' => 'api' +], function () { + Route::get('keywords', [KeywordsController::class, 'json']); +}); + diff --git a/packages/keywords/src/KeywordsFilter.php b/packages/keywords/src/KeywordsFilter.php new file mode 100644 index 0000000..441cc4e --- /dev/null +++ b/packages/keywords/src/KeywordsFilter.php @@ -0,0 +1,48 @@ + [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); + } + + public function typeKey($v) + { + $this->whereIn('type_key', explode(',', $v)); + } + + public function type($v) + { + $this->typeKey($v); + } + + public function level($v) + { + $this->where('level', $v); + } + + public function parent($v) + { + $this->where('parent_id', $v); + } +} diff --git a/packages/keywords/src/KeywordsServiceProvider.php b/packages/keywords/src/KeywordsServiceProvider.php new file mode 100644 index 0000000..799dd36 --- /dev/null +++ b/packages/keywords/src/KeywordsServiceProvider.php @@ -0,0 +1,22 @@ + 'Keywords', 'uri' => 'keywords', 'icon' => ''], + ]; + + public function init() + { + parent::init(); + } + + // public function settingForm() + // { + // return new Setting($this); + // } +} diff --git a/packages/keywords/src/Models/Keywords.php b/packages/keywords/src/Models/Keywords.php new file mode 100644 index 0000000..3795a60 --- /dev/null +++ b/packages/keywords/src/Models/Keywords.php @@ -0,0 +1,36 @@ +belongsTo(static::class, 'parent_id'); + } + + public function children() + { + return $this->hasMany(static::class, 'parent_id'); + } +} diff --git a/packages/keywords/src/Setting.php b/packages/keywords/src/Setting.php new file mode 100644 index 0000000..8f9ecb1 --- /dev/null +++ b/packages/keywords/src/Setting.php @@ -0,0 +1,14 @@ +text('key1')->required(); + $this->text('key2')->required(); + } +} diff --git a/packages/keywords/updates/CreateKeywordsTable.php b/packages/keywords/updates/CreateKeywordsTable.php new file mode 100644 index 0000000..8178ffe --- /dev/null +++ b/packages/keywords/updates/CreateKeywordsTable.php @@ -0,0 +1,39 @@ +id(); + $table->string('key')->unique(); + $table->string('name')->comment('名字'); + $table->string('value')->nullable(); + $table->string('type_key')->nullable(); + $table->unsignedInteger('sort')->default(0)->comment('排序'); + $table->unsignedBigInteger('parent_id')->default(0)->comment('上级ID'); + $table->unsignedInteger('level')->default(1)->comment('层级'); + }); + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('keywords'); + } +}; diff --git a/packages/keywords/version.php b/packages/keywords/version.php new file mode 100644 index 0000000..b50c47c --- /dev/null +++ b/packages/keywords/version.php @@ -0,0 +1,7 @@ + [ + 'CreateKeywordsTable.php' + ], +];