更新:models/routes/services/templates/docs

This commit is contained in:
hmo
2026-04-26 18:02:36 +08:00
parent f7a82ac48a
commit 6abdd49c04
31 changed files with 1480 additions and 676 deletions
+26 -3
View File
@@ -3,7 +3,7 @@
from flask import request, jsonify, render_template, session
from datetime import datetime, timedelta
from app.routes import main_bp
from app.models import db, Class, Student, StudentGoal, Goal
from app.models import db, Class, Student, StudentGoal, Goal, User
from app.routes.auth import login_required_json, admin_required
import logging
@@ -17,12 +17,21 @@ def classes_page():
return render_template("classes.html", active_nav="classes")
@main_bp.route("/api/teachers", methods=["GET"])
@login_required_json
def api_teachers_list():
"""用户列表(用于班主任选择,所有登录用户可访问)"""
users = User.query.order_by(User.name, User.username).all()
return jsonify([{"id": u.id, "name": u.name or u.username} for u in users])
@main_bp.route("/api/classes", methods=["GET"])
@login_required_json
def api_classes_list():
"""班级列表"""
# 支持筛选参数: active=true, active=false, 不传则返回全部
# 支持筛选参数: active=true/false, mine=true/false
active_filter = request.args.get("active")
mine_filter = request.args.get("mine")
query = Class.query
if active_filter is not None:
@@ -31,6 +40,12 @@ def api_classes_list():
elif active_filter.lower() == "false":
query = query.filter(Class.active == False)
# 我的班级筛选(当前用户作为老师的班级)
if mine_filter and mine_filter.lower() == "true":
user_id = session.get("user_id")
if user_id:
query = query.filter(Class.teacher_id == user_id)
classes = query.order_by(Class.created_at.desc()).all()
return jsonify([c.to_dict() for c in classes])
@@ -42,6 +57,8 @@ def api_classes_create():
data = request.get_json()
name = data.get("name", "").strip()
description = data.get("description", "")
teacher_id = data.get("teacher_id") # 可以为空
level = data.get("level", "启蒙")
active = data.get("active", True) # 默认进行中
if not name:
@@ -51,7 +68,7 @@ def api_classes_create():
return jsonify({"error": "班级名称已存在", "code": "DUPLICATE_NAME"}), 400
try:
cls = Class(name=name, description=description, active=active)
cls = Class(name=name, description=description, teacher_id=teacher_id, level=level, active=active)
db.session.add(cls)
db.session.commit()
return jsonify(cls.to_dict())
@@ -78,6 +95,12 @@ def api_classes_update(class_id):
if "description" in data:
cls.description = data["description"]
if "teacher_id" in data:
cls.teacher_id = data["teacher_id"] if data["teacher_id"] else None
if "level" in data:
cls.level = data["level"]
if "active" in data:
cls.active = data["active"]