1.9 KiB
1.9 KiB
Core Canvas:分区框字段契约(已部署)
Core 022086b 已通过 PR #9 合入主线,部署 #877 成功。前端已接入以下契约。基础快照接口来自 57aab71,分区沿用同一 Canvas GET/PATCH、canvas_document JSONB 与独立 canvas_version,不需要新接口或表结构。
- 节点
type=frame对应data.kind=frame。width/height、position、title/text 沿用现有校验;分区 rotation 只允许 0 或省略。 data.labelMode仅分区支持,枚举 hidden/fixed/scaled,省略时默认 fixed。- 普通内容节点可带
data.frameId,引用同一快照中 kind=frame 的节点 ID;分区本身不允许 frameId(当前不支持分区嵌套)。引用不存在、引用普通内容或引用自己均拒绝。 - 连线仍只允许 text/image/script,分区不支持连线。现有 500 节点、2000 连线、5 MiB、If-Match 和权限规则保持。
- 前端用绝对坐标保存成员位置。移动分区时,前端同步修改已有成员坐标;后端只原子保存快照,不依据几何重算成员,不能把覆盖范围内的其他内容自动归入分区。
示例节点:
[
{
"id": "frame-1", "type": "frame",
"position": { "x": 100, "y": 100 }, "width": 640, "height": 400,
"data": { "kind": "frame", "title": "视觉参考", "text": "", "rotation": 0, "labelMode": "fixed" }
},
{
"id": "text-1", "type": "material",
"position": { "x": 160, "y": 160 }, "width": 260, "height": 200,
"data": { "kind": "text", "title": "笔记", "text": "分区里的内容", "frameId": "frame-1", "fontSize": 13, "rotation": 0 }
}
]
验收:三种 labelMode、框尺寸/位置和成员 frameId PATCH→GET 完整还原;错误归属和嵌套返回 400;现有样式、图标、图片、版本冲突与权限用例保持通过。前端已使用该格式保存;失败时保留本地恢复记录并提供重试。