feat: 添加学生提交系统功能
Some checks failed
TechAct / explore-gitea-actions (push) Failing after 30s

- 添加学生提交管理服务 (StudentSubmissionService, StudentSubmissionDetailService)
- 新增学生提交相关控制器 (StudentSubmissionController, StudentSubmissionDetailController)
- 添加学生提交数据传输对象 (StudentSubmissionDetailDto, StudentSubmissionSummaryDto)
- 新增学生提交相关页面组件 (StudentExamView, ExamDetailView, StudentCard等)
- 添加学生提交信息卡片组件 (SubmissionInfoCard, TeacherSubmissionInfoCard)
- 更新数据库迁移文件以支持提交系统
This commit is contained in:
SpecialX
2025-09-09 15:42:31 +08:00
parent 6a65281850
commit 439c8a2421
47 changed files with 5486 additions and 119 deletions

View File

@@ -1,16 +1,44 @@
@inherits LayoutComponentBase
@layout AccountLayout
@inject NavigationManager NavigationManager
<AuthorizeView Roles="Teacher">
<Authorized>
<MudPaper Class="d-flex flex-row flex-grow-1 overflow-hidden" Height="100%">
<MudPaper Width="200px">
<MudDivider Class="flex-grow-0" />
<ExamNavMenu />
</MudPaper>
<MudPaper Class="d-flex flex-grow-1 overflow-auto">
@Body
</MudPaper>
</MudPaper>
</Authorized>
</AuthorizeView>
<MudPaper Class="d-flex flex-row flex-grow-1 overflow-hidden" Height="100%">
<AuthorizeView Roles="Student">
<Authorized>
<MudPaper Class="d-flex flex-row flex-grow-1 overflow-hidden" Height="100%">
<MudPaper Width="200px">
<MudDivider Class="flex-grow-0" />
<ExamNavMenu />
</MudPaper>
<MudPaper Class="d-flex h-100 w-100 flex-grow-1 overflow-auto">
@Body
</MudPaper>
</MudPaper>
</Authorized>
</AuthorizeView>
<MudPaper Width="200px">
<MudDivider Class="flex-grow-0" />
<ExamNavMenu />
@code {
[CascadingParameter]
private Task<AuthenticationState> authenticationStateTask { get; set; }
</MudPaper>
<MudPaper Class="flex-grow-1 overflow-auto">
@Body
</MudPaper>
</MudPaper>
protected override void OnParametersSet()
{
if (authenticationStateTask is null)
{
NavigationManager.Refresh(forceReload: true);
}
}
}

View File

@@ -1,22 +1,39 @@
@using Microsoft.AspNetCore.Identity
<ul class="nav nav-pills flex-column">
<li class="nav-item">
<NavLink class="nav-link" href="exam/create" Match="NavLinkMatch.All">创建</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="exam/manage">管理</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="Account/Manage/ChangePassword">Password</NavLink>
</li>
@* <li class="nav-item">
<NavLink class="nav-link" href="Account/Manage/TwoFactorAuthentication">Two-factor authentication</NavLink>
</li> *@
</ul>
<AuthorizeView Roles="Teacher">
<Authorized>
<ul class="nav nav-pills flex-column">
<li class="nav-item">
<NavLink class="nav-link" href="exam/create" Match="NavLinkMatch.All">创建</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="exam/manage">管理</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="Account/Manage/ChangePassword">Password</NavLink>
</li>
</ul>
</Authorized>
</AuthorizeView>
<AuthorizeView Roles="Student">
<Authorized>
<ul class="nav nav-pills flex-column">
<li class="nav-item">
<NavLink class="nav-link" href="exam/studentHomework" Match="NavLinkMatch.All">Homework</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="exam/manage">管理</NavLink>
</li>
</ul>
</Authorized>
</AuthorizeView>
@code {
private bool hasExternalLogins;
private bool hasExternalLogins;
}

View File

@@ -9,3 +9,17 @@
@Body
</MudStack>
</MudPaper>
@code {
[CascadingParameter]
private Task<AuthenticationState> authenticationStateTask { get; set; }
protected override void OnParametersSet()
{
if (authenticationStateTask is null)
{
// NavigationManager.Refresh(forceReload: true);
}
}
}

View File

@@ -9,11 +9,8 @@
<NavLink class="nav-link" href="Account/Manage/Class">Class</NavLink>
</li>
<li class="nav-item">
<NavLink class="nav-link" href="Account/Manage/ChangePassword">Password</NavLink>
<NavLink class="nav-link" href="Account/Manage/ChangePassword">重设密码</NavLink>
</li>
@* <li class="nav-item">
<NavLink class="nav-link" href="Account/Manage/TwoFactorAuthentication">Two-factor authentication</NavLink>
</li> *@
</ul>
@code {