diff --git a/unilife-frontend/src/views/admin/AdminDashboard.vue b/unilife-frontend/src/views/admin/AdminDashboard.vue index 60d4f9d..ec5c41c 100644 --- a/unilife-frontend/src/views/admin/AdminDashboard.vue +++ b/unilife-frontend/src/views/admin/AdminDashboard.vue @@ -755,12 +755,19 @@
学期: - + > + + + + + + +
@@ -1451,11 +1458,22 @@ const loadSchedules = async () => { const response = await adminApi.getUserSchedule(selectedUser.value.id, selectedSemester.value) if (response.code === 200) { userSchedule.value = response.data - // 提取所有课程到列表视图 - allCourses.value = [] - Object.values(userSchedule.value.schedule).forEach((courses: any) => { - allCourses.value.push(...courses) - }) + // 从schedule对象中提取所有课程到平铺数组 + const courses = [] + if (userSchedule.value.schedule) { + for (let day = 1; day <= 7; day++) { + const dayCourses = userSchedule.value.schedule[day] || [] + dayCourses.forEach(course => { + courses.push({ + ...course, + dayOfWeek: day + }) + }) + } + } + allCourses.value = courses + // 为了兼容性,也在userSchedule中添加courses字段 + userSchedule.value.courses = courses } } catch (error) { ElMessage.error('加载用户课表失败') @@ -2098,19 +2116,28 @@ const searchScheduleUsers = async (query: string) => { } const getCoursesForTimeSlot = (dayOfWeek: number, timeSlot: any) => { - if (!userSchedule.value?.schedule?.[dayOfWeek]) { + if (!userSchedule.value?.courses) { return [] } - return userSchedule.value.schedule[dayOfWeek].filter((course: any) => { - // 简单的时间匹配逻辑,实际应该更精确 - const courseStartTime = course.startTime - const courseEndTime = course.endTime - const slotStartTime = timeSlot.time.split('-')[0] - const slotEndTime = timeSlot.time.split('-')[1] + return userSchedule.value.courses.filter((course: any) => { + // 检查星期几是否匹配 + if (course.dayOfWeek !== dayOfWeek) { + return false + } + + // 检查时间是否重叠 + const courseStartTime = course.startTime // 格式: "08:00:00" + const courseEndTime = course.endTime // 格式: "09:40:00" + const slotStartTime = timeSlot.time.split('-')[0] // 格式: "08:00" + const slotEndTime = timeSlot.time.split('-')[1] // 格式: "09:50" + + // 转换为可比较的格式(去掉秒部分) + const courseStart = courseStartTime.substring(0, 5) // "08:00" + const courseEnd = courseEndTime.substring(0, 5) // "09:40" - // 这里应该有更精确的时间重叠判断 - return courseStartTime <= slotEndTime && courseEndTime >= slotStartTime + // 检查时间重叠:课程开始时间 < 时间段结束时间 && 课程结束时间 > 时间段开始时间 + return courseStart < slotEndTime && courseEnd > slotStartTime }) } diff --git a/unilife-server/src/main/resources/db/rebuild-database.sql b/unilife-server/src/main/resources/db/rebuild-database.sql index e8b86d9..2f64e9e 100644 --- a/unilife-server/src/main/resources/db/rebuild-database.sql +++ b/unilife-server/src/main/resources/db/rebuild-database.sql @@ -238,7 +238,7 @@ INSERT INTO `categories` (`name`, `description`, `icon`, `sort`, `status`) VALUE -- 插入武汉大学学生用户数据 INSERT INTO `users` (`username`, `email`, `password`, `nickname`, `bio`, `gender`, `student_id`, `department`, `major`, `grade`, `points`, `role`, `status`, `is_verified`, `created_at`) VALUES -- 文理学部学生 -('czq2024', 'czq@whu.edu.cn', '123456', '珞珈数学狗', '数学与统计学院2022级数学类,热爱数学建模,ACM银牌选手', 1, '2022301140001', '数学与统计学院', '数学类', '2022级', 150, 0, 1, 1, '2024-09-01 09:00:00'), +('czq2025', 'czq@whu.edu.cn', '123456', '珞珈数学狗', '数学与统计学院2022级数学类,热爱数学建模,ACM银牌选手', 1, '2022301140001', '数学与统计学院', '数学类', '2022级', 150, 0, 1, 1, '2024-09-01 09:00:00'), ('lihua_cs', 'lihua@whu.edu.cn', '123456', '代码诗人', '计算机学院2021级软件工程,全栈开发爱好者,开源项目贡献者', 1, '2021301120001', '计算机学院', '软件工程', '2021级', 230, 0, 1, 1, '2024-09-01 10:00:00'), ('wangming_law', 'wangming@whu.edu.cn', '123456', '法学小白', '法学院2023级法学专业,模拟法庭常客,梦想成为大律师', 1, '2023301080001', '法学院', '法学', '2023级', 80, 0, 1, 1, '2024-09-01 11:00:00'), ('zhangwei_chem', 'zhangwei@whu.edu.cn', '123456', '化学实验员', '化学与分子科学学院2022级化学专业,实验室常驻,合成达人', 1, '2022301130001', '化学与分子科学学院', '化学', '2022级', 120, 0, 1, 1, '2024-09-01 12:00:00'), @@ -389,14 +389,7 @@ INSERT INTO `comment_likes` (`user_id`, `comment_id`, `created_at`) VALUES (7, 9, '2024-12-21 18:00:00'), (8, 9, '2024-12-21 18:15:00'); --- 插入学习资源数据 -INSERT INTO `resources` (`user_id`, `title`, `description`, `file_url`, `file_size`, `file_type`, `category_id`, `download_count`, `like_count`, `status`) VALUES -(2, '数据结构课程设计报告', '包含完整的数据结构课程设计实验报告,涵盖栈、队列、树、图等数据结构的实现和应用。', '/files/data-structure-report.pdf', 2048576, 'application/pdf', 1, 15, 0, 1), -(3, '算法导论学习笔记', '详细的算法导论学习笔记,包含排序算法、图算法、动态规划等重要算法的分析和实现。', '/files/algorithm-notes.docx', 1572864, 'application/msword', 1, 25, 0, 1), -(2, '高等数学期末复习资料', '高等数学期末考试复习资料合集,包含重要公式、定理证明和典型习题解答。', '/files/calculus-review.pdf', 3145728, 'application/pdf', 1, 32, 0, 1), -(6, '宏观经济学PPT课件', '经济学专业课件,包含货币政策、财政政策等核心内容。', '/files/macro-economics.pptx', 5242880, 'application/vnd.ms-powerpoint', 1, 20, 0, 1), -(14, '校园生活指南', '新生校园生活指南,包含宿舍管理、食堂介绍、图书馆使用等实用信息。', '/files/campus-guide.pdf', 1048576, 'application/pdf', 2, 45, 0, 1), -(3, '计算机网络实验代码', '计算机网络课程实验代码合集,包含Socket编程、HTTP协议实现等。', '/files/network-lab-code.zip', 4194304, 'application/zip', 5, 18, 0, 1); + -- 插入课程数据 INSERT INTO `courses` (`user_id`, `name`, `teacher`, `location`, `day_of_week`, `start_time`, `end_time`, `start_week`, `end_week`, `semester`, `color`, `status`) VALUES @@ -420,7 +413,59 @@ INSERT INTO `courses` (`user_id`, `name`, `teacher`, `location`, `day_of_week`, -- 经济学专业学生(ID=7 liuxin_econ)的课程 (7, '宏观经济学', '吴教授', '经管大楼B201', 1, '08:00:00', '09:40:00', 1, 16, '2024-2025-2', '#409EFF', 1), -(7, '计量经济学', '郑老师', '经管大楼机房', 2, '10:00:00', '11:40:00', 1, 16, '2024-2025-2', '#67C23A', 1); +(7, '计量经济学', '郑老师', '经管大楼机房', 2, '10:00:00', '11:40:00', 1, 16, '2024-2025-2', '#67C23A', 1), + +-- 水利工程学生(ID=8 chenfei_water)的课程 +(8, '流体力学', '李教授', '水利学院大楼', 1, '14:00:00', '15:40:00', 1, 16, '2024-2025-2', '#409EFF', 1), +(8, '水工建筑物', '王老师', '水利学院实验室', 3, '10:00:00', '11:40:00', 1, 16, '2024-2025-2', '#67C23A', 1), + +-- 电气工程学生(ID=9 sunhao_power)的课程 +(9, '电路原理', '张教授', '电气学院大楼', 2, '08:00:00', '09:40:00', 1, 16, '2024-2025-2', '#409EFF', 1), +(9, '电力系统分析', '刘老师', '电气学院机房', 4, '15:50:00', '17:30:00', 1, 16, '2024-2025-2', '#67C23A', 1), + +-- 土木工程学生(ID=10 wujing_civil)的课程 +(10, '结构力学', '陈教授', '土建学院大楼', 1, '15:50:00', '17:30:00', 1, 16, '2024-2025-2', '#409EFF', 1), +(10, '材料力学', '杨老师', '土建学院实验室', 3, '08:00:00', '09:40:00', 1, 16, '2024-2025-2', '#67C23A', 1), + +-- 遥感专业学生(ID=11 liqiang_remote)的课程 +(11, '遥感原理', '周教授', '遥感学院大楼', 2, '14:00:00', '15:40:00', 1, 16, '2024-2025-2', '#409EFF', 1), +(11, '数字图像处理', '吴老师', '遥感学院机房', 5, '10:00:00', '11:40:00', 1, 16, '2024-2025-2', '#67C23A', 1), + +-- 测绘专业学生(ID=12 zhaoli_survey)的课程 +(12, '测量学', '马教授', '测绘学院大楼', 1, '10:00:00', '11:40:00', 1, 16, '2024-2025-2', '#409EFF', 1), +(12, 'GPS原理', '林老师', '测绘学院实验室', 4, '08:00:00', '09:40:00', 1, 16, '2024-2025-2', '#67C23A', 1), + +-- 临床医学学生(ID=13 huangyan_med)的课程 +(13, '内科学', '赵教授', '人民医院', 1, '08:00:00', '10:00:00', 1, 16, '2024-2025-2', '#409EFF', 1), +(13, '病理学', '钱老师', '医学院大楼', 3, '14:00:00', '16:00:00', 1, 16, '2024-2025-2', '#67C23A', 1), + +-- 口腔医学学生(ID=14 wangpeng_dental)的课程 +(14, '口腔解剖学', '孙教授', '口腔医院', 2, '09:00:00', '11:00:00', 1, 16, '2024-2025-2', '#409EFF', 1), +(14, '口腔修复学', '李老师', '口腔医院实验室', 4, '14:00:00', '16:00:00', 1, 16, '2024-2025-2', '#67C23A', 1), + +-- 文学专业学生(ID=15 luxiaoya_chinese)的课程 +(15, '中国古代文学', '王教授', '文学院大楼', 1, '14:00:00', '15:40:00', 1, 16, '2024-2025-2', '#409EFF', 1), +(15, '古代汉语', '张老师', '文学院研讨室', 3, '10:00:00', '11:40:00', 1, 16, '2024-2025-2', '#67C23A', 1), + +-- 历史专业学生(ID=16 zhoujie_history)的课程 +(16, '中国古代史', '陈教授', '历史学院大楼', 2, '10:00:00', '11:40:00', 1, 16, '2024-2025-2', '#409EFF', 1), +(16, '史学理论', '刘老师', '历史学院研讨室', 5, '14:00:00', '15:40:00', 1, 16, '2024-2025-2', '#67C23A', 1), + +-- 新闻专业学生(ID=17 tanglei_news)的课程 +(17, '新闻写作', '王教授', '新传学院301', 2, '10:00:00', '11:40:00', 1, 16, '2024-2025-2', '#409EFF', 1), +(17, '传播学概论', '李教授', '新传学院201', 4, '14:00:00', '15:40:00', 1, 16, '2024-2025-2', '#67C23A', 1), +(17, '媒体伦理', '张教授', '新传学院205', 5, '16:00:00', '17:40:00', 1, 16, '2024-2025-2', '#E6A23C', 1), + +-- 添加不同学期的课程数据 +-- 2024-2025-1学期的课程 +(3, '线性代数', '张教授', '数学学院楼201', 1, '08:00:00', '09:40:00', 1, 16, '2024-2025-1', '#409EFF', 1), +(4, '操作系统', '赵教授', '信息学部计算机楼', 2, '10:00:00', '11:40:00', 1, 16, '2024-2025-1', '#409EFF', 1), +(17, '新闻学概论', '王教授', '新传学院301', 1, '10:00:00', '11:40:00', 1, 16, '2024-2025-1', '#409EFF', 1), + +-- 2023-2024-2学期的课程 +(3, '高等数学II', '李教授', '数学学院楼301', 3, '14:00:00', '15:40:00', 1, 16, '2023-2024-2', '#67C23A', 1), +(4, '数据库原理', '钱老师', '信息学部B楼302', 4, '14:00:00', '15:40:00', 1, 16, '2023-2024-2', '#67C23A', 1), +(17, '中外新闻史', '李教授', '新传学院201', 3, '14:00:00', '15:40:00', 1, 16, '2023-2024-2', '#67C23A', 1); -- 插入日程数据 INSERT INTO `schedules` (`user_id`, `title`, `description`, `start_time`, `end_time`, `location`, `is_all_day`, `reminder`, `color`, `status`) VALUES