fix: flatten React Router structure — no nested Routes, each page is a top-level route
This commit is contained in:
@@ -0,0 +1,73 @@
|
||||
实现事件档案管理(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: "无匹配事件"
|
||||
|
||||
注册路由 + 迁移 + 提交。
|
||||
Reference in New Issue
Block a user