From 68493d6a62c1642d97420de38925f3d4a3f0e392 Mon Sep 17 00:00:00 2001 From: Yara <2528691862@qq.com> Date: Thu, 25 Dec 2025 15:52:29 +0800 Subject: [PATCH] =?UTF-8?q?add:=E6=95=99=E5=B8=88=E7=AB=AF=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=88=A0=E9=99=A4=E8=AF=BE=E7=A8=8B=EF=BC=8C=E5=A2=9E?= =?UTF-8?q?=E5=8A=A0=E5=B9=B6=E6=9B=B4=E6=8D=A2footer-brief=E6=A8=A1?= =?UTF-8?q?=E6=9D=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Html/apps/static/css/teacherboard.css | 14 ++++++ Html/apps/static/js/teacherboard.js | 37 ++++++++++++++ Html/apps/templates/course.html | 2 +- Html/apps/templates/dashboard.html | 3 +- Html/apps/templates/footer-brief.html | 11 +++++ Html/apps/templates/index.html | 2 +- Html/apps/templates/teacherboard.html | 4 +- Html/apps/views/material.py | 69 ++++++++++++++++++++------- 8 files changed, 120 insertions(+), 22 deletions(-) create mode 100644 Html/apps/templates/footer-brief.html diff --git a/Html/apps/static/css/teacherboard.css b/Html/apps/static/css/teacherboard.css index 7cb97b1..bc11746 100644 --- a/Html/apps/static/css/teacherboard.css +++ b/Html/apps/static/css/teacherboard.css @@ -485,6 +485,20 @@ label[for="course-description"] { cursor: pointer; } +.delete-course-btn { + background-color: #e74c3c; + color: white; + padding: 10px; + border-radius: 5px; + cursor: pointer; + width: 100%; + margin-top: 10px; +} + +.delete-course-btn:hover { + background-color: #c0392b; +} + /* 编辑弹窗 */ .edit-modal { display: none; diff --git a/Html/apps/static/js/teacherboard.js b/Html/apps/static/js/teacherboard.js index 69b7f59..9c42170 100644 --- a/Html/apps/static/js/teacherboard.js +++ b/Html/apps/static/js/teacherboard.js @@ -292,6 +292,43 @@ function closeAddCourseModal() { document.getElementById('add-course-modal').style.display = 'none'; } +// 显示删除课程确认弹窗 +function showDeleteCourseConfirmation() { + if (!material_id) { + alert('无法删除课程:未找到课程ID'); + return; + } + + if (confirm('确定要删除这个课程吗?此操作无法撤销!')) { + deleteCourse(material_id); + } +} + +// 删除课程 +function deleteCourse(courseId) { + fetch(`/materials/${courseId}`, { + method: 'DELETE', + headers: { + 'Content-Type': 'application/json' + } + }) + .then(response => response.json()) + .then(data => { + if (data.message) { + alert(data.message); + if (data.success) { + // 关闭侧边栏并刷新页面 + closeCourseDetails(); + location.reload(); + } + } + }) + .catch(error => { + console.error('删除课程时出错:', error); + alert('删除课程失败,请稍后再试!'); + }); +} + function onTeacherboardPageLoad(){ // 提交表单处理 document.getElementById('add-course-form').addEventListener('submit', function(event) { diff --git a/Html/apps/templates/course.html b/Html/apps/templates/course.html index c501ee8..c3cee46 100644 --- a/Html/apps/templates/course.html +++ b/Html/apps/templates/course.html @@ -46,7 +46,7 @@ - {% include 'foot.html' %} + {% include 'footer-brief.html' %} - {% include 'foot.html' %} + {% include 'footer-brief.html' %} diff --git a/Html/apps/views/material.py b/Html/apps/views/material.py index 8172c60..b7b71a8 100644 --- a/Html/apps/views/material.py +++ b/Html/apps/views/material.py @@ -1,4 +1,5 @@ from flask import Blueprint, request, jsonify, current_app, session, render_template, session +from bson import ObjectId from ..services.course_service import create_material, update_material, get_materials_by_teacher, load_material, get_materials_by_teacher_dict, add_material_chapter, add_material_chapter_lesson, delete_material_chapter_lesson, reorder_material_structure, rename_material_structure from ..auth.decorators import require_role from ..services.cos_service import upload_file @@ -37,24 +38,60 @@ def create_new_material(): material_id = create_material(teacher_id, material_name, description, chapters, image_url) return jsonify({"message": "教材创建成功", "material_id": material_id}), 201 -@bp.route('/materials/', methods=['GET']) +@bp.route('/materials/', methods=['GET', 'PUT', 'DELETE']) @require_role(roles="teacher") -def get_material(material_id): - if material_id is None: - return jsonify({"message": "教材名称不能为空"}), 400 - material = load_material(material_id) - print(material) - return jsonify( material.model_dump()), 200 +def handle_material(material_id): - -@bp.route('/materials/', methods=['PUT']) -@require_role(roles="teacher") -def update_existing_material(material_id): - data = request.get_json() - chapters = data.get('chapters') - if update_material(material_id, chapters): - return jsonify({"message": "教材更新成功"}), 200 - return jsonify({"message": "教材未找到"}), 404 + if request.method == 'GET': + if material_id is None: + return jsonify({"message": "教材名称不能为空"}), 400 + material = load_material(material_id) + print(material) + return jsonify(material.model_dump()), 200 + + elif request.method == 'PUT': + data = request.get_json() + chapters = data.get('chapters') + if update_material(material_id, chapters): + return jsonify({"message": "教材更新成功"}), 200 + else: + return jsonify({"message": "教材更新失败"}), 500 + + elif request.method == 'DELETE': + # 获取当前教师信息 + teacher_uuid = session.get("user_uuid") + teacher_id = current_app.extensions["uuid2username"][teacher_uuid] + + # 检查材料是否存在,并且是否为当前教师创建 + mongo = current_app.extensions["mongo"] + print(f"尝试删除课程ID: {material_id}, 当前教师ID: {teacher_id}") + try: + material = mongo.db.materials.find_one({'_id': ObjectId(material_id)}) + print(f"找到的材料: {material}") + + if not material: + return jsonify({"message": "课程不存在", "success": False}), 404 + + # 验证是否为当前教师创建的课程 + if material.get('teacher_id') != teacher_id: + return jsonify({"message": "权限不足,无法删除他人课程", "success": False}), 403 + + except Exception as e: + print(f"查询材料时出错: {e}") + return jsonify({"message": f"查询课程时出错: {str(e)}", "success": False}), 500 + + # 执行删除操作 + try: + result = mongo.db.materials.delete_one({'_id': ObjectId(material_id), 'teacher_id': teacher_id}) + print(f"删除操作结果: {result.deleted_count}") + except Exception as e: + print(f"删除材料时出错: {e}") + return jsonify({"message": f"删除课程时出错: {str(e)}", "success": False}), 500 + + if result.deleted_count > 0: + return jsonify({"message": "课程删除成功", "success": True}), 200 + else: + return jsonify({"message": "删除失败", "success": False}), 500 @bp.route('/materials/addchapter/', methods=['POST']) @require_role(roles="teacher")