Compare commits
3 Commits
042f6ee99e
...
643c16fdf7
| Author | SHA1 | Date | |
|---|---|---|---|
| 643c16fdf7 | |||
| 5082436289 | |||
| 7193b9a000 |
@@ -8,31 +8,43 @@ function show_course_details(course_id){
|
|||||||
|
|
||||||
function on_click_select_course(event) {
|
function on_click_select_course(event) {
|
||||||
event.stopPropagation(); // 阻止事件冒泡
|
event.stopPropagation(); // 阻止事件冒泡
|
||||||
const courseId = event.currentTarget.getAttribute('data-course-id');
|
const button = event.currentTarget;
|
||||||
if (event.currentTarget.classList.contains("selected-button")) {alert('课程已选择'); return;}
|
const courseId = button.getAttribute('data-course-id');
|
||||||
|
if (!courseId) { alert('缺少课程ID'); return; }
|
||||||
|
if (button.classList.contains("selected-button")) { alert('课程已选择'); return; }
|
||||||
|
if (button.disabled) { return; }
|
||||||
|
button.disabled = true;
|
||||||
fetch(`/select_course`, {
|
fetch(`/select_course`, {
|
||||||
method: 'POST',
|
method: 'POST',
|
||||||
headers: {
|
headers: {
|
||||||
'Content-Type': 'application/json',
|
'Content-Type': 'application/json',
|
||||||
'X-CSRFToken': '{{ csrf_token() }}' // 如果使用 CSRF 保护
|
|
||||||
},
|
},
|
||||||
body: JSON.stringify({ course_id: courseId })
|
body: JSON.stringify({ course_id: courseId })
|
||||||
})
|
})
|
||||||
.then(response => response.json())
|
.then(async (response) => {
|
||||||
.then(data => {
|
let data = null;
|
||||||
if (data.success) {
|
try {
|
||||||
// 更新按钮样式或显示消息
|
data = await response.json();
|
||||||
this.classList.remove('select-button');
|
} catch (_) {
|
||||||
this.classList.add('selected-button');
|
|
||||||
this.textContent = '已选择';
|
|
||||||
alert('选择课程成功');
|
|
||||||
} else {
|
|
||||||
alert('选择课程失败');
|
|
||||||
}
|
}
|
||||||
|
if (!response.ok) {
|
||||||
|
throw new Error(data?.message || `请求失败(${response.status})`);
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
})
|
||||||
|
.then((data) => {
|
||||||
|
if (!data?.success) {
|
||||||
|
throw new Error(data?.message || '选择课程失败');
|
||||||
|
}
|
||||||
|
button.classList.remove('select-button');
|
||||||
|
button.classList.add('selected-button');
|
||||||
|
button.textContent = '已选课';
|
||||||
|
alert('选择课程成功');
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
console.error('Error:', error);
|
console.error('Error:', error);
|
||||||
alert('选择课程失败');
|
alert(error?.message || '选择课程失败');
|
||||||
|
button.disabled = false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -539,8 +539,16 @@ function deleteSectionInRaw(level, title) {
|
|||||||
if (!t) return '';
|
if (!t) return '';
|
||||||
return parsed.lines.slice(t.start, t.end + 1).join('\n');
|
return parsed.lines.slice(t.start, t.end + 1).join('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 加载某个步骤到编辑器
|
||||||
function buildOriginSaveUrl() {
|
function buildOriginSaveUrl() {
|
||||||
return `/api/materials/save/${encodeURIComponent(CURRENT.material_id)}/${encodeURIComponent(CURRENT.chapter_name)}/${encodeURIComponent(CURRENT.lesson_name)}`;
|
const mid = typeof CURRENT.material_id === 'string' && CURRENT.material_id
|
||||||
|
|| (window.material && window.material.material_id) || '';
|
||||||
|
const ch = typeof CURRENT.chapter_name === 'string' && CURRENT.chapter_name
|
||||||
|
|| (window.chapter && window.chapter.chapter_name) || '';
|
||||||
|
const ln = typeof CURRENT.lesson_name === 'string' && CURRENT.lesson_name
|
||||||
|
|| (window.lesson && window.lesson.lesson_name) || '';
|
||||||
|
return `/api/materials/save/${encodeURIComponent(mid)}/${encodeURIComponent(ch)}/${encodeURIComponent(ln)}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html lang="zh">
|
<html lang="zh">
|
||||||
|
|
||||||
<head>
|
<head>
|
||||||
<meta charset="UTF-8">
|
<meta charset="UTF-8">
|
||||||
<title>课程选择主页</title>
|
<title>课程选择主页</title>
|
||||||
@@ -12,6 +13,7 @@
|
|||||||
<script src="/static/cdnback/js/bootstrap.bundle.min.js"></script>
|
<script src="/static/cdnback/js/bootstrap.bundle.min.js"></script>
|
||||||
<link rel="stylesheet" href="/static/css/index.css">
|
<link rel="stylesheet" href="/static/css/index.css">
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body>
|
<body>
|
||||||
{% include 'navbar.html' %}
|
{% include 'navbar.html' %}
|
||||||
|
|
||||||
@@ -51,8 +53,7 @@
|
|||||||
|
|
||||||
<div class="col-md-6 col-lg-4">
|
<div class="col-md-6 col-lg-4">
|
||||||
<div class="course-card card h-100" onclick="openCourseProgress('{{course._id}}')">
|
<div class="course-card card h-100" onclick="openCourseProgress('{{course._id}}')">
|
||||||
<img src="{{course.image_url}}"
|
<img src="{{course.image_url}}" class="course-img" alt="课程封面">
|
||||||
class="course-img" alt="课程封面">
|
|
||||||
<div class="card-body d-flex flex-column">
|
<div class="card-body d-flex flex-column">
|
||||||
<span class="course-category">算法设计</span>
|
<span class="course-category">算法设计</span>
|
||||||
<h5 class="course-title">{{course.name}}</h5>
|
<h5 class="course-title">{{course.name}}</h5>
|
||||||
@@ -62,11 +63,15 @@
|
|||||||
<span class="course-rating"><i class="fas fa-star"></i> 4.7</span>
|
<span class="course-rating"><i class="fas fa-star"></i> 4.7</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="mt-auto d-grid gap-2 d-md-flex">
|
<div class="mt-auto d-grid gap-2 d-md-flex">
|
||||||
<button class="btn btn-view flex-fill" onclick="btn_view(event,'{{course._id}}')"><i class="far fa-eye me-1"></i> 课程</button>
|
<button class="btn btn-view flex-fill" onclick="btn_view(event,'{{course._id}}')"><i
|
||||||
|
class="far fa-eye me-1"></i> 课程</button>
|
||||||
{% if course._id in selected_courses %}
|
{% if course._id in selected_courses %}
|
||||||
<button class="btn btn-process flex-fill selected-button" data-course-id="{{course._id}}">已选课</button>
|
<button class="btn btn-process flex-fill selected-button"
|
||||||
|
data-course-id="{{course._id}}">已选课</button>
|
||||||
{% else %}
|
{% else %}
|
||||||
<button class="btn btn-process flex-fill select-button" onclick="on_click_select_course(event)" data-course-id="{{course._id}}">选择课程</button>
|
<button class="btn btn-process flex-fill select-button"
|
||||||
|
onclick="on_click_select_course(event)"
|
||||||
|
data-course-id="{{course._id}}">选择课程</button>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@@ -88,5 +93,6 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
<script src="/static/js/index.js"></script>
|
<script src="/static/js/index.js"></script>
|
||||||
</html>
|
<script src="/static/js/dashboard.js"></script>
|
||||||
|
|
||||||
|
</html>
|
||||||
Reference in New Issue
Block a user