feat: 新增点踩功能,列表卡片和详情页支持 👍/👎 投票

- 后端: 新增 dislike_count 字段(模型/Schema/数据库迁移)
- 后端: 新增 POST /api/jokes/{id}/dislike 端点
- 后端: 管理后台统计新增 total_dislikes
- 前端: 新增 useVote 组合函数(localStorage 持久化防重复)
- 前端: JokeCard 列表卡片新增 👍/👎 可点击投票按钮
- 前端: 详情页 ❤️ 改为 👍 赞一下 / 👎 踩一脚 双按钮
This commit is contained in:
bwstudio
2026-06-11 19:17:12 +08:00
parent b5194c4965
commit fde86b90d2
9 changed files with 191 additions and 45 deletions
+3
View File
@@ -87,6 +87,7 @@ def joke_to_response(joke: Joke, db: Session = None) -> JokeResponse:
status=joke.status,
view_count=joke.view_count,
like_count=joke.like_count,
dislike_count=joke.dislike_count,
created_at=joke.created_at,
updated_at=joke.updated_at,
type_names=type_names,
@@ -224,6 +225,7 @@ def admin_stats(
rejected_jokes = db.query(Joke).filter(Joke.status == "rejected").count()
total_views = db.query(Joke).with_entities(func.sum(Joke.view_count)).scalar() or 0
total_likes = db.query(Joke).with_entities(func.sum(Joke.like_count)).scalar() or 0
total_dislikes = db.query(Joke).with_entities(func.sum(Joke.dislike_count)).scalar() or 0
return {
"total_jokes": total_jokes,
"approved_jokes": approved_jokes,
@@ -231,6 +233,7 @@ def admin_stats(
"rejected_jokes": rejected_jokes,
"total_views": total_views,
"total_likes": total_likes,
"total_dislikes": total_dislikes,
}