diff --git a/App.xaml.cs b/App.xaml.cs index 37230d8..95a6f74 100644 --- a/App.xaml.cs +++ b/App.xaml.cs @@ -9,9 +9,12 @@ using PMSWPF.Data; using PMSWPF.Data.Entities; using PMSWPF.Data.Repositories; using PMSWPF.Enums; +using PMSWPF.Extensions; +using PMSWPF.Helper; using PMSWPF.Services; using PMSWPF.ViewModels; using PMSWPF.Views; +using SqlSugar; using LogLevel = Microsoft.Extensions.Logging.LogLevel; namespace PMSWPF; @@ -63,28 +66,48 @@ public partial class App : Application { base.OnStartup(e); InitDB(); - // InitMenu(); + InitMenu().Await((e) => + { + NotificationHelper.ShowMessage($"初始化主菜单失败:{e.Message}"); + }, () => { }); MainWindow = Services.GetRequiredService(); MainWindow.Show(); } - private void InitMenu() + private async Task InitMenu() { using (var db = DbContext.GetInstance()) { - List items = new List(); - items.Add(new DbMenu() - { Name = "主页", Type = MenuType.MainMenu, Icon = SegoeFluentIcons.Home.Glyph, ParentId = 0 }); - items.Add(new DbMenu() - { Name = "设备", Type = MenuType.MainMenu, Icon = SegoeFluentIcons.Devices3.Glyph, ParentId = 0 }); - items.Add(new DbMenu() - { Name = "数据转换", Type = MenuType.MainMenu, Icon = SegoeFluentIcons.ChromeSwitch.Glyph, ParentId = 0 }); - items.Add(new DbMenu() - { Name = "设置", Type = MenuType.MainMenu, Icon = SegoeFluentIcons.Settings.Glyph, ParentId = 0 }); - items.Add(new DbMenu() - { Name = "关于", Type = MenuType.MainMenu, Icon = SegoeFluentIcons.Info.Glyph, ParentId = 0 }); - db.Insertable(items).ExecuteCommand(); + var homeMenu = new DbMenu() + { Name = "主页", Type = MenuType.MainMenu, Icon = SegoeFluentIcons.Home.Glyph, ParentId = 0 }; + + var deviceMenu = new DbMenu() + { Name = "设备", Type = MenuType.MainMenu, Icon = SegoeFluentIcons.Devices3.Glyph, ParentId = 0 }; + var dataTransfromMenu = new DbMenu() + { Name = "数据转换", Type = MenuType.MainMenu, Icon = SegoeFluentIcons.ChromeSwitch.Glyph, ParentId = 0 }; + var mqttMenu = new DbMenu() + { Name = "Mqtt服务器", Type = MenuType.MainMenu, Icon = SegoeFluentIcons.Cloud.Glyph, ParentId = 0 }; + + var settingMenu = new DbMenu() + { Name = "设置", Type = MenuType.MainMenu, Icon = SegoeFluentIcons.Settings.Glyph, ParentId = 0 }; + var aboutMenu = new DbMenu() + { Name = "关于", Type = MenuType.MainMenu, Icon = SegoeFluentIcons.Info.Glyph, ParentId = 0 }; + await CheckMainMenuExist(db, homeMenu); + await CheckMainMenuExist(db, deviceMenu); + await CheckMainMenuExist(db, dataTransfromMenu); + await CheckMainMenuExist(db, mqttMenu); + await CheckMainMenuExist(db, settingMenu); + await CheckMainMenuExist(db, aboutMenu); + } + } + + private static async Task CheckMainMenuExist(SqlSugarClient db, DbMenu menu) + { + var homeMenuExist = await db.Queryable().FirstAsync(dm => dm.Name == menu.Name); + if (homeMenuExist == null) + { + await db.Insertable(menu).ExecuteCommandAsync(); } } diff --git a/Data/Entities/DbMenu.cs b/Data/Entities/DbMenu.cs index 681ce3a..8c0f3c4 100644 --- a/Data/Entities/DbMenu.cs +++ b/Data/Entities/DbMenu.cs @@ -15,6 +15,10 @@ public class DbMenu [SugarColumn(ColumnDataType = "varchar(20)", SqlParameterDbType = typeof(EnumToStringConvert))] public MenuType Type { get; set; } + public int DataId { get; set; } + [SugarColumn(IsIgnore = true)] + public Object? Data { get; set; } + [SugarColumn(IsIgnore = true)] public List Items { get; set; } } \ No newline at end of file diff --git a/Data/Repositories/MenuRepository.cs b/Data/Repositories/MenuRepository.cs index 576be89..6e4da95 100644 --- a/Data/Repositories/MenuRepository.cs +++ b/Data/Repositories/MenuRepository.cs @@ -40,45 +40,52 @@ public class MenuRepository } - public async Task AddDeviceMenu(MenuBean menu) + public async Task AddDeviceMenu(Device device) { bool result = false; var deviceMainMenu = await _db.Queryable().FirstAsync(m => m.Name == "设备"); if (deviceMainMenu == null) throw new InvalidOperationException("没有找到设备菜单!!"); + + // 添加菜单项 + MenuBean menu = new MenuBean() + { + Name = device.Name, + Type = MenuType.DeviceMenu, + DataId = device.Id, + Icon = SegoeFluentIcons.Devices4.Glyph, + }; menu.ParentId=deviceMainMenu.Id; - var addDeviceMenuRes = await _db.Insertable(menu.CopyTo()) - .ExecuteCommandAsync(); - if (addDeviceMenuRes == 0) + var addDeviceMenuId = await _db.Insertable(menu.CopyTo()) + .ExecuteReturnIdentityAsync(); + if (addDeviceMenuId == 0) throw new InvalidOperationException($"{menu.Name},设备菜单添加失败!!"); - - var addDM = await _db.Queryable().OrderBy(m => m.Id, OrderByType.Desc) - .FirstAsync(m => m.Name == menu.Name); - if (addDM == null) - throw new InvalidOperationException($"添加默认变量表菜单时,没有找到名字为:{menu.Name}的菜单项!"); - - - var defVarTable=new MenuBean() + + var defVarTable= await _db.Queryable().FirstAsync(v=>v.DeviceId==device.Id && v.Name=="默认变量表"); + if (defVarTable == null) + throw new InvalidOperationException($"没有找到{device.Name}的默认变量表。"); + var defVarTableMenu=new MenuBean() { Name = "默认变量表", Icon = SegoeFluentIcons.Tablet.Glyph, Type = MenuType.VariableTableMenu, - ParentId = addDM.Id, + ParentId = addDeviceMenuId, + DataId = defVarTable.Id }; var addVarTable=new MenuBean() { Name = "添加变量表", Icon = SegoeFluentIcons.Add.Glyph, Type = MenuType.AddVariableTableMenu, - ParentId = addDM.Id, + ParentId = addDeviceMenuId, }; - var defTableRes = await _db.Insertable(defVarTable).ExecuteCommandAsync(); + var defTableRes = await _db.Insertable(defVarTableMenu).ExecuteCommandAsync(); var addTableRes = await _db.Insertable(addVarTable).ExecuteCommandAsync(); if ((addTableRes+defTableRes) != 2) { // 如果出错删除原来添加的设备菜单 - await _db.Deleteable().Where(m=>m.Id==addDM.Id).ExecuteCommandAsync(); + await _db.Deleteable().Where(m=>m.Id==addDeviceMenuId).ExecuteCommandAsync(); throw new InvalidOperationException("添加默认变量表时发生了错误!!"); } diff --git a/Models/MenuBean.cs b/Models/MenuBean.cs index 0a047c8..1422aef 100644 --- a/Models/MenuBean.cs +++ b/Models/MenuBean.cs @@ -9,7 +9,8 @@ public class MenuBean public string Icon { get; set; } public string Name { get; set; } public int ParentId { get; set; } - + public int DataId { get; set; } public MenuType Type { get; set; } + public Object? Data { get; set; } public List Items { get; set; } } \ No newline at end of file diff --git a/ViewModels/DevicesViewModel.cs b/ViewModels/DevicesViewModel.cs index 9b8ff60..50d75c0 100644 --- a/ViewModels/DevicesViewModel.cs +++ b/ViewModels/DevicesViewModel.cs @@ -55,14 +55,8 @@ public partial class DevicesViewModel : ViewModelBase { var msg = $"添加设备成功:{device.Name}"; _logger.LogInformation(msg); - // 添加菜单项 - MenuBean deviceMenu = new MenuBean() - { - Name = device.Name, - Type = MenuType.DeviceMenu, - Icon = SegoeFluentIcons.Devices4.Glyph, - }; - bool addMenuRes = await _menuRepository.AddDeviceMenu(deviceMenu); + + bool addMenuRes = await _menuRepository.AddDeviceMenu(device); if (addMenuRes) { // 通知更新菜单