完成菜单树的转换
This commit is contained in:
@@ -31,4 +31,5 @@ public interface IMenuService
|
|||||||
/// 异步删除一个菜单。
|
/// 异步删除一个菜单。
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Task DeleteMenuAsync(int id);
|
Task DeleteMenuAsync(int id);
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -45,6 +45,9 @@ public partial class DataServices : ObservableRecipient, IRecipient<LoadMessage>
|
|||||||
// 菜单树列表。
|
// 菜单树列表。
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private ObservableCollection<MenuBeanItemViewModel> _menus;
|
private ObservableCollection<MenuBeanItemViewModel> _menus;
|
||||||
|
// 菜单树列表。
|
||||||
|
[ObservableProperty]
|
||||||
|
private ObservableCollection<MenuBeanItemViewModel> _menuTrees;
|
||||||
|
|
||||||
// MQTT配置列表。
|
// MQTT配置列表。
|
||||||
// [ObservableProperty]
|
// [ObservableProperty]
|
||||||
@@ -68,19 +71,6 @@ public partial class DataServices : ObservableRecipient, IRecipient<LoadMessage>
|
|||||||
public event Action<Device, bool> OnDeviceIsActiveChanged;
|
public event Action<Device, bool> OnDeviceIsActiveChanged;
|
||||||
|
|
||||||
|
|
||||||
// /// <summary>
|
|
||||||
// /// 当_mqtts属性值改变时触发的局部方法,用于调用OnMqttListChanged事件。
|
|
||||||
// /// </summary>
|
|
||||||
// /// <param name="mqtts">新的MQTT配置列表。</param>
|
|
||||||
// partial void OnMqttsChanged(List<Mqtt> mqtts)
|
|
||||||
// {
|
|
||||||
// OnMqttListChanged?.Invoke(mqtts);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// 注释掉的代码块,可能用于变量数据变更事件的触发,但目前未启用。
|
|
||||||
// {
|
|
||||||
// OnVariableDataChanged?.Invoke(this, value);
|
|
||||||
// }
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// DataServices类的构造函数。
|
/// DataServices类的构造函数。
|
||||||
@@ -101,6 +91,7 @@ public partial class DataServices : ObservableRecipient, IRecipient<LoadMessage>
|
|||||||
VariableTables = new ObservableCollection<VariableTableItemViewModel>();
|
VariableTables = new ObservableCollection<VariableTableItemViewModel>();
|
||||||
Variables = new ObservableCollection<VariableItemViewModel>();
|
Variables = new ObservableCollection<VariableItemViewModel>();
|
||||||
Menus = new ObservableCollection<MenuBeanItemViewModel>();
|
Menus = new ObservableCollection<MenuBeanItemViewModel>();
|
||||||
|
MenuTrees = new ObservableCollection<MenuBeanItemViewModel>();
|
||||||
// AllVariables = new ConcurrentDictionary<int, Variable>();
|
// AllVariables = new ConcurrentDictionary<int, Variable>();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -258,6 +249,44 @@ public partial class DataServices : ObservableRecipient, IRecipient<LoadMessage>
|
|||||||
Menus.Add(_mapper.Map<MenuBeanItemViewModel>(newDto));
|
Menus.Add(_mapper.Map<MenuBeanItemViewModel>(newDto));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
BuildMenuTree();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 根据扁平菜单列表构建树形结构。
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="flatMenus">扁平菜单列表。</param>
|
||||||
|
/// <returns>树形结构的根菜单列表。</returns>
|
||||||
|
private void BuildMenuTree()
|
||||||
|
{
|
||||||
|
// 1. 创建一个查找表,以便通过ID快速访问菜单项
|
||||||
|
var menuLookup = Menus.ToDictionary(m => m.Id);
|
||||||
|
|
||||||
|
// 存储根菜单项的列表
|
||||||
|
// var rootMenus = new List<MenuBeanDto>();
|
||||||
|
|
||||||
|
// 2. 遍历所有菜单项,构建树形结构
|
||||||
|
foreach (var menu in Menus)
|
||||||
|
{
|
||||||
|
// 检查是否有父ID,并且父ID不为0(通常0或null表示根节点)
|
||||||
|
if (menu.ParentId.HasValue && menu.ParentId.Value != 0)
|
||||||
|
{
|
||||||
|
// 尝试从查找表中找到父菜单
|
||||||
|
if (menuLookup.TryGetValue(menu.ParentId.Value, out var parentMenu))
|
||||||
|
{
|
||||||
|
// 将当前菜单添加到父菜单的Children列表中
|
||||||
|
parentMenu.Children.Add(menu);
|
||||||
|
}
|
||||||
|
// else: 如果找不到父菜单,这可能是一个数据完整性问题,可以根据需要处理
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// 如果没有父ID,则这是一个根菜单
|
||||||
|
MenuTrees.Add(menu);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
using System.Collections.ObjectModel;
|
||||||
using CommunityToolkit.Mvvm.ComponentModel;
|
using CommunityToolkit.Mvvm.ComponentModel;
|
||||||
using DMS.Application.DTOs;
|
using DMS.Application.DTOs;
|
||||||
using DMS.Core.Enums;
|
using DMS.Core.Enums;
|
||||||
@@ -28,6 +29,8 @@ public partial class MenuBeanItemViewModel : ObservableObject
|
|||||||
|
|
||||||
[ObservableProperty]
|
[ObservableProperty]
|
||||||
private int _displayOrder;
|
private int _displayOrder;
|
||||||
|
[ObservableProperty]
|
||||||
|
private ObservableCollection<MenuBeanItemViewModel> _children=new ();
|
||||||
|
|
||||||
public MenuBeanItemViewModel(MenuBeanDto dto)
|
public MenuBeanItemViewModel(MenuBeanDto dto)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public partial class SplashViewModel : ObservableObject
|
|||||||
{
|
{
|
||||||
// 处理初始化过程中的异常
|
// 处理初始化过程中的异常
|
||||||
LoadingMessage = $"初始化失败: {ex.Message}";
|
LoadingMessage = $"初始化失败: {ex.Message}";
|
||||||
Console.WriteLine($"初始化失败: {ex.Message}");
|
Console.WriteLine($"初始化失败: {ex}");
|
||||||
// 在此可以记录日志或显示错误对话框
|
// 在此可以记录日志或显示错误对话框
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,7 +32,7 @@
|
|||||||
<DataTemplate x:Key="NavigationViewMenuItem"
|
<DataTemplate x:Key="NavigationViewMenuItem"
|
||||||
DataType="{x:Type mo:MenuBean}">
|
DataType="{x:Type mo:MenuBean}">
|
||||||
<ui:NavigationViewItem Content="{Binding Header}"
|
<ui:NavigationViewItem Content="{Binding Header}"
|
||||||
MenuItemsSource="{Binding Items }">
|
MenuItemsSource="{Binding Children }">
|
||||||
<ui:NavigationViewItem.Icon>
|
<ui:NavigationViewItem.Icon>
|
||||||
<ui:FontIcon Glyph="{Binding Icon}" />
|
<ui:FontIcon Glyph="{Binding Icon}" />
|
||||||
</ui:NavigationViewItem.Icon>
|
</ui:NavigationViewItem.Icon>
|
||||||
@@ -60,7 +60,7 @@
|
|||||||
IsBackButtonVisible="Collapsed"
|
IsBackButtonVisible="Collapsed"
|
||||||
IsBackEnabled="False"
|
IsBackEnabled="False"
|
||||||
SelectionFollowsFocus="Disabled"
|
SelectionFollowsFocus="Disabled"
|
||||||
MenuItemsSource="{Binding DataServices.Menus}"
|
MenuItemsSource="{Binding DataServices.MenuTrees}"
|
||||||
MenuItemTemplate="{StaticResource NavigationViewMenuItem}"
|
MenuItemTemplate="{StaticResource NavigationViewMenuItem}"
|
||||||
SelectionChanged="NavigationView_SelectionChanged">
|
SelectionChanged="NavigationView_SelectionChanged">
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user