| | |
| | | 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; |
| | |
| | | { |
| | | public class MenuManageModel : NotifyBase |
| | | { |
| | | public SqliteHelper sqliteHelper; |
| | | |
| | | private ObservableCollection<MenuData> _DataSource; |
| | | |
| | | public ObservableCollection<MenuData> DataSource |
| | | { |
| | | get => _DataSource; |
| | | set |
| | | { |
| | | Set(ref _DataSource, value); |
| | | Set(nameof(DataSourceCount)); |
| | | } |
| | | } |
| | | |
| | | public int DataSourceCount { get => DataSource?.Count ?? 0; } |
| | | |
| | | |
| | | private ObservableCollection<MenuData> _TreeDataSource; |
| | | |
| | | public ObservableCollection<MenuData> 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, |
| | | iconPath TEXT, |
| | | level TEXT, |
| | | type TEXT, |
| | | parentCode TEXT, |
| | | dllPath TEXT, |
| | | className TEXT, |
| | | UNIQUE(code) |
| | | );"); |
| | | } |
| | | |
| | | public void LoadData() |
| | | { |
| | | ObservableCollection<MenuData> data = new ObservableCollection<MenuData>(); |
| | | ObservableCollection<MenuData> treeData = new ObservableCollection<MenuData>(); |
| | | 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<string, MenuData> cache = new Dictionary<string, MenuData>(); |
| | | 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(), |
| | | IconPath = dr["iconPath"].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); |
| | | } |
| | | } |
| | | } |