From 9d1660270272180cd71147d6ddd53d1382643d2e Mon Sep 17 00:00:00 2001
From: wenxiangchao <wenxiangchao@ihengxin.com.cn>
Date: 星期一, 02 十一月 2026 18:00:14 +0800
Subject: [PATCH] merge: 并入远程 Initial commit 作为历史根节点
---
HMI.MenuManage/Model/UserManageModel.cs | 152 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 152 insertions(+), 0 deletions(-)
diff --git a/HMI.MenuManage/Model/UserManageModel.cs b/HMI.MenuManage/Model/UserManageModel.cs
new file mode 100644
index 0000000..2fbca78
--- /dev/null
+++ b/HMI.MenuManage/Model/UserManageModel.cs
@@ -0,0 +1,152 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Data;
+using System.IO;
+using HMI.Core.Util;
+using HMI.MenuManage.Entity;
+using HMI.MenuManage.Util;
+using HMI.Core.Entity;
+
+namespace HMI.MenuManage.Model
+{
+ public class UserManageModel : NotifyBase
+ {
+ public SqliteHelper sqliteHelper;
+
+ private ObservableCollection<UserData> _DataSource;
+
+ public ObservableCollection<UserData> DataSource
+ {
+ get { return _DataSource; }
+ set { Set(ref _DataSource, value); }
+ }
+ private UserData _SelectedUser;
+
+ public UserData SelectedUser
+ {
+ get { return _SelectedUser; }
+ set
+ {
+ Set(ref _SelectedUser, value);
+ LoadUserRole();
+ }
+ }
+
+ private ObservableCollection<UserRoleRel> _Roles;
+ public ObservableCollection<UserRoleRel> Roles
+ {
+ get => _Roles;
+ set { Set(ref _Roles, value); }
+ }
+
+ public UserManageModel()
+ {
+ if (!File.Exists(PathHelper.DatabasePath))
+ {
+ SqliteHelper.CreateDatabase(PathHelper.DatabasePath);
+ }
+ 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,
+ UNIQUE(username)
+ );
+CREATE TABLE IF NOT EXISTS user_role_rel (
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
+ username TEXT NOT NULL,
+ roleCode TEXT NOT NULL,
+ UNIQUE(username,roleCode)
+ );
+");
+ }
+
+ 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>();
+ DataTable dt = sqliteHelper.GetDataTable("SELECT * FROM user Order By id;");
+ if (dt != null)
+ {
+ foreach (DataRow dr in dt.Rows)
+ {
+ 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);
+ }
+ }
+ DataSource = data;
+ }
+
+ public void LoadUserRole()
+ {
+ Roles = SelectedUser == null ? new ObservableCollection<UserRoleRel>()
+ : UserRoleRelHelper.SelectUserRoleData(sqliteHelper, SelectedUser.Username);
+ }
+
+ public void SaveUserRole()
+ {
+ 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