feat: unify scoring and chat evidence pages

This commit is contained in:
2026-09-27 17:47:32 +08:00
parent 039e93d0de
commit 83aa0e84a2
21 changed files with 511 additions and 132 deletions
+16 -6
View File
@@ -11,8 +11,9 @@ from . import services
from .config import get_settings
from .db import get_db
from .exports import batch_projects, export_excel, export_project_pdf, project_result
from .knowledge_pages import page_image_path, page_links
from .models import (AuditLog, Course, CourseVersion, CriterionScore, ExportTask,
IndexTask, KnowledgeChunk, KnowledgeDocument, Project, RubricVersion, ScoringBatch,
IndexTask, KnowledgeChunk, KnowledgeDocument, KnowledgePage, Project, RubricVersion, ScoringBatch,
Student, SubmissionFile, TeacherRevision)
from .materialized import sync_course_entities, sync_rubric_entities
from .rules import RubricData
@@ -330,13 +331,22 @@ def knowledge(course_version_id: int, project_id: int | None = None, db: Session
@router.get("/knowledge/documents/{document_id}/pages/{page}")
def knowledge_page(document_id: int, page: int, db: Session = Depends(get_db)):
doc = found(db, KnowledgeDocument, document_id)
chunks = db.scalars(select(KnowledgeChunk).where(KnowledgeChunk.document_id == document_id,
KnowledgeChunk.page == page).order_by(KnowledgeChunk.id)).all()
if not chunks:
record = db.get(KnowledgePage, (document_id, page))
if not record:
raise HTTPException(404, "资料页面不存在")
return {"document_id": doc.id, "title": doc.title, "course_version_id": doc.course_version_id,
"project_id": doc.project_id, "page": page, "text": "\n".join(chunk.text for chunk in chunks),
"image_url": f"/api/assets/{doc.submission_file_id}/{page}" if doc.submission_file_id else None}
"project_id": doc.project_id, "page": page,
"text": record.text,
"image_url": page_links(db, document_id, page)["image_url"]}
@router.get("/knowledge/documents/{document_id}/pages/{page}/image")
def knowledge_page_image(document_id: int, page: int, db: Session = Depends(get_db)):
doc = found(db, KnowledgeDocument, document_id)
path = page_image_path(db, doc, page)
if not path:
raise HTTPException(404, "页面图像不存在")
return FileResponse(path, media_type="image/png")
@router.post("/knowledge/ingest-course/{course_version_id}")