.net core 实例教程(十六)菜单管理相关接口实现代码
小白浏览:5812024-03-24 16:47:50本文累计收益:0我也要赚钱

本文源码下载地址: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个)

评论列表
发表评论
+ 关注