.net core 实例教程(十六)菜单管理相关接口实现代码
本文源码下载地址:http://www.80cxy.com/Blog/ResourceView?arId=202403191532545995NAAqJh
系列教程地址:http://www.80cxy.com/Blog/ArticleView?arId=202403191517574161ay3s5V
本文实现用户管理相关模块代码,主要有分页获取用户列表、增加用户、修改用户、删除用户以及批量删除用户接口。下面直接上代码。
一、仓储代码
(一)仓储接口代码
/// <summary> /// 根据菜单Id获取菜单 /// </summary> /// <param name="id">id</param> /// <returns></returns> Task<SysMenu?> FindOneMenuById(string id); /// <summary> /// 获取树形列表菜单数据 /// </summary> /// <returns></returns> Task<SysMenu[]> GetMenuTreeList(); /// <summary> /// 根据父层Id获取子菜单列表 /// </summary> /// <param name="parentId"></param> /// <returns></returns> SysMenu[] GetMenuListByParentId(string parentId); /// <summary> /// 分页获取菜单数据 /// </summary> /// <param name="pageIndex">第几页</param> /// <param name="pageSize">每页条数</param> /// <param name="wheres">查询条件</param> /// <param name="sort">排序字段</param> /// <param name="order">排序分类</param> /// <returns></returns> Task<(SysMenu[], int total)> GetMenuList(int pageIndex, int pageSize, string wheres, string sort, string order); /// <summary> /// 添加菜单 /// </summary> /// <param name="parentId">父层Id</param> /// <param name="name">菜单名称</param> /// <param name="routerName">路由名称</param> /// <param name="level">菜单级别</param> /// <param name="sort">菜单分类</param> /// <param name="remark">备注</param> /// <returns></returns> Task<SysMenu> AddMenu(string parentId, string name, string routerName, int level, string sort, string remark); /// <summary> /// 修改菜单 /// </summary> /// <param name="id">菜单Id</param> /// <param name="name">菜单名称</param> /// <param name="routerName">路由名称</param> /// <param name="level">菜单级别</param> /// <param name="sort">菜单分类</param> /// <param name="remark">备注</param> /// <returns></returns> Task<SysMenu> EditMenu(string id, string name, string routerName, int level, string sort, string remark); /// <summary> /// 删除菜单 /// </summary> /// <param name="id">菜单Id</param> void DelMenu(string id); /// <summary> /// 批量删除菜单 /// </summary> /// <param name="parentId">父层Id</param> /// <returns></returns> Task<bool> DelMenuRange(string parentId);
(二)仓储接口实现代码
public async Task<SysMenu?> FindOneMenuById(string id) { return await _dbContext.SysMenu.FindAsync(Guid.Parse(id)); } public async Task<SysMenu[]> GetMenuTreeList() { try { var nodes = await _dbContext.SysMenu.Where(x => x.ParentId == null).ToArrayAsync(); foreach (var item in nodes) { item.Children = await GetMenuChildrens(item); } return nodes; } catch (Exception e) { return null; } } private async Task<SysMenu[]> GetMenuChildrens(SysMenu item) { var children = await _dbContext.SysMenu.Where(x => x.ParentId == item.Id).ToArrayAsync(); foreach (var child in children) { child.Children = await GetMenuChildrens(child); } return children; } public SysMenu[] GetMenuListByParentId(string parentId) { return _dbContext.SysMenu.Where(c => c.ParentId == Guid.Parse(parentId)).ToArray(); } public async Task<(SysMenu[], int total)> GetMenuList(int pageIndex, int pageSize, string wheres, string sort, string order) { //where查询条件 List<DataFilter> searchParametersList = FormatParameters.GetSearchParameters(wheres); //order排序条件 Dictionary<string, QueryOrderBy> orderBy = FormatParameters.GetOrderParameters(sort, order); //构造查询条件 Expression<Func<SysMenu, bool>> expression = DataFilterConvertor<SysMenu>.ToExpression(searchParametersList); //根据条件查询数据 var list = _dbContext.SysMenu.Where(expression); //获取分页数 int total = list.Count(); //排序返回当前页数据 var listResult = await list.OrderConditions(orderBy).Skip((pageIndex - 1) * pageSize).Take(pageSize).ToArrayAsync(); return (listResult, total); } public async Task<SysMenu> AddMenu(string parentId, string name, string routerName, int level, string sort, string remark) { var model = SysMenu.Add(parentId, name, routerName, level, sort, remark); await _dbContext.SysMenu.AddAsync(model); return model; } public async Task<SysMenu> EditMenu(string id, string name, string routerName, int level, string sort, string remark) { var model = await FindOneMenuById(id); return model.Edit(name, routerName, level, sort, remark); } public async void DelMenu(string id) { _dbContext.SysMenu.Remove(await FindOneMenuById(id)); } public async Task<bool> DelMenuRange(string parentId) { _dbContext.SysMenu.RemoveRange(await _dbContext.SysMenu.Where(c => c.ParentId == Guid.Parse(parentId)).ToArrayAsync()); return true; }
二、领域服务代码
(一)领域服务接口代码
/// <summary> /// 获取树形菜单数据 /// </summary> /// <returns></returns> Task<ResponseContent> GetMenuTreeList(); /// <summary> /// 分页获取菜单数据 /// </summary> /// <param name="pageIndex">第几页</param> /// <param name="pageSize">每页条数</param> /// <param name="wheres">查询条件</param> /// <param name="sort">排序字段</param> /// <param name="order">排序分类</param> /// <returns></returns> Task<ResponseContent> GetMenuList(int pageIndex, int pageSize, string Wheres, string Sort, string Order); /// <summary> /// 添加菜单 /// </summary> /// <param name="parentId">父层Id</param> /// <param name="name">菜单名称</param> /// <param name="routerName">路由名称</param> /// <param name="level">菜单级别</param> /// <param name="sort">菜单分类</param> /// <param name="remark">备注</param> /// <returns></returns> Task<ResponseContent> AddMenu(string parentId, string name, string routerName, int level, string sort, string remark); /// <summary> /// 修改菜单 /// </summary> /// <param name="id">菜单Id</param> /// <param name="name">菜单名称</param> /// <param name="routerName">路由名称</param> /// <param name="level">菜单级别</param> /// <param name="sort">菜单分类</param> /// <param name="remark">备注</param> /// <returns></returns> Task<ResponseContent> EditMenu(string id, string name, string routerName, int level, string sort, string remark); /// <summary> /// 删除菜单 /// </summary> /// <param name="id">菜单Id</param> /// <returns></returns> ResponseContent DeleteMenu(string id);
(二)领域服务接口实现代码
public async Task<ResponseContent> GetMenuTreeList() { ResponseContent response = new ResponseContent(); return response.Ok(new { rows = await _systemDomainRepostory.GetMenuTreeList() }); } public async Task<ResponseContent> GetMenuList(int pageIndex, int pageSize, string wheres, string sort, string order) { ResponseContent response = new ResponseContent(); (var list, int total) = await _systemDomainRepostory.GetMenuList(pageIndex, pageSize, wheres, sort, order); var result = new List<SysMenuDto>(); for (int i = 0; i < list.Length; i++) { var model = new SysMenuDto(); model.Id = list[i].Id; model.Name = list[i].Name; model.Sort = list[i].Sort; model.ParentId = list[i].ParentId; var listBtn = _systemDomainRepostory.GetMenuListByParentId(list[i].Id.ToString()); for (int j = 0; j < listBtn.Length; j++) { var buttonModel = new ButtonModel(); buttonModel.Id = listBtn[j].Id; buttonModel.Name = listBtn[j].Name; model.ButtonList.Add(buttonModel); } result.Add(model); } return response.Ok(new { total = total, rows = result }); } public async Task<ResponseContent> AddMenu(string parentId, string name, string routerName, int level, string sort, string remark) { ResponseContent response = new ResponseContent(); await _systemDomainRepostory.AddMenu(parentId, name, routerName, level, sort, remark); return response.Ok(); } public async Task<ResponseContent> EditMenu(string id, string name, string routerName, int level, string sort, string remark) { ResponseContent response = new ResponseContent(); await _systemDomainRepostory.EditMenu(id, name, routerName, level, sort, remark); return response.Ok(); } public ResponseContent DeleteMenu(string id) { ResponseContent response = new ResponseContent(); ShanChuXiaoLei(id); _systemDomainRepostory.DelMenu(id); return response.Ok(); } /// <summary> /// 删除子菜单 /// </summary> /// <param name="parentId">父层Id</param> /// <returns></returns> private void ShanChuXiaoLei(string parentId) { var list = _systemDomainRepostory.GetMenuListByParentId(parentId); for (int i = 0; i < list.Length; i++) { _systemDomainRepostory.DelMenu(list[i].Id.ToString()); ShanChuXiaoLei(list[i].Id.ToString()); } }
三、Controller代码
/// <summary> /// 获取菜单树形列表数据 /// </summary> /// <remarks> /// 描述:树形控件使用数据源 /// </remarks> /// <returns></returns> [HttpGet] [TypeFilter(typeof(ApiAuthorizeFilter))] public async Task<ActionResult> GetMenuTreeList() { return new JsonResult(await _systemDomainService.GetMenuTreeList()); } /// <summary> /// 添加菜单 /// </summary> /// <remarks> /// 描述:添加菜单 /// </remarks> /// <param name="req">请求参数</param> /// <returns></returns> [HttpPost] [Authorize] [UnitOfWork(typeof(SignUpDbContext))] public async Task<ActionResult> AddMenu(AddMenuRequest req) { return new JsonResult(await _systemDomainService.AddMenu(req.ParentId, req.Name, req.RouterName, req.Level, req.Sort, req.Remark)); } /// <summary> /// 修改菜单 /// </summary> /// <remarks> /// 描述:修改菜单 /// </remarks> /// <param name="req"></param> /// <returns></returns> [HttpPut] [Authorize] [UnitOfWork(typeof(SignUpDbContext))] public async Task<ActionResult> EditMenu(EditMenuRequest req) { return new JsonResult(await _systemDomainService.EditMenu(req.Id, req.Name, req.RouterName, req.Level, req.Sort, req.Remark)); } /// <summary> /// 删除菜单 /// </summary> /// <remarks> /// 描述:删除菜单 /// </remarks> /// <param name="id"></param> /// <returns></returns> [HttpDelete] [TypeFilter(typeof(ApiAuthorizeFilter))] [UnitOfWork(typeof(SignUpDbContext))] public ActionResult DeleteMenu(string id) { return new JsonResult(_systemDomainService.DeleteMenu(id)); }
学习交流
附笔者学习 .net core开发时参考相关项目实例源码:asp.net core webapi项目实例源代码锦集下载(72个)
猜您可能还喜欢
- net core+webapi+nginx windows 服务器部署(1361)
- .Nuget Packages 太占C盘,删除后可以放到其他盘(1247)
- ASP.NET Core 配置 Swagger 显示接口注释描述信息(1142)
- vue调用接口后获取不到后端返回的Header响应头(1040)
- .net core 系列实例开发教程-权限管理系统功能介绍(992)
- .net core 6.0 web API + SwaggerUI + IIS部署(965)
- .net core 实例教程(十二)配置启用Swagger中的【Authorize】按钮(885)
- .net core 实例教程(一)新建项目(838)
- .net core 实例教程(十四)配置 Swagger 显示接口注释描述信息及支持版本控制(826)
- .net core 实例教程(十一)生成JWT格式的token密码配置及代码(801)
评论列表
发表评论
文章分类
文章归档
- 2025年3月 (1)
- 2024年6月 (2)
- 2024年5月 (2)
- 2024年4月 (4)
- 2024年3月 (30)
- 2024年1月 (4)
- 2023年12月 (2)
- 2023年11月 (4)
- 2023年10月 (4)
- 2023年9月 (6)
- 2023年3月 (2)
- 2023年2月 (1)
- 2023年1月 (1)
- 2022年12月 (1)
- 2022年9月 (21)
- 2022年8月 (10)
- 2022年7月 (3)
- 2022年4月 (1)
- 2022年3月 (13)
- 2021年8月 (1)
- 2021年3月 (1)
- 2020年12月 (42)
- 2020年11月 (7)
- 2020年10月 (5)
- 2020年8月 (1)
- 2020年6月 (1)
- 2020年3月 (2)
- 2019年12月 (8)
- 2019年11月 (3)
- 2019年9月 (1)
- 2019年4月 (1)
- 2019年3月 (6)
- 2019年2月 (1)
- 2018年7月 (7)
阅读排行
- 1.asp.net mvc内微信pc端、H5、JsApi支付方式总结(5751)
- 2.Windows 10休眠文件更改存储位置(3400)
- 3.各大搜索网站网站收录提交入口地址(3319)
- 4.ECharts仪表盘实例及参数使用详解(3217)
- 5.windows 10安装myeclipse 10破解补丁cracker.jar、run.bat闪退解决办法(3154)
- 6.HTML5 WebSocket与C#建立Socket连接实现代码(3015)
- 7.华为鸿蒙系统清除微信浏览器缓存方法(2926)
- 8.CERT_HAS_EXPIRED错误如何解决(2493)
- 9.Js异步async、await关键字详细介绍(lambda表达式中使用async和await关键字)(2341)
- 10.HBuilder编辑器格式化代码(2240)