import { useEffect, useState, useRef, useCallback } from 'react'; import { adminApi } from '../lib/api'; import { VideoDetailModal } from '../components/VideoDetailModal'; import type { AssetTeamSummary, AssetMemberSummary, AssetVideo, GenerationTask } from '../types'; import styles from './AdminAssetsPage.module.css'; function formatCost(val: number) { return `¥${(val || 0).toFixed(2)}`; } function VideoThumbnail({ video, onClick }: { video: AssetVideo; onClick: () => void }) { const videoRef = useRef(null); const [hover, setHover] = useState(false); const durationLabel = `00:${String(video.duration).padStart(2, '0')}`; return (
{ setHover(true); videoRef.current?.play().catch(() => {}); }} onMouseLeave={() => { setHover(false); if (videoRef.current) { videoRef.current.pause(); videoRef.current.currentTime = 0; } }} onClick={onClick} > {video.result_url ? (