feat: 添加新增用户
							parent
							
								
									7e2ba5996f
								
							
						
					
					
						commit
						102f150fa4
					
				|  | @ -9,6 +9,8 @@ namespace UserPointManagement.Application.Services; | |||
| public interface IUserService | ||||
| { | ||||
|     Task<PageResultDto<User>> GetUsers(GetUserDto req); | ||||
| 
 | ||||
|     Task CreateUser(User input); | ||||
| } | ||||
| 
 | ||||
| public class UserService : IUserService | ||||
|  | @ -34,4 +36,10 @@ public class UserService : IUserService | |||
|             TotalCount = count | ||||
|         }; | ||||
|     } | ||||
| 
 | ||||
|     public async Task CreateUser(User input) | ||||
|     { | ||||
|         _userPointManagementDbContext.Users.Add(input); | ||||
|         await _userPointManagementDbContext.SaveChangesAsync().ConfigureAwait(false); | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,137 @@ | |||
| @inherits MyAntDesignAppServer.Pages.UserManagement.UserManagementBase | ||||
| @page "/" | ||||
| @using UserPointManagement.Application.Services | ||||
| @using UserPointManagement.Model.Dtos | ||||
| @using UserPointManagement.Model.Entities | ||||
| @using System.ComponentModel.DataAnnotations | ||||
| @using System.Text.Json | ||||
| @inject IJSRuntime JS | ||||
| @inject IUserService UserService; | ||||
| 
 | ||||
| <PageContainer Title="用户管理"> | ||||
|     <GridRow Style="margin: 10px 0"> | ||||
|         <GridCol Span="12"> | ||||
|             <Space Direction="@DirectionVHType.Horizontal"> | ||||
|                 <SpaceItem> | ||||
|                     <Search Placeholder="姓名或手机号" WrapperStyle="width: 200px;" OnSearch="OnSearch" ClassicSearchIcon/> | ||||
|                 </SpaceItem> | ||||
|             </Space> | ||||
|         </GridCol> | ||||
|         <GridCol Span="12"> | ||||
|             <Space Direction="@DirectionVHType.Horizontal" Style="display: flex; justify-content: flex-end"> | ||||
|                 <SpaceItem> | ||||
|                     <Button type="primary" OnClick="@ShowModal">新增用户</Button> | ||||
|                 </SpaceItem> | ||||
|             </Space> | ||||
|         </GridCol> | ||||
|     </GridRow> | ||||
|     <Table TItem="User" DataSource="@_users" | ||||
|            Total="_total" | ||||
|            Loading="_loading" | ||||
|            PageIndex="@_pageIndex" | ||||
|            PageSize="@_pageSize" | ||||
|            OnPageIndexChange="OnPageIndexChanged" | ||||
|            OnPageSizeChange="OnPageSizeChange"> | ||||
|         <PropertyColumn Property="c => c.Name" title="姓名"/> | ||||
|         <PropertyColumn Property="c => c.Mobile" title="手机号" Width="80"/> | ||||
|         <ActionColumn Title="操作" Width="220"> | ||||
|             <Space Size=@("middle")> | ||||
|                 <SpaceItem> | ||||
|                     <button>编辑</button> | ||||
|                 </SpaceItem> | ||||
|             </Space> | ||||
|         </ActionColumn> | ||||
|     </Table> | ||||
| </PageContainer> | ||||
| 
 | ||||
| <Modal Title="@("新增用户")" | ||||
|        Visible="@_visible" | ||||
|        OnOk="@HandleOk" | ||||
|        OnCancel="@HandleCancel"> | ||||
|     <Form Loading="loading" Model="@model" | ||||
|           LabelColSpan="8" | ||||
|           WrapperColSpan="16" | ||||
|           OnFinish="OnFinish" | ||||
|           OnFinishFailed="OnFinishFailed" | ||||
|           @ref="@_form"> | ||||
|         <FormItem Label="姓名"> | ||||
|             <Input @bind-Value="@context.Name" /> | ||||
|         </FormItem> | ||||
|         <FormItem Label="手机号"> | ||||
|             <Input @bind-Value="@context.Mobile" /> | ||||
|         </FormItem> | ||||
|     </Form> | ||||
| </Modal> | ||||
| 
 | ||||
| @code { | ||||
| 
 | ||||
|     #region original form coding | ||||
|     public class Model | ||||
|     { | ||||
|         [Required] | ||||
|         public string Name { get; set; } | ||||
|         public string Mobile { get; set; } | ||||
|     } | ||||
| 
 | ||||
|     private Model model = new Model(); | ||||
| 
 | ||||
|     private void OnFinishFailed(EditContext editContext) | ||||
|     { | ||||
|         Console.WriteLine($"Failed:{JsonSerializer.Serialize(model)}"); | ||||
|     } | ||||
| 
 | ||||
|     bool loading = false; | ||||
| 
 | ||||
|     void toggle(bool value) => loading = value; | ||||
| 
 | ||||
|     #endregion | ||||
| 
 | ||||
|     #region original modal coding | ||||
| 
 | ||||
|     bool _visible = false; | ||||
| 
 | ||||
|     private void ShowModal() | ||||
|     { | ||||
|         _visible = true; | ||||
|     } | ||||
| 
 | ||||
|     private void HandleCancel(MouseEventArgs e) | ||||
|     { | ||||
|         _visible = false; | ||||
|     } | ||||
| 
 | ||||
|     #endregion | ||||
| 
 | ||||
|     /* | ||||
|      * Careful!  | ||||
|      *  | ||||
|      * next bind submit event to modal OK button  | ||||
|      */ | ||||
| 
 | ||||
|     private Form<Model> _form; | ||||
| 
 | ||||
|     /// <summary> | ||||
|     /// when form is submited, close the modal | ||||
|     /// </summary> | ||||
|     /// <param name="args"></param> | ||||
|     private void OnFinish(EditContext editContext) | ||||
|     { | ||||
|         Console.WriteLine("e"); | ||||
|         _visible = false; | ||||
|     } | ||||
| 
 | ||||
|     /// <summary> | ||||
|     /// on modal OK button is click, submit form manually | ||||
|     /// </summary> | ||||
|     /// <param name="e"></param> | ||||
|     private async Task HandleOk(MouseEventArgs e) | ||||
|     { | ||||
|         _form.Submit(); | ||||
|         await UserService.CreateUser(new User() | ||||
|         { | ||||
|             Name = model.Name, | ||||
|             Mobile = model.Mobile | ||||
|         }).ConfigureAwait(false); | ||||
|         await RefreshTable().ConfigureAwait(false); | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,62 @@ | |||
| using System.Collections.Generic; | ||||
| using System.Threading.Tasks; | ||||
| using AntDesign; | ||||
| using Microsoft.AspNetCore.Components; | ||||
| using UserPointManagement.Application.Services; | ||||
| using UserPointManagement.Model.Dtos; | ||||
| using UserPointManagement.Model.Entities; | ||||
| 
 | ||||
| namespace MyAntDesignAppServer.Pages.UserManagement; | ||||
| 
 | ||||
| public class UserManagementBase : ComponentBase | ||||
| { | ||||
|     [Inject] private IUserService _userService { get; set; } | ||||
|      | ||||
|     protected List<User> _users; | ||||
|     protected int _pageIndex = 1; | ||||
|     protected int _pageSize = 20; | ||||
|     protected int _total = 0; | ||||
|     protected bool _loading; | ||||
|     private string _searchValue; | ||||
| 
 | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         await RefreshTable(); | ||||
|     } | ||||
| 
 | ||||
|     protected async Task OnSearch(string arg) | ||||
|     { | ||||
|         _searchValue = arg; | ||||
|         _pageIndex = 1; | ||||
|         await RefreshTable(); | ||||
|     } | ||||
| 
 | ||||
|     protected async Task RefreshTable() | ||||
|     { | ||||
|         _loading = true; | ||||
|         var res = await _userService.GetUsers(new GetUserDto() | ||||
|         { | ||||
|             Keyword = _searchValue, | ||||
|             PageIndex = _pageIndex, | ||||
|             PageSize = _pageSize | ||||
|         }); | ||||
| 
 | ||||
|         _users = res.Items; | ||||
|         _total = res.TotalCount; | ||||
|         _loading = false; | ||||
|     } | ||||
| 
 | ||||
|     protected async Task OnPageIndexChanged(PaginationEventArgs args) | ||||
|     { | ||||
|         _pageIndex = args.Page; | ||||
|         _pageSize = args.PageSize; | ||||
|         await RefreshTable(); | ||||
|     } | ||||
| 
 | ||||
|     protected async Task OnPageSizeChange(PaginationEventArgs args) | ||||
|     { | ||||
|         _pageIndex = args.Page; | ||||
|         _pageSize = args.PageSize; | ||||
|         await RefreshTable(); | ||||
|     } | ||||
| } | ||||
|  | @ -1,82 +0,0 @@ | |||
| @page "/" | ||||
| @using UserPointManagement.Application.Services | ||||
| @using UserPointManagement.Model.Dtos | ||||
| @using UserPointManagement.Model.Entities | ||||
| @inject IUserService _userService; | ||||
| @inject IJSRuntime JS | ||||
| 
 | ||||
| <PageContainer Title="用户管理"> | ||||
|     <Space Direction="@DirectionVHType.Horizontal" Style="margin: 10px 0"> | ||||
|         <SpaceItem> | ||||
|             <Search Placeholder="姓名或手机号" WrapperStyle="width: 200px;" OnSearch="OnSearch" ClassicSearchIcon/> | ||||
|         </SpaceItem> | ||||
|     </Space> | ||||
|     <Table TItem="User" DataSource="@_users" | ||||
|            Total="_total" | ||||
|            Loading="_loading" | ||||
|            PageIndex="@_pageIndex" | ||||
|            PageSize="@_pageSize" | ||||
|            OnPageIndexChange="OnPageIndexChanged" | ||||
|            OnPageSizeChange="OnPageSizeChange"> | ||||
|         <PropertyColumn Property="c => c.Name" title="姓名"/> | ||||
|         <PropertyColumn Property="c => c.Mobile" title="手机号" Width="80"/> | ||||
|         <ActionColumn Title="操作" Width="220"> | ||||
|             <Space Size=@("middle")> | ||||
|                 <SpaceItem> | ||||
|                     <button>编辑</button> | ||||
|                 </SpaceItem> | ||||
|             </Space> | ||||
|         </ActionColumn> | ||||
|     </Table> | ||||
| </PageContainer> | ||||
| 
 | ||||
| @code { | ||||
|     private List<User> _users; | ||||
|     int _pageIndex = 1; | ||||
|     int _pageSize = 20; | ||||
|     int _total = 0; | ||||
|     bool _loading; | ||||
|     string _searchValue; | ||||
| 
 | ||||
|     protected override async Task OnInitializedAsync() | ||||
|     { | ||||
|         await RefreshTable(); | ||||
|     } | ||||
| 
 | ||||
|     private async Task OnSearch(string arg) | ||||
|     { | ||||
|         _searchValue = arg; | ||||
|         _pageIndex = 1; | ||||
|         await RefreshTable(); | ||||
|     } | ||||
| 
 | ||||
|     private async Task RefreshTable() | ||||
|     { | ||||
|         _loading = true; | ||||
|         var res = await _userService.GetUsers(new GetUserDto() | ||||
|         { | ||||
|             Keyword = _searchValue, | ||||
|             PageIndex = _pageIndex, | ||||
|             PageSize = _pageSize | ||||
|         }); | ||||
| 
 | ||||
|         _users = res.Items; | ||||
|         _total = res.TotalCount; | ||||
|         _loading = false; | ||||
|     } | ||||
|      | ||||
|     private async Task OnPageIndexChanged(PaginationEventArgs args) | ||||
|     { | ||||
|         _pageIndex = args.Page; | ||||
|         _pageSize = args.PageSize; | ||||
|         await RefreshTable(); | ||||
|     } | ||||
| 
 | ||||
|     private async Task OnPageSizeChange(PaginationEventArgs args) | ||||
|     { | ||||
|         _pageIndex = args.Page; | ||||
|         _pageSize = args.PageSize; | ||||
|         await RefreshTable(); | ||||
|     } | ||||
| 
 | ||||
| } | ||||
		Loading…
	
		Reference in New Issue