教学大屏

This commit is contained in:
biss committed 2026-08-11 17:15:05 +08:00
1 parent cd4ffa1d85
commit 3ea529ea76
6 files changed
+143

No files matched your search

@@ -242,6 +242,24 @@ public sealed class TimetableManagementController(
return File(TimetablePdfExporter.Create(timetables), "application/pdf", fileName);
}
[HttpPost("display-links/export.xlsx")]
public async Task<ActionResult> ExportDisplayLinks(VenueDisplayLinkExportRequest request, CancellationToken cancellationToken)
{
var classroomIds = request.ClassroomIds.Distinct().Take(200).ToArray();
var buildingIds = request.BuildingIds.Distinct().Take(100).ToArray();
if (classroomIds.Length + buildingIds.Length == 0)
return ValidationProblem("请至少选择一个教室或教学楼。", statusCode: StatusCodes.Status400BadRequest);
var classrooms = await db.Classrooms.AsNoTracking().WhereIn(classroomIds, x => x.Id)
.OrderBy(x => x.Building!.Name).ThenBy(x => x.Code)
.Select(x => new object?[] { "教室当天课程", x.Building!.Name + " · " + x.Name, "/venue-display/classroom/" + x.Id })
.ToListAsync(cancellationToken);
var buildings = await db.Buildings.AsNoTracking().WhereIn(buildingIds, x => x.Id).OrderBy(x => x.Name)
.Select(x => new object?[] { "教学楼空余教室", x.Name, "/venue-display/building/" + x.Id })
.ToListAsync(cancellationToken);
var bytes = ExcelWorkbookHelper.Create("展牌链接", ["展牌类型", "场地", "相对链接"], classrooms.Concat(buildings).ToList());
return File(bytes, ExcelWorkbookHelper.ContentType, "场地信息展牌链接.xlsx");
}
private async Task<(TimetableData? Result, ActionResult? Error)> LoadAuthorizedAsync(
TimetableResourceType resourceType,
Guid resourceId,
@@ -290,6 +308,8 @@ public sealed record TimetableBatchExportRequest(
Guid AcademicTermId,
Guid? SchedulePlanId);
public sealed record VenueDisplayLinkExportRequest(IReadOnlyCollection<Guid> ClassroomIds, IReadOnlyCollection<Guid> BuildingIds);
[ApiController]
[Route("api/timetables")]
public sealed class FreeClassroomsController(