1 feat: 重构触发器设计,移除触发条件并添加名称字段
2
3 - 从Trigger、DbTriggerDefinition和TriggerItem类中移除了所有条件相关的属性(Condition, Threshold, LowerBound, UpperBound)
4 - 删除了ConditionType枚举,简化了触发器逻辑
5 - 为触发器添加了Name字段,在核心模型、数据库实体和视图模型中都添加了该属性
6 - 删除了TriggerDialog界面中的变量选择和搜索功能
7 - 从TriggerDialog界面中删除了触发条件相关的UI元素
8 - 更新了TriggerDialogViewModel,移除了条件相关的验证和业务逻辑
9 - 更新了TriggersViewModel,移除了条件的初始化设置
10 - 更新了AutoMapper配置文件,增加TriggerItem与Trigger之间的映射
11 - 在TriggerEvaluationService中移除了条件判断逻辑,现在激活的触发器会直接执行动作
12 - 更新了App.xaml,移除了对已删除枚举的引用
13 - 修改了保存验证逻辑,确保触发器名称不能为空
This commit is contained in:
@@ -19,26 +19,14 @@ namespace DMS.WPF.ViewModels.Dialogs
|
||||
/// </summary>
|
||||
public partial class TriggerDialogViewModel : DialogViewModelBase<TriggerItem?>
|
||||
{
|
||||
private readonly IVariableAppService _variableAppService; // To populate variable selection dropdown
|
||||
|
||||
private readonly IDialogService _dialogService;
|
||||
private readonly IDataStorageService _dataStorageService;
|
||||
private readonly INotificationService _notificationService;
|
||||
|
||||
[ObservableProperty]
|
||||
private string _searchText = "";
|
||||
|
||||
[ObservableProperty]
|
||||
private TriggerItem _trigger = new();
|
||||
|
||||
[ObservableProperty]
|
||||
private List<VariableItem> _availableVariables = new();
|
||||
|
||||
[ObservableProperty]
|
||||
private ObservableCollection<VariableItem> _selectedVariables = new();
|
||||
|
||||
[ObservableProperty]
|
||||
private ObservableCollection<VariableItem> _filteredVariables = new();
|
||||
|
||||
// Properties for easier binding in XAML for SendEmail action config
|
||||
[ObservableProperty]
|
||||
private string _emailRecipients = "";
|
||||
@@ -50,78 +38,16 @@ namespace DMS.WPF.ViewModels.Dialogs
|
||||
private string _emailBodyTemplate = "";
|
||||
|
||||
public TriggerDialogViewModel(
|
||||
IVariableAppService variableAppService,
|
||||
IDialogService dialogService,
|
||||
IDataStorageService dataStorageService,
|
||||
INotificationService notificationService)
|
||||
{
|
||||
_variableAppService = variableAppService ?? throw new ArgumentNullException(nameof(variableAppService));
|
||||
_dialogService = dialogService ?? throw new ArgumentNullException(nameof(dialogService));
|
||||
_dataStorageService = dataStorageService;
|
||||
_notificationService = notificationService ?? throw new ArgumentNullException(nameof(notificationService));
|
||||
}
|
||||
|
||||
partial void OnSearchTextChanged(string searchText)
|
||||
{
|
||||
UpdateFilteredVariables();
|
||||
}
|
||||
|
||||
private void UpdateFilteredVariables()
|
||||
{
|
||||
FilteredVariables.Clear();
|
||||
|
||||
// 如果没有搜索文本,显示所有可用变量
|
||||
if (string.IsNullOrEmpty(SearchText))
|
||||
{
|
||||
foreach (var variable in AvailableVariables)
|
||||
{
|
||||
// 只显示未被选中的变量
|
||||
if (!SelectedVariables.Contains(variable))
|
||||
{
|
||||
FilteredVariables.Add(variable);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// 根据搜索文本过滤变量
|
||||
foreach (var variable in AvailableVariables)
|
||||
{
|
||||
// 只显示未被选中的变量且名称包含搜索文本的变量
|
||||
if (!SelectedVariables.Contains(variable) &&
|
||||
variable.Name.Contains(SearchText, StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
FilteredVariables.Add(variable);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 将变量添加到选中列表
|
||||
/// </summary>
|
||||
/// <param name="variable">要添加的变量</param>
|
||||
public void AddVariable(VariableItem variable)
|
||||
{
|
||||
if (!SelectedVariables.Contains(variable))
|
||||
{
|
||||
SelectedVariables.Add(variable);
|
||||
UpdateFilteredVariables();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 从选中列表中移除变量
|
||||
/// </summary>
|
||||
/// <param name="variable">要移除的变量</param>
|
||||
public void RemoveVariable(VariableItem variable)
|
||||
{
|
||||
if (SelectedVariables.Contains(variable))
|
||||
{
|
||||
SelectedVariables.Remove(variable);
|
||||
UpdateFilteredVariables();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 初始化视图模型(传入待编辑的触发器)
|
||||
@@ -134,25 +60,6 @@ namespace DMS.WPF.ViewModels.Dialogs
|
||||
Trigger = triggerItemViewModel;
|
||||
Title = Trigger.Id == default(int) ? "新建触发器" : "编辑触发器";
|
||||
PrimaryButText = "保存";
|
||||
|
||||
// Load available variables for selection dropdown
|
||||
await LoadVariablesAsync();
|
||||
|
||||
// Load selected variables
|
||||
if (Trigger.VariableIds != null && Trigger.VariableIds.Any())
|
||||
{
|
||||
foreach (var variableId in Trigger.VariableIds)
|
||||
{
|
||||
var variable = AvailableVariables.FirstOrDefault(v => v.Id == variableId);
|
||||
if (variable != null)
|
||||
{
|
||||
SelectedVariables.Add(variable);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 初始化过滤后的变量列表
|
||||
UpdateFilteredVariables();
|
||||
|
||||
// Parse action configuration if it's SendEmail
|
||||
if (Trigger.Action == ActionType.SendEmail && !string.IsNullOrEmpty(Trigger.ActionConfigurationJson))
|
||||
@@ -179,23 +86,7 @@ namespace DMS.WPF.ViewModels.Dialogs
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 加载所有可用的变量
|
||||
/// </summary>
|
||||
private async Task LoadVariablesAsync()
|
||||
{
|
||||
try
|
||||
{
|
||||
// 使用数据存储服务中的变量列表
|
||||
AvailableVariables = new List<VariableItem>(_dataStorageService.Variables.Select(kvp => kvp.Value));
|
||||
UpdateFilteredVariables();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
_notificationService.ShowError($"加载变量列表失败: {ex.Message}");
|
||||
AvailableVariables = new List<VariableItem>();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 保存按钮点击命令
|
||||
@@ -203,10 +94,9 @@ namespace DMS.WPF.ViewModels.Dialogs
|
||||
[RelayCommand]
|
||||
private async Task SaveAsync()
|
||||
{
|
||||
// Basic validation
|
||||
if (SelectedVariables == null || !SelectedVariables.Any())
|
||||
if (string.IsNullOrWhiteSpace(Trigger.Name))
|
||||
{
|
||||
_notificationService.ShowWarn("请至少选择一个关联的变量");
|
||||
_notificationService.ShowWarn("请输入触发器名称");
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -216,39 +106,7 @@ namespace DMS.WPF.ViewModels.Dialogs
|
||||
return;
|
||||
}
|
||||
|
||||
// 设置选中的变量ID
|
||||
foreach (var selectedVariable in SelectedVariables)
|
||||
{
|
||||
Trigger.VariableIds.Add(selectedVariable.Id);
|
||||
}
|
||||
|
||||
// Validate condition-specific fields
|
||||
switch (Trigger.Condition)
|
||||
{
|
||||
case ConditionType.GreaterThan:
|
||||
case ConditionType.LessThan:
|
||||
case ConditionType.EqualTo:
|
||||
case ConditionType.NotEqualTo:
|
||||
if (!Trigger.Threshold.HasValue)
|
||||
{
|
||||
_notificationService.ShowWarn($"{Trigger.Condition} 条件需要设置阈值");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case ConditionType.InRange:
|
||||
case ConditionType.OutOfRange:
|
||||
if (!Trigger.LowerBound.HasValue || !Trigger.UpperBound.HasValue)
|
||||
{
|
||||
_notificationService.ShowWarn($"{Trigger.Condition} 条件需要设置下限和上限");
|
||||
return;
|
||||
}
|
||||
if (Trigger.LowerBound > Trigger.UpperBound)
|
||||
{
|
||||
_notificationService.ShowWarn("下限必须小于或等于上限");
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// Prepare action configuration based on selected action type
|
||||
if (Trigger.Action == ActionType.SendEmail)
|
||||
|
||||
@@ -57,7 +57,6 @@ namespace DMS.WPF.ViewModels
|
||||
var newTrigger = new TriggerItem()
|
||||
{
|
||||
IsActive = true,
|
||||
Condition = Core.Models.Triggers.ConditionType.GreaterThan,
|
||||
Action = Core.Models.Triggers.ActionType.SendEmail,
|
||||
Description = "新建触发器",
|
||||
CreatedAt = DateTime.UtcNow,
|
||||
|
||||
Reference in New Issue
Block a user