feat(orders): 一键导出改为所有分层/分组的 SVG 压缩包(前端 createLayerExportZip 打包)
This commit is contained in:
+17
-13
@@ -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,
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user