diff --git a/src/Jiaowu.Api/Controllers/TimetablesController.cs b/src/Jiaowu.Api/Controllers/TimetablesController.cs index cad8ef4..dbe6340 100644 --- a/src/Jiaowu.Api/Controllers/TimetablesController.cs +++ b/src/Jiaowu.Api/Controllers/TimetablesController.cs @@ -45,6 +45,30 @@ public sealed class TimetablesController( CancellationToken cancellationToken) => BuildTimetableAsync(classId, academicTermId, null, cancellationToken); + [HttpGet("my-class")] + [Authorize(Roles = SystemRoles.Student)] + public async Task GetMyClass(CancellationToken cancellationToken) + { + if (!Guid.TryParse(User.FindFirstValue(ClaimTypes.NameIdentifier), out var userId)) + return Unauthorized(); + + var administrativeClassId = await db.Students.AsNoTracking() + .Where(x => x.UserId == userId) + .Select(x => (Guid?)x.AdministrativeClassId) + .FirstOrDefaultAsync(cancellationToken); + if (!administrativeClassId.HasValue) + { + return Conflict(new ProblemDetails + { + Title = "档案未关联", + Detail = "当前登录账号没有关联学生档案,请联系教务管理员。", + Status = StatusCodes.Status409Conflict + }); + } + + return Ok(new { AdministrativeClassId = administrativeClassId.Value }); + } + [HttpGet("teachers/{teacherId:guid}")] [AllowAnonymous] public async Task GetTeacherTimetable( diff --git a/web/src/views/TimetableView.vue b/web/src/views/TimetableView.vue index 4f326c3..03fabb1 100644 --- a/web/src/views/TimetableView.vue +++ b/web/src/views/TimetableView.vue @@ -403,7 +403,11 @@ async function loadPublicOptions() { termId.value = defaultAcademicTermId(data.terms) ?? data.terms.find((item: any) => item.hasPublishedTimetable)?.id ?? '' - const initialClass = data.classes.find((item: any) => item.hasPublishedTimetable) + const studentClassId = auth.user?.roles.includes('Student') + ? (await http.get('/timetables/my-class')).data.administrativeClassId + : undefined + const initialClass = data.classes.find((item: any) => item.id === studentClassId) + ?? data.classes.find((item: any) => item.hasPublishedTimetable) ?? data.classes[0] classId.value = initialClass?.id ?? '' setClassFilters(initialClass)