From e11eb663d8cd831b2e72825b3969f2be35613d31 Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Sat, 9 Dec 2023 11:36:55 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=87=E7=AB=A0=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=A8=A1=E6=9D=BF=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/ArticleController.php | 47 ++++++++++++++++ app/Admin/Controllers/KeywordController.php | 9 +++- app/Admin/routes.php | 2 + app/Models/Article.php | 31 +++++++++++ app/Models/Filters/ArticleFilter.php | 16 ++++++ app/Models/Filters/KeywordFilter.php | 12 ++++- app/Services/Admin/ArticleService.php | 17 ++++++ ...023_12_08_161719_create_articles_table.php | 42 +++++++++++++++ database/seeders/DatabaseSeeder.php | 1 + database/seeders/KeywordSeeder.php | 54 +++++++++++++++++++ lang/zh_CN/admin.php | 17 +++++- 11 files changed, 244 insertions(+), 4 deletions(-) create mode 100644 app/Admin/Controllers/ArticleController.php create mode 100644 app/Models/Article.php create mode 100644 app/Models/Filters/ArticleFilter.php create mode 100644 app/Services/Admin/ArticleService.php create mode 100644 database/migrations/2023_12_08_161719_create_articles_table.php create mode 100644 database/seeders/KeywordSeeder.php diff --git a/app/Admin/Controllers/ArticleController.php b/app/Admin/Controllers/ArticleController.php new file mode 100644 index 0000000..26b4a2b --- /dev/null +++ b/app/Admin/Controllers/ArticleController.php @@ -0,0 +1,47 @@ +baseCRUD() + ->headerToolbar([ + $this->createButton(true), + ...$this->baseHeaderToolBar(), + ]) + ->filter($this->baseFilter()->body()) + ->columns([ + amis()->TableColumn('id', __('admin.id')), + amis()->TableColumn('title', __('admin.articles.title')), + amis()->TableColumn('category', __('admin.articles.category')), + amis()->TableColumn('t_ids', __('admin.articles.tags')), + amis()->TableColumn('cover', __('admin.articles.cover')), + amis()->TableColumn('published_at', __('admin.articles.published_at')), + amis()->TableColumn('is_enable', __('admin.articles.is_enable')), + amis()->TableColumn('created_at', __('admin.created_at')), + ]); + return $this->baseList($crud); + } + + public function form(): Form + { + return $this->baseForm()->body([ + + ]); + } + + public function detail(): Form + { + return $this->baseDetail()->body([]); + } + +} \ No newline at end of file diff --git a/app/Admin/Controllers/KeywordController.php b/app/Admin/Controllers/KeywordController.php index 8b742b9..813ffb8 100644 --- a/app/Admin/Controllers/KeywordController.php +++ b/app/Admin/Controllers/KeywordController.php @@ -27,16 +27,21 @@ class KeywordController extends AdminController amis('reload')->align('right'), amis('filter-toggler')->align('right'), ]) - ->filter($this->baseFilter()->body( + ->filter($this->baseFilter()->body([ amis()->TextControl('name', __('admin.keyword')) + ->size('md') + ->placeholder(__('admin.keywords.search_name')), + amis()->TextControl('parent_name', __('admin.keywords.parent_keyword')) ->size('md') ->placeholder(__('admin.keywords.search_name')) + ] )) ->columns([ // TableColumn::make()->name('id')->label('ID')->sortable(true), TableColumn::make()->name('name')->label('名称'), - TableColumn::make()->name('key')->label('KEY'), + TableColumn::make()->name('key')->label('KEY')->copyable(true), TableColumn::make()->name('value')->label('值'), + TableColumn::make()->name('sort')->label('排序'), TableColumn::make()->name('created_at')->label('创建时间')->type('datetime')->sortable(true), amisMake()->Operation()->label(__('admin.actions'))->buttons([ $this->rowEditButton(true), diff --git a/app/Admin/routes.php b/app/Admin/routes.php index 29b1957..791d9c7 100644 --- a/app/Admin/routes.php +++ b/app/Admin/routes.php @@ -27,4 +27,6 @@ Route::group([ $router->resource('system/settings', \App\Admin\Controllers\SettingController::class); $router->resource('system/keywords', \App\Admin\Controllers\KeywordController::class); + + $router->resource('articles', \App\Admin\Controllers\ArticleController::class); }); diff --git a/app/Models/Article.php b/app/Models/Article.php new file mode 100644 index 0000000..e2d1ef8 --- /dev/null +++ b/app/Models/Article.php @@ -0,0 +1,31 @@ +format('Y-m-d H:i:s'); + } + + protected $fillable = [ + 'title', + 'content', + 'cover', + 'category', + 't_ids', + 'published_at', + 'is_enable', + 'is_recommend', + 'sort', + 'appendixes', + ]; +} diff --git a/app/Models/Filters/ArticleFilter.php b/app/Models/Filters/ArticleFilter.php new file mode 100644 index 0000000..7b548cb --- /dev/null +++ b/app/Models/Filters/ArticleFilter.php @@ -0,0 +1,16 @@ +where('title','like', '%'.$title.'%'); + } +} diff --git a/app/Models/Filters/KeywordFilter.php b/app/Models/Filters/KeywordFilter.php index c773455..498aaf9 100644 --- a/app/Models/Filters/KeywordFilter.php +++ b/app/Models/Filters/KeywordFilter.php @@ -3,15 +3,25 @@ namespace App\Models\Filters; use EloquentFilter\ModelFilter; +use App\Models\Keyword; class KeywordFilter extends ModelFilter { /** - * 所属种植计划 + * 关键字 */ public function name($name) { return $this->where('name','like', '%'.$name.'%') ->orWhere('key','like', '%'.$name.'%'); } + + public function parentName($parent_name) + { + return $this->where(function($q) use ($parent_name){ + $q->where('name','like', '%'.$parent_name.'%') + ->orWhere('key','like', '%'.$parent_name.'%'); + })->orWhere('parent_key', Keyword::where('name','like', '%'.$parent_name.'%') + ->orWhere('key','like', '%'.$parent_name.'%')->value('key') ?? ''); + } } diff --git a/app/Services/Admin/ArticleService.php b/app/Services/Admin/ArticleService.php new file mode 100644 index 0000000..2984a1d --- /dev/null +++ b/app/Services/Admin/ArticleService.php @@ -0,0 +1,17 @@ +id(); + $table->string('title')->comment('标题'); + $table->text('content')->nullable()->comment('内容'); + $table->string('cover')->nullable()->comment('封面'); + + $table->string('category')->nullable()->comment('分类'); + $table->string('t_ids')->nullable()->comment('标签'); + + $table->timestamp('published_at')->nullable()->comment('发布时间'); + $table->unsignedTinyInteger('is_enable')->default(1)->comment('显示开关'); + + $table->unsignedTinyInteger('is_recommend')->default(0)->comment('推荐开关'); + $table->unsignedInteger('sort')->default(0)->comment('排序'); + + $table->text('appendixes')->nullable()->comment('附件'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('articles'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 2ab3115..6a0e5a8 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -13,5 +13,6 @@ class DatabaseSeeder extends Seeder public function run(): void { $this->call(AdminMenuSeeder::class); + $this->call(KeywordSeeder::class); } } diff --git a/database/seeders/KeywordSeeder.php b/database/seeders/KeywordSeeder.php new file mode 100644 index 0000000..57cdc04 --- /dev/null +++ b/database/seeders/KeywordSeeder.php @@ -0,0 +1,54 @@ + 'article_category', 'name' => '文章分类', 'list' => [ + + ]], + ['key' => 'article_tag', 'name' => '文章标签', 'list' => [ + + ]], + ['key' => 'banner_address', 'name' => '广告位置', 'list' => [ + + ]], + ]; + + foreach ($list as $item) { + $type = Keyword::create(Arr::except($item, 'list')); + + if (isset($item['list'])) { + $keywords = []; + foreach ($item['list'] as $index => $name) { + $template = [ + 'key' => $type->key . ($index + 1), + 'parent_key' => $type->key, + 'lv' => $type->lv + 1, + 'sort' => $index + 1 + ]; + if (is_array($name)) { + $template = array_merge($template, $name); + } else { + $template['name'] = $name; + } + array_push($keywords, $template); + } + $type->children()->createMany($keywords); + } + } + } +} diff --git a/lang/zh_CN/admin.php b/lang/zh_CN/admin.php index 247e34f..f0c4835 100644 --- a/lang/zh_CN/admin.php +++ b/lang/zh_CN/admin.php @@ -60,6 +60,7 @@ return [ 'cancel' => '取消', 'please_login' => '请先登录', 'unauthorized' => '无权访问', + 'id' => '主键', 'components' => [ 'content' => '内容', @@ -268,6 +269,20 @@ return [ 'please_install_laravel_excel' => '请先安装 laravel-excel 扩展', ], 'keywords' => [ - 'search_name' => '名称/KEY' + 'search_name' => '名称/KEY', + 'parent_keyword' => '父级关键字', + ], + 'articles' => [ + 'id' => '主键', + 'title' => '标题', + 'content' => '内容', + 'cover' =>'封面', + 'category' => '分类', + 'tags' => '标签', + 't_ids' => '标签', + 'published_at' => '发布时间', + 'is_enable' => '显示', + 'sort' => '排序', + 'appendixes' => '附件' ] ];