From 2b4e16cfdede00c504283f31d3caa849d59e4c6d Mon Sep 17 00:00:00 2001 From: liutk <961510893@qq.com> Date: Sun, 22 Feb 2026 21:11:18 +0800 Subject: [PATCH] 0.64 --- app/Admin/Controllers/CaseStudyController.php | 2 +- .../Controllers/Api/CaseStudyController.php | 37 +++++++++++++++++++ app/Http/Resources/CaseStudyResource.php | 26 +++++++++++++ app/Http/Resources/KeywordResource.php | 23 ++++++++++++ app/Models/Keyword.php | 6 +++ app/Models/ProjectArticle.php | 5 +++ database/seeders/KeywordSeeder.php | 2 +- routes/api.php | 6 +++ 8 files changed, 105 insertions(+), 2 deletions(-) create mode 100644 app/Http/Controllers/Api/CaseStudyController.php create mode 100644 app/Http/Resources/CaseStudyResource.php create mode 100644 app/Http/Resources/KeywordResource.php diff --git a/app/Admin/Controllers/CaseStudyController.php b/app/Admin/Controllers/CaseStudyController.php index 1b58f60..ca67278 100644 --- a/app/Admin/Controllers/CaseStudyController.php +++ b/app/Admin/Controllers/CaseStudyController.php @@ -8,7 +8,7 @@ use Slowlyo\OwlAdmin\Controllers\AdminController; use App\Services\Admin\ProjectArticleService; use App\Traits\CustomActionTrait; use App\Admin\Components; -use App\Models\{ProjectArticle,Keyword}; +use App\Models\{ProjectCate,ProjectArticle,Keyword}; /** * 服务案例 diff --git a/app/Http/Controllers/Api/CaseStudyController.php b/app/Http/Controllers/Api/CaseStudyController.php new file mode 100644 index 0000000..aea1c93 --- /dev/null +++ b/app/Http/Controllers/Api/CaseStudyController.php @@ -0,0 +1,37 @@ +all(), ProjectArticleFilter::class)->sort(); + $list = $query->caseStudies()->show()->sort()->paginate($this->resolvePerPage('per_page', 20)); + + return $this->json(CaseStudyResource::collection($list)); + } + + public function show(ProjectArticle $caseStudy){ + request()->merge(['include_content' => true]); + return $this->json(CaseStudyResource::make($caseStudy)); + } + + /** + * 标签列表 + */ + public function tags(Request $request){ + $query = Keyword::allChildrenOfKey('case_study_tag'); + $list = $query->sort()->get(); + return $this->json(KeywordResource::collection($list)); + } +} \ No newline at end of file diff --git a/app/Http/Resources/CaseStudyResource.php b/app/Http/Resources/CaseStudyResource.php new file mode 100644 index 0000000..762dcd5 --- /dev/null +++ b/app/Http/Resources/CaseStudyResource.php @@ -0,0 +1,26 @@ + $this->id, + 'title' => $this->title, + 'cover' => $this->cover, + 'description' => $this->description, + 'tags' => KeywordResource::collection(Keyword::whereIn('id', $this->tags)->get()), + 'content' => $this->when($request->boolean('include_content'), $this->content), + ]; + } +} diff --git a/app/Http/Resources/KeywordResource.php b/app/Http/Resources/KeywordResource.php new file mode 100644 index 0000000..f0a13e6 --- /dev/null +++ b/app/Http/Resources/KeywordResource.php @@ -0,0 +1,23 @@ + $this->id, + 'name' => $this->name, + 'key' => $this->key, + 'value' => $this->value, + ]; + } +} diff --git a/app/Models/Keyword.php b/app/Models/Keyword.php index d065b36..36d1252 100644 --- a/app/Models/Keyword.php +++ b/app/Models/Keyword.php @@ -65,6 +65,12 @@ class Keyword extends Model . '-%' ?? ''); } + public function scopeSort($q) + { + $q->orderBy('sort', 'asc') + ->orderBy('created_at', 'desc'); + } + public static function tagsMap(String $key) { $mapArr = []; diff --git a/app/Models/ProjectArticle.php b/app/Models/ProjectArticle.php index f047079..bebe1d6 100644 --- a/app/Models/ProjectArticle.php +++ b/app/Models/ProjectArticle.php @@ -73,6 +73,11 @@ class ProjectArticle extends Model ->orderBy('created_at', 'desc'); } + public function scopeCaseStudies($q) + { + $q->where('type', self::TYPE_CASE_STUDY); + } + protected function tags():Attribute { return Attribute::make( diff --git a/database/seeders/KeywordSeeder.php b/database/seeders/KeywordSeeder.php index 3863834..08dcd33 100644 --- a/database/seeders/KeywordSeeder.php +++ b/database/seeders/KeywordSeeder.php @@ -20,7 +20,7 @@ class KeywordSeeder extends Seeder // ['key' => 'article_category', 'name' => '文章分类', 'list' => [ // 'examples'=>'案例', 'services' =>'服务', 'news'=> '资讯动态' // ]], - ['key' => 'case_study_tag', 'name' => '服务分类标签', 'list' => [//标签value填写色号,指定标签颜色 + ['key' => 'case_study_tag', 'name' => '服务案例标签', 'list' => [//标签value填写色号,指定标签颜色 ]], ['key' => 'banner_address', 'name' => '广告位置', 'list' => [ diff --git a/routes/api.php b/routes/api.php index 9723b39..41edcbc 100644 --- a/routes/api.php +++ b/routes/api.php @@ -33,4 +33,10 @@ Route::middleware('api')->group(function () { Route::get('/project_children/{child}', [ProjectChildrenController::class, 'show']); //合作伙伴 Route::get('/friend_links', [FriendLinkController::class, 'index']); + //服务案例 + Route::get('/case_study_tags', [CaseStudyController::class, 'tags']); + Route::get('/case_studies', [CaseStudyController::class, 'index']); + Route::get('/case_studies/{case_study}', [CaseStudyController::class, 'show']); + //企业资讯 + }); \ No newline at end of file