diff --git a/core/frontend/src/routes/dashboard.tsx b/core/frontend/src/routes/dashboard.tsx index 7ae7f2b..d9a4fec 100644 --- a/core/frontend/src/routes/dashboard.tsx +++ b/core/frontend/src/routes/dashboard.tsx @@ -1,4 +1,5 @@ import { useEffect, useState } from "react"; +import type { CSSProperties } from "react"; import type { BillingSummary, Product, Project } from "../types"; import type { NavigateFn } from "./route-config"; import { api } from "../api"; @@ -30,6 +31,9 @@ function DashProgress({ project }: { project: Project }) { ); } +// 与「视频项目」共用项目列表返回的商品主图;空值继续走现有 9:16 占位图。 +const coverStyle = (url: string): CSSProperties => ({ ["--mock-media-url"]: `url(${url})` } as CSSProperties); + export function Dashboard({ products, projects, productTotal, projectTotal, billing, userName, loading = false, navigate, onCreateProduct }: { products: Product[]; projects: Project[]; @@ -105,7 +109,10 @@ 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) => { + const cover = project.cover_preview_url || ""; + return ; + })}

快捷入口

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

提示

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