MenuAppService.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Linq.Dynamic.Core;
  5. using System.Threading.Tasks;
  6. using BaseService.Permissions;
  7. using BaseService.Systems.MenuManagement.Dto;
  8. using Microsoft.AspNetCore.Authorization;
  9. using Microsoft.EntityFrameworkCore;
  10. using Volo.Abp.Application.Dtos;
  11. using Volo.Abp.Application.Services;
  12. using Volo.Abp.Domain.Repositories;
  13. namespace BaseService.Systems.MenuManagement
  14. {
  15. [Authorize(BaseServicePermissions.Menu.Default)]
  16. public class MenuAppService : ApplicationService, IMenuAppService
  17. {
  18. private readonly IRepository<Menu, Guid> _repository;
  19. public MenuAppService(IRepository<Menu, Guid> repository)
  20. {
  21. _repository = repository;
  22. }
  23. public async Task<MenuDto> Create(CreateOrUpdateMenuDto input)
  24. {
  25. var result = await _repository.InsertAsync(new Menu(GuidGenerator.Create())
  26. {
  27. FormId = input.FormId,
  28. Pid = input.Pid,
  29. Name = input.Name,
  30. Label = input.Label,
  31. CategoryId = input.CategoryId,
  32. Sort = input.Sort,
  33. Path = input.Path,
  34. Component = input.Component,
  35. Permission = input.Permission,
  36. Icon = input.Icon,
  37. AlwaysShow = input.Pid == null ? true : false,
  38. Hidden = input.CategoryId == 2 ? true : false
  39. });
  40. return ObjectMapper.Map<Menu, MenuDto>(result);
  41. }
  42. public async Task Delete(List<Guid> ids)
  43. {
  44. //TODO:删除子集
  45. foreach (var id in ids)
  46. {
  47. await _repository.DeleteAsync(id);
  48. }
  49. }
  50. public async Task<ListResultDto<MenuDto>> GetAll(GetMenuInputDto input)
  51. {
  52. var query = (await _repository.GetQueryableAsync()).WhereIf(!string.IsNullOrWhiteSpace(input.Filter), _ => _.Name.Contains(input.Filter));
  53. var items = await query.OrderBy(input.Sorting ?? "Sort")
  54. .ToListAsync();
  55. var dtos = ObjectMapper.Map<List<Menu>, List<MenuDto>>(items);
  56. return new ListResultDto<MenuDto>(dtos);
  57. }
  58. public async Task<MenuDto> Get(Guid id)
  59. {
  60. var result = await _repository.GetAsync(id);
  61. var dto = ObjectMapper.Map<Menu, MenuDto>(result);
  62. if (dto.Pid.HasValue)
  63. dto.ParentLabel = (await _repository.FirstOrDefaultAsync(_ => _.Id == result.Pid))?.Label;
  64. return dto;
  65. }
  66. public async Task<ListResultDto<MenuDto>> LoadAll(Guid? id)
  67. {
  68. var items = await (await _repository.GetQueryableAsync()).Where(_ => _.Pid == id).OrderBy(_ => _.Sort).ToListAsync();
  69. var dtos = ObjectMapper.Map<List<Menu>, List<MenuDto>>(items);
  70. return new ListResultDto<MenuDto>(dtos);
  71. }
  72. public async Task<MenuDto> Update(Guid id, CreateOrUpdateMenuDto input)
  73. {
  74. var menu = await _repository.GetAsync(id);
  75. menu.Pid = input.Pid;
  76. menu.CategoryId = input.CategoryId;
  77. menu.Name = input.Name;
  78. menu.Label = input.Label;
  79. menu.Sort = input.Sort;
  80. menu.Path = input.Path;
  81. menu.Component = input.Component;
  82. menu.Icon = input.Icon;
  83. menu.Permission = input.Permission;
  84. return ObjectMapper.Map<Menu, MenuDto>(menu);
  85. }
  86. }
  87. }