# myapp/views/dashboard.py import json from flask import Blueprint, render_template, request, jsonify, redirect, url_for, current_app, session from ..auth.decorators import require_role from ..services.user_service import get_or_load_current_user, add_course_for_current_user from ..services.course_service import load_material, user_selected_course_briefs, get_new_edit_materials,user_selected_course bp = Blueprint("main", __name__) # 根路径蓝图 @bp.post("/dashboard/get_course_progress") @require_role def get_course_progress(): user_obj = get_or_load_current_user() course_id = request.json.get("course_id") if not course_id: return jsonify({"success": False, "message": "缺少 course_id"}), 400 return jsonify({"success": True, "message": "获取课程进度成功", "data": user_obj.get_course_progress(course_id)}), 200 @bp.get("/dashboard") @require_role def dashboard(): user_obj = get_or_load_current_user() if user_obj is None: return redirect(url_for("auth.login")) user_course_data = user_selected_course(user_obj) return render_template( "dashboard.html", user_data=user_obj.__json__(), user_course_data=json.dumps(user_course_data, ensure_ascii=False), user_selected_course=user_course_data ) @bp.get("/course/") @require_role def course(course_id): c = load_material(course_id) return render_template("course.html", course_id=course_id, course_data=c) @bp.post("/select_course") @require_role def select_course(): data = request.get_json(force=True) or {} course_id = data.get("course_id") if not course_id: return jsonify({"success": False, "message": "缺少 course_id"}), 400 # course_data = load_material(course_id) user_list = current_app.extensions["users_list"] uuid2username = current_app.extensions["uuid2username"] username = uuid2username[session["user_uuid"]] user_obj = user_list.get_user_by_name(username) ok = user_obj.select_new_course(course_id, load_material(course_id)) if not ok: return jsonify({"success": False, "message": "未登录或会话失效"}), 401 return jsonify({"success": True, "message": "课程选择成功"}) @bp.get("/") @require_role def home_index(): user_obj = get_or_load_current_user() if user_obj is None: return redirect(url_for("auth.login")) selected_courses = list(getattr(user_obj, "select_course", [])) course_list = get_new_edit_materials(10) print(course_list) return render_template( "index.html", courses_data=course_list, selected_courses=selected_courses )