From 4c373b7e5e02c492a88b6f268803152f5fba625a Mon Sep 17 00:00:00 2001 From: seahi Date: Thu, 20 Mar 2025 09:49:38 +0800 Subject: [PATCH] =?UTF-8?q?fix=20=E7=BB=9F=E4=B8=80=E6=B5=8B=E8=AF=95?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E6=9D=A5=E6=BA=90=20&&=20feat=20=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E9=9A=90=E8=97=8F=E5=91=A8=E6=9C=AB=E5=92=8C=E6=99=9A?= =?UTF-8?q?=E9=97=B4=E8=AF=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TeachMate/Preview Content/PreviewData.swift | 4 +- TeachMate/Views/CourseScheduleView.swift | 82 ++++++++++++++------- 2 files changed, 57 insertions(+), 29 deletions(-) diff --git a/TeachMate/Preview Content/PreviewData.swift b/TeachMate/Preview Content/PreviewData.swift index 267c352..8deb02b 100644 --- a/TeachMate/Preview Content/PreviewData.swift +++ b/TeachMate/Preview Content/PreviewData.swift @@ -15,7 +15,7 @@ enum PreviewData { // MARK: - 共享的日期和时间 /// 当前学期开始日期(2025年春季学期) - static let currentSemesterStartDate = Calendar.current.date(from: DateComponents(year: 2025, month: 2, day: 17))! + static let currentSemesterStartDate = Calendar.current.date(from: DateComponents(year: 2025, month: 2, day: 24))! /// 当前学期结束日期 static let currentSemesterEndDate = Calendar.current.date(byAdding: .day, value: 18 * 7, to: currentSemesterStartDate)! @@ -59,7 +59,7 @@ enum PreviewData { /// 常见班级 static let classes = [ - "计算机1班", "计算机2班", "软件工程1班", "软件工程2班", + "云计算G23-1", "软件G22-3", "软件G22-4", "软件工程2班", "网络工程1班", "人工智能1班", "数据科学1班", "信息安全1班" ] diff --git a/TeachMate/Views/CourseScheduleView.swift b/TeachMate/Views/CourseScheduleView.swift index 29a120e..fdb51a5 100644 --- a/TeachMate/Views/CourseScheduleView.swift +++ b/TeachMate/Views/CourseScheduleView.swift @@ -39,6 +39,34 @@ struct CourseScheduleView: View { courses.filter { $0.semester?.id == semester.id } } + // 判断是否有周六日的课程 + private var hasWeekendCourses: Bool { + filteredCourses.contains { course in + course.sessions.contains { session in + session.weekday == 6 || session.weekday == 7 + } + } + } + + // 判断是否有9/10节的课程 + private var hasLateTimeslotCourses: Bool { + filteredCourses.contains { course in + course.sessions.contains { session in + session.timeSlot == 5 // 5 对应 9/10 节 + } + } + } + + // 获取应该显示的星期 + private var displayWeekdays: [Int] { + hasWeekendCourses ? Array(1...7) : Array(1...5) + } + + // 获取应该显示的时间段 + private var displayTimeSlots: [TimeSlot] { + hasLateTimeslotCourses ? TimeSlot.defaultSlots : TimeSlot.defaultSlots.filter { $0.id != 5 } + } + // 获取特定单元格的课程 private func getCoursesForCell(weekday: Int, timeSlot: Int) -> [CourseModel] { return filteredCourses.filter { course in @@ -62,7 +90,7 @@ struct CourseScheduleView: View { headerRow // 课程行 - ForEach(TimeSlot.defaultSlots) { timeSlot in + ForEach(displayTimeSlots) { timeSlot in courseRow(timeSlot: timeSlot) } } @@ -134,8 +162,8 @@ struct CourseScheduleView: View { .border(Color.gray.opacity(0.5), width: 0.5) // 星期表头 - ForEach(0..<7, id: \.self) { index in - Text(weekdays[index]) + ForEach(displayWeekdays, id: \.self) { weekday in + Text(weekdays[weekday - 1]) .font(.headline) .frame(width: dayCellWidth, height: headerHeight) .background(Color.gray.opacity(0.3)) @@ -160,7 +188,7 @@ struct CourseScheduleView: View { .border(Color.gray.opacity(0.5), width: 0.5) // 每天的课程单元格 - ForEach(1...7, id: \.self) { weekday in + ForEach(displayWeekdays, id: \.self) { weekday in courseCell(weekday: weekday, timeSlot: timeSlot.id) } } @@ -222,31 +250,31 @@ struct CourseScheduleView: View { // 添加示例课程数据 private func addSampleCourses() { - var sampleCourses: [CourseModel] = [] + // 使用 PreviewData 中的示例数据 + let container = PreviewData.createContainer() + let fetchDescriptor = FetchDescriptor() + let sampleCourses = try? container.mainContext.fetch(fetchDescriptor) + .filter { $0.semester?.id != semester.id } // 过滤掉已经属于当前学期的课程 - // 创建有多个课时的课程 - let aiCourse = CourseModel(name: "人工智能技术与应用", colorHex: "#FADBD8", isNew: false) - aiCourse.addSession(weekday: 4, timeSlot: 5, location: "CMA101陈栋教室", schoolClass: "环艺G24-1,环艺G24-2,电竞G24-1") - aiCourse.addSession(weekday: 5, timeSlot: 5, location: "CMA101陈栋教室", schoolClass: "视传G24-1,视传G24-2,视传G24-3") - - let dockerCourse = CourseModel(name: "容器云架构与运维", colorHex: "#D6EAF8", isNew: true) - dockerCourse.addSession(weekday: 3, timeSlot: 3, location: "XXGY402", schoolClass: "云计算G23-1") - dockerCourse.addSession(weekday: 5, timeSlot: 1, location: "XXGY404", schoolClass: "云计算G23-1") - - let networkCourse = CourseModel(name: "网络组建与维护", colorHex: "#FCF3CF", isNew: true) - networkCourse.addSession(weekday: 1, timeSlot: 3, location: "XXA2305", schoolClass: "软件G23-3") - networkCourse.addSession(weekday: 2, timeSlot: 3, location: "XXA2401", schoolClass: "软件G23-4") - networkCourse.addSession(weekday: 3, timeSlot: 2, location: "XXA2303", schoolClass: "软件G23-3") - networkCourse.addSession(weekday: 3, timeSlot: 4, location: "XXA2504", schoolClass: "软件G23-4") - - sampleCourses.append(aiCourse) - sampleCourses.append(dockerCourse) - sampleCourses.append(networkCourse) - - for course in sampleCourses { - course.semester = semester - modelContext.insert(course) + for course in sampleCourses ?? [] { + // 创建新课程,复制原课程的属性 + let newCourse = CourseModel(name: course.name, colorHex: course.colorHex) + + + // 复制课时信息 + for session in course.sessions { + newCourse.addSession( + weekday: session.weekday, + timeSlot: session.timeSlot, + location: session.location, + schoolClass: session.schoolCalss + ) + } + + // 关联到当前学期并插入 + newCourse.semester = semester + modelContext.insert(newCourse) } }