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;