Files
OrpaonVision/OrpaonVision.ConfigApp/Views/TrainingTaskManagementWindow.xaml
2026-04-06 22:04:05 +08:00

175 lines
11 KiB
XML

<Window x:Class="OrpaonVision.ConfigApp.Views.TrainingTaskManagementWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="训练任务管理" Height="720" Width="1200" MinWidth="1000" MinHeight="600">
<Grid Margin="16">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- 标题 -->
<TextBlock Grid.Row="0" Margin="0,0,0,16" FontSize="24" FontWeight="SemiBold" Text="训练任务管理" />
<!-- 统计信息和搜索栏 -->
<Grid Grid.Row="1" Margin="0,0,0,16">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<!-- 统计信息 -->
<Border Grid.Column="0" Padding="16" Background="#F8F9FA" CornerRadius="6">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Margin="0,0,16,0">
<TextBlock Text="总任务" FontSize="12" Foreground="#666666" />
<TextBlock Text="{Binding Statistics.TotalTasks}" FontSize="20" FontWeight="Bold" />
</StackPanel>
<StackPanel Grid.Column="1" Margin="0,0,16,0">
<TextBlock Text="运行中" FontSize="12" Foreground="#666666" />
<TextBlock Text="{Binding Statistics.RunningTasks}" FontSize="20" FontWeight="Bold" Foreground="#007ACC" />
</StackPanel>
<StackPanel Grid.Column="2" Margin="0,0,16,0">
<TextBlock Text="已完成" FontSize="12" Foreground="#666666" />
<TextBlock Text="{Binding Statistics.CompletedTasks}" FontSize="20" FontWeight="Bold" Foreground="#28A745" />
</StackPanel>
<StackPanel Grid.Column="3" Margin="0,0,16,0">
<TextBlock Text="失败" FontSize="12" Foreground="#666666" />
<TextBlock Text="{Binding Statistics.FailedTasks}" FontSize="20" FontWeight="Bold" Foreground="#DC3545" />
</StackPanel>
<StackPanel Grid.Column="4">
<TextBlock Text="成功率" FontSize="12" Foreground="#666666" />
<TextBlock Text="{Binding Statistics.SuccessRate, StringFormat={}{0:F1}%}" FontSize="20" FontWeight="Bold" Foreground="#28A745" />
</StackPanel>
</Grid>
</Border>
<!-- 搜索和筛选 -->
<StackPanel Grid.Column="1" Orientation="Horizontal">
<TextBox x:Name="SearchTextBox" Width="200" Margin="0,0,8,0" VerticalContentAlignment="Center"
Text="{Binding SearchKeyword, UpdateSourceTrigger=PropertyChanged}" />
<ComboBox x:Name="StatusComboBox" Width="120" Margin="0,0,8,0" VerticalContentAlignment="Center"
ItemsSource="{Binding StatusOptions}" SelectedItem="{Binding SelectedStatus}">
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource EnumToDescriptionConverter}}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
<Button Content="搜索" Command="{Binding SearchCommand}" Padding="12,6" />
<Button Content="刷新" Command="{Binding RefreshDataCommand}" Padding="12,6" Margin="8,0,0,0" />
</StackPanel>
</Grid>
<!-- 任务列表 -->
<Border Grid.Row="2" BorderBrush="#DDDDDD" BorderThickness="1" CornerRadius="6">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<!-- 数据表格 -->
<DataGrid Grid.Row="0"
ItemsSource="{Binding Tasks}"
SelectedItem="{Binding SelectedTask}"
AutoGenerateColumns="False"
CanUserAddRows="False"
CanUserDeleteRows="False"
IsReadOnly="True"
HeadersVisibility="Column"
GridLinesVisibility="Horizontal"
HorizontalGridLinesBrush="#EEEEEE"
SelectionMode="Single">
<DataGrid.Columns>
<DataGridTextColumn Header="任务名称" Binding="{Binding Name}" Width="200" />
<DataGridTextColumn Header="类型" Binding="{Binding TaskType, Converter={StaticResource EnumToDescriptionConverter}}" Width="100" />
<DataGridTextColumn Header="状态" Binding="{Binding Status, Converter={StaticResource EnumToDescriptionConverter}}" Width="100">
<DataGridTextColumn.ElementStyle>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="{Binding Status, Converter={StaticResource StatusToColorConverter}}" />
</Style>
</DataGridTextColumn.ElementStyle>
</DataGridTextColumn>
<DataGridTextColumn Header="优先级" Binding="{Binding Priority, Converter={StaticResource EnumToDescriptionConverter}}" Width="80" />
<DataGridTextColumn Header="进度" Binding="{Binding Progress, StringFormat={}{0:F1}%}" Width="80" />
<DataGridTextColumn Header="当前轮次" Binding="{Binding CurrentEpoch}" Width="80" />
<DataGridTextColumn Header="总轮次" Binding="{Binding TotalEpochs}" Width="80" />
<DataGridTextColumn Header="当前损失" Binding="{Binding CurrentLoss, StringFormat=F4}" Width="100" />
<DataGridTextColumn Header="最佳mAP" Binding="{Binding BestMap, StringFormat=F4}" Width="100" />
<DataGridTextColumn Header="创建人" Binding="{Binding CreatedByName}" Width="100" />
<DataGridTextColumn Header="创建时间" Binding="{Binding CreatedAtUtc, Converter={StaticResource DateTimeToLocalConverter}}" Width="140" />
<DataGridTextColumn Header="分配给" Binding="{Binding AssignedToName}" Width="100" />
</DataGrid.Columns>
</DataGrid>
<!-- 分页控件 -->
<Border Grid.Row="1" Padding="12" Background="#F8F9FA" BorderThickness="0,1,0,0" BorderBrush="#DDDDDD">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Orientation="Horizontal" VerticalAlignment="Center">
<TextBlock Text="共 " />
<TextBlock Text="{Binding TotalCount}" FontWeight="Bold" />
<TextBlock Text=" 条记录,第 " />
<TextBlock Text="{Binding CurrentPageIndex}" FontWeight="Bold" />
<TextBlock Text=" / " />
<TextBlock Text="{Binding TotalPages}" FontWeight="Bold" />
<TextBlock Text=" 页" />
</StackPanel>
<StackPanel Grid.Column="2" Orientation="Horizontal">
<Button Content="上一页" Command="{Binding PageChangedCommand}" CommandParameter="{Binding CurrentPageIndex, Converter={StaticResource PageIndexConverter}, ConverterParameter=prev}"
Padding="8,4" Margin="0,0,8,0" />
<Button Content="下一页" Command="{Binding PageChangedCommand}" CommandParameter="{Binding CurrentPageIndex, Converter={StaticResource PageIndexConverter}, ConverterParameter=next}"
Padding="8,4" />
</StackPanel>
</Grid>
</Border>
</Grid>
</Border>
<!-- 操作按钮栏 -->
<StackPanel Grid.Row="3" Orientation="Horizontal" Margin="0,16,0,0" HorizontalAlignment="Right">
<Button Content="启动" Command="{Binding StartTaskCommand}" IsEnabled="{Binding CanStartTask}" Padding="16,8" Margin="0,0,8,0" />
<Button Content="暂停" Command="{Binding PauseTaskCommand}" IsEnabled="{Binding CanPauseTask}" Padding="16,8" Margin="0,0,8,0" />
<Button Content="停止" Command="{Binding StopTaskCommand}" IsEnabled="{Binding CanStopTask}" Padding="16,8" Margin="0,0,8,0" />
<Button Content="取消" Command="{Binding CancelTaskCommand}" IsEnabled="{Binding CanCancelTask}" Padding="16,8" Margin="0,0,8,0" />
<Button Content="重启" Command="{Binding RestartTaskCommand}" IsEnabled="{Binding CanRestartTask}" Padding="16,8" Margin="0,0,8,0" />
<Button Content="删除" Command="{Binding DeleteTaskCommand}" IsEnabled="{Binding CanDeleteTask}" Padding="16,8" Margin="0,0,8,0" Background="#DC3545" Foreground="White" />
<Button Content="详情" Command="{Binding ViewTaskDetailsCommand}" IsEnabled="{Binding HasSelectedTask}" Padding="16,8" />
</StackPanel>
<!-- 状态栏 -->
<StatusBar Grid.Row="3" VerticalAlignment="Bottom" Background="#F8F9FA">
<StatusBarItem>
<StackPanel Orientation="Horizontal">
<ProgressBar IsIndeterminate="{Binding IsLoading}" Width="16" Height="16" Margin="0,0,8,0" Visibility="{Binding IsLoading, Converter={StaticResource BoolToVisibilityConverter}}" />
<TextBlock Text="{Binding StatusMessage}" />
</StackPanel>
</StatusBarItem>
</StatusBar>
</Grid>
</Window>