import React from "react" import type { MediaAsset } from "@/api/template-editor" import { MATERIAL_TYPE_LABELS, MATERIAL_TYPE_ICONS } from "@/api/template-editor" import { formatSize, formatDuration, getQualityLevel } from "./utils" interface AssetCardProps { asset: MediaAsset isSelected: boolean isDragging: boolean isDragOver: boolean showCheckbox: boolean compact?: boolean onToggleSelect: (asset: MediaAsset, shiftKey: boolean) => void onCardClick: (asset: MediaAsset, e: React.MouseEvent) => void onDragStart: (e: React.DragEvent) => void onDragOver: (e: React.DragEvent) => void onDrop: (e: React.DragEvent) => void onDragEnd: () => void onMouseEnter: (e: React.MouseEvent) => void onMouseLeave: () => void } const AssetCard: React.FC = ({ asset, isSelected, isDragging, isDragOver, showCheckbox, onToggleSelect, onCardClick, onDragStart, onDragOver, onDrop, onDragEnd, onMouseEnter, onMouseLeave, }) => { const qualityLevel = getQualityLevel(asset.quality_score) return (
onCardClick(asset, e)} onMouseEnter={onMouseEnter} onMouseLeave={onMouseLeave} > {/* 缩略图 */}
{asset.thumbnail_url ? ( {asset.name} ) : ( {MATERIAL_TYPE_ICONS[asset.type]} )} {/* Checkbox */} {showCheckbox && ( { e.stopPropagation() onToggleSelect(asset, e.shiftKey) }} /> )} {/* 类型角标 */} {MATERIAL_TYPE_LABELS[asset.type]} {/* 时长角标 */} {asset.duration != null && ( {formatDuration(asset.duration)} )} {/* 质量分角标 */} {asset.quality_score != null && ( {asset.quality_score} )}
{/* 信息 */}

{asset.name}

{formatSize(asset.size)}
) } export default AssetCard