diff --git a/src/UserPointManagement.Application/Services/UserService.cs b/src/UserPointManagement.Application/Services/UserService.cs index 83393d8..7879bb1 100644 --- a/src/UserPointManagement.Application/Services/UserService.cs +++ b/src/UserPointManagement.Application/Services/UserService.cs @@ -1,6 +1,7 @@ using Microsoft.EntityFrameworkCore; using UserPointManagement.Model; using UserPointManagement.Model.Dtos; +using UserPointManagement.Model.Dtos.User; using UserPointManagement.Model.Entities; using UserPointManagement.Persistence; @@ -13,6 +14,8 @@ public interface IUserService Task CreateUser(User input); Task DeleteUser(int userId); + + Task ModifyUser(int userId, ModifyUserDto input); } public class UserService : IUserService @@ -53,4 +56,16 @@ public class UserService : IUserService _userPointManagementDbContext.Users.Remove(user); await _userPointManagementDbContext.SaveChangesAsync().ConfigureAwait(false); } + + public async Task ModifyUser(int userId, ModifyUserDto input) + { + var user = await _userPointManagementDbContext.Users.FirstOrDefaultAsync(x => x.Id == userId) + .ConfigureAwait(false); + + user.Mobile = input.Mobile; + user.Name = input.Name; + + _userPointManagementDbContext.Users.Update(user); + await _userPointManagementDbContext.SaveChangesAsync().ConfigureAwait(false); + } } \ No newline at end of file diff --git a/src/UserPointManagement.Model/Dtos/GetUserDto.cs b/src/UserPointManagement.Model/Dtos/User/GetUserDto.cs similarity index 60% rename from src/UserPointManagement.Model/Dtos/GetUserDto.cs rename to src/UserPointManagement.Model/Dtos/User/GetUserDto.cs index 13e4b09..f263408 100644 --- a/src/UserPointManagement.Model/Dtos/GetUserDto.cs +++ b/src/UserPointManagement.Model/Dtos/User/GetUserDto.cs @@ -1,4 +1,4 @@ -namespace UserPointManagement.Model.Dtos; +namespace UserPointManagement.Model.Dtos.User; public class GetUserDto : PageBase { diff --git a/src/UserPointManagement.Model/Dtos/User/ModifyUserDto.cs b/src/UserPointManagement.Model/Dtos/User/ModifyUserDto.cs new file mode 100644 index 0000000..2884c90 --- /dev/null +++ b/src/UserPointManagement.Model/Dtos/User/ModifyUserDto.cs @@ -0,0 +1,8 @@ +namespace UserPointManagement.Model.Dtos.User; + +public class ModifyUserDto +{ + public string Mobile { get; set; } + + public string Name { get; set; } +} \ No newline at end of file diff --git a/src/UserPointManagement.Web/Pages/UserManagement/UserManagement.razor b/src/UserPointManagement.Web/Pages/UserManagement/UserManagement.razor index 12976b4..81be1c8 100644 --- a/src/UserPointManagement.Web/Pages/UserManagement/UserManagement.razor +++ b/src/UserPointManagement.Web/Pages/UserManagement/UserManagement.razor @@ -31,15 +31,49 @@ PageSize="@_pageSize" OnPageIndexChange="OnPageIndexChanged" OnPageSizeChange="OnPageSizeChange"> - - - - - - - - - + + + @if (!editCache[data.Id].edit) + { + @data.Name + } + else + { + + } + + + @if (!editCache[data.Id].edit) + { + @data.Mobile + } + else + { + + } + + + + + @if (!editCache[data.Id].edit) + { + + } + else + { + + + + + } + + + + + @@ -54,10 +88,10 @@ OnFinishFailed="OnFinishFailed" @ref="@_form"> - + - + @@ -65,10 +99,12 @@ @code { #region original form coding + public class Model { [Required] public string Name { get; set; } + public string Mobile { get; set; } } @@ -133,4 +169,5 @@ }).ConfigureAwait(false); await RefreshTable().ConfigureAwait(false); } + } \ No newline at end of file diff --git a/src/UserPointManagement.Web/Pages/UserManagement/UserManagement.razor.cs b/src/UserPointManagement.Web/Pages/UserManagement/UserManagement.razor.cs index adc81d5..8de21ed 100644 --- a/src/UserPointManagement.Web/Pages/UserManagement/UserManagement.razor.cs +++ b/src/UserPointManagement.Web/Pages/UserManagement/UserManagement.razor.cs @@ -1,9 +1,11 @@ using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; using AntDesign; using Microsoft.AspNetCore.Components; using UserPointManagement.Application.Services; using UserPointManagement.Model.Dtos; +using UserPointManagement.Model.Dtos.User; using UserPointManagement.Model.Entities; namespace MyAntDesignAppServer.Pages.UserManagement; @@ -11,7 +13,10 @@ namespace MyAntDesignAppServer.Pages.UserManagement; public class UserManagementBase : ComponentBase { [Inject] private IUserService _userService { get; set; } - + + protected IDictionary editCache = + new Dictionary(); + protected List _users; protected int _pageIndex = 1; protected int _pageSize = 20; @@ -43,6 +48,12 @@ public class UserManagementBase : ComponentBase _users = res.Items; _total = res.TotalCount; + + _users.ForEach(item => + { + editCache[item.Id] = (false, item); + }); + _loading = false; } @@ -59,10 +70,34 @@ public class UserManagementBase : ComponentBase _pageSize = args.PageSize; await RefreshTable(); } - + protected async Task Delete(int userId) { await _userService.DeleteUser(userId).ConfigureAwait(false); await RefreshTable(); } + + protected void startEdit(int id) + { + var data = editCache[id]; + editCache[id] = (true, data.data ); // add a copy in cache + } + + protected void cancelEdit(int id) + { + var data = _users.FirstOrDefault(item => item.Id == id); + editCache[id] = (false, data); // recovery + } + + protected async Task saveEdit(int id) + { + var index = _users.FindIndex(item => item.Id == id); + _users[index] = editCache[id].data; // apply the copy to data source + await _userService.ModifyUser(editCache[id].data.Id, new ModifyUserDto() + { + Mobile = editCache[id].data.Mobile, + Name = editCache[id].data.Name, + }).ConfigureAwait(false); + editCache[id] = (false, _users[index]); // don't affect rows in editing + } } \ No newline at end of file diff --git a/test/UserPointManagement.Application.Tests/Services/UserServiceTest.cs b/test/UserPointManagement.Application.Tests/Services/UserServiceTest.cs index f04d4a5..13cc452 100644 --- a/test/UserPointManagement.Application.Tests/Services/UserServiceTest.cs +++ b/test/UserPointManagement.Application.Tests/Services/UserServiceTest.cs @@ -1,6 +1,7 @@ using System.Threading.Tasks; using UserPointManagement.Application.Services; using UserPointManagement.Model.Dtos; +using UserPointManagement.Model.Dtos.User; using Xunit; namespace UserPointManagement.Application.Tests.Services;