Files
Endoleap/docs/CORE_FRAME_EXTENSION.md
T

1.9 KiB

Core Canvas:分区框字段契约(已部署)

Core 022086b 已通过 PR #9 合入主线,部署 #877 成功。前端已接入以下契约。基础快照接口来自 57aab71,分区沿用同一 Canvas GET/PATCH、canvas_document JSONB 与独立 canvas_version,不需要新接口或表结构。

  1. 节点 type=frame 对应 data.kind=frame。width/height、position、title/text 沿用现有校验;分区 rotation 只允许 0 或省略。
  2. data.labelMode 仅分区支持,枚举 hidden/fixed/scaled,省略时默认 fixed。
  3. 普通内容节点可带 data.frameId,引用同一快照中 kind=frame 的节点 ID;分区本身不允许 frameId(当前不支持分区嵌套)。引用不存在、引用普通内容或引用自己均拒绝。
  4. 连线仍只允许 text/image/script,分区不支持连线。现有 500 节点、2000 连线、5 MiB、If-Match 和权限规则保持。
  5. 前端用绝对坐标保存成员位置。移动分区时,前端同步修改已有成员坐标;后端只原子保存快照,不依据几何重算成员,不能把覆盖范围内的其他内容自动归入分区。

示例节点:

[
  {
    "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;现有样式、图标、图片、版本冲突与权限用例保持通过。前端已使用该格式保存;失败时保留本地恢复记录并提供重试。