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);
}
}
}
}