feat: 重构学员目标系统,支持评估日期/状态自动计算/评估目标,同时恢复方案列表的典型设置
This commit is contained in:
+25
-7
@@ -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,
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user