6
0
Fork 0

调整文章接口

release
vine_liutk 2022-04-07 10:49:11 +08:00
parent 26740087e1
commit ca66b1d599
6 changed files with 112 additions and 1 deletions

View File

@ -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);

View File

@ -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);

View File

@ -0,0 +1,23 @@
<?php
namespace App\Endpoint\Api\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class ArticleCategoryResource 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,
'cover' => $this->cover ?? '',
];
}
}

View File

@ -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']);

View File

@ -0,0 +1,34 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddCoverToArticleCategoriesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('article_categories', function (Blueprint $table) {
//
$table->string('cover')->nullable()->comment('封面图');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('article_categories', function (Blueprint $table) {
//
$table->dropColumn(['cover']);
});
}
}

View File

@ -7,6 +7,7 @@ return [
],
'fields' => [
'name' => '名称',
'cover' => '封面图',
'parent_id' => '父级',
'is_show' => '显示',
'is_recommend' => '推荐',