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(() => {