alielie
2026-06-04 771a0e7b6b1276087515bbe94de28358cb92963b
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);
        }
    }
}