diff --git a/.gitignore b/.gitignore
index 0f4d799..9ee5486 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,6 +9,7 @@ publish/
# 运行时临时文件 / 日志
*.log
+.run-logs/
_runlog/
_tmp_hubtest/
_rename_backup/
diff --git a/backend/F9WebAiTest.Api/Controllers/QC/GyzxsController.cs b/backend/F9WebAiTest.Api/Controllers/QC/GyzxsController.cs
new file mode 100644
index 0000000..a264e98
--- /dev/null
+++ b/backend/F9WebAiTest.Api/Controllers/QC/GyzxsController.cs
@@ -0,0 +1,134 @@
+using F9WebAiTest.Application.Common;
+using F9WebAiTest.Application.Dtos.QC;
+using F9WebAiTest.Application.Services.QC;
+using F9WebAiTest.Domain.Entities.QC.Gyzxs;
+using Microsoft.AspNetCore.Authorization;
+using Microsoft.AspNetCore.Mvc;
+
+namespace F9WebAiTest.Api.Controllers.QC;
+
+///
+/// 质量模块 —— 工艺执行书(对应 F9 生产\质量\工艺执行书)。
+/// 主列表按「庄口 + 年度」展示,每张子单据一个入口;保存子单据会联动主控表。
+///
+[ApiController]
+[Route("api/qc/gyzxs")]
+[Authorize]
+public class GyzxsController : ControllerBase
+{
+ private readonly IGyzxsService _svc;
+ public GyzxsController(IGyzxsService svc) => _svc = svc;
+
+ // ---------- 主列表 ----------
+ [HttpGet]
+ public async Task GetPaged([FromQuery] int pageIndex = 1, [FromQuery] int pageSize = 20,
+ [FromQuery] int year = 0, [FromQuery] string keyword = "")
+ => Ok(ApiResult>.Ok(await _svc.GetDocVersionPagedAsync(pageIndex, pageSize, year, keyword)));
+
+ [HttpPost("version")]
+ public async Task CreateVersion([FromQuery] long gyzkId)
+ {
+ try { return Ok(ApiResult.Ok(await _svc.CreateDocVersionAsync(gyzkId), "创建成功")); }
+ catch (ServiceException ex) { return StatusCode(ex.Code, ApiResult