同学期、同课程、同教学班的实验项目合并展示,组内连续排列。

管理列表改为数据库筛选、按教学任务服务端分页(10–100 条/页)。
增加开课学院、课程名称/编码、教学班、任课教师、教学任务号筛选。
增加当前页草稿项目的批量选中、批量发布、批量删除;后端会再次校验权限、状态和发布条件。
确认框改为固定居中白色底板与阴影,不再出现只有文字按钮、没有底色的情况。
This commit is contained in:
2026-08-09 19:44:45 +08:00 Unverified
parent 25a1480739
commit 97aa23bc64
12 changed files with 793 additions and 78 deletions
@@ -37,6 +37,53 @@ public sealed class ExperimentsControllerTests
});
}
[Fact]
public async Task CentralizedBatchProjects_CreatesOneProjectForEveryScheduledExperimentLesson()
{
await using var fixture = await ExperimentFixture.CreateAsync();
fixture.Db.ScheduleEntries.Add(new ScheduleEntry
{
SchedulePlanId = fixture.ScheduleEntry.SchedulePlanId,
TeachingTaskId = fixture.Task.Id,
Kind = ScheduleEntryKind.Experiment,
ClassroomId = fixture.SecondClassroom.Id,
DayOfWeek = 3,
StartPeriod = 5,
PeriodCount = 2,
StartWeek = 1,
EndWeek = 8,
WeekPattern = WeekPattern.All
});
await fixture.Db.SaveChangesAsync();
var result = await fixture.Controller(fixture.ManagerScope).CreateProjects(
new ExperimentProjectBatchRequest(
[fixture.Task.Id],
"LAB-ALL",
"全部课表实验",
ExperimentArrangementMode.Centralized,
null,
null,
fixture.Term.StartDate,
fixture.Term.StartDate.AddDays(14)),
CancellationToken.None);
Assert.IsType<CreatedResult>(result);
var projects = await fixture.Db.ExperimentProjects
.Where(x => x.Code == "LAB-ALL")
.OrderBy(x => x.ScheduleEntryId)
.ToListAsync();
Assert.Equal(16, projects.Count);
Assert.All(projects, project =>
{
Assert.Equal(fixture.Task.Id, project.TeachingTaskId);
Assert.Equal(ExperimentArrangementMode.Centralized, project.ArrangementMode);
Assert.NotNull(project.ScheduleEntryId);
});
Assert.Equal(2, projects.Select(x => x.ScheduleEntryId).Distinct().Count());
Assert.Equal(8, projects.Select(x => x.ScheduleWeek).Distinct().Count());
}
[Fact]
public async Task BatchSessions_RollsBackAllRowsWhenOneConflicts()
{