feat: 按 Pencil 设计重做页面 UI

This commit is contained in:
meijiali
2026-07-07 18:43:48 +08:00
parent c22556430e
commit 00633a5510
7 changed files with 1051 additions and 261 deletions
+51 -9
View File
@@ -25,22 +25,24 @@ def test_index_page_renders_task_form_empty_state_and_default_scale():
assert "还没有任何任务" in response.text
def test_index_page_uses_pencil_data_grid_layout_for_ui_polish():
def test_index_page_uses_pencil_control_console_layout_for_ui_polish():
with make_test_client() as (client, _engine):
response = client.get("/")
assert response.status_code == 200
soup = BeautifulSoup(response.text, "html.parser")
visible_text = soup.get_text(" ")
hero = soup.select_one(".hero-band.hero-band-inverse")
hero = soup.select_one(".control-hero")
assert hero is not None
assert "抓取热点评论,快速看清讨论情绪" in visible_text
assert soup.select_one(".hero-metrics.hero-data-grid") is not None
assert soup.select_one(".task-workspace") is not None
assert soup.select_one(".tool-card.hard-panel") is not None
assert soup.select_one(".section-heading.panel-heading") is not None
assert soup.select_one("table.app-table.data-grid-table") is not None
assert soup.select_one(".scale-hint-panel") is not None
assert "用默认配置快速启动一次评论分析" in visible_text
assert "内容平台评论分析控制台" in visible_text
assert soup.select_one(".quick-launch-panel") is not None
assert soup.select_one(".default-scale-grid") is not None
assert soup.select_one(".overview-grid") is not None
assert soup.select_one(".task-card-list") is not None
assert soup.select_one(".task-status-sidepanel") is not None
assert soup.select_one("table.app-table.data-grid-table") is None
assert "卡片化展示,减少表格压迫感" in visible_text
assert "运行中任务自动刷新" in visible_text
@@ -722,6 +724,46 @@ def test_task_detail_page_explains_target_and_actual_counts():
assert "少于理论上限通常是内容本身评论不足或平台返回不足" in response.text
def test_task_detail_page_uses_pencil_execution_view_layout():
with make_test_client() as (client, engine):
seed_result_data(engine)
response = client.get("/tasks/task-result")
assert response.status_code == 200
soup = BeautifulSoup(response.text, "html.parser")
visible_text = soup.get_text(" ")
assert soup.select_one(".task-detail-hero") is not None
assert soup.select_one(".execution-timeline") is not None
assert soup.select_one(".hotspot-card-list") is not None
assert soup.select_one(".detail-sidepanel") is not None
assert "TASK DETAIL" in visible_text
assert "执行阶段" in visible_text
assert "热点结果" in visible_text
assert "错误会被隔离" in visible_text
assert "查看报告" in visible_text
def test_hotspot_report_page_uses_pencil_analysis_reading_layout():
with make_test_client() as (client, engine):
seed_result_data(engine)
response = client.get("/hotspots/hot-result/report")
assert response.status_code == 200
soup = BeautifulSoup(response.text, "html.parser")
visible_text = soup.get_text(" ")
assert soup.select_one(".report-reading-hero") is not None
assert soup.select_one(".report-reading-layout") is not None
assert soup.select_one(".insight-card") is not None
assert soup.select_one(".sentiment-sidepanel") is not None
assert "HOTSPOT REPORT" in visible_text
assert "核心结论" in visible_text
assert "代表评论" in visible_text
assert "内容表现" in visible_text
assert "同一份报告数据" in visible_text
def test_task_api_includes_runtime_and_stale_progress_fields(monkeypatch):
now = datetime(2026, 7, 3, 10, 30, tzinfo=UTC)
monkeypatch.setattr("app.services.task_service.utc_now", lambda: now)