Files

74 lines
2.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
实现事件档案管理(P0-7)。后端数据爬取 + API + 前端卡片页面。
## 后端: Event Crawler
创建 backend/app/services/event_crawler.py:
- 爬取 hm.zhiweidata.ai/events 数据
- 存入 events 表 (新建 ORM 模型)
- 定时每天凌晨执行
- 暂用占位数据(TODO: real crawler)
## 后端: Event Model
创建 backend/app/models/event.py:
```python
class EventStatus(str, enum.Enum):
ACTIVE = "active"
FADING = "fading"
DISSIPATING = "dissipating"
CLOSED = "closed"
class Event(Base):
__tablename__ = "events"
id: str (UUID)
title: str
level: str (A/B/C)
domain: str (12个领域之一)
status: EventStatus
occurred_date: date
last_reviewed: datetime | None
no_new_info_count: int (连续无新知次数)
next_review: datetime | None
created_at: datetime
updated_at: datetime
```
创建 Alembic 迁移。
## 后端: Events API
创建 backend/app/api/events.py,全部 require_auth
### GET /api/v1/events
事件卡片列表,三维筛选(前端即时过滤):
- query: ?status=active|fading|dissipating|closed&domain=xxx&search=keyword
- 每行含超期标记: overdue_days (下一次复查逾期天数)
- 空结果返回 []
## 前端: Event Archive 页面
修改 frontend/src/pages/EventArchivePage.tsx:
### 筛选工具栏
- 状态筛选: 全部/活跃期/消减期/消散期/已完结
- 领域筛选: 12 个领域下拉
- 搜索框: 按标题模糊搜索
- 前端即时过滤,组合生效
- [+ 新建事件] 按钮(P0 先做占位 Toast)
### 事件卡片网格
- 自适应列数 grid (minmax 340px)
- 每张卡片:
- 标题(粗体)
- 等级 Badge + 领域 Tag (蓝色)
- 状态 Badge(绿/黄/灰)
- Meta: 发生日期, 上次复查, 连续无新知(≥5标黄), 下次复查
- 超期标记: 红色 "超期 N 天"
- Hover: 边框变 honey-dim
- 点击: Toast 显示事件标题(P1 升级详情面板)
### 四态覆盖
- Empty: "无匹配事件"
注册路由 + 迁移 + 提交。