diff --git a/core/frontend/src/routes/dashboard.tsx b/core/frontend/src/routes/dashboard.tsx index b5f29cd..7ae7f2b 100644 --- a/core/frontend/src/routes/dashboard.tsx +++ b/core/frontend/src/routes/dashboard.tsx @@ -46,15 +46,15 @@ export function Dashboard({ products, projects, productTotal, projectTotal, bill const [createDrawer, setCreateDrawer] = useState(false); const projCount = projectTotal ?? projects.length; const prodCount = productTotal ?? products.length; - // 资产总数:走轻量 summary 接口(各 tab 计数之和),不再吃全局 assets 全量数组 + // 资产条目总数:与资产库六个 Tab 一致,包含按项目聚合的「视频成品」素材包。 const [assetCount, setAssetCount] = useState(null); useEffect(() => { let alive = true; - api.assetSummary() - .then((c) => { + Promise.all([api.assetSummary(), api.videoPacks()]) + .then(([c, packs]) => { if (!alive) return; const imageCreations = c.image_creations ?? c.creations ?? 0; - setAssetCount((c.tryon || 0) + (c.kits || 0) + imageCreations + (c.video_creations || 0) + (c.others || 0)); + setAssetCount((c.tryon || 0) + (c.kits || 0) + imageCreations + (c.video_creations || 0) + packs.length + (c.others || 0)); }) .catch(() => {}); return () => { alive = false; }; @@ -105,7 +105,7 @@ export function Dashboard({ products, projects, productTotal, projectTotal, bill
++ navigate("projects", { tab: "all" })} /> navigate("projects", { tab: "wip" })} /> navigate("projects", { tab: "done" })} />
-

最近项目

{loading && projects.length === 0 ? : projects.slice(0, 6).map((project) => )}

快捷入口

[ /shortcuts ]
navigate("products")} /> navigate("library")} /> navigate("account")} /> navigate("projects")} />

提示

[ FAQ ]
扣费规则生成失败、超时、用户重跑 — 均不扣费。仅在你点 [ 确认通过 ] 时按 token 实际结算。
+

最近项目

{loading && projects.length === 0 ? : projects.slice(0, 6).map((project) => )}

快捷入口

[ /shortcuts ]
navigate("products")} /> navigate("library")} /> navigate("account")} /> navigate("projects")} />

提示

[ FAQ ]
扣费规则生成失败、超时、用户重跑 — 均不扣费。仅在你点 [ 确认通过 ] 时按 token 实际结算。
{/* YYX#11:新建商品抽屉 · 复用商品库同一组件,创建成功后跳商品库看新商品 */} {onCreateProduct && (