From 1ff0fdf6024095829bac78a0797cfce767989ce4 Mon Sep 17 00:00:00 2001 From: zwt13703 Date: Wed, 1 Jul 2026 21:50:07 +0800 Subject: [PATCH] feat: add template center list --- backend/app/api/templates.py | 6 ++ docs/tasks/task_detail_2026_07_01.md | 13 ++++ frontend/src/api/templates.ts | 15 ++++ frontend/src/views/TemplateCenter.vue | 99 +++++++++++++++++++++++++-- 4 files changed, 127 insertions(+), 6 deletions(-) diff --git a/backend/app/api/templates.py b/backend/app/api/templates.py index c16d17b..b63138e 100644 --- a/backend/app/api/templates.py +++ b/backend/app/api/templates.py @@ -17,6 +17,12 @@ from ..services.template_service import create_template_record, save_template_bl router = APIRouter(prefix="/api/templates", tags=["templates"]) +@router.get("") +def list_templates(db: Session = Depends(get_db)): + templates = db.query(Template).order_by(Template.updated_at.desc(), Template.id.desc()).all() + return {"data": [serialize_template(template) for template in templates], "message": "ok"} + + @router.post("/upload") def upload_template( file: UploadFile = File(...), diff --git a/docs/tasks/task_detail_2026_07_01.md b/docs/tasks/task_detail_2026_07_01.md index a22a828..e201d32 100644 --- a/docs/tasks/task_detail_2026_07_01.md +++ b/docs/tasks/task_detail_2026_07_01.md @@ -176,3 +176,16 @@ 5. 上传失败时给出后端服务或数据库未启动的提示。 6. 执行前端生产构建验证。 - **执行结果**: 模板中心“上传模板”按钮已接入后端上传接口,成功后可进入模板编辑页。 + +## 会话 ID: 20260701-template-list +- [2026-07-01 21:49:52] +- **执行原因**: 继续完善模板中心,使上传后的模板可在列表中查看和进入标注页。 +- **执行过程**: + 1. 后端新增 `GET /api/templates`,按更新时间和 ID 倒序返回模板列表。 + 2. 前端模板 API 模块新增 `getTemplates`。 + 3. 模板中心页面初始化时加载模板列表。 + 4. 将模板中心空态升级为 Ant Design Vue 表格,展示名称、类型、版本、状态、更新时间和标注操作。 + 5. 增加列表加载失败提示和重试按钮。 + 6. 上传成功后刷新模板列表并跳转编辑页。 + 7. 执行后端路由检查和前端生产构建验证。 +- **执行结果**: 模板中心已具备模板列表展示、失败重试和进入标注页能力。 diff --git a/frontend/src/api/templates.ts b/frontend/src/api/templates.ts index 215e272..8ad79f2 100644 --- a/frontend/src/api/templates.ts +++ b/frontend/src/api/templates.ts @@ -30,6 +30,21 @@ export type TemplateDetailResponse = { configs: Record; }; +export type TemplateListItem = { + id: number; + name: string; + type: string; + version: string; + status: number; + created_at?: string | null; + updated_at?: string | null; +}; + +export async function getTemplates() { + const response = await apiClient.get<{ data: TemplateListItem[]; message: string }>("/templates"); + return response.data.data; +} + export async function getTemplateDetail(templateId: number) { const response = await apiClient.get<{ data: TemplateDetailResponse; message: string }>( `/templates/${templateId}`, diff --git a/frontend/src/views/TemplateCenter.vue b/frontend/src/views/TemplateCenter.vue index d76f059..a746554 100644 --- a/frontend/src/views/TemplateCenter.vue +++ b/frontend/src/views/TemplateCenter.vue @@ -1,10 +1,10 @@