给应用添加图标,完成给设备添加变量表的功能

This commit is contained in:
2025-07-02 12:01:20 +08:00
parent 663e4fda0c
commit dbf7b81d4b
20 changed files with 326 additions and 151 deletions

View File

@@ -102,9 +102,12 @@ public partial class DevicesViewModel : ViewModelBase
var editDievce = await _dialogService.ShowEditDeviceDialog(SelectedDevice);
if (editDievce != null)
{
{
// 更新菜单
var res = await _deviceRepository.Edit(editDievce);
await _dataServices.UpdateMenuForDevice(editDievce);
var menu = DataServicesHelper.FindMenusForDevice(editDievce, _dataServices.MenuTrees);
if (menu != null)
await _menuRepository.Edit(menu);
MessageHelper.SendLoadMessage(LoadTypes.Menu);
MessageHelper.SendLoadMessage(LoadTypes.Devices);
@@ -132,8 +135,13 @@ public partial class DevicesViewModel : ViewModelBase
var isDel = await _dialogService.ShowConfrimeDialog("删除设备", msg, "删除设备");
if (isDel)
{
var defDeviceRes = await _deviceRepository.DeleteById(SelectedDevice.Id);
var defMenuRes = await _dataServices.DeleteMenuForDevice(SelectedDevice);
// 删除设备
await _deviceRepository.DeleteById(SelectedDevice.Id);
// 删除菜单
var menu = DataServicesHelper.FindMenusForDevice(SelectedDevice, _dataServices.MenuTrees);
if (menu != null)
await _menuRepository.DeleteMenu(menu);
MessageHelper.SendLoadMessage(LoadTypes.Menu);
MessageHelper.SendLoadMessage(LoadTypes.Devices);
NotificationHelper.ShowMessage($"删除设备成功,设备名:{SelectedDevice.Name}", NotificationType.Success);
@@ -141,8 +149,8 @@ public partial class DevicesViewModel : ViewModelBase
}
catch (Exception e)
{
NotificationHelper.ShowMessage($"编辑设备的过程中发生错误:{e.Message}", NotificationType.Error);
_logger.LogError($"编辑设备的过程中发生错误:{e}");
NotificationHelper.ShowMessage($"删除设备的过程中发生错误:{e.Message}", NotificationType.Error);
_logger.LogError($"删除设备的过程中发生错误:{e}");
}
}

View File

@@ -0,0 +1,14 @@
using CommunityToolkit.Mvvm.ComponentModel;
using PMSWPF.Models;
namespace PMSWPF.ViewModels.Dialogs;
public partial class VarTableDialogViewModel:ObservableObject
{
[ObservableProperty]
private VariableTable variableTable;
[ObservableProperty]
private string title;
[ObservableProperty]
private string primaryButtonText;
}

View File

@@ -1,5 +1,9 @@
using System.Collections.ObjectModel;
using CommunityToolkit.Mvvm.ComponentModel;
using iNKORE.UI.WPF.Modern.Common.IconKeys;
using iNKORE.UI.WPF.Modern.Controls;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using PMSWPF.Data.Repositories;
using PMSWPF.Enums;
using PMSWPF.Helper;
@@ -12,35 +16,143 @@ public partial class MainViewModel : ViewModelBase
{
private readonly NavgatorServices _navgatorServices;
private readonly DataServices _dataServices;
private readonly IDialogService _dialogService;
private readonly ILogger<MainViewModel> _logger;
[ObservableProperty] private ViewModelBase currentViewModel;
[ObservableProperty]
private ObservableCollection<MenuBean> _menus;
[ObservableProperty] private ObservableCollection<MenuBean> _menus;
private readonly MenuRepository _menuRepository;
public MainViewModel(NavgatorServices navgatorServices,DataServices dataServices)
public MainViewModel(NavgatorServices navgatorServices, DataServices dataServices, IDialogService dialogService,
ILogger<MainViewModel> logger)
{
_navgatorServices = navgatorServices;
_dataServices = dataServices;
_dialogService = dialogService;
_logger = logger;
_navgatorServices.OnViewModelChanged += () => { CurrentViewModel = _navgatorServices.CurrentViewModel; };
CurrentViewModel = new HomeViewModel();
CurrentViewModel.OnLoaded();
// 发送消息加载数据
MessageHelper.SendLoadMessage(LoadTypes.All);
// 当菜单加载成功后,在前台显示菜单
dataServices.OnMenuTreeListChanged += (menus) =>
{
Menus = new ObservableCollection<MenuBean>(menus);
};
dataServices.OnMenuTreeListChanged += (menus) => { Menus = new ObservableCollection<MenuBean>(menus); };
}
public async Task MenuSelectionChanged(MenuBean menu)
{
try
{
switch (menu.Type)
{
case MenuType.MainMenu:
menu.ViewModel = DataServicesHelper.GetMainViewModel(menu.Name);
break;
case MenuType.DeviceMenu:
menu.ViewModel = App.Current.Services.GetRequiredService<DeviceDetailViewModel>();
menu.Data = _dataServices.Devices.FirstOrDefault(d => d.Id == menu.DataId);
break;
case MenuType.VariableTableMenu:
VariableTableViewModel varTableVM = App.Current.Services.GetRequiredService<VariableTableViewModel>();
varTableVM.VariableTable =
DataServicesHelper.FindVarTableForDevice(_dataServices.Devices, menu.DataId);
menu.ViewModel = varTableVM;
menu.Data = varTableVM.VariableTable;
break;
case MenuType.AddVariableTableMenu:
await AddVariableTable(menu);
break;
}
if (menu.Type==MenuType.AddVariableTableMenu)
return;
if (menu.ViewModel != null)
{
MessageHelper.SendNavgatorMessage(menu.ViewModel);
_logger.LogInformation($"导航到:{menu.Name}");
}
else
{
NotificationHelper.ShowMessage($"菜单:{menu.Name},没有对应的ViewModel.");
_logger.LogInformation($"菜单:{menu.Name},没有对应的ViewModel.");
}
}
catch (Exception e)
{
_logger.LogError($"菜单切换是出现了错误:{e}");
NotificationHelper.ShowMessage($"菜单切换是出现了错误:{e.Message}", NotificationType.Error);
}
}
private async Task AddVariableTable(MenuBean menu)
{
try
{
if (menu.Parent != null && menu.Parent.Data != null)
{
Device device = (Device)menu.Parent.Data;
var varTable = await _dialogService.ShowAddVarTableDialog(device);
if (varTable != null)
{
// 添加变量表
varTable.DeviceId = device.Id;
varTable.ProtocolType = device.ProtocolType;
var addVarTableId = await new VarTableRepository().Add(varTable);
if (addVarTableId > 0)
{
// 添加变量表菜单
MenuBean newMenu = new MenuBean();
newMenu.Icon = SegoeFluentIcons.Tablet.Glyph;
newMenu.Name = varTable.Name;
newMenu.DataId = addVarTableId;
newMenu.Type = MenuType.VariableTableMenu;
newMenu.ParentId = menu.Parent.Id;
var addMenuRes = await new MenuRepository().Add(newMenu);
if (addMenuRes > 0)
{
// 变量表菜单添加成功
MessageHelper.SendLoadMessage(LoadTypes.Menu);
MessageHelper.SendLoadMessage(LoadTypes.Devices);
NotificationHelper.ShowMessage($"变量表:{varTable.Name},添加成功",
NotificationType.Success);
_logger.LogInformation($"变量表:{varTable.Name},添加成功");
}
else
{
// 变量表菜单添加失败
NotificationHelper.ShowMessage($"变量表:{varTable.Name},添加菜单失败",
NotificationType.Error);
_logger.LogError($"变量表:{varTable.Name},添加菜单失败");
}
}
else
{
// 变量表添加失败
NotificationHelper.ShowMessage($"变量表:{varTable.Name},添加失败", NotificationType.Error);
_logger.LogError($"变量表:{varTable.Name},添加失败");
}
}
}
}
catch (Exception e)
{
_logger.LogError($"添加变量表时出现了错误:{e}");
NotificationHelper.ShowMessage($"添加变量表时出现了错误:{e.Message}", NotificationType.Error);
}
}
public override void OnLoaded()
{
}
}

View File

@@ -10,12 +10,12 @@ partial class VariableTableViewModel : ViewModelBase
private VariableTable variableTable;
[ObservableProperty]
private ObservableCollection<DataVariable> _dataVariables;
public override void OnLoaded()
{
if (VariableTable.DataVariables!=null )
{
_dataVariables = new ObservableCollection<DataVariable>(VariableTable.DataVariables);
DataVariables = new ObservableCollection<DataVariable>(VariableTable.DataVariables);
}
}
}