You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

286 lines
8.5 KiB
C#

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<SysModule, SugarDbContext>
{
private ISqlSugarClient client;
public ModuleManagerApp(
ISugarUnitOfWork<SugarDbContext> unitWork,
ISimpleClient<SysModule> repository
, IAuth auth) : base(unitWork, repository, auth)
{
client = base.Repository.AsSugarClient();
}
#region 菜单
#region 查询
#region 菜单树
/// <summary>
/// 菜单树【全部数据】
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public Response<List<TreeItemString>> ModulesTree(string name)
{
var result = new Response<List<TreeItemString>>();
if (!string.IsNullOrEmpty(name))
{
object[] orgIds = base.Repository.AsQueryable()
.Where(a => a.Name.Contains(name))
.Select(it => it.Id).ToList().Cast<object>().ToArray();
result.Result = base.Repository.AsQueryable()
.OrderBy(a => a.SortNo)
.Select<TreeItemString>()
.ToTree(a => a.Children, a => a.ParentId, 0, orgIds);
}
else
{
result.Result = base.Repository.AsQueryable()
.OrderBy(a => a.SortNo)
.Select<TreeItemString>()
.ToTree(a => a.Children, a => a.ParentId, 0, a => a.Id);
}
return result;
}
#endregion
#region 单个菜单
public async Task<Response<SysModule>> ModuleById(string id)
{
var model = await base.Repository.GetByIdAsync(id);
return new Response<SysModule> { Result = model };
}
#endregion
#endregion
#region 增加
public Response<bool> 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<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
#endregion
#region 修改
public Response<bool> Update(SysModule obj)
{
try
{
//var flag = base.Repository.Update(obj);
//if (flag)
//{
// return new Response<bool> { Result = true, Message = "success" };
//}
//else
//{
// return new Response<bool> { Result = false, Message = "error" };
//}
UpdateTreeObj(obj);
return new Response<bool> { Result = true, Message = "success" };
}
catch (Exception ex)
{
return new Response<bool> { Result = false, Message = "error:" + ex.Message.ToString() };
}
}
#endregion
#region 删除
/// <summary>
/// 删除指定的菜单
/// </summary>
/// <param name="ids"></param>
public async Task<Response<bool>> Delete(string[] ids)
{
using (var uow = base.UnitWork.CreateContext())
{
await uow.Module.DeleteByIdAsync(ids.Cast<object>().ToArray());
await uow.ModuleElement.DeleteAsync(a => ids.Contains(a.ModuleId));
var flag = uow.Commit();
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
}
#endregion
#endregion
#region 按钮
#region 查询
#region 根据 ModuleId 获取 Elements
/// <summary>
/// 根据 ModuleId 获取 Elements
/// </summary>
/// <param name="req"></param>
/// <returns></returns>
public async Task<Response<PageInfo<List<SysModuleElement>>>> ElementsByModule(
[FromQuery] QueryElementListReq req)
{
RefAsync<int> totalCount = 0;
var elements = await base.Repository.ChangeRepository<SugarRepositiry<SysModuleElement>>().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<PageInfo<List<SysModuleElement>>>
{
Result = new PageInfo<List<SysModuleElement>>
{
Items = elements,
Total = totalCount
}
};
}
#endregion
#endregion
#region 添加
public Response<bool> 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<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
}
#endregion
#region 修改
public Response<bool> UpdateMenu(SysModuleElement model)
{
var flag = base.Repository.ChangeRepository<SugarRepositiry<SysModuleElement>>().Update(model);
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
#endregion
#region 删除
public async Task<Response<bool>> DelMenu(string[] ids)
{
var flag = await base.Repository.ChangeRepository<SugarRepositiry<SysModuleElement>>()
.DeleteByIdAsync(ids.Cast<object>().ToArray());
return new Response<bool>
{
Result = flag,
Message = flag == true ? "success" : "error"
};
}
#endregion
#endregion
#region 用户/角色分配模块
/// <summary>
/// 加载特定角色的模块
/// </summary>
/// <param name="roleId">The role unique identifier.</param>
public async Task<Response<ModulesWithElements>> LoadForRole(long roleId)
{
var respone = new Response<ModulesWithElements>();
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<Response<List<SysModule>>> AllModule()
{
var modules =
await Repository.AsQueryable().Select<SysModule>(a => new SysModule
{
Id = a.Id,
ModuleTypeId = a.ModuleTypeId
}).Where(a => a.Status == 1).OrderBy(a => a.SortNo)
.ToListAsync();
return new Response<List<SysModule>> { Result = modules };
}
}
}