1
0
Fork 0
master
panliang 2023-12-08 16:55:30 +08:00
parent feaad6fd2f
commit 15463a5b90
8 changed files with 81 additions and 9 deletions

View File

@ -50,7 +50,7 @@ class ArticleController extends AdminController
return $this->baseForm()->title('')->body([ return $this->baseForm()->title('')->body([
amisMake()->TextControl()->name('title')->label(__('article.title'))->required(true), amisMake()->TextControl()->name('title')->label(__('article.title'))->required(true),
amisMake()->SelectControl()->name('category_id')->label(__('article.category_id'))->options($this->getCategoryOptions())->required(), amisMake()->SelectControl()->name('category_id')->label(__('article.category_id'))->options($this->getCategoryOptions())->required(),
amisMake()->SelectControl()->name('party_cate_id')->label(__('article.party_cate_id'))->options($this->getPartyCateOptions()), amisMake()->SelectControl()->name('party_cate_id')->label(__('article.party_cate_id'))->options($this->getPartyCateOptions())->searchable(),
amisMake()->ImageControl()->name('cover')->label(__('article.cover'))->autoUpload(true), amisMake()->ImageControl()->name('cover')->label(__('article.cover'))->autoUpload(true),
Components::make()->sortControl('sort', __('article.sort')), Components::make()->sortControl('sort', __('article.sort')),
amisMake()->DateTimeControl()->name('published_at')->label(__('article.published_at'))->value(now())->format('YYYY-MM-DD HH:mm:ss')->description('*不填写则默认为创建时间'), amisMake()->DateTimeControl()->name('published_at')->label(__('article.published_at'))->value(now())->format('YYYY-MM-DD HH:mm:ss')->description('*不填写则默认为创建时间'),

View File

@ -32,6 +32,7 @@ class PartyUserController extends AdminController
])) ]))
->columns([ ->columns([
amisMake()->TableColumn()->name('id')->label(__('party_user.id')), amisMake()->TableColumn()->name('id')->label(__('party_user.id')),
amisMake()->TableColumn()->name('username')->label(__('party_user.username')),
amisMake()->TableColumn()->name('name')->label(__('party_user.name')), amisMake()->TableColumn()->name('name')->label(__('party_user.name')),
amisMake()->TableColumn()->type('avatar')->src('${avatar}')->name('avatar')->label(__('party_user.avatar')), amisMake()->TableColumn()->type('avatar')->src('${avatar}')->name('avatar')->label(__('party_user.avatar')),
amisMake()->TableColumn()->name('cate.name')->label(__('party_user.cate_id')), amisMake()->TableColumn()->name('cate.name')->label(__('party_user.cate_id')),

View File

@ -14,12 +14,12 @@ class ArticleController extends Controller
{ {
$category = Keyword::where('key', 'category_1')->first(); $category = Keyword::where('key', 'category_1')->first();
if (!$category) { if (!$category) {
return $this->response()->error('文章不存在'); return $this->response()->fail('文章不存在');
} }
$article = Article::where('category_id', $category->id)->publish()->sort()->first(); $article = Article::where('category_id', $category->id)->publish()->sort()->first();
if (!$article) { if (!$article) {
return $this->response()->success([]); return $this->response()->success('');
} }
return $this->response()->success(ArticleResource::make($article)); return $this->response()->success(ArticleResource::make($article));
@ -31,12 +31,12 @@ class ArticleController extends Controller
$user = auth('api')->user(); $user = auth('api')->user();
$category = Keyword::where('key', 'category_2')->first(); $category = Keyword::where('key', 'category_2')->first();
if (!$category) { if (!$category) {
return $this->response()->error('文章不存在'); return $this->response()->fail('文章不存在');
} }
$article = Article::where('category_id', $category->id)->where('party_cate_id', $user->cate_id)->publish()->sort()->first(); $article = Article::with(['partyCate'])->where('category_id', $category->id)->where('party_cate_id', $user->cate_id)->publish()->sort()->first();
if (!$article) { if (!$article) {
return $this->response()->success([]); return $this->response()->success('');
} }
return $this->response()->success(ArticleResource::make($article)); return $this->response()->success(ArticleResource::make($article));

View File

@ -17,8 +17,8 @@ class AuthController extends Controller
]); ]);
$user = PartyUser::where('username', $request->input('username'))->first(); $user = PartyUser::where('username', $request->input('username'))->first();
if (!Hash::check($request->input('password'), $user->password)) { if (!$user || !Hash::check($request->input('password'), $user->password)) {
throw new BaseException('用户名或密码错误'); return $this->response()->fail('用户名或密码错误');
} }
// 更新第三方账户 // 更新第三方账户
// $openid = $request->input('openid'); // $openid = $request->input('openid');

View File

@ -39,6 +39,38 @@ class RankController extends Controller
return $this->response()->success($rankList); return $this->response()->success($rankList);
} }
// 当前用户本季度排名
public function current(Request $request)
{
$request->validate([
// user: 党员, cate: 党支部
'type' => ['required', Rule::in(['user', 'cate'])]
]);
$type = $request->input('type', 'user');
$query = match($type) {
'user' => PartyUser::query(),
'cate' => PartyCate::query(),
};
$query->orderBy('current_score', 'desc');
if ($request->filled('limit')) {
$query->limit($request->input('limit'));
}
$list = $query->get();
$user = auth('api')->user();
$rank = ['score' => '-', 'rank' => '-'];
foreach ($list as $index => $item) {
if ($item->id == match($type) {
'user' => $user->id,
'cate' => $user->cate_id
}) {
$rank['score'] = $item->score;
$rank['rank'] = $index + 1;
}
}
return $this->response()->success($rank);
}
// 获取已有的期数 // 获取已有的期数
public function dates(Request $request) public function dates(Request $request)
{ {
@ -56,7 +88,7 @@ class RankController extends Controller
return $this->response()->success($list); return $this->response()->success($list);
} }
// 党员其他季度的排名记录 // 其他季度的排名记录
public function list(Request $request) public function list(Request $request)
{ {
$request->validate([ $request->validate([
@ -86,4 +118,33 @@ class RankController extends Controller
return $this->response()->success($rankList); return $this->response()->success($rankList);
} }
public function currentList(Request $request)
{
$request->validate([
// 期数
'sn' => 'required',
// user: 党员, cate: 党支部
'type' => ['required', Rule::in(['user', 'cate'])]
]);
$type = $request->input('type', 'user');
$query = match($type) {
'user' => UserRank::query(),
'cate' => CateRank::query(),
};
$list = $query->where('sn', $request->input('sn'))->orderBy('score', 'desc')->get();
$user = auth('api')->user();
$rank = ['score' => '-', 'rank' => '-'];
foreach ($list as $index => $item) {
if (match($type) {
'user' => $item->user_id == $user->id,
'cate' => $item->cate_id == $user->cate_id,
}) {
$rank['score'] = $item->score;
$rank['rank'] = $index + 1;
}
}
return $this->response()->success($rank);
}
} }

View File

@ -18,6 +18,7 @@ class ArticleResource extends JsonResource
'id' => $this->id, 'id' => $this->id,
'title' => $this->title, 'title' => $this->title,
'content' => $this->content, 'content' => $this->content,
'party_cate' => $this->whenLoaded('partyCate')
]; ];
} }
} }

View File

@ -41,6 +41,11 @@ class Article extends Model
return $this->belongsTo(Keyword::class, 'category_id'); return $this->belongsTo(Keyword::class, 'category_id');
} }
public function partyCate()
{
return $this->belongsTo(PartyCate::class, 'party_cate_id');
}
public function scopeSort($q) public function scopeSort($q)
{ {
$q->orderBy('sort', 'asc')->latest('published_at')->latest('id'); $q->orderBy('sort', 'asc')->latest('published_at')->latest('id');

View File

@ -17,6 +17,7 @@ use Illuminate\Support\Facades\Route;
Route::post('web/upload', [\App\Http\Controllers\WebController::class, 'upload']); Route::post('web/upload', [\App\Http\Controllers\WebController::class, 'upload']);
Route::get('keyword', [\App\Http\Controllers\Api\KeywordController::class, 'index']); Route::get('keyword', [\App\Http\Controllers\Api\KeywordController::class, 'index']);
Route::get('banner', [\App\Http\Controllers\Api\BannerController::class, 'index']);
Route::post('login', [\App\Http\Controllers\Api\AuthController::class, 'login']); Route::post('login', [\App\Http\Controllers\Api\AuthController::class, 'login']);
@ -34,4 +35,7 @@ Route::group(['middleware' => 'auth:api'], function () {
Route::post('user/profile', [\App\Http\Controllers\Api\AccountController::class, 'update']); Route::post('user/profile', [\App\Http\Controllers\Api\AccountController::class, 'update']);
Route::get('article/cate', [\App\Http\Controllers\Api\ArticleController::class, 'cate']); Route::get('article/cate', [\App\Http\Controllers\Api\ArticleController::class, 'cate']);
Route::get('rank/current', [\App\Http\Controllers\Api\RankController::class, 'current']);
Route::get('rank/current-list', [\App\Http\Controllers\Api\RankController::class, 'currentList']);
}); });