Files
RongGiuangKT/js/indexDetail.js

352 lines
13 KiB
JavaScript
Raw Permalink Normal View History

2025-10-09 19:25:48 +08:00
document.addEventListener('DOMContentLoaded', function () {
// 学科名称映射
const subjectMap = {
'live': '生活',
'language': '语文',
'math': '数学'
};
// 年级名称映射
const gradeNames = ['一年级', '二年级', '三年级', '四年级', '五年级', '六年级'];
// 学期名称
const semesterNames = ['上册', '下册'];
// 当前视图状态
let currentView = {
mode: 'semester', // 'semester' | 'courses'
subject: null,
grade: null,
semester: null
};
// 根据学科、年级、学期动态生成图片路径的函数
function getCourseImagePath(subject, gradeIndex, semesterIndex) {
const subjectPrefix = {
'math': 'math',
'language': 'chinese', // 如果有语文图片的话
'live': 'life' // 如果有生活图片的话
};
const gradeNumber = gradeIndex + 1; // 转换为1-6
const semesterText = semesterIndex === 0 ? '上' : '下';
const prefix = subjectPrefix[subject] || subject;
return `../asset/course_img/${prefix}${gradeNumber}${semesterText}.png`;
}
// 当前选中的筛选条件
let currentFilters = {
subject: 'math', // 默认选中数学
grade: 1 // 默认选中二年级 (索引1)
};
// 生成学科标签
function generateSubjectTags() {
const container = document.getElementById('subject-tags');
const courseList = GLOBAL_CONFIG.courseList;
Object.keys(courseList).forEach((subject, index) => {
const tag = document.createElement('div');
tag.className = 'filter-tag';
tag.textContent = subjectMap[subject] || subject;
tag.dataset.subject = subject;
if (subject === currentFilters.subject) {
tag.classList.add('active');
}
tag.addEventListener('click', function () {
container.querySelectorAll('.filter-tag').forEach(t => t.classList.remove('active'));
this.classList.add('active');
currentFilters.subject = subject;
// 重置视图状态
currentView.mode = 'semester';
updateCourseDisplay();
});
container.appendChild(tag);
});
}
// 生成类别标签
function getCate() {
const container = document.getElementById('Category');
if (!container) {
console.warn('Category container not found');
return;
}
const cates = ['培智学校'];
container.innerHTML = '';
cates.forEach((category, index) => {
const tag = document.createElement('div');
tag.className = 'filter-tag';
tag.textContent = category;
tag.dataset.category = category;
if (index === 0) {
tag.classList.add('active');
if (typeof currentFilters !== 'undefined') {
currentFilters.category = category;
}
}
tag.addEventListener('click', function () {
container.querySelectorAll('.filter-tag').forEach(t => t.classList.remove('active'));
this.classList.add('active');
if (typeof currentFilters !== 'undefined') {
currentFilters.category = category;
}
// 重置视图状态
currentView.mode = 'semester';
updateCourseDisplay();
});
container.appendChild(tag);
});
}
// 生成年级标签
function generateGradeTags() {
const container = document.getElementById('grade-tags');
gradeNames.forEach((gradeName, index) => {
const tag = document.createElement('div');
tag.className = 'filter-tag';
tag.textContent = gradeName;
tag.dataset.grade = index;
if (index === currentFilters.grade) {
tag.classList.add('active');
}
tag.addEventListener('click', function () {
container.querySelectorAll('.filter-tag').forEach(t => t.classList.remove('active'));
this.classList.add('active');
currentFilters.grade = index;
// 重置视图状态
currentView.mode = 'semester';
updateCourseDisplay();
});
container.appendChild(tag);
});
}
// 创建返回按钮
function createBackButton() {
const backBtn = document.createElement('div');
backBtn.className = 'back-button';
backBtn.innerHTML = `
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
<path d="m12 19-7-7 7-7"/>
<path d="m19 12H5"/>
</svg>
返回学期选择
`;
backBtn.addEventListener('click', function () {
currentView.mode = 'semester';
updateCourseDisplay();
});
return backBtn;
}
// 显示学期卡片
function displaySemesterCards() {
const container = document.getElementById('materials-container');
const courseList = GLOBAL_CONFIG.courseList;
// 清空现有内容
container.innerHTML = '';
container.className = 'materials-grid'; // 重置为学期卡片样式
// 为上册和下册分别创建卡片
semesterNames.forEach((semesterName, semesterIndex) => {
const courses = courseList[currentFilters.subject]?.[currentFilters.grade]?.[semesterIndex] || [];
const bookImage = getCourseImagePath(currentFilters.subject, currentFilters.grade, semesterIndex);
const card = document.createElement('div');
card.className = 'material-card';
if (courses.length === 0) {
card.innerHTML = `
<div class="material-cover">
<div class="material-image" style="background-image: url('${bookImage}');"></div>
<div class="material-info">
<h3>${subjectMap[currentFilters.subject]} ${gradeNames[currentFilters.grade]} ${semesterName}</h3>
<div class="material-meta">
<span style="color: #666; font-size: 14px;">暂无课程内容</span>
</div>
<div class="course-stats">
此册正在筹备中...
</div>
</div>
</div>
`;
} else {
card.innerHTML = `
<div class="material-cover">
<div class="material-image" style="background-image: url('${bookImage}');"></div>
<div class="material-info">
<h3>${subjectMap[currentFilters.subject]} ${gradeNames[currentFilters.grade]} ${semesterName}</h3>
<div class="material-meta">
<span style="color: #666; font-size: 14px;">共${courses.length}个课程</span>
</div>
<div class="course-stats">
点击进入章节学习
</div>
</div>
</div>
`;
// 添加点击事件
card.addEventListener('click', function () {
currentView.mode = 'courses';
currentView.subject = currentFilters.subject;
currentView.grade = currentFilters.grade;
currentView.semester = semesterIndex;
updateCourseDisplay();
});
}
container.appendChild(card);
});
}
// 显示课程列表
function displayCourseList() {
const container = document.getElementById('materials-container');
const courseList = GLOBAL_CONFIG.courseList;
const classObject = GLOBAL_CONFIG.classObject;
// 清空现有内容
container.innerHTML = '';
container.className = 'course-grid'; // 使用课程卡片样式
// 添加返回按钮
const backBtn = createBackButton();
container.appendChild(backBtn);
// 获取当前学期的课程
const courses = courseList[currentView.subject]?.[currentView.grade]?.[currentView.semester] || [];
if (courses.length === 0) {
const emptyCourse = document.createElement('div');
emptyCourse.className = 'empty-course';
emptyCourse.innerHTML = `
<div class="empty-content">
<h3>暂无课程</h3>
<p>该学期的课程正在筹备中...</p>
</div>
`;
container.appendChild(emptyCourse);
return;
}
// 创建课程卡片
courses.forEach((course, index) => {
const courseData = classObject[currentView.subject]?.[course.id];
const courseCard = document.createElement('div');
courseCard.className = 'course-card';
// 生成课程图片路径 - 根据实际的命名规则
function getCourseSpecificImagePath(subject, grade, semester, courseIndex) {
const subjectPrefix = {
'math': 'math',
'language': 'chinese',
'live': 'life'
};
const gradeNumber = grade + 1;
const semesterText = semester === 0 ? '上' : '下';
const prefix = subjectPrefix[subject] || subject;
// 课程编号从1开始所以是 courseIndex + 1
return `../asset/course_img/${prefix}${gradeNumber}${semesterText}${courseIndex + 1}.png`;
}
const courseImage = getCourseSpecificImagePath(currentView.subject, currentView.grade, currentView.semester, index);
courseCard.innerHTML = `
<div class="course-cover">
<div class="course-image" style="background-image: url('${courseImage}');"></div>
<div class="course-info">
<h4>${course.name}</h4>
<p class="course-description">${course.des}</p>
<div class="course-action">
${courseData ? '开始学习' : '课程筹备中'}
</div>
</div>
</div>
`;
// 如果有课程数据,添加点击事件
if (courseData) {
courseCard.addEventListener('click', function () {
// 这里可以跳转到具体的课程页面
console.log('进入课程:', course.id);
// window.location.href = `course.html?id=${course.id}`;
window.open(`./courseHome.html?id=${course.id}`);
});
courseCard.style.cursor = 'pointer';
} else {
courseCard.classList.add('disabled');
}
container.appendChild(courseCard);
});
}
// 更新课程显示
function updateCourseDisplay() {
if (currentView.mode === 'semester') {
displaySemesterCards();
} else if (currentView.mode === 'courses') {
displayCourseList();
}
}
// 侧边栏菜单交互
document.querySelectorAll('.sidebar-menu a').forEach(link => {
link.addEventListener('click', function () {
document.querySelectorAll('.sidebar-menu li').forEach(li => li.classList.remove('active'));
this.parentElement.classList.add('active');
});
});
// 初始化页面
generateSubjectTags();
generateGradeTags();
updateCourseDisplay();
getCate();
// 1、导航条切换
const navItems = document.querySelectorAll('.container-header-nav > div');
navItems.forEach(function (item) {
item.addEventListener('click', function () {
// 移除所有 div 元素的 active 类
navItems.forEach(function (navItem) {
navItem.classList.remove('active');
});
// 为当前点击的 div 元素添加 active 类
this.classList.add('active');
// 打开对应的数据 URL 页面
const url = this.getAttribute('data-url');
window.open(`./${url}.html`);
});
});
});