基于 PRD 搭建 .NET 8 WPF 桌面应用,包含主控制台、任务编辑、全局设置、系统托盘和应用图标集成。 实现本地任务模型、触发器规则、JSON 状态持久化、OmniNotify HTTP 推送、执行日志记录、动态变量替换以及基础 Cron 预览能力。 补充 .gitignore,排除构建产物和本地 IDE 文件。 BREAKING CHANGE: 首次提交,建立项目初始结构
104 lines
5.8 KiB
XML
104 lines
5.8 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"
|
|
Icon="app.ico"
|
|
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="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}" Width="58" IsReadOnly="False" />
|
|
<DataGridTextColumn Header="任务名称" Binding="{Binding Name}" Width="190" />
|
|
<DataGridTextColumn Header="频道" Binding="{Binding Channel}" Width="150" />
|
|
<DataGridTextColumn Header="触发规则" Binding="{Binding TriggerSummary}" Width="*" />
|
|
<DataGridTextColumn Header="上次运行" Binding="{Binding LastRunAt, StringFormat=yyyy-MM-dd HH:mm:ss}" Width="155" />
|
|
<DataGridTextColumn Header="下次运行" Binding="{Binding NextRunAt, StringFormat=yyyy-MM-dd HH:mm:ss}" Width="155" />
|
|
<DataGridTextColumn Header="最近状态" Binding="{Binding 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>
|