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.MenuManage/Model/UserManageModel.cs | 35 +++++++++++++++++++++++++++++++++++
1 files changed, 35 insertions(+), 0 deletions(-)
diff --git a/HMI.MenuManage/Model/UserManageModel.cs b/HMI.MenuManage/Model/UserManageModel.cs
index 42fafc2..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);
}
}
--
Gitblit v1.9.1