private static EasyUiTreeNode CreatePageNode(PageItemData page) { var node = new EasyUiTreeNode { ID = page.Id, IsOpen = page.ItemType <= PageItemType.Folder, Tag = page.Url == "Folder" ? "folder" : "page", Text = page.Caption, Title = page.Name, IsFolder = page.ItemType <= PageItemType.Folder }; if (!String.IsNullOrWhiteSpace(page.Icon)) { node.Icon = page.Icon; } else { switch (page.ItemType) { case PageItemType.Folder: node.Icon = "icon-tree-folder"; break; case PageItemType.Page: node.Icon = "icon-tree-page"; break; } } return(node); }
/// <summary> /// 生成角色菜单 /// </summary> private void CreateRoleMenu(EasyUiTreeNode parentNode, int roleId, PageItemData page) { if (_allPowers != null && !_allPowers.Any(p => p.RoleId == roleId && p.PageItemId == page.Id)) { return; } var node = CreatePageNode(page); node.Attributes = page.Url; node.Tag = page.Url == "Folder" ? "folder" : "page"; var array = _pages.Where(p => p.ParentId == page.Id && !p.Config.Hide).OrderBy(p => p.Index).ToArray(); if (array.Length > 0) { node.IsFolder = true; } foreach (var ch in array) { CreateRoleMenu(node, roleId, ch); } if (page.ItemType == PageItemType.Page || node.HaseChildren) { parentNode.Children.Add(node); } }
/// <summary> /// 生成页面权限树形基础数据 /// </summary> private void CreatePowerTree(EasyUiTreeNode parentNode, PageItemData page) { parentNode.IsFolder = true; var node = CreatePageNode(page); foreach (var ch in _pages.Where(p => p.ParentId == page.Id).OrderBy(p => p.Index)) { CreatePowerTree(node, ch); } parentNode.Attributes = null; parentNode.Children.Add(node); if (page.ItemType != PageItemType.Page) { parentNode.IsOpen = true; return; } node.IsFolder = true; var items = _piAccess.All(p => p.ParentId == page.Id && p.ItemType >= PageItemType.Button); foreach (var item in items) { node.Children.Add(new EasyUiTreeNode { ID = item.ID, Text = item.Caption, Title = item.Name, Tag = item.ExtendValue, Memo = item.Memo, IsOpen = true, Icon = item.ItemType == PageItemType.Action ? "icon-cmd" : "icon-cus", }); } }
/// <summary> /// 缓存角色的页面权限数据 /// </summary> /// <param name="roleId"></param> /// <param name="page"></param> /// <param name="proxy"></param> private void CacheRoleAction(int roleId, PageItemData page, RedisProxy proxy) { if (!_actions.ContainsKey(page.Id)) { return; } var dictionary = new Dictionary <string, int>(StringComparer.OrdinalIgnoreCase); var actions = roleId <= 1 ? _actions[page.Id].ToArray() : _actions[page.Id].Where(p => _allPowers.Any(a => a.PageItemId == p.Id)).ToArray(); foreach (var bp in actions) { if (String.IsNullOrEmpty(bp.ExtendValue) || dictionary.ContainsKey(bp.ExtendValue)) { continue; } dictionary.Add(bp.ExtendValue, bp.ID); } if (page.AuditPage > 0 && _actions.ContainsKey(page.AuditPage)) { var friendsItemDatas = roleId <= 1 ? _actions[page.AuditPage].ToArray() : _actions[page.AuditPage].Where(p => _allPowers.Any(a => a.PageItemId == p.Id)).ToArray(); foreach (var bp in friendsItemDatas) { if (String.IsNullOrEmpty(bp.ExtendValue) || dictionary.ContainsKey(bp.ExtendValue)) { continue; } dictionary.Add(bp.ExtendValue, bp.ID); } } AddActionSynonym(dictionary, "list", "details"); AddActionSynonym(dictionary, "update", "details"); foreach (var action in dictionary.Keys) { proxy.SetValue(ToRolePageKey(roleId, page.ID, "action", action), 1); } proxy.Set(ToRolePageKey(roleId, page.ID, "btns"), actions.Select(p => p.Name)); }
/// <summary> /// 载入数据 /// </summary> /// <param name="reader">数据读取器</param> /// <param name="entity">读取数据的实体</param> protected sealed override void LoadEntity(MySqlDataReader reader, PageItemData entity) { using (new EditScope(entity.__EntityStatus, EditArrestMode.All, false)) { entity._id = (int)reader.GetInt32(0); entity._itemtype = (PageItemType)reader.GetInt32(1); if (!reader.IsDBNull(2)) { entity._name = reader.GetString(2); } if (!reader.IsDBNull(3)) { entity._caption = reader.GetString(3); } if (!reader.IsDBNull(4)) { entity._icon = reader.GetString(4); } if (!reader.IsDBNull(5)) { entity._json = reader.GetString(5); } if (!reader.IsDBNull(6)) { entity._url = reader.GetString(6); } if (!reader.IsDBNull(7)) { entity._memo = reader.GetString(7); } entity._parentid = (int)reader.GetInt32(8); if (!reader.IsDBNull(9)) { entity._extendvalue = reader.GetString(9); } if (!reader.IsDBNull(10)) { entity._index = reader.GetInt32(10); } } }
/// <summary> /// 生成角色菜单 /// </summary> static void CreateRoleMenu(EasyUiTreeNode parentNode, List <PageItemData> pages, PageItemData page) { var node = CreatePageNode(page); node.Attributes = page.Url; node.Tag = page.Url == "Folder" ? "folder" : "page"; var array = pages.Where(p => p.ParentId == page.Id && p.ItemType <= PageItemType.Page && !p.Config.Hide).OrderBy(p => p.Index).ToArray(); if (array.Length > 0) { node.IsFolder = true; } foreach (var ch in array) { CreateRoleMenu(node, pages, ch); } if (page.ItemType == PageItemType.Page || node.HaseChildren) { parentNode.Children.Add(node); } }
/// <summary> /// 设置插入数据的命令 /// </summary> /// <param name="entity">实体对象</param> /// <param name="cmd">命令</param> /// <returns>返回真说明要取主键</returns> protected sealed override bool SetInsertCommand(PageItemData entity, MySqlCommand cmd) { cmd.CommandText = InsertSqlCode; CreateFullSqlParameter(entity, cmd); return(true); }
/// <summary> /// 设置更新数据的命令 /// </summary> /// <param name="entity">实体对象</param> /// <param name="cmd">命令</param> protected sealed override void SetUpdateCommand(PageItemData entity, MySqlCommand cmd) { cmd.CommandText = UpdateSqlCode; CreateFullSqlParameter(entity, cmd); }
/// <summary> /// 设置插入数据的命令 /// </summary> /// <param name="entity">实体对象</param> /// <param name="cmd">命令</param> /// <returns>返回真说明要取主键</returns> private void CreateFullSqlParameter(PageItemData entity, MySqlCommand cmd) { //01:标识(ID) cmd.Parameters.Add(new MySqlParameter("ID", MySqlDbType.Int32) { Value = entity.ID }); //02:节点类型(ItemType) cmd.Parameters.Add(new MySqlParameter("ItemType", MySqlDbType.Int32) { Value = entity.ItemType }); //03:名称(Name) var isNull = string.IsNullOrWhiteSpace(entity.Name); var parameter = new MySqlParameter("Name", MySqlDbType.VarChar, isNull ? 10 : (entity.Name).Length); if (isNull) { parameter.Value = DBNull.Value; } else { parameter.Value = entity.Name; } cmd.Parameters.Add(parameter); //04:标题(Caption) isNull = string.IsNullOrWhiteSpace(entity.Caption); parameter = new MySqlParameter("Caption", MySqlDbType.VarChar, isNull ? 10 : (entity.Caption).Length); if (isNull) { parameter.Value = DBNull.Value; } else { parameter.Value = entity.Caption; } cmd.Parameters.Add(parameter); //05:图标(Icon) isNull = string.IsNullOrWhiteSpace(entity.Icon); parameter = new MySqlParameter("Icon", MySqlDbType.VarChar, isNull ? 10 : (entity.Icon).Length); if (isNull) { parameter.Value = DBNull.Value; } else { parameter.Value = entity.Icon; } cmd.Parameters.Add(parameter); //06:Json内容(Json) isNull = string.IsNullOrWhiteSpace(entity.Json); parameter = new MySqlParameter("Json", MySqlDbType.VarChar, isNull ? 10 : (entity.Json).Length); if (isNull) { parameter.Value = DBNull.Value; } else { parameter.Value = entity.Json; } cmd.Parameters.Add(parameter); //07:扩展内容(ExtendValue) isNull = string.IsNullOrWhiteSpace(entity.ExtendValue); parameter = new MySqlParameter("ExtendValue", MySqlDbType.VarChar, isNull ? 10 : (entity.ExtendValue).Length); if (isNull) { parameter.Value = DBNull.Value; } else { parameter.Value = entity.ExtendValue; } cmd.Parameters.Add(parameter); //08:页面连接(Url) isNull = string.IsNullOrWhiteSpace(entity.Url); parameter = new MySqlParameter("Url", MySqlDbType.VarChar, isNull ? 10 : (entity.Url).Length); if (isNull) { parameter.Value = DBNull.Value; } else { parameter.Value = entity.Url; } cmd.Parameters.Add(parameter); //08:备注(Memo) isNull = string.IsNullOrWhiteSpace(entity.Memo); parameter = new MySqlParameter("Memo", MySqlDbType.VarChar, isNull ? 10 : (entity.Memo).Length); if (isNull) { parameter.Value = DBNull.Value; } else { parameter.Value = entity.Memo; } cmd.Parameters.Add(parameter); //09:上级节点(ParentId) cmd.Parameters.Add(new MySqlParameter("ParentId", MySqlDbType.Int32) { Value = entity.ParentId }); //09:上级节点(ParentId) cmd.Parameters.Add(new MySqlParameter("Index", MySqlDbType.Int32) { Value = entity.Index }); }
/// <summary> /// 取得仅更新的SQL语句 /// </summary> internal string GetModifiedSqlCode(PageItemData data) { if (data.__EntityStatusNull || !data.__EntityStatus.IsModified) { return(";"); } StringBuilder sql = new StringBuilder(); sql.AppendLine("UPDATE [tb_sys_page_item] SET"); //节点类型 if (data.__EntityStatus.ModifiedProperties[PageItemData.Real_ItemType] > 0) { sql.AppendLine(" [ItemType] = @ItemType"); } //名称 if (data.__EntityStatus.ModifiedProperties[PageItemData.Real_Name] > 0) { sql.AppendLine(" [Name] = @Name"); } //标题 if (data.__EntityStatus.ModifiedProperties[PageItemData.Real_Caption] > 0) { sql.AppendLine(" [Caption] = @Caption"); } //图标 if (data.__EntityStatus.ModifiedProperties[PageItemData.Real_Icon] > 0) { sql.AppendLine(" [Icon] = @Icon"); } //Json内容 if (data.__EntityStatus.ModifiedProperties[PageItemData.Real_Json] > 0) { sql.AppendLine(" [Json] = @Json"); } //页面连接 if (data.__EntityStatus.ModifiedProperties[PageItemData.Real_Url] > 0) { sql.AppendLine(" [Url] = @Url"); } //备注 if (data.__EntityStatus.ModifiedProperties[PageItemData.Real_Memo] > 0) { sql.AppendLine(" [Memo] = @Memo"); } //上级节点 if (data.__EntityStatus.ModifiedProperties[PageItemData.Real_ParentId] > 0) { sql.AppendLine(" [ParentId] = @ParentId"); } //扩展内容 if (data.__EntityStatus.ModifiedProperties[PageItemData.Real_ExtendValue] > 0) { sql.AppendLine(" [ExtendValue] = @ExtendValue"); } //扩展内容 if (data.__EntityStatus.ModifiedProperties[PageItemData.Real_ExtendValue] > 0) { sql.AppendLine(" [Index] = @Index"); } sql.Append(" WHERE [ID] = @ID;"); return(sql.ToString()); }