75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
# 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/<course_id>")
|
|
@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
|
|
)
|