Files
ZhiQiXiaoYuan/pages/courses/courses.js
ChuXun eaab9a762a 1
2025-10-19 20:28:31 +08:00

205 lines
5.1 KiB
JavaScript

// pages/courses/courses.js
const { coursesData } = require('../../utils/data.js')
const { showSuccess, showError } = require('../../utils/util.js')
const learningTracker = require('../../utils/learningTracker.js')
Page({
data: {
allCourses: [],
displayCourses: [],
searchKeyword: '',
selectedCategory: 'all',
categories: [
{ id: 'all', name: '全部' },
{ id: '必修', name: '必修' },
{ id: '专业必修', name: '专业必修' },
{ id: '选修', name: '选修' },
{ id: '专业选修', name: '专业选修' }
],
showFilter: false,
selectedDepartment: '全部', // 修改为'全部'而不是'all'
departments: [
'全部',
'数学系',
'物理系',
'计算机学院',
'外国语学院'
]
},
onLoad() {
try {
this.loadCourses()
} catch (error) {
console.error('课程加载失败:', error)
showError('课程数据加载失败')
}
},
onShow() {
// 开始跟踪学习时间
learningTracker.onPageShow('course')
// 更新自定义TabBar选中状态
if (typeof this.getTabBar === 'function' && this.getTabBar()) {
this.getTabBar().setData({
selected: 1
})
}
},
onHide() {
// 停止跟踪学习时间
learningTracker.onPageHide()
},
onUnload() {
// 记录学习时长
learningTracker.onPageUnload()
},
// 加载课程数据
loadCourses() {
const courses = coursesData.map(course => ({
...course,
isFavorite: this.checkFavorite(course.id)
}))
this.setData({
allCourses: courses,
displayCourses: courses
})
},
// 检查是否已收藏
checkFavorite(courseId) {
const favorites = wx.getStorageSync('favoriteCourses') || []
return favorites.includes(courseId)
},
// 搜索课程(防抖处理)
onSearchInput(e) {
const keyword = e.detail.value
this.setData({ searchKeyword: keyword })
// 清除之前的延迟搜索
if (this.searchTimer) {
clearTimeout(this.searchTimer)
}
// 设置300ms防抖
this.searchTimer = setTimeout(() => {
this.filterCourses()
}, 300)
},
// 分类筛选
onCategoryChange(e) {
const category = e.currentTarget.dataset.category
this.setData({ selectedCategory: category })
this.filterCourses()
},
// 院系筛选
onDepartmentChange(e) {
const index = e.detail.value
this.setData({
selectedDepartment: this.data.departments[index],
showFilter: false
})
this.filterCourses()
},
// 筛选课程
filterCourses() {
const { allCourses, searchKeyword, selectedCategory, selectedDepartment } = this.data
console.log('筛选条件:', {
searchKeyword,
selectedCategory,
selectedDepartment,
allCoursesCount: allCourses.length
})
let filtered = allCourses.filter(course => {
// 搜索关键词过滤(不区分大小写,去除空格)
const keyword = (searchKeyword || '').trim().toLowerCase()
const matchKeyword = !keyword ||
(course.name && course.name.toLowerCase().includes(keyword)) ||
(course.teacher && course.teacher.toLowerCase().includes(keyword)) ||
(course.code && course.code.toLowerCase().includes(keyword))
// 分类过滤
const matchCategory = selectedCategory === 'all' ||
course.category === selectedCategory
// 院系过滤
const matchDepartment = selectedDepartment === '全部' ||
course.department === selectedDepartment
return matchKeyword && matchCategory && matchDepartment
})
console.log('筛选结果:', filtered.length, '门课程')
this.setData({ displayCourses: filtered })
},
// 显示/隐藏筛选面板
toggleFilter() {
this.setData({ showFilter: !this.data.showFilter })
},
// 收藏课程
onFavorite(e) {
const { id } = e.currentTarget.dataset
const { allCourses } = this.data
// 更新课程收藏状态
const updatedCourses = allCourses.map(course => {
if (course.id === id) {
course.isFavorite = !course.isFavorite
// 保存到本地存储
let favorites = wx.getStorageSync('favoriteCourses') || []
if (course.isFavorite) {
favorites.push(id)
showSuccess('收藏成功')
} else {
favorites = favorites.filter(fid => fid !== id)
showSuccess('取消收藏')
}
wx.setStorageSync('favoriteCourses', favorites)
}
return course
})
this.setData({ allCourses: updatedCourses })
this.filterCourses()
},
// 查看课程详情
onCourseDetail(e) {
const { id } = e.currentTarget.dataset
wx.navigateTo({
url: `/pages/course-detail/course-detail?id=${id}`
})
},
// 清空筛选
onResetFilter() {
this.setData({
searchKeyword: '',
selectedCategory: 'all',
selectedDepartment: '全部',
showFilter: false
})
this.filterCourses()
},
// 清空搜索
onClearSearch() {
this.setData({ searchKeyword: '' })
this.filterCourses()
}
})