fix(video): 视频卡用首帧当封面(#t=0.1),不再显示空白占位

<video preload="metadata"> 不解码画面、又没 poster(后端抽帧没产出 poster 文件)→ 卡片空白。
给缩略图视频地址加 #t=0.1,浏览器跳到 0.1s 渲染该帧当封面;取的是当前采用版 mp4(=最新版)。
改:视频卡缩略图 + 详情弹窗历史版本缩略图。

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
seaislee1209
2026-06-23 18:23:57 +08:00
co-authored by Claude Opus 4.8
parent ee842da19c
commit 79fc95f1b7
+2 -2
View File
@@ -3148,7 +3148,7 @@ export function PipelinePage(props: {
<div className="video-card" key={seg.id} data-video-id={seg.id}>
<div className="placeholder video-thumb" style={{ position: "relative", overflow: "hidden" }} role="button" tabIndex={0} title="点击查看详情(历史版本/提示词/重跑)" onClick={() => openVideoDetail(seg.id)} onKeyDown={(event) => { if (event.key === "Enter" || event.key === " ") { event.preventDefault(); openVideoDetail(seg.id); } }}>
{url
? <video src={url} muted playsInline preload="metadata" style={{ position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", borderRadius: "inherit" }} />
? <video src={`${url}#t=0.1`} muted playsInline preload="metadata" style={{ position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover", borderRadius: "inherit" }} />
: <span className="ph-frame"> {seg.sort_order + 1}</span>}
{url && !showBusy && <div className="play"><div className="btn-play"><Play size={14} fill="currentColor" /></div></div>}
{showBusy && <span className="sb-gen-veil" aria-hidden="true"><span className="spinner" /></span>}
@@ -3604,7 +3604,7 @@ export function PipelinePage(props: {
{vdVersions.length ? vdVersions.map((v) => (
<div className={`vd-history-thumb${v.id === vdVer?.id ? " current" : ""}${v.is_adopted ? " adopted" : ""}`} key={v.id} role="button" tabIndex={0} title={v.is_adopted ? "已采用版本" : "点击查看该版本"} onClick={() => setVdVerId(v.id)} onKeyDown={(event) => { if (event.key === "Enter" || event.key === " ") { event.preventDefault(); setVdVerId(v.id); } }}>
<div className="placeholder" style={{ position: "relative", overflow: "hidden" }}>
{v.asset_url && <video src={v.asset_url} muted playsInline preload="metadata" style={{ position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover" }} />}
{v.asset_url && <video src={`${v.asset_url}#t=0.1`} muted playsInline preload="metadata" style={{ position: "absolute", inset: 0, width: "100%", height: "100%", objectFit: "cover" }} />}
</div>
<div className="ts">{(v.created_at || "").slice(11, 16) || "--:--"}</div>
</div>