基于 PRD 搭建 .NET 8 WPF 桌面应用,包含主控制台、任务编辑、全局设置、系统托盘和应用图标集成。 实现本地任务模型、触发器规则、JSON 状态持久化、OmniNotify HTTP 推送、执行日志记录、动态变量替换以及基础 Cron 预览能力。 补充 .gitignore,排除构建产物和本地 IDE 文件。 BREAKING CHANGE: 首次提交,建立项目初始结构
160 lines
11 KiB
XML
160 lines
11 KiB
XML
<Window x:Class="OmniScheduler.TaskEditorWindow"
|
||
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
|
||
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
|
||
Title="任务编辑"
|
||
Height="650"
|
||
Width="860"
|
||
MinHeight="600"
|
||
MinWidth="780"
|
||
WindowStartupLocation="CenterOwner"
|
||
Icon="app.ico">
|
||
<DockPanel Margin="12">
|
||
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" HorizontalAlignment="Right" Margin="0,12,0,0">
|
||
<TextBlock x:Name="ValidationText" Foreground="#B42318" VerticalAlignment="Center" Margin="0,0,14,0" />
|
||
<Button Content="保存" Width="90" Click="Save_Click" />
|
||
<Button Content="取消" Width="90" Click="Cancel_Click" />
|
||
</StackPanel>
|
||
|
||
<TabControl>
|
||
<TabItem Header="常规">
|
||
<Grid Margin="14">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="130" />
|
||
<ColumnDefinition Width="*" />
|
||
</Grid.ColumnDefinitions>
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="*" />
|
||
</Grid.RowDefinitions>
|
||
|
||
<TextBlock Text="任务名称" Grid.Row="0" VerticalAlignment="Center" />
|
||
<TextBox x:Name="NameBox" Grid.Row="0" Grid.Column="1" Height="30" />
|
||
<TextBlock Text="启用任务" Grid.Row="1" Margin="0,12,0,0" VerticalAlignment="Center" />
|
||
<CheckBox x:Name="EnabledBox" Grid.Row="1" Grid.Column="1" Margin="0,12,0,0" VerticalAlignment="Center" />
|
||
<TextBlock Text="任务描述" Grid.Row="2" Margin="0,12,0,0" />
|
||
<TextBox x:Name="DescriptionBox" Grid.Row="2" Grid.Column="1" Margin="0,12,0,0" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" />
|
||
</Grid>
|
||
</TabItem>
|
||
|
||
<TabItem Header="触发器">
|
||
<Grid Margin="14">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="245" />
|
||
<ColumnDefinition Width="14" />
|
||
<ColumnDefinition Width="*" />
|
||
</Grid.ColumnDefinitions>
|
||
|
||
<DockPanel Grid.Column="0">
|
||
<StackPanel DockPanel.Dock="Bottom" Orientation="Horizontal" Margin="0,8,0,0">
|
||
<Button Content="添加" Click="AddTrigger_Click" />
|
||
<Button Content="删除" Click="RemoveTrigger_Click" />
|
||
</StackPanel>
|
||
<ListBox x:Name="TriggersList" DisplayMemberPath="Summary" SelectionChanged="TriggersList_SelectionChanged" />
|
||
</DockPanel>
|
||
|
||
<Border Grid.Column="2" BorderBrush="#D8DEE9" BorderThickness="1" Padding="12">
|
||
<Grid>
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="150" />
|
||
<ColumnDefinition Width="*" />
|
||
</Grid.ColumnDefinitions>
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="*" />
|
||
</Grid.RowDefinitions>
|
||
|
||
<TextBlock Text="触发类型" VerticalAlignment="Center" />
|
||
<ComboBox x:Name="KindBox" Grid.Column="1" Height="30" SelectionChanged="Field_Changed" />
|
||
|
||
<TextBlock Text="单次时间" Grid.Row="1" Margin="0,10,0,0" VerticalAlignment="Center" />
|
||
<TextBox x:Name="OneTimeBox" Grid.Row="1" Grid.Column="1" Margin="0,10,0,0" Height="30" ToolTip="格式:yyyy-MM-dd HH:mm:ss" TextChanged="Field_Changed" />
|
||
|
||
<TextBlock Text="间隔" Grid.Row="2" Margin="0,10,0,0" VerticalAlignment="Center" />
|
||
<StackPanel Grid.Row="2" Grid.Column="1" Margin="0,10,0,0" Orientation="Horizontal">
|
||
<TextBox x:Name="IntervalValueBox" Width="80" Height="30" TextChanged="Field_Changed" />
|
||
<ComboBox x:Name="IntervalUnitBox" Width="120" Height="30" Margin="8,0,0,0" SelectionChanged="Field_Changed" />
|
||
</StackPanel>
|
||
|
||
<TextBlock Text="起止时间" Grid.Row="3" Margin="0,10,0,0" VerticalAlignment="Center" />
|
||
<StackPanel Grid.Row="3" Grid.Column="1" Margin="0,10,0,0" Orientation="Horizontal">
|
||
<TextBox x:Name="StartsAtBox" Width="180" Height="30" ToolTip="留空表示立即生效" TextChanged="Field_Changed" />
|
||
<TextBox x:Name="EndsAtBox" Width="180" Height="30" Margin="8,0,0,0" ToolTip="留空表示长期有效" TextChanged="Field_Changed" />
|
||
</StackPanel>
|
||
|
||
<TextBlock Text="每日/每周时间" Grid.Row="4" Margin="0,10,0,0" VerticalAlignment="Center" />
|
||
<TextBox x:Name="TimeOfDayBox" Grid.Row="4" Grid.Column="1" Margin="0,10,0,0" Height="30" ToolTip="格式:HH:mm:ss" TextChanged="Field_Changed" />
|
||
|
||
<TextBlock Text="周几" Grid.Row="5" Margin="0,10,0,0" VerticalAlignment="Center" />
|
||
<WrapPanel Grid.Row="5" Grid.Column="1" Margin="0,10,0,0">
|
||
<CheckBox x:Name="SunBox" Content="日" Margin="0,0,10,0" Checked="Field_Changed" Unchecked="Field_Changed" />
|
||
<CheckBox x:Name="MonBox" Content="一" Margin="0,0,10,0" Checked="Field_Changed" Unchecked="Field_Changed" />
|
||
<CheckBox x:Name="TueBox" Content="二" Margin="0,0,10,0" Checked="Field_Changed" Unchecked="Field_Changed" />
|
||
<CheckBox x:Name="WedBox" Content="三" Margin="0,0,10,0" Checked="Field_Changed" Unchecked="Field_Changed" />
|
||
<CheckBox x:Name="ThuBox" Content="四" Margin="0,0,10,0" Checked="Field_Changed" Unchecked="Field_Changed" />
|
||
<CheckBox x:Name="FriBox" Content="五" Margin="0,0,10,0" Checked="Field_Changed" Unchecked="Field_Changed" />
|
||
<CheckBox x:Name="SatBox" Content="六" Margin="0,0,10,0" Checked="Field_Changed" Unchecked="Field_Changed" />
|
||
</WrapPanel>
|
||
|
||
<TextBlock Text="每月" Grid.Row="6" Margin="0,10,0,0" VerticalAlignment="Center" />
|
||
<StackPanel Grid.Row="6" Grid.Column="1" Margin="0,10,0,0" Orientation="Horizontal">
|
||
<TextBox x:Name="MonthDayBox" Width="80" Height="30" TextChanged="Field_Changed" />
|
||
<CheckBox x:Name="LastBusinessDayBox" Content="最后一个工作日" Margin="10,0,0,0" VerticalAlignment="Center" Checked="Field_Changed" Unchecked="Field_Changed" />
|
||
</StackPanel>
|
||
|
||
<TextBlock Text="Cron 表达式" Grid.Row="7" Margin="0,10,0,0" VerticalAlignment="Center" />
|
||
<TextBox x:Name="CronBox" Grid.Row="7" Grid.Column="1" Margin="0,10,0,0" Height="30" TextChanged="Field_Changed" />
|
||
|
||
<GroupBox Grid.Row="8" Grid.ColumnSpan="2" Header="高级调度与预览" Margin="0,14,0,0">
|
||
<DockPanel Margin="10">
|
||
<StackPanel DockPanel.Dock="Top" Orientation="Horizontal">
|
||
<TextBlock Text="错过触发补偿策略" VerticalAlignment="Center" Margin="0,0,10,0" />
|
||
<ComboBox x:Name="MisfireBox" Width="180" Height="30" />
|
||
</StackPanel>
|
||
<TextBox x:Name="PreviewBox" Margin="0,12,0,0" IsReadOnly="True" AcceptsReturn="True" Height="130" />
|
||
</DockPanel>
|
||
</GroupBox>
|
||
</Grid>
|
||
</Border>
|
||
</Grid>
|
||
</TabItem>
|
||
|
||
<TabItem Header="消息动作">
|
||
<Grid Margin="14">
|
||
<Grid.ColumnDefinitions>
|
||
<ColumnDefinition Width="130" />
|
||
<ColumnDefinition Width="*" />
|
||
</Grid.ColumnDefinitions>
|
||
<Grid.RowDefinitions>
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="Auto" />
|
||
<RowDefinition Height="*" />
|
||
<RowDefinition Height="Auto" />
|
||
</Grid.RowDefinitions>
|
||
|
||
<TextBlock Text="目标地址" VerticalAlignment="Center" />
|
||
<TextBox x:Name="TargetUrlBox" Grid.Column="1" Height="30" IsReadOnly="True" />
|
||
<TextBlock Text="Channel" Grid.Row="1" Margin="0,10,0,0" VerticalAlignment="Center" />
|
||
<ComboBox x:Name="ChannelBox" Grid.Row="1" Grid.Column="1" Margin="0,10,0,0" Height="30" IsEditable="True" />
|
||
<TextBlock Text="Title" Grid.Row="2" Margin="0,10,0,0" VerticalAlignment="Center" />
|
||
<TextBox x:Name="TitleBox" Grid.Row="2" Grid.Column="1" Margin="0,10,0,0" Height="30" />
|
||
<TextBlock Text="Body" Grid.Row="3" Margin="0,10,0,0" />
|
||
<TextBox x:Name="BodyBox" Grid.Row="3" Grid.Column="1" Margin="0,10,0,0" AcceptsReturn="True" TextWrapping="Wrap" VerticalScrollBarVisibility="Auto" />
|
||
<StackPanel Grid.Row="4" Grid.Column="1" Orientation="Horizontal" Margin="0,10,0,0">
|
||
<Button Content="Send Test Message" Click="TestSend_Click" />
|
||
<TextBlock x:Name="TestResultText" VerticalAlignment="Center" Margin="8,0,0,0" />
|
||
</StackPanel>
|
||
</Grid>
|
||
</TabItem>
|
||
</TabControl>
|
||
</DockPanel>
|
||
</Window>
|