feat(feed): 列表展示翻译正文摘要 + 页码分页
首页 Feed.vue 改造: - 卡片在中文标题下直接展示 body_zh_text(前 220 字) 用户不进详情就能看到译文正文,提升阅读效率 - 配图(image_ai_url 或 image_url)也直接显示在卡片中 - 把原标题作为副标题(灰色,辅助参考) 分页从 cursor 无限滚动换成 page + page_size: - 后端 /articles 加 page/page_size 参数,返回 total/total_pages - 干掉 _encode_cursor/_decode_cursor - 前端用 n-pagination,显示 1,2,3,4,5 + 快速跳转 - 筛选/搜索变化自动回到第 1 页 - 切页自动滚到顶部
This commit is contained in:
@@ -16,7 +16,7 @@ class SourceBrief(BaseModel):
|
||||
|
||||
|
||||
class ArticleListItem(BaseModel):
|
||||
"""列表项:精简字段(首页只露钩子,详细阅读进详情页)。"""
|
||||
"""列表项:首页展示标题/译标/正文摘要/分类/插图,详细阅读进详情页。"""
|
||||
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
@@ -24,6 +24,8 @@ class ArticleListItem(BaseModel):
|
||||
source: SourceBrief
|
||||
title: str
|
||||
title_zh: str | None = None
|
||||
# 翻译后的正文(纯文本);列表里截断显示,详情页展示完整
|
||||
body_zh_text: str | None = None
|
||||
summary_zh: str | None = None
|
||||
lang_src: str | None = None
|
||||
translation_status: str
|
||||
@@ -76,8 +78,11 @@ class ArticleDetail(BaseModel):
|
||||
|
||||
class ArticleListResponse(BaseModel):
|
||||
items: list[ArticleListItem]
|
||||
next_cursor: str | None = None
|
||||
total: int | None = None
|
||||
# 页码分页
|
||||
page: int = 1
|
||||
page_size: int = 50
|
||||
total: int
|
||||
total_pages: int
|
||||
|
||||
|
||||
class ArticleQuery(BaseModel):
|
||||
@@ -89,6 +94,6 @@ class ArticleQuery(BaseModel):
|
||||
category: str | None = None
|
||||
q: str | None = None
|
||||
lang: str = Field(default="both", pattern=r"^(src|zh|both)$")
|
||||
limit: int = Field(default=50, ge=1, le=200)
|
||||
cursor: str | None = None
|
||||
page: int = Field(default=1, ge=1)
|
||||
page_size: int = Field(default=50, ge=1, le=200)
|
||||
starred_only: bool = False
|
||||
|
||||
Reference in New Issue
Block a user