# 215 Admin:支持人工修改蝦皮 SKU 颜色尺码 - 类型:需求 - 父级大工单:#14 - 所属 MVP / 版本:#15 / MVP 后续 - 状态:已完成,待用户验收 - 日期:2026-08-13 - Gitea 工单:http://ilaer.eicp.net:8418/chengma/cmautobuy/issues/215 ## 背景与目标 蝦皮商品详情原来只能查看规格。采购员无法修正已有 SKU 的颜色、尺码和建议说明, 解析错误或缺失数据只能等待第三方重新导入。本任务增加受控人工修正,并保护人工值不被 后续目录导入或 SYB 低优先级补全覆盖。 ## 最终方案 每条现有 SKU 在只读摘要旁提供折叠“编辑”表单,只开放颜色、尺码和建议说明。颜色、 尺码必填,建议可清空;服务端限制每项最多 500 个字符,并同时核对内部 SKU 记录和商品 归属。保存把三个字段来源写为 `manual`、记录观测时间并设置 `parse_ok=1`,但不修改 `spec_raw`、`spec_key`、真实 SKU ID、SKU 编码、来源或 `is_manual`。 目录 `fill_missing` 规则增加字段级人工保护,因此主动清空建议也不会被再次补入; `overwrite_same_source` 原本按来源判断,会自然跳过 `manual`。保存成功或校验失败后保留 列表筛选和页码,并自动重新打开同一商品详情。未新增数据库迁移、SKU 新增/删除或 Client 接口,实施与建单方案一致。 ## 改了哪些 - `admin/service/shopee_sku.go`:输入校验、事务、字段来源合并和人工保存。 - `admin/repository/shopee.go`:读取字段来源并按 SKU 与商品双重条件更新。 - `admin/repository/catalog_import.go`:`fill_missing` 尊重字段级 `manual` 来源。 - `admin/handler/web/shopee.go`、`admin/handler/web/web.go`:增加保存路由和上下文返回。 - `admin/service/shopee_list.go`、`admin/templates/shopee/detail_modal.html`:提供内部定位值、 只读原文和逐行折叠编辑表单。 - `admin/static/css/app.css`:增加紧凑的 SKU 编辑布局。 - `admin/service/shopee_sku_test.go` 等:覆盖保存、输入拒绝、跨商品保护和导入防覆盖。 - `docs/admin/01-requirements.md`、`03-data-model.md`、`05-ui-specification.md`、 `06-quality-security.md`:同步需求、数据和测试基线。 ## 验收结果 | 验收标准 | 结果 | |---|---| | 登录用户可修改已有 SKU 的颜色、尺码和建议说明 | 通过 | | 空必填项、超长内容、错误记录和跨商品记录被拒绝且无部分更新 | 通过 | | 保存后已解析,原文、规格键和真实 SKU ID 不变 | 通过 | | 人工字段不被两种目录更新策略覆盖 | 通过 | | 主动清空建议后不会被低优先级补空 | 通过 | | 不修改 SYB 原始数据、规格映射、采购任务和 Client 接口 | 通过(修改范围检查) | | Go 1.23 build、test、vet 全部通过 | 通过 | ## 测试 - 执行的命令:`$env:GOTOOLCHAIN="go1.23.0"; go build ./...; go test ./... -count=1; go vet ./...` - 结果:全部通过;新增服务测试使用 SQLite 小库覆盖事务写入和两种导入策略保护。 - **没验证到的部分**:未设置 `CMAUTOBUY_MYSQL_TEST=1`,因此未执行真实 MySQL 8 隔离库测试;未在生产 MySQL 写入;未做真实浏览器逐行编辑的人工验收。 ## 相关提交 - `4752fef` feat: 支持人工修改蝦皮规格 (#215)