From 212cf0a998afb41adfb1d671df07a1362580ea9e Mon Sep 17 00:00:00 2001 From: ila <2+ila@noreply.git.ilapage.cn> Date: Thu, 13 Aug 2026 22:37:31 +0800 Subject: [PATCH] =?UTF-8?q?docs:=20=E5=BD=92=E6=A1=A3=E5=B7=A5=E5=8D=95=20?= =?UTF-8?q?#56?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...A%E4%B8%93%E7%94%A8%E5%AD%97%E6%AE%B5.-.md | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 Task-56-%E4%BF%AE%E5%A4%8D%E8%AE%BE%E5%A4%87%E7%BC%96%E8%BE%91%E8%AF%B7%E6%B1%82%E5%8C%85%E5%90%AB%E6%96%B0%E5%BB%BA%E4%B8%93%E7%94%A8%E5%AD%97%E6%AE%B5.-.md diff --git a/Task-56-%E4%BF%AE%E5%A4%8D%E8%AE%BE%E5%A4%87%E7%BC%96%E8%BE%91%E8%AF%B7%E6%B1%82%E5%8C%85%E5%90%AB%E6%96%B0%E5%BB%BA%E4%B8%93%E7%94%A8%E5%AD%97%E6%AE%B5.-.md b/Task-56-%E4%BF%AE%E5%A4%8D%E8%AE%BE%E5%A4%87%E7%BC%96%E8%BE%91%E8%AF%B7%E6%B1%82%E5%8C%85%E5%90%AB%E6%96%B0%E5%BB%BA%E4%B8%93%E7%94%A8%E5%AD%97%E6%AE%B5.-.md new file mode 100644 index 0000000..3fa3176 --- /dev/null +++ b/Task-56-%E4%BF%AE%E5%A4%8D%E8%AE%BE%E5%A4%87%E7%BC%96%E8%BE%91%E8%AF%B7%E6%B1%82%E5%8C%85%E5%90%AB%E6%96%B0%E5%BB%BA%E4%B8%93%E7%94%A8%E5%AD%97%E6%AE%B5.-.md @@ -0,0 +1,58 @@ +# 56 修复设备编辑请求包含新建专用字段 + +- 类型:缺陷 +- 所属 Epic:#7 +- 所属 MVP / 版本:#8 +- 状态:待验收 +- 日期:2026-08-13 +- Gitea 工单:https://git.ilapage.cn/ila/yovision/issues/56 +- Wiki 页面:Task-56-修复设备编辑请求包含新建专用字段 +- Wiki revision:见本地镜像头 + +## 背景与目标 + +用户在设备管理编辑中文安装位置时收到“请求内容格式不正确”。中文 UTF-8 并非根因;前端编辑请求展开了整个表单,把只允许新建时提交的 `modality` 发送到严格拒绝未知字段的 PATCH 接口。目标是让新建和编辑请求分别遵循明确字段白名单,并用可运行测试固定契约。 + +## 最终方案 + +- 提取纯 payload 构造函数,避免页面直接展开表单对象。 +- 新建请求显式包含 `name`、`location`、`modality`、`capabilities`。 +- 编辑请求显式仅包含 `name`、`location`、`capabilities`、`version`。 +- 使用 Node 内置测试运行器验证中文值原样保留、新建包含设备类型、编辑排除设备类型和只读 ID。 +- 后端 `DisallowUnknownFields` 保持不变,继续把未知字段视为契约错误。 + +## 修改文件 + +- `Sense/ui/src/views/sense/device/Devices.vue`:分别构建设备新建和编辑请求。 +- `Sense/ui/src/views/sense/device/devicePayload.mjs`:设备请求字段白名单。 +- `Sense/ui/tests/devicePayload.test.mjs`:中文值和字段边界测试。 +- `Sense/ui/package.json`:增加设备 payload 测试命令。 +- Wiki 业务规则与故障排查页面。 + +## 验收结果 + +| 验收标准 | 结果 | +|---|---| +| 编辑设备保存中文安装位置 | 通过,PATCH 返回 200 | +| 保存后回读中文安装位置 | 通过,回读为“教学楼一楼东门” | +| 编辑请求排除 modality 和只读字段 | 通过,单元测试验证 | +| 新建请求保留 modality | 通过,单元测试验证 | +| 后端严格未知字段策略保持不变 | 通过,未修改后端解析逻辑 | + +## 测试 + +- `corepack pnpm@9.15.1 test:device-payload`:2 项通过。 +- `corepack pnpm@9.15.1 lint`:0 error,806 个既有 warning。 +- `corepack pnpm@9.15.1 build`:通过,3 个既有体积 warning。 +- `go test ./...`:通过。 +- Go 1.26.5 Windows 重新打包并启动:通过。 +- 真实 PostgreSQL API:白名单 PATCH 保存成功,GET 回读中文位置成功。 +- **未验证部分**:最终浏览器点击“保存”的视觉交互由用户验收;请求构造、真实 API 保存和回读已自动验证。 + +## 遗留问题 + +- 严格 Harness 仍受既有 #44 归档缺少“最终方案”章节影响。 + +## 相关提交 + +- `8e3a25d` 修复设备编辑请求字段并增加契约测试。