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
|
{
|
/// <summary>
|
/// 根据roleCode获取rel数据
|
/// </summary>
|
/// <param name="sqliteHelper"></param>
|
/// <param name="roleCode"></param>
|
/// <returns></returns>
|
public static ObservableCollection<RoleMenuRel> SelectRoleMenuTreeData(SqliteHelper sqliteHelper,
|
string roleCode)
|
{
|
ObservableCollection<RoleMenuRel> treeData = new ObservableCollection<RoleMenuRel>();
|
Dictionary<string, RoleMenuRel> cache = new Dictionary<string, RoleMenuRel>();
|
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<RoleMenuRel> rels, string roleCode, string firstSql, string lastSql)
|
{
|
List<RoleMenuRel> datas = new List<RoleMenuRel>();
|
GetSelectedMenu(rels, datas);
|
List<string> sqls = new List<string>() {
|
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<RoleMenuRel> rels, List<RoleMenuRel> datas)
|
{
|
foreach (var dr in rels)
|
{
|
if (dr.Selected)
|
{
|
datas.Add(dr);
|
}
|
GetSelectedMenu(dr.Children, datas);
|
}
|
}
|
|
}
|
}
|