From 0ce758191ec7d92aec6aee9b0d9340cc1293f904 Mon Sep 17 00:00:00 2001 From: biss Date: Fri, 14 Aug 2026 19:35:08 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AD=9B=E9=80=89=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controllers/AttendanceController.cs | 11 +++++++- .../Controllers/GradesController.cs | 22 +++++++++++++++- .../Controllers/TeachingTasksController.cs | 19 +++++++++++++- web/src/views/GradeAnalyticsView.vue | 16 ++++++++++-- web/src/views/GradesView.vue | 19 +++++++++++++- web/src/views/TeacherAttendanceView.vue | 25 +++++++++++++++++++ web/src/views/TeachingTasksView.vue | 13 ++++++++++ 7 files changed, 119 insertions(+), 6 deletions(-) diff --git a/src/Jiaowu.Api/Controllers/AttendanceController.cs b/src/Jiaowu.Api/Controllers/AttendanceController.cs index c61eb50..573852d 100644 --- a/src/Jiaowu.Api/Controllers/AttendanceController.cs +++ b/src/Jiaowu.Api/Controllers/AttendanceController.cs @@ -37,7 +37,8 @@ public sealed class AttendanceController( string? keyword = null, int page = 1, int pageSize = 20, - CancellationToken cancellationToken = default) + CancellationToken cancellationToken = default, + string? classKeyword = null) { page = Math.Max(1, page); pageSize = Math.Clamp(pageSize, 10, 50); @@ -54,6 +55,14 @@ public sealed class AttendanceController( x.Course!.Code.Contains(keyword) || x.Course.Name.Contains(keyword)); } + if (!string.IsNullOrWhiteSpace(classKeyword)) + { + classKeyword = classKeyword.Trim(); + tasks = tasks.Where(x => x.Classes.Any(item => + item.AdministrativeClass!.Code.Contains(classKeyword) || + item.AdministrativeClass.Name.Contains(classKeyword) || + item.AdministrativeClass.Major!.Name.Contains(classKeyword))); + } var total = await tasks.CountAsync(cancellationToken); var result = await tasks .OrderBy(x => x.Course!.Code) diff --git a/src/Jiaowu.Api/Controllers/GradesController.cs b/src/Jiaowu.Api/Controllers/GradesController.cs index d4aa2dc..a73c8a0 100644 --- a/src/Jiaowu.Api/Controllers/GradesController.cs +++ b/src/Jiaowu.Api/Controllers/GradesController.cs @@ -51,7 +51,10 @@ public sealed class GradesController( string? keyword = null, int page = 1, int pageSize = 20, - CancellationToken cancellationToken = default) + CancellationToken cancellationToken = default, + Guid? collegeId = null, + string? teacherKeyword = null, + string? classKeyword = null) { page = Math.Max(1, page); pageSize = Math.Clamp(pageSize, 10, 50); @@ -61,6 +64,8 @@ public sealed class GradesController( x.Status == TeachingTaskStatus.Closed); if (academicTermId.HasValue) source = source.Where(x => x.AcademicTermId == academicTermId); + if (collegeId.HasValue) + source = source.Where(x => x.Course!.CollegeId == collegeId.Value); if (status.HasValue) source = source.Where(x => db.GradeSheets.Any(sheet => sheet.TeachingTaskId == x.Id && sheet.Status == status.Value)); @@ -73,6 +78,21 @@ public sealed class GradesController( x.Course!.Code.Contains(keyword) || x.Course.Name.Contains(keyword)); } + if (!string.IsNullOrWhiteSpace(teacherKeyword)) + { + teacherKeyword = teacherKeyword.Trim(); + source = source.Where(x => x.Teachers.Any(item => + item.Teacher!.Name.Contains(teacherKeyword) || + item.Teacher.TeacherNumber.Contains(teacherKeyword))); + } + if (!string.IsNullOrWhiteSpace(classKeyword)) + { + classKeyword = classKeyword.Trim(); + source = source.Where(x => x.Classes.Any(item => + item.AdministrativeClass!.Code.Contains(classKeyword) || + item.AdministrativeClass.Name.Contains(classKeyword) || + item.AdministrativeClass.Major!.Name.Contains(classKeyword))); + } var total = await source.CountAsync(cancellationToken); var items = await source diff --git a/src/Jiaowu.Api/Controllers/TeachingTasksController.cs b/src/Jiaowu.Api/Controllers/TeachingTasksController.cs index 1e413d4..39854a3 100644 --- a/src/Jiaowu.Api/Controllers/TeachingTasksController.cs +++ b/src/Jiaowu.Api/Controllers/TeachingTasksController.cs @@ -37,7 +37,9 @@ public sealed class TeachingTasksController( Guid? academicTermId = null, Guid? collegeId = null, TeachingTaskStatus? status = null, - CancellationToken cancellationToken = default) + CancellationToken cancellationToken = default, + string? teacherKeyword = null, + string? classKeyword = null) { page = Math.Max(1, page); pageSize = Math.Clamp(pageSize, 10, 100); @@ -56,6 +58,21 @@ public sealed class TeachingTasksController( x.Course!.Code.Contains(keyword) || x.Course.Name.Contains(keyword)); } + if (!string.IsNullOrWhiteSpace(teacherKeyword)) + { + teacherKeyword = teacherKeyword.Trim(); + source = source.Where(x => x.Teachers.Any(item => + item.Teacher!.Name.Contains(teacherKeyword) || + item.Teacher.TeacherNumber.Contains(teacherKeyword))); + } + if (!string.IsNullOrWhiteSpace(classKeyword)) + { + classKeyword = classKeyword.Trim(); + source = source.Where(x => x.Classes.Any(item => + item.AdministrativeClass!.Code.Contains(classKeyword) || + item.AdministrativeClass.Name.Contains(classKeyword) || + item.AdministrativeClass.Major!.Name.Contains(classKeyword))); + } var total = await source.CountAsync(cancellationToken); var items = await source diff --git a/web/src/views/GradeAnalyticsView.vue b/web/src/views/GradeAnalyticsView.vue index 3def705..ccebfce 100644 --- a/web/src/views/GradeAnalyticsView.vue +++ b/web/src/views/GradeAnalyticsView.vue @@ -136,6 +136,15 @@ async function loadClasses(reset = false) { } } +function resetFilters() { + termId.value = defaultAcademicTermId(terms.value) + collegeId.value = undefined + keyword.value = '' + teacherKeyword.value = '' + riskOnly.value = false + loadClasses(true) +} + async function loadReport(item = selected.value) { if (!item) return selected.value = item @@ -428,6 +437,7 @@ onBeforeUnmount(() => { 仅看预警班 查询 + 重置
@@ -521,7 +531,9 @@ onBeforeUnmount(() => {