From d4fb542770997e3bb86752f4fe8fd0710fd64962 Mon Sep 17 00:00:00 2001 From: "David P.G" Date: Wed, 30 Jul 2025 13:21:03 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=AE=BE=E5=A4=87=E8=AF=A6?= =?UTF-8?q?=E6=83=85=E9=A1=B5=E7=9A=84=E5=8F=98=E9=87=8F=E8=A1=A8=E7=9A=84?= =?UTF-8?q?=E7=BC=96=E8=BE=91=E5=92=8C=E5=88=A0=E9=99=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DMS.WPF/Services/DataServices.cs | 42 ++++- DMS.WPF/ViewModels/DeviceDetailViewModel.cs | 164 ++++++++------------ 2 files changed, 103 insertions(+), 103 deletions(-) diff --git a/DMS.WPF/Services/DataServices.cs b/DMS.WPF/Services/DataServices.cs index 84ef9e3..598cc49 100644 --- a/DMS.WPF/Services/DataServices.cs +++ b/DMS.WPF/Services/DataServices.cs @@ -177,7 +177,6 @@ public partial class DataServices : ObservableRecipient, IRecipient // 注意:MenuItemViewModel 的属性是 ObservableProperty,直接赋值会触发通知 if (existingItem.Header != newDto.Header) existingItem.Header = newDto.Header; if (existingItem.Icon != newDto.Icon) existingItem.Icon = newDto.Icon; - } else { @@ -484,7 +483,7 @@ public partial class DataServices : ObservableRecipient, IRecipient { if (variableTableItemViewModel == null) return; - + var device = Devices.FirstOrDefault(d => d.Id == variableTableItemViewModel.DeviceId); if (device != null) { @@ -523,11 +522,13 @@ public partial class DataServices : ObservableRecipient, IRecipient if (device != null) { // 1. 删除与设备关联的所有变量表及其变量 - var variableTablesToDelete = VariableTables.Where(vt => vt.DeviceId == device.Id).ToList(); + var variableTablesToDelete = VariableTables.Where(vt => vt.DeviceId == device.Id) + .ToList(); foreach (var vt in variableTablesToDelete) { // 删除与当前变量表关联的所有变量 - var variablesToDelete = Variables.Where(v => v.VariableTableId == vt.Id).ToList(); + var variablesToDelete = Variables.Where(v => v.VariableTableId == vt.Id) + .ToList(); foreach (var variable in variablesToDelete) { Variables.Remove(variable); @@ -537,7 +538,8 @@ public partial class DataServices : ObservableRecipient, IRecipient VariableTables.Remove(vt); // 删除与变量表关联的菜单项 - var variableTableMenu = Menus.FirstOrDefault(m => m.TargetViewKey == "VariableTableView" && m.Header == vt.Name); + var variableTableMenu + = Menus.FirstOrDefault(m => m.TargetViewKey == "VariableTableView" && m.Header == vt.Name); if (variableTableMenu != null) { DeleteMenuItem(variableTableMenu); @@ -558,4 +560,34 @@ public partial class DataServices : ObservableRecipient, IRecipient // BuildMenuTree(); } } + + public void DeleteVariableTableById(int id) + { + var variableTable = VariableTables.FirstOrDefault(vt => vt.Id == id); + if (variableTable != null) + { + // 删除与当前变量表关联的所有变量 + var variablesToDelete = Variables.Where(v => v.VariableTableId == variableTable.Id) + .ToList(); + foreach (var variable in variablesToDelete) + { + Variables.Remove(variable); + } + + + var device = Devices.FirstOrDefault(d => d.Id == variableTable.DeviceId); + if (device != null) + device.VariableTables.Remove(variableTable); + // 删除变量表 + VariableTables.Remove(variableTable); + + // 删除与变量表关联的菜单项 + var variableTableMenu + = Menus.FirstOrDefault(m => m.MenuType == MenuType.VariableTableMenu && m.TargetId == variableTable.Id); + if (variableTableMenu != null) + { + DeleteMenuItem(variableTableMenu); + } + } + } } \ No newline at end of file diff --git a/DMS.WPF/ViewModels/DeviceDetailViewModel.cs b/DMS.WPF/ViewModels/DeviceDetailViewModel.cs index 05f23ba..0723187 100644 --- a/DMS.WPF/ViewModels/DeviceDetailViewModel.cs +++ b/DMS.WPF/ViewModels/DeviceDetailViewModel.cs @@ -25,7 +25,7 @@ public partial class DeviceDetailViewModel : ViewModelBase, INavigatable private DeviceItemViewModel _currentDevice; [ObservableProperty] - private VariableItemViewModel _selectedVariableTable; + private VariableTableItemViewModel _selectedVariableTable; public DeviceDetailViewModel(IMapper mapper, IDialogService dialogService, INavigationService navigationService, DataServices dataServices, IVariableTableAppService variableTableAppService) @@ -76,110 +76,78 @@ public partial class DeviceDetailViewModel : ViewModelBase, INavigatable [RelayCommand] private async Task EditVariableTable() { - if (SelectedVariableTable == null) + try { - // NotificationHelper.ShowInfo("请选择要编辑的变量表。"); - return; + if (SelectedVariableTable == null) + { + NotificationHelper.ShowError("你没有选择任何变量表,请选择变量表后再点击编辑变量表"); + return; + } + + VariableTableDialogViewModel variableTableDialogViewModel = new VariableTableDialogViewModel(SelectedVariableTable) + { + PrimaryButContent = "编辑变量表" + }; + // 1. 显示变量表对话框 + VariableTableItemViewModel variableTable = await _dialogService.ShowDialogAsync(variableTableDialogViewModel); + // 如果用户取消或对话框未返回变量表,则直接返回 + if (variableTable == null) + { + return; + } + + int res = await _variableTableAppService.UpdateVariableTableAsync(_mapper.Map(variableTable)); + if (res > 0) + { + var menu = DataServices.Menus.FirstOrDefault(m => + m.MenuType == MenuType.VariableTableMenu && + m.TargetId == variableTable.Id); + if (menu != null) + { + menu.Header = variableTable.Name; + } + } + } + catch (Exception e) + { + NotificationHelper.ShowError($"编辑变量表的过程中发生错误:{e.Message}", e); } - // - // using var db = DbContext.GetInstance(); - // try - // { - // var originalName = SelectedVariableTable.Name; // Store original name for comparison - // var editedVarTable = await _dialogService.ShowEditVarTableDialog(SelectedVariableTable); - // if (editedVarTable == null) return; - // - // await db.BeginTranAsync(); - // - // // Update variable table in DB - // var result = await _varTableRepository.UpdateAsync(SelectedVariableTable, db); - // - // if (result > 0) - // { - // // Update corresponding menu item if name changed - // if (originalName != SelectedVariableTable.Name) - // { - // var menu = DataServicesHelper.FindVarTableMenu(SelectedVariableTable.Id, _dataServices.MenuTrees); - // if (menu != null) - // { - // menu.Name = SelectedVariableTable.Name; - // await _menuRepository.UpdateAsync(menu, db); - // } - // } - // - // await db.CommitTranAsync(); - // //NotificationHelper.ShowSuccess($"变量表 {SelectedVariableTable.Name} 编辑成功。"); - // MessageHelper.SendLoadMessage(Enums.LoadTypes.Menu); // Refresh the main navigation menu - // } - // else - // { - // await db.RollbackTranAsync(); - // //NotificationHelper.ShowError($"变量表 {SelectedVariableTable.Name} 编辑失败。"); - // } - // } - // catch (Exception ex) - // { - // await db.RollbackTranAsync(); - // //NotificationHelper.ShowError($"编辑变量表时发生错误: {ex.Message}", ex); - // } } [RelayCommand] private async Task DeleteVariableTable() { - // if (SelectedVariableTable == null) - // { - // //NotificationHelper.ShowInfo("请选择要删除的变量表。"); - // return; - // } - // - // var confirm = await _dialogService.ShowConfrimeDialog( - // "删除确认", - // $"确定要删除变量表 \"{SelectedVariableTable.Name}\" 吗?\n\n此操作将同时删除该变量表下的所有变量数据,且无法恢复!", - // "删除"); - // - // if (!confirm) return; - // - // using var db = DbContext.GetInstance(); - // try - // { - // await db.BeginTranAsync(); - // - // // Find the corresponding menu item - // MenuBean menuToDelete = null; - // if (_dataServices.MenuTrees != null) - // { - // menuToDelete = DataServicesHelper.FindVarTableMenu( SelectedVariableTable.Id,_dataServices.MenuTrees); - // } - // - // // Delete variable table from DB - // var result = await _varTableRepository.DeleteAsync(SelectedVariableTable, db); - // - // if (result > 0) - // { - // // Delete corresponding menu item - // if (menuToDelete != null) - // { - // await _menuRepository.DeleteAsync(menuToDelete, db); - // } - // - // await db.CommitTranAsync(); - // var delVarTableName = SelectedVariableTable.Name; - // CurrentDevice?.VariableTables?.Remove(SelectedVariableTable); - // //NotificationHelper.ShowSuccess($"变量表 {delVarTableName} 删除成功。"); - // MessageHelper.SendLoadMessage(Enums.LoadTypes.Menu); // Refresh the main navigation menu - // } - // else - // { - // await db.RollbackTranAsync(); - // //NotificationHelper.ShowError($"变量表 {SelectedVariableTable.Name} 删除失败。"); - // } - // } - // catch (Exception ex) - // { - // await db.RollbackTranAsync(); - // //NotificationHelper.ShowError($"删除变量表时发生错误: {ex.Message}", ex); - // } + try + { + if (SelectedVariableTable == null) + { + NotificationHelper.ShowError("你没有选择任何变量表,请选择变量表后再点击删除变量表"); + return; + } + + ConfrimDialogViewModel viewModel = new ConfrimDialogViewModel(); + viewModel.Message = $"确认要删除变量表名为:{SelectedVariableTable.Name} \n\n此操作将同时删除该变量表下的所有变量数据,且无法恢复!"; + viewModel.Title = "删除变量表"; + viewModel.PrimaryButContent = "删除"; + + var resViewModel = await _dialogService.ShowDialogAsync(viewModel); + if (resViewModel.IsPrimaryButton) + { + var isDel = await _variableTableAppService.DeleteVariableTableAsync(SelectedVariableTable.Id); + if (isDel) + { + var delName = SelectedVariableTable.Name; + // 更新界面 + DataServices.DeleteVariableTableById(SelectedVariableTable.Id); + + NotificationHelper.ShowSuccess($"删除变量表成功,变量表名:{delName}"); + } + } + } + catch (Exception e) + { + NotificationHelper.ShowError($"删除变量表的过程中发生错误:{e.Message}", e); + } } // Placeholder for EditDeviceCommand and DeleteDeviceCommand if they are needed here