feat(pipeline): 基础资产页 A三视图手动 + B进故事板拦截 + C采用/未采用 + D删除

- A 三视图改手动:删"打开角色详情自动出三视图"逻辑、角色生成只出立绘(不再链式自动三视图);
  详情弹窗保留「AI 生成三视图」按钮作手动入口(提示文案去掉"自动")
- B 进下一步拦截:「确认资产,进入故事板」按钮挂 guardGen —— 被引用角色/场景缺"已采用"参考图就弹窗拦
- C 采用/未采用:角色/场景卡加 toggle 徽章(已采用绿/未采用灰);默认按"实体名是否在脚本里"派生,
  用户可点击覆盖并持久化(metadata.adopt);后端 set-base-asset-adopt 端点;下游 _storyboard_reference_images
  只取已采用组(商品组永远保留、顺带排除未采用/三视图组的兜底误抓)
- D 删除:角色/场景卡 hover 显删除按钮(二次确认),商品主卡不给删;后端 delete-base-asset(连带三视图组)
- 顺手:提取闸门按钮去掉"不自动花钱"文案

验收:projects/assets/ai 全套(基线既有 7 失败零新增,新增 set-adopt/delete 3 测过);tsc+build 绿;
无头核对(采用 toggle/hover 删除/待审核盾齐活、0 console error)
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
seaislee1209
2026-06-22 19:23:02 +08:00
parent fda0385d2f
commit 612ab6864d
9 changed files with 184 additions and 22 deletions
+16
View File
@@ -1024,6 +1024,22 @@ def _storyboard_reference_images(project, segment) -> list[dict]:
"scene": BaseAssetGroup.Kind.SCENE,
}
groups = list(project.base_asset_groups.filter(adopted_asset__isnull=False).select_related("adopted_asset"))
# 下游只取「已采用」的角色/场景组(C/D):metadata.adopt 显性优先,否则按是否在脚本里推导;
# 商品组永远保留(不受采用态影响)。顺带把不在脚本里的(含三视图组 label「·三视图」)排除,
# 避免兜底误抓未采用/三视图组。
_entity_names = {(e.get("name") or "").strip() for e in entities.values() if (e.get("name") or "").strip()}
def _group_adopted(g) -> bool:
if g.kind == BaseAssetGroup.Kind.PRODUCT:
return True
a = (g.metadata or {}).get("adopt")
if a == "adopted":
return True
if a == "unadopted":
return False
return (g.metadata or {}).get("label", "").strip() in _entity_names
groups = [g for g in groups if _group_adopted(g)]
out: list[dict] = []
used: set = set()
for rid in (segment.entity_refs or []):