Index.cshtml.cs 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using SharedKernel.Helpers;
  2. using SharedKernel.Extensions;
  3. using Application.Abstractions.Messaging;
  4. using Microsoft.AspNetCore.Mvc;
  5. using Microsoft.AspNetCore.Mvc.RazorPages;
  6. using System.ComponentModel;
  7. using System.ComponentModel.DataAnnotations;
  8. namespace Admin.Pages.Faq.List
  9. {
  10. public class IndexModel(IMediator mediator) : PageModel
  11. {
  12. [BindProperty(SupportsGet = true)]
  13. public QueryParams Query { get; set; } = new();
  14. public List<(int ID, string Code, string Subject, int FaqItemRows)> Categories { get; set; } = [];
  15. public sealed class QueryParams
  16. {
  17. [Range(1, int.MaxValue)]
  18. [DisplayName("??? ??")]
  19. public int PageNum { get; set; } = 1;
  20. [Range(1, 100)]
  21. [DisplayName("??? ?? ?")]
  22. public ushort PerPage { get; set; } = 10;
  23. [DisplayName("FAQ ??")]
  24. public int? CategoryID { get; set; }
  25. [DisplayName("???")]
  26. public string? Keyword { get; set; }
  27. }
  28. public int Total { get; set; } = 0;
  29. public List<(
  30. int Num,
  31. int ID,
  32. string CategoryCode,
  33. string CategorySubject,
  34. string Question,
  35. string? Answer,
  36. short Order,
  37. char IsActive,
  38. string? UpdatedAt,
  39. string CreatedAt,
  40. string EditURL
  41. )> List { get; set; } = [];
  42. public Pagination? Pagination { get; set; }
  43. public async Task OnGetAsync(CancellationToken ct)
  44. {
  45. if (!ModelState.IsValid)
  46. {
  47. return;
  48. }
  49. Categories = [..(await mediator.Send(new GetFaqCategories.Query(), ct)).List.Select(c => (c.ID, c.Code, c.Subject, c.FaqItemRows))];
  50. var result = await mediator.Send(new SearchFaqItems.Query(Query.CategoryID, Query.Keyword, Query.PageNum, Query.PerPage), ct);
  51. var queryString = Query.ToQueryString();
  52. Total = result.Total;
  53. List = [..result.List.Select(c => (
  54. c.Num,
  55. c.ID,
  56. c.CategoryCode,
  57. c.CategorySubject,
  58. c.Question,
  59. c.Answer,
  60. c.Order,
  61. c.IsActive ? 'Y' : 'N',
  62. c.UpdatedAt.GetDateAt() ?? "-",
  63. c.CreatedAt.GetDateAt(),
  64. EditURL: $"/Faq/List/Edit/{c.ID}{Request.QueryString}"
  65. ))];
  66. Pagination = new Pagination(result.Total, Query.PageNum, Query.PerPage);
  67. }
  68. public async Task<IActionResult> OnPostDeleteAsync(int[] ids, CancellationToken ct)
  69. {
  70. try
  71. {
  72. await mediator.Send(new DeleteFaqItem.Command(ids), ct);
  73. TempData["SuccessMessage"] = $"{ids.Length}? FAQ? ???????.";
  74. }
  75. catch (Exception e)
  76. {
  77. TempData["ErrorMessages"] = e.Message;
  78. }
  79. return RedirectToPage("/Faq/List/Index", Query);
  80. }
  81. }
  82. }