From f08871fe7d148d667f2f11f80f64de71a0d9504c Mon Sep 17 00:00:00 2001
From: alielie <alielie@git.com>
Date: 星期一, 15 六月 2026 18:19:37 +0800
Subject: [PATCH] 优化标准老化界面

---
 HMI.MenuManage/Model/UserManageModel.cs |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/HMI.MenuManage/Model/UserManageModel.cs b/HMI.MenuManage/Model/UserManageModel.cs
index a2ede62..2fbca78 100644
--- a/HMI.MenuManage/Model/UserManageModel.cs
+++ b/HMI.MenuManage/Model/UserManageModel.cs
@@ -49,6 +49,7 @@
             sqliteHelper = new SqliteHelper(PathHelper.DatabasePath);
             sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS user (
                     id INTEGER PRIMARY KEY AUTOINCREMENT,
+                    code TEXT NOT NULL,
                     username TEXT NOT NULL,
                     password TEXT NOT NULL,
                     name TEXT,
@@ -63,6 +64,28 @@
 ");
         }
 
+        public void ImportUser(List<UserData> users)
+        {
+            List<string> batch = new List<string>();
+            foreach (var user in users)
+            {
+                string sql = $"SELECT 1 FROM user WHERE username='{user.Username}' OR code='{user.Code}' OR name='{user.Name}'";
+                if (sqliteHelper.HasData(sql))
+                {
+                    throw new Exception($"User {user.Username} already exists.");
+                }
+                string codes = "''";
+                string roleCodes = user.RoleCodes?.Trim();
+                if (!string.IsNullOrEmpty(roleCodes))
+                {
+                    codes = $"'{roleCodes.Replace(",", "','")}'";
+                }
+                batch.Add($"INSERT INTO user (code,username,name,password) VALUES ('{user.Code}', '{user.Username}', '{user.Name}', '{user.Password}');");
+                batch.Add($"INSERT INTO user_role_rel (username, roleCode) SELECT '{user.Username}', code FROM role WHERE code IN ({codes});");
+            }
+            sqliteHelper.ExecuteBatchSql(batch);
+        }
+
         public void LoadData()
         {
             ObservableCollection<UserData> data = new ObservableCollection<UserData>();
@@ -74,10 +97,22 @@
                     var menu = new UserData
                     {
                         Id = dr["id"].ToString(),
+                        Code = dr["code"].ToString(),
                         Username = dr["username"].ToString(),
                         Password = dr["password"].ToString(),
                         Name = dr["name"].ToString()
                     };
+                    DataTable roles = sqliteHelper.GetDataTable($@"SELECT r.code AS code FROM user_role_rel AS rel 
+INNER JOIN role AS r ON rel.roleCode = r.code AND rel.username = '{menu.Username}' Order By r.code;");
+                    List<string> codes = new List<string>();
+                    foreach (DataRow row in roles.Rows)
+                    {
+                        if (row["code"] != DBNull.Value)
+                        {
+                            codes.Add(row["code"].ToString());
+                        }
+                    }
+                    menu.RoleCodes = string.Join(",", codes);
                     data.Add(menu);
                 }
             }
@@ -94,5 +129,24 @@
         {
             UserRoleRelHelper.SaveUserRoleRel(sqliteHelper, Roles, SelectedUser, null, null);
         }
+
+        public void DeleteUserByUsername(string username)
+        {
+            sqliteHelper.ExecuteBatchSql(new List<string> {
+            $"DELETE FROM user WHERE username = '{username}';",
+            $"DELETE FROM user_role_rel WHERE username = '{username}';"
+            });
+        }
+
+        public void DeleteUserByUsernames(IEnumerable<string> usernames)
+        {
+            List<string> sqls = new List<string>();
+            foreach (string username in usernames)
+            {
+                sqls.Add($"DELETE FROM user WHERE username = '{username}';");
+                sqls.Add($"DELETE FROM user_role_rel WHERE username = '{username}';");
+            }
+            sqliteHelper.ExecuteBatchSql(sqls);
+        }
     }
 }

--
Gitblit v1.9.1