From 764661f9e38815d67ae60560e97b116b4cbf5b9a Mon Sep 17 00:00:00 2001 From: MSuMshk <2039814060@qq.com> Date: Fri, 30 Jan 2026 08:07:04 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=9F=E6=88=B7=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=B7=BB=E5=8A=A0=E5=88=86=E9=A1=B5=E6=94=AF?= =?UTF-8?q?=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 支持 page 和 pageSize 参数 - 返回 PagedResult Co-Authored-By: Claude Opus 4.5 --- .../Controllers/TenantsController.cs | 23 +++++++++++++------ .../Handlers/ListTenantsQueryHandler.cs | 23 +++++++++++++++---- .../App/Tenants/Queries/ListTenantsQuery.cs | 13 ++++++++++- 3 files changed, 47 insertions(+), 12 deletions(-) diff --git a/src/Api/TakeoutSaaS.AdminApi/Controllers/TenantsController.cs b/src/Api/TakeoutSaaS.AdminApi/Controllers/TenantsController.cs index ef06c54..6ca9776 100644 --- a/src/Api/TakeoutSaaS.AdminApi/Controllers/TenantsController.cs +++ b/src/Api/TakeoutSaaS.AdminApi/Controllers/TenantsController.cs @@ -21,22 +21,31 @@ public sealed class TenantsController(IMediator mediator) : BaseApiController /// 获取租户列表(用于下拉选择器)。 /// /// 关键字(租户名称/编码)。 + /// 页码(从 1 开始)。 + /// 每页条数。 /// 取消标记。 - /// 租户列表。 + /// 租户分页列表。 [HttpGet] [PermissionAuthorize("tenant:read")] - [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] - public async Task>> List( + [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] + public async Task>> List( [FromQuery] string? keyword, - CancellationToken cancellationToken) + [FromQuery] int page = 1, + [FromQuery] int pageSize = 20, + CancellationToken cancellationToken = default) { // 1. 构造查询 - var query = new ListTenantsQuery { Keyword = keyword }; + var query = new ListTenantsQuery + { + Keyword = keyword, + Page = page, + PageSize = pageSize + }; // 2. 执行查询 var result = await mediator.Send(query, cancellationToken); - // 3. 返回租户列表 - return ApiResponse>.Ok(result); + // 3. 返回租户分页列表 + return ApiResponse>.Ok(result); } } diff --git a/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/ListTenantsQueryHandler.cs b/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/ListTenantsQueryHandler.cs index c511ae2..672db5a 100644 --- a/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/ListTenantsQueryHandler.cs +++ b/src/Application/TakeoutSaaS.Application/App/Tenants/Handlers/ListTenantsQueryHandler.cs @@ -2,6 +2,7 @@ using MediatR; using TakeoutSaaS.Application.App.Tenants.Contracts; using TakeoutSaaS.Application.App.Tenants.Queries; using TakeoutSaaS.Domain.Tenants.Repositories; +using TakeoutSaaS.Shared.Abstractions.Results; namespace TakeoutSaaS.Application.App.Tenants.Handlers; @@ -9,16 +10,27 @@ namespace TakeoutSaaS.Application.App.Tenants.Handlers; /// 获取租户列表查询处理器。 /// public sealed class ListTenantsQueryHandler(ITenantRepository tenantRepository) - : IRequestHandler> + : IRequestHandler> { /// - public async Task> Handle(ListTenantsQuery request, CancellationToken cancellationToken) + public async Task> Handle(ListTenantsQuery request, CancellationToken cancellationToken) { // 1. 查询租户列表 var tenants = await tenantRepository.GetAllAsync(request.Keyword, cancellationToken); - // 2. 映射 DTO - return tenants.Select(t => new TenantListItemDto + // 2. 计算分页参数 + var totalCount = tenants.Count; + var page = Math.Max(1, request.Page); + var pageSize = Math.Clamp(request.PageSize, 1, 100); + + // 3. 应用分页 + var pagedTenants = tenants + .Skip((page - 1) * pageSize) + .Take(pageSize) + .ToArray(); + + // 4. 映射 DTO + var dtos = pagedTenants.Select(t => new TenantListItemDto { Id = t.Id, Code = t.Code, @@ -26,5 +38,8 @@ public sealed class ListTenantsQueryHandler(ITenantRepository tenantRepository) ShortName = t.ShortName, Status = t.Status }).ToArray(); + + // 5. 返回分页结果 + return new PagedResult(dtos, page, pageSize, totalCount); } } diff --git a/src/Application/TakeoutSaaS.Application/App/Tenants/Queries/ListTenantsQuery.cs b/src/Application/TakeoutSaaS.Application/App/Tenants/Queries/ListTenantsQuery.cs index 7ed6481..44a1920 100644 --- a/src/Application/TakeoutSaaS.Application/App/Tenants/Queries/ListTenantsQuery.cs +++ b/src/Application/TakeoutSaaS.Application/App/Tenants/Queries/ListTenantsQuery.cs @@ -1,15 +1,26 @@ using MediatR; using TakeoutSaaS.Application.App.Tenants.Contracts; +using TakeoutSaaS.Shared.Abstractions.Results; namespace TakeoutSaaS.Application.App.Tenants.Queries; /// /// 获取租户列表查询(用于下拉选择器)。 /// -public sealed record ListTenantsQuery : IRequest> +public sealed record ListTenantsQuery : IRequest> { /// /// 关键字(租户名称/编码)。 /// public string? Keyword { get; init; } + + /// + /// 页码(从 1 开始)。 + /// + public int Page { get; init; } = 1; + + /// + /// 每页条数。 + /// + public int PageSize { get; init; } = 20; }