feat(orders): 一键导出改为所有分层/分组的 SVG 压缩包(前端 createLayerExportZip 打包)

This commit is contained in:
2026-08-13 16:01:10 +08:00
parent 6be416c8d6
commit ee3b7745b7
2 changed files with 87 additions and 75 deletions
+17 -13
View File
@@ -1001,7 +1001,7 @@ def get_order(request: Request, order_no: str) -> dict:
@app.get("/api/orders/{order_no}/design")
def order_design(request: Request, order_no: str) -> dict:
"""订单设计详情:画布 + 各层元素(含素材 URL,供前端分层/整体预览。"""
"""订单设计详情:完整 CanvasDocument + 素材映射,供前端分层/整体预览与分层 SVG 导出"""
_require_orders_auth(request)
path = Path(_order_dir(order_no)) / "order.json"
if not path.exists():
@@ -1014,19 +1014,21 @@ def order_design(request: Request, order_no: str) -> dict:
data = json.loads(tjson.read_text(encoding="utf-8"))
doc = data.get("document") or {}
elements = []
# 素材映射:元素 assetId -> {id,type(source 是 svg 还是 image),source(下载 URL)}
assets: dict[str, dict] = {}
for e in doc.get("elements") or []:
if not isinstance(e, dict):
continue
item = dict(e)
asset_id = e.get("assetId")
if asset_id:
meta = _read_asset_meta(_asset_dir(str(asset_id))) or {}
item["assetUrl"] = meta.get("file_url") or f"/api/assets/{asset_id}/download"
item["assetName"] = meta.get("name") or str(asset_id)
else:
item["assetUrl"] = ""
elements.append(item)
aid = e.get("assetId")
if not aid or str(aid) in assets:
continue
meta = _read_asset_meta(_asset_dir(str(aid))) or {}
mime = str(meta.get("mime_type") or "")
assets[str(aid)] = {
"id": str(aid),
"type": "svg" if mime in ("image/svg+xml",) else "image",
"source": meta.get("file_url") or f"/api/assets/{aid}/download",
}
try:
status = manager.get_status(str(o.get("job_id") or "")).status
@@ -1038,13 +1040,15 @@ def order_design(request: Request, order_no: str) -> dict:
"status": status,
"job_id": o.get("job_id"),
"template_id": tid,
"design": {
"document": {
"width": doc.get("width"),
"height": doc.get("height"),
"background": doc.get("background", "#ffffff"),
"layers": doc.get("layers") or [],
"elements": elements,
"layerFolders": doc.get("layerFolders") or [],
"elements": doc.get("elements") or [],
},
"assets": assets,
}