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;
}