From 15bbd62b0b24b72c717ae91ab45348a2083ad04e Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期五, 10 十月 2025 08:58:18 +0800
Subject: [PATCH] 优化bug;
---
HMI.Base/PluginLoader.cs | 76 ++++++++++++++++++++++++-------------
1 files changed, 49 insertions(+), 27 deletions(-)
diff --git a/HMI.Base/PluginLoader.cs b/HMI.Base/PluginLoader.cs
index e63503a..f295e9d 100644
--- a/HMI.Base/PluginLoader.cs
+++ b/HMI.Base/PluginLoader.cs
@@ -4,7 +4,6 @@
using log4net;
using System;
using System.Collections.Generic;
-using System.Data;
using System.IO;
using System.Reflection;
using System.Threading;
@@ -31,7 +30,6 @@
private static ILog log = LogManager.GetLogger("PluginLoader");
private static string PluginFolder = PathHelper.PluginFolder();
- public bool Completed { get; private set; } = false;
public SqliteHelper sqliteHelper;
public List<PluginInfo> Menus { get; private set; }
public List<PluginInfo> Plugins { get; private set; }
@@ -50,6 +48,7 @@
{
Instance = null;
}
+ GC.Collect();
}
public static PluginLoader GetLoader()
@@ -76,6 +75,12 @@
LoadMessageAppend?.Invoke(this, new LoadMsg { Type = LoadMsgType.FINISHED });
});
}
+ pluginContainer.DoCloseEvent += PluginContainer_DoCloseEvent;
+ }
+
+ private void PluginContainer_DoCloseEvent(object sender, EventArgs e)
+ {
+ Reset();
}
private void LoadChildrenMenu()
@@ -83,7 +88,7 @@
foreach (var menu in Plugins)
{
CountdownEvent c = new CountdownEvent(1);
- Thread.Sleep(80);
+ Thread.Sleep(50);
Application.Current.Dispatcher.Invoke(new Action(() =>
{
try
@@ -158,21 +163,39 @@
}
}
+ private PluginInfo ConvertPermission2PluginInfo(PermissionData data)
+ {
+ if (data.Type == "鏉冮檺") return null;
+ PluginInfo info = new PluginInfo
+ {
+ Code = data.Code,
+ Name = data.Name,
+ Type = data.Type,
+ ParentCode = data.ParentCode,
+ DllPath = data.DllPath,
+ ClassName = data.ClassName,
+ IconFont = data.IconFont
+ //Icon = new BitmapImage(new Uri(Path.Combine(PathHelper.IconFolder, dr["iconPath"].ToString())))
+ };
+ if (data.Children != null && data.Children.Count > 0)
+ {
+ foreach (var child in data.Children)
+ {
+ var childInfo = ConvertPermission2PluginInfo(child);
+ if (childInfo != null) info.Children.Add(childInfo);
+ }
+ }
+ return info;
+ }
+
public List<PluginInfo> LoadTreeMenu(Dispatcher dispatcher)
{
- //LoadMessageAppend?.Invoke(this, "寮�濮嬪姞杞借彍鍗�...");
- List<PluginInfo> data = new List<PluginInfo>();
+ List<PluginInfo> menus = new List<PluginInfo>();
Dictionary<string, PluginInfo> cache = new Dictionary<string, PluginInfo>();
try
{
- UserInfo user = UserInfo.User;
- string sql = $@"SELECT DISTINCT m.* FROM menu AS m INNER JOIN role_menu_rel AS rrel ON m.code = rrel.menuCode
-INNER JOIN role AS r ON rrel.roleCode = r.code
-INNER JOIN user_role_rel AS urel ON r.code = urel.roleCode
-AND urel.username = '{user.Username}' ORDER BY m.level,m.sort, m.id;";
-
- DataTable dt = sqliteHelper.GetDataTable(sql);
- if (dt != null)
+ List<PermissionData> allPermissions = UserInfo.User?.AllPermissions;
+ if (allPermissions != null)
{
Application.Current.Dispatcher.Invoke(() =>
{
@@ -180,28 +203,27 @@
new LoadMsg
{
Type = LoadMsgType.INIT,
- NumData = dt.Rows.Count,
- Message = this.lang("App.MenuCount", dt.Rows.Count),
+ NumData = allPermissions.Count,
+ Message = this.lang("App.MenuCount", allPermissions.Count),
});
- foreach (DataRow dr in dt.Rows)
+ foreach (PermissionData data in allPermissions)
{
- string path = Path.Combine(PathHelper.IconFolder, dr["iconPath"].ToString());
+ if (data.Type == "Permission") continue;
var menu = new PluginInfo
{
- Code = dr["code"].ToString(),
- Name = dr["name"].ToString(),
- Type = dr["type"].ToString(),
- ParentCode = dr["parentCode"].ToString(),
- DllPath = dr["dllPath"].ToString(),
- ClassName = dr["className"].ToString(),
- IconFont = dr["icon"].ToString()
- //Icon = new BitmapImage(new Uri(Path.Combine(PathHelper.IconFolder, dr["iconPath"].ToString())))
+ Code = data.Code,
+ Name = data.Name,
+ Type = data.Type,
+ ParentCode = data.ParentCode,
+ DllPath = data.DllPath,
+ ClassName = data.ClassName,
+ IconFont = data.IconFont
};
cache[menu.Code] = menu;
if (!cache.ContainsKey(menu.ParentCode))
{
- data.Add(menu);
+ menus.Add(menu);
}
else
{
@@ -217,7 +239,7 @@
{
//LoadMessageAppend?.Invoke(this, ex.Message);
}
- return data;
+ return menus;
}
}
}
--
Gitblit v1.9.1