.net core 实例教程(十六)菜单管理相关接口实现代码

本文源码下载地址:http://www.80cxy.com/Blog/ResourceView?arId=202403191532545995NAAqJh

系列教程地址:http://www.80cxy.com/Blog/ArticleView?arId=202403191517574161ay3s5V

本文实现用户管理相关模块代码,主要有分页获取用户列表、增加用户、修改用户、删除用户以及批量删除用户接口。下面直接上代码。

一、仓储代码

(一)仓储接口代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

/// <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);

(二)仓储接口实现代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

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;

        }

二、领域服务代码

(一)领域服务接口代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

/// <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);

(二)领域服务接口实现代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

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代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

/// <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个)

  • 13
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值