using System.Collections.Generic; using System.Linq; using Infrastructure; using Microsoft.AspNetCore.Mvc; using Microsoft.VisualStudio.TestPlatform.ObjectModel.Utilities; using OpenAuth.App.Base; using OpenAuth.App.Interface; using OpenAuth.App.ModuleManager; using OpenAuth.App.ModuleManager.Response; using OpenAuth.App.Request; using OpenAuth.Repository; using OpenAuth.Repository.Core; using OpenAuth.Repository.Domain; using SqlSugar; namespace OpenAuth.App { public class ModuleManagerApp : StringTreeApp { private ISqlSugarClient client; public ModuleManagerApp( ISugarUnitOfWork unitWork, ISimpleClient repository , IAuth auth) : base(unitWork, repository, auth) { client = base.Repository.AsSugarClient(); } #region 菜单 #region 查询 #region 菜单树 /// /// 菜单树【全部数据】 /// /// /// public Response> ModulesTree(string name) { var result = new Response>(); if (!string.IsNullOrEmpty(name)) { object[] orgIds = base.Repository.AsQueryable() .Where(a => a.Name.Contains(name)) .Select(it => it.Id).ToList().Cast().ToArray(); result.Result = base.Repository.AsQueryable() .OrderBy(a => a.SortNo) .Select() .ToTree(a => a.Children, a => a.ParentId, 0, orgIds); } else { result.Result = base.Repository.AsQueryable() .OrderBy(a => a.SortNo) .Select() .ToTree(a => a.Children, a => a.ParentId, 0, a => a.Id); } return result; } #endregion #region 单个菜单 public async Task> ModuleById(string id) { var model = await base.Repository.GetByIdAsync(id); return new Response { Result = model }; } #endregion #endregion #region 增加 public Response Add(SysModule model) { var loginContext = _auth.GetCurrentUser(); if (loginContext == null) { throw new CommonException("登录已过期", Define.INVALID_TOKEN); } //后面再看 //CalculateCascade(model); model.Id = Guid.NewGuid().ToString(); var flag = Repository.Insert(model); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } #endregion #region 修改 public Response Update(SysModule obj) { try { //var flag = base.Repository.Update(obj); //if (flag) //{ // return new Response { Result = true, Message = "success" }; //} //else //{ // return new Response { Result = false, Message = "error" }; //} UpdateTreeObj(obj); return new Response { Result = true, Message = "success" }; } catch (Exception ex) { return new Response { Result = false, Message = "error:" + ex.Message.ToString() }; } } #endregion #region 删除 /// /// 删除指定的菜单 /// /// public async Task> Delete(string[] ids) { using (var uow = base.UnitWork.CreateContext()) { await uow.Module.DeleteByIdAsync(ids.Cast().ToArray()); await uow.ModuleElement.DeleteAsync(a => ids.Contains(a.ModuleId)); var flag = uow.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } #endregion #endregion #region 按钮 #region 查询 #region 根据 ModuleId 获取 Elements /// /// 根据 ModuleId 获取 Elements /// /// /// public async Task>>> ElementsByModule( [FromQuery] QueryElementListReq req) { RefAsync totalCount = 0; var elements = await base.Repository.ChangeRepository>().AsQueryable() .WhereIF(!string.IsNullOrEmpty(req.key), el => el.Name.Contains(req.key)) .WhereIF(!string.IsNullOrEmpty(req.ModuleId), el => el.ModuleId == req.ModuleId) .ToPageListAsync(req.page, req.limit, totalCount); return new Response>> { Result = new PageInfo> { Items = elements, Total = totalCount } }; } #endregion #endregion #region 添加 public Response AddMenu(SysModuleElement model) { var loginContext = _auth.GetCurrentUser(); if (loginContext == null) { throw new CommonException("登录已过期", Define.INVALID_TOKEN); } using (var uow = base.UnitWork.CreateContext()) { model.Id = Guid.NewGuid().ToString(); uow.ModuleElement.Insert(model); var flag = uow.Commit(); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } } #endregion #region 修改 public Response UpdateMenu(SysModuleElement model) { var flag = base.Repository.ChangeRepository>().Update(model); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } #endregion #region 删除 public async Task> DelMenu(string[] ids) { var flag = await base.Repository.ChangeRepository>() .DeleteByIdAsync(ids.Cast().ToArray()); return new Response { Result = flag, Message = flag == true ? "success" : "error" }; } #endregion #endregion #region 用户/角色分配模块 /// /// 加载特定角色的模块 /// /// The role unique identifier. public async Task> LoadForRole(long roleId) { var respone = new Response(); using (var uwo = UnitWork.CreateContext()) { respone.Result = new ModulesWithElements { ElementIds = (await uwo.SysRoleElement.GetListAsync(a => a.RoleId == roleId)) .Select(a => a.ElementId).ToList(), ModuleIds = (await uwo.SysRoleModule.GetListAsync(a => a.RoleId == roleId)) .Select(a => a.ModuleId).ToList() }; } return respone; } #endregion 用户/角色分配模块 public async Task>> AllModule() { var modules = await Repository.AsQueryable().Select(a => new SysModule { Id = a.Id, ModuleTypeId = a.ModuleTypeId }).Where(a => a.Status == 1).OrderBy(a => a.SortNo) .ToListAsync(); return new Response> { Result = modules }; } } }