Menu.razor 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. @page "/system/menu"
  2. @using AntDesign.TableModels
  3. @attribute [ReuseTabsPage(Title = "菜单管理")]
  4. <Spin Spinning="Loading">
  5. <Table @ref="Table" AutoHeight TItem="SystemMenu" DataSource="DataSource" @bind-PageSize="Ps" @bind-PageIndex="Pi"
  6. TreeChildren="item=>item.Children" @bind-SelectedRows="SelectedRows" OnChange="OnChange">
  7. <ColumnDefinitions Context="row">
  8. <PropertyColumn Align="ColumnAlign.Left" Property="c => c.Name" Title="菜单名称" />
  9. <PropertyColumn Align="ColumnAlign.Left" Property="c => c.Path" Title="路由" />
  10. <PropertyColumn Align="ColumnAlign.Center" Width="100" Property="c=>c.Enabled" Title="是否启用">
  11. @if (row.ParentId != 0)
  12. {
  13. <Switch Checked="@row.Enabled" @bind-Value="@row.Enabled" CheckedChildren="启用" UnCheckedChildren="禁用" OnChange="() => CheckedChanged(row)" />
  14. }
  15. </PropertyColumn>
  16. <PropertyColumn Align="ColumnAlign.Center" Property="c=>c.Necessary" Title="是否必需">
  17. @{
  18. var tag = row.Necessary ? "必需" : "非必需";
  19. var color = row.Necessary ? TagColor.Green : TagColor.Blue;
  20. }
  21. <Tag Color="@color">@tag</Tag>
  22. </PropertyColumn>
  23. <PropertyColumn Align="ColumnAlign.Center" Property="c => c.Key" Title="自定义唯一键值" />
  24. <PropertyColumn Align="ColumnAlign.Center" Property="c => c.Icon" Title="图标">
  25. @{
  26. var type = row.Icon;
  27. }
  28. <Icon Type="@type" Theme="IconThemeType.Outline" />
  29. </PropertyColumn>
  30. <PropertyColumn Align="ColumnAlign.Center" Property="c => c.Sort" Title="排序" />
  31. </ColumnDefinitions>
  32. <PaginationTemplate>
  33. <Pagination Class="@(context.PaginationClass + " my-custom-pagination")"
  34. Total="context.Total"
  35. PageSize="context.PageSize"
  36. Current="context.PageIndex"
  37. ShowSizeChanger
  38. OnChange="context.HandlePageChange" />
  39. </PaginationTemplate>
  40. </Table>
  41. </Spin>
  42. @inject ModalService ModalService;
  43. @inject ConfirmService ComfirmService;
  44. @inject IMessageService Message;
  45. @inject NavigationManager NavigationManager;
  46. @inject SqlSugarRepository<SystemMenu> Repository;
  47. @inject IJSRuntime IJSRuntime;
  48. @code {
  49. /// <summary>
  50. /// 查
  51. /// </summary>
  52. /// <returns></returns>
  53. private async Task Query()
  54. {
  55. Loading = true;
  56. DataSource = await Repository.AsQueryable().OrderBy(x => x.Sort).ToTreeAsync(x => x.Children, x => x.ParentId, 0);
  57. Loading = false;
  58. }
  59. protected override async void OnInitialized()
  60. {
  61. }
  62. protected override async Task OnAfterRenderAsync(bool firstRender)
  63. {
  64. if (firstRender)
  65. {
  66. await NavigationManager.RedirectLogin(IJSRuntime);
  67. await Query();
  68. }
  69. }
  70. private async Task OnChange(QueryModel<SystemMenu> query)
  71. => await Query();
  72. private void CheckedChanged(SystemMenu row)
  73. {
  74. Repository.AsUpdateable()
  75. .SetColumns(x => x.Enabled == row.Enabled)
  76. .Where(x => x.Id == row.Id)
  77. .ExecuteCommand();
  78. }
  79. /// <summary>
  80. ///
  81. /// </summary>
  82. private ITable Table;
  83. /// <summary>
  84. ///
  85. /// </summary>
  86. private IEnumerable<SystemMenu> SelectedRows = [];
  87. /// <summary>
  88. ///
  89. /// </summary>
  90. private List<SystemMenu> DataSource;
  91. /// <summary>
  92. ///
  93. /// </summary>
  94. private int Pi = 1;
  95. /// <summary>
  96. ///
  97. /// </summary>
  98. private int Ps = 20;
  99. /// <summary>
  100. ///
  101. /// </summary>
  102. private bool Loading = false;
  103. }