feat: 重构学员目标系统,支持评估日期/状态自动计算/评估目标,同时恢复方案列表的典型设置

This commit is contained in:
hmo
2026-04-24 00:06:26 +08:00
parent 68e106018b
commit 035c599c2f
4 changed files with 355 additions and 68 deletions
+25 -7
View File
@@ -235,25 +235,43 @@ class StudentGoal(db.Model):
id = db.Column(db.Integer, primary_key=True)
student_id = db.Column(db.Integer, db.ForeignKey("students.id"), nullable=False)
goal_id = db.Column(db.Integer, db.ForeignKey("goals.id"), nullable=False)
status = db.Column(db.String(20), default="未开始") # 开始/进行中/已完成
mastery_level = db.Column(db.Integer, default=1) # 1-5
deadline = db.Column(db.DateTime)
completed_at = db.Column(db.DateTime)
start_date = db.Column(db.DateTime) # 开始日期
assessment_date = db.Column(db.DateTime) # 评估日期
mastery_level = db.Column(db.Integer, nullable=True) # 掌握程度 1-5(评估时填写)
achievement_date = db.Column(db.DateTime, nullable=True) # 达成日期
comment = db.Column(db.Text, nullable=True) # 评语
created_at = db.Column(db.DateTime, default=datetime.now)
student = db.relationship("Student", backref="goal_records")
goal = db.relationship("Goal")
def get_status(self):
"""根据日期自动计算状态"""
from datetime import datetime
now = datetime.now()
if self.start_date and now < self.start_date:
return "未开始"
elif self.assessment_date and now > self.assessment_date:
return "已结束"
else:
return "进行中"
def to_dict(self):
status = self.get_status()
return {
"id": self.id,
"student_id": self.student_id,
"goal_id": self.goal_id,
"goal_name": self.goal.name if self.goal else None,
"status": self.status,
"goal_level": self.goal.level if self.goal else None,
"goal_category": self.goal.category if self.goal else None,
"status": status,
"start_date": self.start_date.isoformat() if self.start_date else None,
"assessment_date": self.assessment_date.isoformat() if self.assessment_date else None,
"mastery_level": self.mastery_level,
"deadline": self.deadline.isoformat() if self.deadline else None,
"completed_at": self.completed_at.isoformat() if self.completed_at else None,
"achievement_date": self.achievement_date.isoformat() if self.achievement_date else None,
"comment": self.comment,
"created_at": self.created_at.isoformat() if self.created_at else None,
}