import React from 'react'; import { AlertTriangle, X, Trash2 } from 'lucide-react'; import { SegmentWithDetails } from '../types/materialSegmentView'; interface MaterialSegmentDeleteDialogProps { segments: SegmentWithDetails[]; isOpen: boolean; onClose: () => void; onConfirm: () => void; isLoading?: boolean; } /** * MaterialSegment删除确认对话框组件 * 遵循 Tauri 开发规范的组件设计模式 */ export const MaterialSegmentDeleteDialog: React.FC = ({ segments, isOpen, onClose, onConfirm, isLoading = false, }) => { if (!isOpen) return null; const isBatch = segments.length > 1; // 格式化时长 const formatDuration = (seconds: number) => { const minutes = Math.floor(seconds / 60); const secs = Math.round(seconds % 60); return `${minutes}:${secs.toString().padStart(2, '0')}`; }; // 计算总时长 const totalDuration = segments.reduce((sum, segment) => sum + segment.segment.duration, 0); return (
{/* 对话框头部 */}

{isBatch ? '批量删除片段' : '删除片段'}

{isBatch ? `确认删除 ${segments.length} 个片段` : '确认删除该片段'}

{/* 对话框内容 */}

{isBatch ? '您即将删除以下片段,此操作不可撤销:' : '您即将删除该片段,此操作不可撤销:' }

{/* 片段列表 */}
{isBatch ? (
{segments.slice(0, 5).map((segmentWithDetails, _index) => (
{segmentWithDetails.material_name}
#{segmentWithDetails.segment.segment_index} {formatDuration(segmentWithDetails.segment.duration)}
))} {segments.length > 5 && (
还有 {segments.length - 5} 个片段...
)}
) : (
素材名称 {segments[0].material_name}
片段索引 #{segments[0].segment.segment_index}
片段时长 {formatDuration(segments[0].segment.duration)}
{segments[0].classification && (
分类 {segments[0].classification.category}
)}
)}
{/* 统计信息 */} {isBatch && (
删除统计
片段数量 {segments.length} 个
总时长 {formatDuration(totalDuration)}
已分类片段 {segments.filter(s => s.classification).length} 个
)}
{/* 警告信息 */}

注意事项:

  • 删除操作不可撤销
  • 片段文件将从磁盘中删除
  • 相关的AI分类数据也将被删除
  • {isBatch &&
  • 批量删除可能需要一些时间
  • }
{/* 对话框底部 */}
); };