From 0940f31b7eba1cf6b6a8c1fca72d97cf686e79f2 Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期五, 04 七月 2025 10:43:00 +0800
Subject: [PATCH] 优化插件,完善TreeListView

---
 HMI.Base/PluginLoader.cs |   51 +++++++++++++++++++++++++++++----------------------
 1 files changed, 29 insertions(+), 22 deletions(-)

diff --git a/HMI.Base/PluginLoader.cs b/HMI.Base/PluginLoader.cs
index cf98bd3..e63503a 100644
--- a/HMI.Base/PluginLoader.cs
+++ b/HMI.Base/PluginLoader.cs
@@ -62,6 +62,7 @@
         }
 
         private IPluginContainer pluginContainer;
+
         public void LoadMenuAndPlugin(IPluginContainer container, Dispatcher dispatcher)
         {
             pluginContainer = container;
@@ -76,6 +77,7 @@
                 });
             }
         }
+
         private void LoadChildrenMenu()
         {
             foreach (var menu in Plugins)
@@ -97,31 +99,36 @@
                         {
                             string dllPath = Path.Combine(PluginFolder, menu.DllPath);
                             Assembly ass = Assembly.LoadFrom(dllPath);
+                            var tss = ass.GetTypes();
                             Type ClassType = ass.GetType(menu.ClassName);
                             object Instance = Activator.CreateInstance(ClassType);
                             menu.Content = Instance;
                             if (Instance is IPlugin plugin)
                             {
-                                plugin.SetLogger(LogManager.GetLogger(menu.Code));
-                                string configFolder = Path.Combine(PathHelper.ConfigFolder, menu.Code);
-                                if (!Directory.Exists(configFolder))
+                            }
+                            else
+                            {
+                                plugin = new PluginPackage(Instance);
+                            }
+                            plugin.SetLogger(LogManager.GetLogger(menu.Code));
+                            string configFolder = Path.Combine(PathHelper.ConfigFolder, menu.Code);
+                            if (!Directory.Exists(configFolder))
+                            {
+                                Directory.CreateDirectory(configFolder);
+                            }
+                            plugin.SetBaseFolder(configFolder);
+                            plugin.InitFinish();
+                            pluginContainer.OnCloseEvent += plugin.OnClose;
+                            pluginContainer.DoCloseEvent += plugin.DoClose;
+                            Type SettingType = ass.GetType($"{menu.ClassName}_Setting");
+                            if (SettingType != null)
+                            {
+                                object SettingInstance = Activator.CreateInstance(SettingType);
+                                if (SettingInstance is IFolderOwner fo)
                                 {
-                                    Directory.CreateDirectory(configFolder);
+                                    fo.SetBaseFolder(configFolder);
                                 }
-                                plugin.SetBaseFolder(configFolder);
-                                plugin.InitFinish();
-                                pluginContainer.OnCloseEvent += plugin.OnClose;
-                                pluginContainer.DoCloseEvent += plugin.DoClose;
-                                Type SettingType = ass.GetType($"{menu.ClassName}_Setting");
-                                if (SettingType != null)
-                                {
-                                    object SettingInstance = Activator.CreateInstance(SettingType);
-                                    if (SettingInstance is IFolderOwner fo)
-                                    {
-                                        fo.SetBaseFolder(configFolder);
-                                    }
-                                    menu.SettingControl = SettingInstance;
-                                }
+                                menu.SettingControl = SettingInstance;
                             }
                         }
                         LoadMessageAppend?.Invoke(this,
@@ -134,7 +141,7 @@
                     }
                     catch (Exception ex)
                     {
-                        log.Error("Load Plugin Failed.", ex);
+                        log.Error($"Load Plugin [{menu.Name}] Failed.", ex);
                         LoadMessageAppend?.Invoke(this, new LoadMsg
                         {
                             Type = LoadMsgType.LOADING,
@@ -159,10 +166,10 @@
             try
             {
                 UserInfo user = UserInfo.User;
-                string sql = $@"SELECT m.* FROM menu AS m INNER JOIN role_menu_rel AS rrel ON m.code = rrel.menuCode
+                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.id;";
+AND urel.username = '{user.Username}' ORDER BY m.level,m.sort, m.id;";
 
                 DataTable dt = sqliteHelper.GetDataTable(sql);
                 if (dt != null)
@@ -184,6 +191,7 @@
                             {
                                 Code = dr["code"].ToString(),
                                 Name = dr["name"].ToString(),
+                                Type = dr["type"].ToString(),
                                 ParentCode = dr["parentCode"].ToString(),
                                 DllPath = dr["dllPath"].ToString(),
                                 ClassName = dr["className"].ToString(),
@@ -211,6 +219,5 @@
             }
             return data;
         }
-
     }
 }

--
Gitblit v1.9.1