generated from liutk/owl-admin-base
0.64
parent
a48aac714c
commit
2b4e16cfde
|
|
@ -8,7 +8,7 @@ use Slowlyo\OwlAdmin\Controllers\AdminController;
|
||||||
use App\Services\Admin\ProjectArticleService;
|
use App\Services\Admin\ProjectArticleService;
|
||||||
use App\Traits\CustomActionTrait;
|
use App\Traits\CustomActionTrait;
|
||||||
use App\Admin\Components;
|
use App\Admin\Components;
|
||||||
use App\Models\{ProjectArticle,Keyword};
|
use App\Models\{ProjectCate,ProjectArticle,Keyword};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 服务案例
|
* 服务案例
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,37 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
namespace App\Http\Controllers\Api;
|
||||||
|
|
||||||
|
use Illuminate\Http\Request;
|
||||||
|
use App\Http\Controllers\Controller;
|
||||||
|
use App\Http\Resources\{CaseStudyResource,KeywordResource};
|
||||||
|
use App\Traits\PaginatorTrait;
|
||||||
|
use App\Models\ProjectArticle;
|
||||||
|
use App\Models\Filters\ProjectArticleFilter;
|
||||||
|
use App\Models\Keyword;
|
||||||
|
|
||||||
|
class CaseStudyController extends Controller
|
||||||
|
{
|
||||||
|
use PaginatorTrait;
|
||||||
|
|
||||||
|
public function index(Request $request){
|
||||||
|
$query = ProjectArticle::filter($request->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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,26 @@
|
||||||
|
<?php
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use App\Models\Keyword;
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class CaseStudyResource 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 [
|
||||||
|
'id' => $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),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
<?php
|
||||||
|
namespace App\Http\Resources;
|
||||||
|
|
||||||
|
use Illuminate\Http\Resources\Json\JsonResource;
|
||||||
|
|
||||||
|
class KeywordResource 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 [
|
||||||
|
'id' => $this->id,
|
||||||
|
'name' => $this->name,
|
||||||
|
'key' => $this->key,
|
||||||
|
'value' => $this->value,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -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)
|
public static function tagsMap(String $key)
|
||||||
{
|
{
|
||||||
$mapArr = [];
|
$mapArr = [];
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,11 @@ class ProjectArticle extends Model
|
||||||
->orderBy('created_at', 'desc');
|
->orderBy('created_at', 'desc');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function scopeCaseStudies($q)
|
||||||
|
{
|
||||||
|
$q->where('type', self::TYPE_CASE_STUDY);
|
||||||
|
}
|
||||||
|
|
||||||
protected function tags():Attribute
|
protected function tags():Attribute
|
||||||
{
|
{
|
||||||
return Attribute::make(
|
return Attribute::make(
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ class KeywordSeeder extends Seeder
|
||||||
// ['key' => 'article_category', 'name' => '文章分类', 'list' => [
|
// ['key' => 'article_category', 'name' => '文章分类', 'list' => [
|
||||||
// 'examples'=>'案例', 'services' =>'服务', 'news'=> '资讯动态'
|
// 'examples'=>'案例', 'services' =>'服务', 'news'=> '资讯动态'
|
||||||
// ]],
|
// ]],
|
||||||
['key' => 'case_study_tag', 'name' => '服务分类标签', 'list' => [//标签value填写色号,指定标签颜色
|
['key' => 'case_study_tag', 'name' => '服务案例标签', 'list' => [//标签value填写色号,指定标签颜色
|
||||||
|
|
||||||
]],
|
]],
|
||||||
['key' => 'banner_address', 'name' => '广告位置', 'list' => [
|
['key' => 'banner_address', 'name' => '广告位置', 'list' => [
|
||||||
|
|
|
||||||
|
|
@ -33,4 +33,10 @@ Route::middleware('api')->group(function () {
|
||||||
Route::get('/project_children/{child}', [ProjectChildrenController::class, 'show']);
|
Route::get('/project_children/{child}', [ProjectChildrenController::class, 'show']);
|
||||||
//合作伙伴
|
//合作伙伴
|
||||||
Route::get('/friend_links', [FriendLinkController::class, 'index']);
|
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']);
|
||||||
|
//企业资讯
|
||||||
|
|
||||||
});
|
});
|
||||||
Loading…
Reference in New Issue