From 4b6153f971f2ac72dcae12bf42b20caf8d43758a Mon Sep 17 00:00:00 2001 From: vine_liutk <961510893@qq.com> Date: Sat, 9 Dec 2023 18:23:55 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A1=A5=E5=85=85=E6=93=8D=E4=BD=9C=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=97=B6=E8=81=94=E5=8A=A8=E5=8F=91=E5=B8=83=E6=97=B6?= =?UTF-8?q?=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/Admin/Controllers/ArticleController.php | 16 +++++-- app/Models/Article.php | 8 ++++ app/Services/Admin/ArticleService.php | 46 +++++++++++++++++++++ lang/zh_CN/admin.php | 4 +- 4 files changed, 70 insertions(+), 4 deletions(-) diff --git a/app/Admin/Controllers/ArticleController.php b/app/Admin/Controllers/ArticleController.php index a08290d..5f4c323 100644 --- a/app/Admin/Controllers/ArticleController.php +++ b/app/Admin/Controllers/ArticleController.php @@ -23,6 +23,14 @@ class ArticleController extends AdminController ...$this->baseHeaderToolBar(), ]) ->filter($this->baseFilter()->body()) + ->itemBadge([ + 'text' => __('admin.articles.is_recommend'), + 'mode' => 'ribbon', + 'position' => 'top-left', + 'badgeLevel' => 'danger', + 'visibleOn' => '${is_recommend > 0}', + 'size' => 15 + ]) ->columns([ amis()->TableColumn('id', __('admin.id')), amis()->TableColumn('title', __('admin.articles.title'))->width('300px'), @@ -31,8 +39,9 @@ class ArticleController extends AdminController ->itemSchema(amis()->Tag()->label('${item}')->color(Admin::setting()->get('system_theme_setting')['theme_color'] ?? '#1677ff')), amis()->TableColumn('tags', __('admin.articles.tags'))->type('mapping')->map(Keyword::tagsMap('article_tag')), amis()->TableColumn('cover', __('admin.articles.cover'))->type('image')->height('50px')->width('50px')->enlargeAble(true), - amis()->TableColumn('published_at', __('admin.articles.published_at')), + amis()->TableColumn('published_at', __('admin.articles.published_at'))->remark('若无发布时间操作显示,则会自动生成当前发布时间'), amis()->TableColumn('is_enable', __('admin.articles.is_enable'))->type('switch'), + amis()->TableColumn('is_recommend', __('admin.articles.is_recommend'))->type('switch'), amis()->TableColumn('created_at', __('admin.created_at')), amis()->Operation()->label(__('admin.actions'))->buttons([ $this->rowEditButton(), @@ -53,8 +62,9 @@ class ArticleController extends AdminController Components::make()->keywordsTagControl('t_ids', __('admin.articles.tags'), 'article_tag'), Components::make()->cropImageControl('cover', __('admin.articles.cover')), Components::make()->sortControl('sort', __('admin.articles.sort')), - amis()->DateTimeControl('published_at', __('admin.articles.published_at'))->value(now())->format('YYYY-MM-DD HH:mm:ss')->description('*不填写则默认为创建时间'), - amis()->SwitchControl('is_enable', __('admin.articles.is_enable'))->value(true), + amis()->DateTimeControl('published_at', __('admin.articles.published_at'))->format('YYYY-MM-DD HH:mm:ss')->description('*若创建时设置显示且未填写,则默认为创建时间'), + amis()->SwitchControl('is_enable', __('admin.articles.is_enable'))->value(false), + amis()->SwitchControl('is_recommend', __('admin.articles.is_recommend'))->value(false), ])->md(4), amis()->Wrapper()->body([ Components::make()->fuEditorControl('content', __('admin.articles.content')), diff --git a/app/Models/Article.php b/app/Models/Article.php index 6480822..a2eac23 100644 --- a/app/Models/Article.php +++ b/app/Models/Article.php @@ -42,6 +42,14 @@ class Article extends Model 'appendixes', ]; + public function scopeSort($q) + { + $q->orderBy('is_recommend', 'desc') + ->orderBy('sort', 'asc') + ->orderBy('published_at', 'desc') + ->orderBy('created_at', 'desc'); + } + protected function tags():Attribute { return Attribute::make( diff --git a/app/Services/Admin/ArticleService.php b/app/Services/Admin/ArticleService.php index 2984a1d..9d161a9 100644 --- a/app/Services/Admin/ArticleService.php +++ b/app/Services/Admin/ArticleService.php @@ -4,6 +4,7 @@ namespace App\Services\Admin; use App\Models\Article; use App\Models\Filters\ArticleFilter; +use Illuminate\Support\Arr; /** * @method Article getModel() @@ -14,4 +15,49 @@ class ArticleService extends BaseService protected string $modelName = Article::class; protected string $modelFilterName = ArticleFilter::class; + + public function store($data): bool + { + $columns = $this->getTableColumns(); + $model = $this->getModel(); + + $isEnable = Arr::get($data, 'is_enabled'); + $publishedAt = Arr::get($data, 'published_at'); + if ($isEnable && empty($publishedAt)) { + $data['published_at'] = now(); + } + + foreach ($data as $k => $v) { + if (!in_array($k, $columns)) { + continue; + } + + $model->setAttribute($k, $v); + } + + return $model->save(); + } + + public function update($primaryKey, $data): bool + { + $columns = $this->getTableColumns(); + $model = $this->query()->whereKey($primaryKey)->first(); + + $isEnable = Arr::get($data, 'is_enable'); + $publishedAt = Arr::get($data, 'published_at'); + + if ($isEnable && empty($publishedAt) && empty($model->published_at)) { + $data['published_at'] = now(); + } + + foreach ($data as $k => $v) { + if (!in_array($k, $columns)) { + continue; + } + + $model->setAttribute($k, $v); + } + + return $model->save(); + } } \ No newline at end of file diff --git a/lang/zh_CN/admin.php b/lang/zh_CN/admin.php index f0c4835..379d5b7 100644 --- a/lang/zh_CN/admin.php +++ b/lang/zh_CN/admin.php @@ -280,8 +280,10 @@ return [ 'category' => '分类', 'tags' => '标签', 't_ids' => '标签', - 'published_at' => '发布时间', + 'published_at' => '定时发布', + 'published_at_g' => '发布时间', 'is_enable' => '显示', + 'is_recommend' => '推荐', 'sort' => '排序', 'appendixes' => '附件' ]