feat: 优化页面信息展示
This commit is contained in:
@@ -34,6 +34,10 @@ STAGE_LABELS = {
|
||||
"success": "已完成",
|
||||
"failed": "失败",
|
||||
}
|
||||
PLATFORM_LABELS = {
|
||||
"xiaohongshu": "小红书",
|
||||
"douyin": "抖音",
|
||||
}
|
||||
|
||||
|
||||
def has_running_task(session: Session) -> bool:
|
||||
@@ -150,6 +154,15 @@ def get_task(session: Session, task_id: str) -> Task | None:
|
||||
|
||||
|
||||
def hydrate_task_progress(session: Session, task: Task) -> Task:
|
||||
display_number = calculate_task_display_number(session, task)
|
||||
task.display_number = display_number
|
||||
task.display_id = f"#{display_number}"
|
||||
task.created_at_label = format_datetime_minute(task.created_at)
|
||||
task.scale_label = (
|
||||
f"{PLATFORM_LABELS.get(task.platform, task.platform)} · "
|
||||
f"{task.hotspot_limit}热点 × {task.item_limit_per_hotspot}内容 × {task.comment_limit_per_item}评论"
|
||||
)
|
||||
task.error_summary = build_task_error_summary(task)
|
||||
task.hotspots_count = session.scalar(select(func.count(Hotspot.id)).where(Hotspot.task_id == task.id)) or 0
|
||||
task.comments_count = session.scalar(select(func.count(Comment.id)).where(Comment.task_id == task.id)) or 0
|
||||
task.reports_count = session.scalar(select(func.count(Report.id)).where(Report.task_id == task.id)) or 0
|
||||
@@ -182,6 +195,29 @@ def hydrate_task_progress(session: Session, task: Task) -> Task:
|
||||
return task
|
||||
|
||||
|
||||
def calculate_task_display_number(session: Session, task: Task) -> int:
|
||||
task_ids = list(session.scalars(select(Task.id).order_by(Task.created_at, Task.id)))
|
||||
try:
|
||||
return task_ids.index(task.id) + 1
|
||||
except ValueError:
|
||||
return len(task_ids) + 1
|
||||
|
||||
|
||||
def format_datetime_minute(value: datetime | None) -> str:
|
||||
value = ensure_utc_datetime(value)
|
||||
return value.strftime("%Y-%m-%d %H:%M") if value else ""
|
||||
|
||||
|
||||
def build_task_error_summary(task: Task) -> str | None:
|
||||
if task.error_message:
|
||||
return task.error_message
|
||||
if task.error_stage == "system" and task.error_type == "unexpected_restart":
|
||||
return RESTART_ERROR_MESSAGE
|
||||
if task.error_stage or task.error_type:
|
||||
return "任务失败,请查看后端日志"
|
||||
return None
|
||||
|
||||
|
||||
def format_duration_zh(total_seconds: int | None) -> str:
|
||||
if total_seconds is None:
|
||||
return "暂无记录"
|
||||
|
||||
Reference in New Issue
Block a user