using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Data; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Markup; using DatabaseHelper; using HMI.Core.Util; using HMI.MenuManage.Entity; namespace HMI.MenuManage.Util { public class RoleMenuHelper { /// /// 根据roleCode获取rel数据 /// /// /// /// public static ObservableCollection SelectRoleMenuTreeData(SqliteHelper sqliteHelper, string roleCode) { ObservableCollection treeData = new ObservableCollection(); Dictionary cache = new Dictionary(); DataTable dt = sqliteHelper.GetDataTable($@"SELECT m.*,t.roleCode,t.menuCode FROM menu AS m LEFT JOIN ( SELECT rel.roleCode,rel.menuCode FROM role AS r INNER JOIN role_menu_rel AS rel ON r.code = rel.roleCode AND rel.roleCode='{roleCode}' ) AS t ON m.code=t.menuCode Order By m.level,m.id;"); if (dt != null) { foreach (DataRow dr in dt.Rows) { var menu = new RoleMenuRel { MenuCode = dr["code"].ToString(), RoleCode = roleCode, ParentCode = dr["parentCode"].ToString(), MenuName = dr["name"].ToString(), MenuIcon = dr["iconPath"].ToString(), Selected = !(dr["menuCode"] is System.DBNull), }; cache[menu.MenuCode] = menu; if (cache.ContainsKey(menu.ParentCode)) { cache[menu.ParentCode].AddChild(menu); } else { treeData.Add(menu); } } } return treeData; } public static void SaveRelData(SqliteHelper sqliteHelper, IEnumerable rels, string roleCode, string firstSql, string lastSql) { List datas = new List(); GetSelectedMenu(rels, datas); List sqls = new List() { firstSql, $"DELETE FROM role_menu_rel WHERE roleCode='{roleCode}'" }; foreach (var data in datas) { sqls.Add($"INSERT INTO role_menu_rel (roleCode,menuCode) VALUES ('{roleCode}','{data.MenuCode}');"); } sqls.Add(lastSql); sqliteHelper.ExecuteBatchSql(sqls); } public static void GetSelectedMenu(IEnumerable rels, List datas) { foreach (var dr in rels) { if (dr.Selected) { datas.Add(dr); } GetSelectedMenu(dr.Children, datas); } } } }