diff --git a/apps/web/src/pages/generate/components/material/ManualMaterialList.tsx b/apps/web/src/pages/generate/components/material/ManualMaterialList.tsx index a067e1098..dbee4a1b0 100644 --- a/apps/web/src/pages/generate/components/material/ManualMaterialList.tsx +++ b/apps/web/src/pages/generate/components/material/ManualMaterialList.tsx @@ -1,5 +1,5 @@ /** - * 手动选择素材列表 + * 手动选择素材列表 — 竖屏 9:16 卡片网格 */ import React, { useRef, useCallback } from "react" import { Typography } from "antd" @@ -14,18 +14,24 @@ interface ManualMaterialListProps { onToggle: (materialId: string) => void } +/** 秒数格式化为 mm:ss */ +const fmtDuration = (seconds?: number): string => { + if (!seconds && seconds !== 0) return "--:--" + const m = Math.floor(seconds / 60) + const s = Math.floor(seconds % 60) + return `${String(m).padStart(2, "0")}:${String(s).padStart(2, "0")}` +} + const ManualMaterialList: React.FC = ({ materials, materialsLoading, selectedMaterials, onToggle, }) => { - // 追踪当前正在播放的视频元素,确保同时只有一个视频播放 const activeVideoRef = useRef(null) const handleVideoMouseEnter = useCallback((e: React.MouseEvent) => { const video = e.currentTarget - // 暂停之前正在播放的视频(检查是否仍在 DOM 中) if ( activeVideoRef.current && activeVideoRef.current !== video && @@ -56,143 +62,188 @@ const ManualMaterialList: React.FC = ({ 暂无素材,请先在视频库中上传 ) : ( -
+
{materials.items.map((m) => { const checked = selectedMaterials.includes(m.id) const isVideo = m.mime_type?.startsWith("video/") ?? false const thumbSrc = m.thumbnail_url || undefined return ( -
diff --git a/apps/web/src/pages/generate/generate.css b/apps/web/src/pages/generate/generate.css index c2fbd8b32..2e74af669 100644 --- a/apps/web/src/pages/generate/generate.css +++ b/apps/web/src/pages/generate/generate.css @@ -203,7 +203,7 @@ background: var(--bg-primary); border: 2px solid var(--border-color); border-radius: var(--radius-md); - padding: 14px; + padding: 10px; cursor: pointer; transition: 0.18s ease; text-align: center; @@ -219,14 +219,14 @@ } .xx-choice-thumb { - height: 60px; + height: 36px; border-radius: var(--radius-sm); display: grid; place-items: center; color: var(--text-inverse); - font-size: 24px; + font-size: 16px; font-weight: 700; - margin-bottom: 10px; + margin-bottom: 6px; } .xx-choice-item h4 {