fix: 商品三视图回填只取商品三视图,排除角色三视图 (ZWQ row25+row28)

上一版回填用 category=tri_view||名字含三视图,把「角色/人物三视图」也捞进了商品三视图面板
→ 商品库点「AI生成三视图」显示的是该商品视频项目里的角色三视图,而非商品本身三视图(row28)。

修正:回填过滤排除任何 metadata.triview_of(角色三视图必有、指向其立绘)及 kind=person/scene,
只保留商品三视图(category=tri_view 且无 triview_of / view=three_view / 名字含「商品三视图」)。
这样既同步回填视频项目生成的商品三视图(row25),又不与角色三视图混(row28)。

后端商品三视图本就带 view=three_view+product_id(services.py 注释明说供商品库回填),纯前端修。
构建: tsc --noEmit=0, npm run build=0

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
zyc
2026-06-30 10:24:10 +08:00
co-authored by Claude Opus 4.8
parent 1d5c2c0910
commit cb02907262
+12 -8
View File
@@ -675,15 +675,19 @@ export function ProductDetailPage({ product, projects, initialTab = "assets", na
return () => { alive = false; }; return () => { alive = false; };
}, [product?.id, assetReload]); }, [product?.id, assetReload]);
// ZWQ#row24/三视图同步:该商品已存在的三视图资产(在【视频项目】基础资产阶段生成、 // ZWQ#row25/三视图同步:该商品已存在的「商品三视图资产(在【视频项目】基础资产阶段生成、
// 或此前在商品库生成并落库的 tri_view)回填到三视图面板,避免「明明已生成却显示尚未生成」。 // 或此前在商品库生成并落库)回填到三视图面板,避免「明明已生成却显示尚未生成」。
// 判定与后端 is_triview 对齐:category=tri_view / metadata.view=three_view / 名字含三视图 // ⚠️ row28:必须只取「商品」三视图,排除「角色/人物三视图」——二者 category 都是 tri_view、名字都含「三视图」,
// 唯一可靠区分是 metadata.triview_of(角色三视图指向其立绘 asset id;商品三视图没有)+ kind=person。
// 漏掉这层过滤就会把角色三视图塞进商品三视图面板(row28「商品三视图显示成角色三视图」)。
useEffect(() => { useEffect(() => {
const triAssets = productAssets.filter( const triAssets = productAssets.filter((a) => {
(a) => a.category === "tri_view" || a.asset_type === "tri_view" const m = (a.metadata as { triview_of?: unknown; kind?: string; view?: string } | undefined) || {};
|| (a.metadata as { view?: string } | undefined)?.view === "three_view" if (m.triview_of) return false; // 角色/人物/模特三视图:绝不进商品三视图面板
|| (a.name || "").includes("三视图") if (m.kind === "person" || m.kind === "scene") return false;
); return a.category === "tri_view" || a.asset_type === "tri_view"
|| m.view === "three_view" || (a.name || "").includes("商品三视图");
});
if (!triAssets.length) return; if (!triAssets.length) return;
const serverVersions: TriVersion[] = triAssets const serverVersions: TriVersion[] = triAssets
.map((a) => ({ id: a.id, url: a.files?.[0]?.preview_url || "", asset: a, createdAt: a.created_at || "" })) .map((a) => ({ id: a.id, url: a.files?.[0]?.preview_url || "", asset: a, createdAt: a.created_at || "" }))