PieChart.razor.cs 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using AntDesign;
  2. using Blazor.ECharts.Options;
  3. using Blazor.ECharts.Options.Enum;
  4. using Microsoft.AspNetCore.Components;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Text.Json;
  8. using System.Threading.Tasks;
  9. using wispro.sp.web.Services;
  10. using P = Blazor.ECharts.Options.Series.Pie;
  11. namespace wispro.sp.web.Pages.Report
  12. {
  13. public partial class PieChart
  14. {
  15. private int iType = 1;
  16. private DateTime? start = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);
  17. private DateTime? end = DateTime.Now;
  18. Blazor.ECharts.Components.EPie pieChart;
  19. internal class TJType
  20. {
  21. public string Name { get; set; }
  22. public int value { get; set; }
  23. }
  24. List<TJType> Types = new List<TJType>
  25. {
  26. new TJType { value = 0,Name = "申诉人统计" },
  27. new TJType { value = 1,Name = "申诉类型统计" },
  28. new TJType { value = 2, Name = "部门申诉统计" },
  29. //new TJType { value = 3, Name = "申诉人每月申诉统计" },
  30. };
  31. private EChartsOption<P.Pie> Option1;
  32. share.ChartDatas Datas=new share.ChartDatas() {
  33. Title ="初始化标题",
  34. Datas = new List<share.ChartData>() {
  35. new share.ChartData(){ type ="A", value =1, year="", CustomerType ="", CustomerYear=""},
  36. new share.ChartData(){ type ="B",value =5, year="",CustomerType ="", CustomerYear=""}
  37. },
  38. ATitle ="ATitle",
  39. BTitle="",
  40. };
  41. List<object> ShowData = new List<object>()
  42. {
  43. new {type="A",value=1},
  44. new {type="B",value=5}
  45. };
  46. [Inject] ReportService reportService { get; set; }
  47. [Inject] MessageService msgService { get; set; }
  48. [Inject] protected IAuthService _authService { get; set; }
  49. [Obsolete]
  50. protected async override Task OnInitializedAsync()
  51. {
  52. await base.OnInitializedAsync();
  53. await _authService.CanVisitResource();
  54. await OnButtonClick();
  55. //Datas = await reportService.GetAppealReportData(1, DateTime.Parse("2022-02-01"), null, null);
  56. //if (Datas != null)
  57. //{
  58. // Option1 = GetPieOption(Datas);
  59. // pieChart.Refresh();
  60. // StateHasChanged();
  61. //}
  62. }
  63. private EChartsOption<P.Pie> GetPieOption(share.ChartDatas datas)
  64. {
  65. List<object> seriesData = new List<object>();
  66. foreach(var data in datas.Datas)
  67. {
  68. seriesData.Add(new { Name = data.type, Value = data.value });
  69. }
  70. return Option1 = new()
  71. {
  72. Toolbox = new() {
  73. Show= true,
  74. Feature=new()
  75. {
  76. SaveAsImage = new()
  77. {
  78. PixelRatio =2,
  79. Name="保存图片"
  80. }
  81. }
  82. },
  83. Title= new Blazor.ECharts.Options.Title()
  84. {
  85. Text = datas.Title ,
  86. Left = "center"
  87. },
  88. Tooltip = new()
  89. {
  90. Trigger = TooltipTrigger.Item,
  91. Formatter = "{a} <br/>{b}: {c} ({d}%)"
  92. },
  93. Legend = new()
  94. {
  95. Show = false,
  96. Orient = Orient.Vertical,
  97. Left = 10,
  98. Data = datas.GetSeries()
  99. },
  100. Series = new()
  101. {
  102. new P.Pie()
  103. {
  104. Name = datas.Title,
  105. Radius = new[] { "50%", "70%" },
  106. AvoidLabelOverlap = false,
  107. Label = new()
  108. {
  109. Show = true,
  110. Formatter= "{b}\r\n{c} ({d}%)"
  111. },
  112. //LabelLine = new() { Show = true },
  113. Data = seriesData
  114. }
  115. }
  116. };
  117. }
  118. private void OnTimeRangeChange(DateRangeChangedEventArgs args)
  119. {
  120. msgService.Info($"Selected Time: {JsonSerializer.Serialize(args.Dates)}");
  121. if (args.Dates?.Length > 0){
  122. start = args.Dates[0];
  123. }
  124. if (args.Dates?.Length > 1)
  125. {
  126. end = args.Dates[1];
  127. }
  128. }
  129. private bool _noIconLoading;
  130. private async Task OnButtonClick()
  131. {
  132. _noIconLoading = true;
  133. Datas = await reportService.GetAppealReportData(iType, start, end, null);
  134. if (Datas != null)
  135. {
  136. Option1 = GetPieOption(Datas);
  137. pieChart.Refresh();
  138. StateHasChanged();
  139. }
  140. _noIconLoading = false;
  141. }
  142. }
  143. }