import React, { useState } from 'react'; import { X, Calendar, Clock, Monitor, Layers, FileText, Image, Video, Music, Type, Sparkles, CheckCircle, XCircle, AlertCircle, Upload, Cloud } from 'lucide-react'; import { Template, TemplateMaterial, TemplateMaterialType, TrackType } from '../../types/template'; import { SegmentMatchingRuleEditor } from './SegmentMatchingRuleEditor'; interface TemplateDetailModalProps { template: Template; onClose: () => void; } export const TemplateDetailModal: React.FC = ({ template, onClose, }) => { const [activeTab, setActiveTab] = useState<'overview' | 'materials' | 'tracks'>('overview'); // 格式化时长 const formatDuration = (microseconds: number) => { const seconds = Math.floor(microseconds / 1000000); const minutes = Math.floor(seconds / 60); const remainingSeconds = seconds % 60; return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}`; }; // 格式化时长(精确到毫秒) const formatDurationWithMs = (microseconds: number) => { const totalMs = Math.floor(microseconds / 1000); const seconds = Math.floor(totalMs / 1000); const ms = totalMs % 1000; const minutes = Math.floor(seconds / 60); const remainingSeconds = seconds % 60; return `${minutes}:${remainingSeconds.toString().padStart(2, '0')}.${ms.toString().padStart(3, '0')}`; }; // 格式化文件大小 const formatFileSize = (bytes?: number) => { if (!bytes) return '未知'; const sizes = ['B', 'KB', 'MB', 'GB']; const i = Math.floor(Math.log(bytes) / Math.log(1024)); return `${(bytes / Math.pow(1024, i)).toFixed(1)} ${sizes[i]}`; }; // 格式化日期 const formatDate = (dateString: string) => { return new Date(dateString).toLocaleString('zh-CN'); }; // 获取素材类型图标 const getMaterialIcon = (type: TemplateMaterialType) => { switch (type) { case TemplateMaterialType.Video: return