diff --git a/app/Admin/Controllers/ArticleCategoryController.php b/app/Admin/Controllers/ArticleCategoryController.php index 7747f6bc..d370b766 100644 --- a/app/Admin/Controllers/ArticleCategoryController.php +++ b/app/Admin/Controllers/ArticleCategoryController.php @@ -7,6 +7,7 @@ use App\Admin\Repositories\ArticleCategory; use App\Exceptions\BizException; use App\Models\Article; use App\Models\ArticleCategory as ArticleCategoryModel; +use Carbon\Carbon; use Dcat\Admin\Admin; use Dcat\Admin\Form; use Dcat\Admin\Grid; @@ -26,6 +27,7 @@ class ArticleCategoryController extends AdminController return Grid::make(new ArticleCategoryModel(), function (Grid $grid) { $grid->column('id')->sortable(); $grid->column('name')->tree(); + $grid->column('cover')->image(100, 100); $grid->column('is_show') ->if(function () { return Admin::user()->can('dcat.admin.article_categories.edit'); @@ -110,6 +112,11 @@ class ArticleCategoryController extends AdminController $form->display('id'); $form->select('parent_id')->options(ArticleCategoryModel::selectOptions()); $form->text('name')->required(); + $form->image('cover') + ->move('article-category/'.Carbon::now()->toDateString()) + ->saveFullUrl() + ->removable(false) + ->autoUpload()->retainable(); $form->switch('is_show'); $form->switch('is_recommend'); $form->number('sort')->min(0)->default(0); diff --git a/app/Endpoint/Api/Http/Controllers/ArticleController.php b/app/Endpoint/Api/Http/Controllers/ArticleController.php index 44edf8d0..15c72299 100644 --- a/app/Endpoint/Api/Http/Controllers/ArticleController.php +++ b/app/Endpoint/Api/Http/Controllers/ArticleController.php @@ -2,11 +2,13 @@ namespace App\Endpoint\Api\Http\Controllers; +use App\Endpoint\Api\Http\Resources\ArticleCategoryResource; use App\Endpoint\Api\Http\Resources\ArticleResource; use App\Endpoint\Api\Http\Resources\ArticleSimpleResource; use App\Exceptions\BizException; use App\Helpers\Paginator as PaginatorHelper; use App\Models\Article; +use App\Models\ArticleCategory; use App\Models\ArticleLikesLog; use App\Models\ArticlePointsLog; use App\Models\PointsLog; @@ -50,7 +52,49 @@ class ArticleController extends Controller ], $cate); $query = Article::query()->with(['likesInfo'=>function ($q) use ($request) { $user_id = $request->user()?->id; - return $q->where('user_id', $user_id??0); + return $q->where('user_id', $user_id ?? 0); + }])->where('is_show', 1); + if ($categoryId) { + $query->where('category_id', $categoryId); + } + if ($key) { + $query->where('title', 'like', '%'.$key.'%'); + } + + $query->orderBy('is_recommend', 'desc'); + $query->orderBy('sort', 'desc'); + $query->orderBy('created_at', 'desc'); + + $list = $query->simplePaginate(PaginatorHelper::resolvePerPage('per_page', 20, 50)); + return ArticleSimpleResource::collection($list); + } + + public function healthCategory(Request $request) + { + $key = (string) $request->query('key'); + $categoryId = app_settings('app.article_health'); + $query = ArticleCategory::query()->where('parent_id', $categoryId)->where('is_show', 1); + + if ($key) { + $query->where('name', 'like', '%'.$key.'%'); + } + + $query->orderBy('is_recommend', 'desc'); + $query->orderBy('sort', 'desc'); + $query->orderBy('created_at', 'desc'); + + $categories = $query->get(); + + return ArticleCategoryResource::collection($categories); + } + + public function articleList($id, Request $request) + { + $key = (string) $request->query('key'); + $categoryId = $id; + $query = Article::query()->with(['likesInfo'=>function ($q) use ($request) { + $user_id = $request->user()?->id; + return $q->where('user_id', $user_id ?? 0); }])->where('is_show', 1); if ($categoryId) { $query->where('category_id', $categoryId); diff --git a/app/Endpoint/Api/Http/Resources/ArticleCategoryResource.php b/app/Endpoint/Api/Http/Resources/ArticleCategoryResource.php new file mode 100644 index 00000000..f8e8b4bc --- /dev/null +++ b/app/Endpoint/Api/Http/Resources/ArticleCategoryResource.php @@ -0,0 +1,23 @@ + $this->id, + 'name' => $this->name, + 'cover' => $this->cover ?? '', + ]; + } +} diff --git a/app/Endpoint/Api/routes.php b/app/Endpoint/Api/routes.php index ebb68180..7990b2b6 100644 --- a/app/Endpoint/Api/routes.php +++ b/app/Endpoint/Api/routes.php @@ -75,6 +75,8 @@ Route::group([ Route::get('product/search-hot-keys', [ProductSkuController::class, 'searchHotKeys']); //文章列表 Route::get('articles', [ArticleController::class, 'index']); + Route::get('articles/health-category', [ArticleController::class, 'healthCategory']); + Route::get('articles/by-category/{category}', [ArticleController::class, 'articleList']); //指定文章配置 Route::get('article-config', [ArticleController::class, 'config']); diff --git a/database/migrations/2022_04_07_100309_add_cover_to_article_categories_table.php b/database/migrations/2022_04_07_100309_add_cover_to_article_categories_table.php new file mode 100644 index 00000000..7ce1afbe --- /dev/null +++ b/database/migrations/2022_04_07_100309_add_cover_to_article_categories_table.php @@ -0,0 +1,34 @@ +string('cover')->nullable()->comment('封面图'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('article_categories', function (Blueprint $table) { + // + $table->dropColumn(['cover']); + }); + } +} diff --git a/resources/lang/zh_CN/article-category.php b/resources/lang/zh_CN/article-category.php index c6243a57..bbde1ff0 100644 --- a/resources/lang/zh_CN/article-category.php +++ b/resources/lang/zh_CN/article-category.php @@ -7,6 +7,7 @@ return [ ], 'fields' => [ 'name' => '名称', + 'cover' => '封面图', 'parent_id' => '父级', 'is_show' => '显示', 'is_recommend' => '推荐',