移动端拍照上传、奥数区、学段约束解题与 AI 模型配置。

- 手机/平板响应式布局,支持拍照与相册上传

- 学生详情新增奥数区,按初/高中学段生成解法并禁止超纲

- 系统设置可配置 Ollama 或 OpenAI 兼容 API

- 更新 frontend/dist 与使用说明
This commit is contained in:
dekun
2026-06-28 13:39:54 +08:00
parent 4375ea491e
commit 43483bf56f
26 changed files with 1193 additions and 592 deletions
+19
View File
@@ -22,6 +22,16 @@ class WrongQuestionStatus(str, enum.Enum):
failed = "failed"
class WrongQuestionCategory(str, enum.Enum):
regular = "regular"
olympiad = "olympiad"
class AIProvider(str, enum.Enum):
ollama = "ollama"
openai = "openai"
class SchoolLevel(str, enum.Enum):
junior_high = "junior_high"
senior_high = "senior_high"
@@ -123,6 +133,9 @@ class WrongQuestion(Base):
status: Mapped[WrongQuestionStatus] = mapped_column(
Enum(WrongQuestionStatus), default=WrongQuestionStatus.pending
)
category: Mapped[WrongQuestionCategory] = mapped_column(
Enum(WrongQuestionCategory), default=WrongQuestionCategory.regular
)
created_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)
)
@@ -136,6 +149,12 @@ class SystemSettings(Base):
id: Mapped[int] = mapped_column(Integer, primary_key=True, default=1)
registration_enabled: Mapped[bool] = mapped_column(default=True)
ai_provider: Mapped[str] = mapped_column(String(16), default="ollama")
ollama_base_url: Mapped[str | None] = mapped_column(String(256), nullable=True)
ollama_model: Mapped[str | None] = mapped_column(String(128), nullable=True)
openai_base_url: Mapped[str | None] = mapped_column(String(256), nullable=True)
openai_model: Mapped[str | None] = mapped_column(String(128), nullable=True)
openai_api_key: Mapped[str | None] = mapped_column(String(512), nullable=True)
updated_at: Mapped[datetime] = mapped_column(
DateTime(timezone=True), default=lambda: datetime.now(timezone.utc)
)