Files
omni-scheduler/OmniScheduler/MainWindow.xaml
gamewhale 8c573bb044 fix: 修复发布包启动失败
- 移除主窗口、设置窗口和任务编辑窗口对 app.ico 资源路径的直接引用。
- 避免发布包不包含外置 app.ico 时 WPF 在加载窗口 BAML 阶段抛出 XamlParseException。
- 保留 exe 图标嵌入和托盘图标从 exe 读取的发布包结构。
- 已重新发布并验证 release 目录中的 OmniScheduler.exe 可正常启动。
2026-05-21 11:59:41 +08:00

104 lines
6.0 KiB
XML

<Window x:Class="OmniScheduler.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="OmniScheduler"
Height="780"
Width="1180"
MinHeight="640"
MinWidth="980"
Closing="Window_Closing">
<Window.Resources>
<SolidColorBrush x:Key="PanelBrush" Color="#F5F7FA" />
<SolidColorBrush x:Key="LineBrush" Color="#D8DEE9" />
<SolidColorBrush x:Key="AccentBrush" Color="#2563EB" />
<Style TargetType="Button">
<Setter Property="MinHeight" Value="30" />
<Setter Property="Padding" Value="12,4" />
<Setter Property="Margin" Value="0,0,8,0" />
</Style>
<Style TargetType="DataGrid">
<Setter Property="AutoGenerateColumns" Value="False" />
<Setter Property="CanUserAddRows" Value="False" />
<Setter Property="CanUserSortColumns" Value="True" />
<Setter Property="IsReadOnly" Value="True" />
<Setter Property="GridLinesVisibility" Value="Horizontal" />
<Setter Property="HeadersVisibility" Value="Column" />
<Setter Property="RowHeight" Value="32" />
</Style>
</Window.Resources>
<DockPanel Background="White">
<Border DockPanel.Dock="Top" Background="{StaticResource PanelBrush}" BorderBrush="{StaticResource LineBrush}" BorderThickness="0,0,0,1" Padding="10,8">
<DockPanel>
<TextBlock DockPanel.Dock="Right" VerticalAlignment="Center" Foreground="#667085" Text="{Binding StatusText}" />
<StackPanel Orientation="Horizontal">
<Button Content="新建" Click="AddTask_Click" />
<Button Content="编辑" Click="EditTask_Click" />
<Button Content="删除" Click="DeleteTask_Click" />
<Button Content="克隆" Click="CloneTask_Click" />
<Button Content="手动触发" Click="FireTask_Click" />
<Button Content="设置" Click="Settings_Click" />
<ToggleButton x:Name="PauseToggle" Content="暂停全部" Checked="PauseToggle_Changed" Unchecked="PauseToggle_Changed" />
</StackPanel>
</DockPanel>
</Border>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="3*" />
<RowDefinition Height="6" />
<RowDefinition Height="2*" />
</Grid.RowDefinitions>
<DataGrid x:Name="TasksGrid"
Grid.Row="0"
ItemsSource="{Binding State.Tasks}"
SelectedItem="{Binding SelectedTask, Mode=TwoWay}"
MouseDoubleClick="TasksGrid_MouseDoubleClick">
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="启用" Binding="{Binding IsEnabled}" SortMemberPath="IsEnabled" Width="58" IsReadOnly="False" />
<DataGridTextColumn Header="任务名称" Binding="{Binding Name}" SortMemberPath="Name" Width="190" />
<DataGridTextColumn Header="频道" Binding="{Binding Channel}" SortMemberPath="Channel" Width="150" />
<DataGridTextColumn Header="触发规则" Binding="{Binding TriggerSummary}" SortMemberPath="TriggerSummary" Width="*" />
<DataGridTextColumn Header="上次运行" Binding="{Binding LastRunAt, StringFormat=yyyy-MM-dd HH:mm:ss}" SortMemberPath="LastRunAt" Width="155" />
<DataGridTextColumn Header="下次运行" Binding="{Binding NextRunAt, StringFormat=yyyy-MM-dd HH:mm:ss}" SortMemberPath="NextRunAt" Width="155" />
<DataGridTextColumn Header="最近状态" Binding="{Binding LastStatus}" SortMemberPath="LastStatus" Width="90" />
</DataGrid.Columns>
</DataGrid>
<GridSplitter Grid.Row="1" Height="6" HorizontalAlignment="Stretch" Background="{StaticResource LineBrush}" />
<DockPanel Grid.Row="2">
<Border DockPanel.Dock="Top" Background="{StaticResource PanelBrush}" BorderBrush="{StaticResource LineBrush}" BorderThickness="0,1,0,1" Padding="10,6">
<DockPanel>
<Button DockPanel.Dock="Right" Content="清空日志" Click="ClearLogs_Click" />
<TextBlock FontWeight="SemiBold" VerticalAlignment="Center" Text="执行日志" />
</DockPanel>
</Border>
<DataGrid x:Name="LogsGrid"
ItemsSource="{Binding State.Logs}"
MouseDoubleClick="LogsGrid_MouseDoubleClick">
<DataGrid.RowStyle>
<Style TargetType="DataGridRow">
<Style.Triggers>
<DataTrigger Binding="{Binding Level}" Value="ERROR">
<Setter Property="Foreground" Value="#B42318" />
</DataTrigger>
</Style.Triggers>
</Style>
</DataGrid.RowStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="时间" Binding="{Binding Timestamp, StringFormat=yyyy-MM-dd HH:mm:ss}" Width="155" />
<DataGridTextColumn Header="级别" Binding="{Binding Level}" Width="70" />
<DataGridTextColumn Header="任务" Binding="{Binding TaskName}" Width="170" />
<DataGridTextColumn Header="触发" Binding="{Binding TriggerType}" Width="100" />
<DataGridTextColumn Header="HTTP" Binding="{Binding StatusCode}" Width="70" />
<DataGridTextColumn Header="耗时(ms)" Binding="{Binding ElapsedMs}" Width="80" />
<DataGridTextColumn Header="消息" Binding="{Binding Message}" Width="*" />
</DataGrid.Columns>
</DataGrid>
</DockPanel>
</Grid>
</DockPanel>
</Window>