新增作文区与 AI 解读开关,修复 CSV 导出。

系统设置可关闭成绩复盘 AI;学生详情增加作文区(OCR/手动题目、方案与范文、历史与 MD 下载);导出改用 UTF-8 文件名响应。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
dekun
2026-06-28 17:42:17 +08:00
parent aaa08cdf38
commit 1cb3c7fad5
20 changed files with 1441 additions and 555 deletions
+42
View File
@@ -76,8 +76,13 @@ class PublicSettingsOut(BaseModel):
registration_enabled: bool
class AppFeaturesOut(BaseModel):
ai_review_enabled: bool
class SystemSettingsOut(BaseModel):
registration_enabled: bool
ai_review_enabled: bool = True
ai_provider: AIProviderEnum
ollama_base_url: str | None = None
ollama_model: str | None = None
@@ -92,6 +97,7 @@ class SystemSettingsOut(BaseModel):
class SystemSettingsUpdate(BaseModel):
registration_enabled: bool | None = None
ai_review_enabled: bool | None = None
ai_provider: AIProviderEnum | None = None
ollama_base_url: str | None = None
ollama_model: str | None = None
@@ -293,3 +299,39 @@ class WrongQuestionUpdate(BaseModel):
solution_approach: str | None = None
solution_text: str | None = None
subject_id: int | None = None
class CompositionStatusEnum(str, Enum):
pending = "pending"
generating = "generating"
done = "done"
failed = "failed"
class CompositionInputModeEnum(str, Enum):
manual = "manual"
ocr = "ocr"
class CompositionCreate(BaseModel):
topic: str = Field(..., min_length=1, max_length=4000)
input_mode: CompositionInputModeEnum = CompositionInputModeEnum.manual
class CompositionOcrOut(BaseModel):
text: str
class CompositionOut(BaseModel):
id: UUID
student_id: UUID
topic: str
input_mode: CompositionInputModeEnum
writing_plan: str | None = None
sample_essay: str | None = None
error_message: str | None = None
status: CompositionStatusEnum
created_at: datetime
updated_at: datetime
model_config = {"from_attributes": True}