using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.IO; using System.Linq; using HMI.Core.Entity; using HMI.Core.Util; using HMI.MenuManage.Entity; namespace HMI.MenuManage.Model { public class MenuManageModel : NotifyBase { public SqliteHelper sqliteHelper; private ObservableCollection _DataSource; public ObservableCollection DataSource { get => _DataSource; set { Set(ref _DataSource, value); Set(nameof(DataSourceCount)); } } public int DataSourceCount { get => DataSource?.Count ?? 0; } private ObservableCollection _TreeDataSource; public ObservableCollection TreeDataSource { get => _TreeDataSource; set { Set(ref _TreeDataSource, value); } } public MenuManageModel() { if (!File.Exists(PathHelper.DatabasePath)) { SqliteHelper.CreateDatabase(PathHelper.DatabasePath); } sqliteHelper = new SqliteHelper(PathHelper.DatabasePath); sqliteHelper.ExecuteSql(@"CREATE TABLE IF NOT EXISTS menu ( id INTEGER PRIMARY KEY AUTOINCREMENT, code TEXT NOT NULL, name TEXT NOT NULL, icon TEXT, iconPath TEXT, level TEXT, type TEXT, parentCode TEXT, dllPath TEXT, className TEXT, UNIQUE(code) );"); } public void LoadData() { ObservableCollection data = new ObservableCollection(); ObservableCollection treeData = new ObservableCollection(); DataTable dt = sqliteHelper.GetDataTable("SELECT m1.*,m2.name AS parentName FROM menu AS m1 LEFT JOIN menu AS m2 ON m1.parentCode = m2.code Order By m1.id;"); Dictionary cache = new Dictionary(); if (dt != null) { foreach (DataRow dr in dt.Rows) { var menu = new MenuData { Id = dr["id"].ToString(), Code = dr["code"].ToString(), Name = dr["name"].ToString(), Icon = dr["icon"].ToString(), Level = dr["level"].ToString(), Type = dr["type"].ToString(), ParentCode = dr["parentCode"].ToString(), ParentName = dr["parentName"].ToString(), DllPath = dr["dllPath"].ToString(), ClassName = dr["className"].ToString() }; data.Add(menu); if (menu.Level == "1") { treeData.Add(menu); } cache.Add(menu.Code, menu); } foreach (var menu in data) { if (!string.IsNullOrEmpty(menu.ParentCode) && menu.ParentCode != menu.Code) { cache[menu.ParentCode].Children.Add(menu); } } } TreeDataSource = treeData; DataSource = data; } public void DeleteMenuById(string id) { string sql = $"DELETE FROM menu WHERE id = {id};"; sqliteHelper.ExecuteSql(sql); } public void DeleteMenuByIds(IEnumerable ids) { List sqls = ids.Select(id => $"DELETE FROM menu WHERE id = {id};") .ToList(); sqliteHelper.ExecuteBatchSql(sqls); } } }