feat: v0.4 画布编辑器——拖拽布置分格v1

- WindoorCanvas editable模式: 加竖梃/横梃点击玻璃区域实时分割
- 多边形两次交叉点法分割, mm.sp分割线记录同步, 撤销栈
- 订单详情: 编辑分格后保存图纸(PUT orders/{id})
- 样板库: 另存为我的样板(POST windoor/templates, 企业隔离)
- 10个API端点回归全部通过
This commit is contained in:
HHY
2026-09-20 09:04:37 -07:00
parent 065d387399
commit dffca83508
7 changed files with 252 additions and 34 deletions
+19
View File
@@ -52,6 +52,25 @@ async def search_templates(
} for t in items])
@router.post("/templates")
async def save_template(body: dict, db: DbSession, user: CurrentUser):
"""保存自定义样板(编辑器另存)。body: {name, catelog_id, drawing_data, note?}"""
from pydantic import ValidationError
from huamenchuang.schemas.windoor import TemplateSave
try:
data = TemplateSave(**body)
except (ValidationError, TypeError):
return fail("参数错误: 需要 name 与 drawing_data")
t = WindoorTemplate(
name=data.name, drawing_data=data.drawing_data, pic_url="",
catelog_id=data.catelog_id or 0, note=data.note or "",
is_default=0, company_id=user.company_id,
)
db.add(t)
await db.flush()
return ok(data={"id": t.id}, message="样板已保存")
@router.get("/templates/{template_id}")
async def template_detail(template_id: int, db: DbSession, user: CurrentUser):
"""模板详情:返回 drawing_data(画布可直接 openFile 渲染)。"""
+9
View File
@@ -0,0 +1,9 @@
"""样板库 schemas。"""
from pydantic import BaseModel, Field
class TemplateSave(BaseModel):
name: str = Field(min_length=1, max_length=128)
drawing_data: str = Field(min_length=2)
catelog_id: int | None = None
note: str = ""