diff --git a/src/Api/TakeoutSaaS.AdminApi/Controllers/DeliveriesController.cs b/src/Api/TakeoutSaaS.AdminApi/Controllers/DeliveriesController.cs
new file mode 100644
index 0000000..a36e2e2
--- /dev/null
+++ b/src/Api/TakeoutSaaS.AdminApi/Controllers/DeliveriesController.cs
@@ -0,0 +1,108 @@
+using MediatR;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+using TakeoutSaaS.Application.App.Deliveries.Commands;
+using TakeoutSaaS.Application.App.Deliveries.Dto;
+using TakeoutSaaS.Application.App.Deliveries.Queries;
+using TakeoutSaaS.Domain.Deliveries.Enums;
+using TakeoutSaaS.Module.Authorization.Attributes;
+using TakeoutSaaS.Shared.Abstractions.Constants;
+using TakeoutSaaS.Shared.Abstractions.Results;
+using TakeoutSaaS.Shared.Web.Api;
+
+namespace TakeoutSaaS.AdminApi.Controllers;
+
+///
+/// 配送单管理。
+///
+[ApiVersion("1.0")]
+[Authorize]
+[Route("api/admin/v{version:apiVersion}/deliveries")]
+public sealed class DeliveriesController : BaseApiController
+{
+ private readonly IMediator _mediator;
+
+ ///
+ /// 初始化控制器。
+ ///
+ public DeliveriesController(IMediator mediator)
+ {
+ _mediator = mediator;
+ }
+
+ ///
+ /// 创建配送单。
+ ///
+ [HttpPost]
+ [PermissionAuthorize("delivery:create")]
+ [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
+ public async Task> Create([FromBody] CreateDeliveryOrderCommand command, CancellationToken cancellationToken)
+ {
+ var result = await _mediator.Send(command, cancellationToken);
+ return ApiResponse.Ok(result);
+ }
+
+ ///
+ /// 查询配送单列表。
+ ///
+ [HttpGet]
+ [PermissionAuthorize("delivery:read")]
+ [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)]
+ public async Task>> List([FromQuery] long? orderId, [FromQuery] DeliveryStatus? status, CancellationToken cancellationToken)
+ {
+ var result = await _mediator.Send(new SearchDeliveryOrdersQuery
+ {
+ OrderId = orderId,
+ Status = status
+ }, cancellationToken);
+
+ return ApiResponse>.Ok(result);
+ }
+
+ ///
+ /// 获取配送单详情。
+ ///
+ [HttpGet("{deliveryOrderId:long}")]
+ [PermissionAuthorize("delivery:read")]
+ [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
+ [ProducesResponseType(typeof(ApiResponse