import React, { useState } from 'react'; import { ExclamationTriangleIcon, CheckCircleIcon, XCircleIcon } from '@heroicons/react/24/outline'; import { LoadingSpinner } from './LoadingSpinner'; import { Modal } from './Modal'; import { Material, BatchDeleteResult } from '../types/material'; interface BatchDeleteConfirmDialogProps { /** 是否显示对话框 */ isOpen: boolean; /** 要删除的素材列表 */ materials: Material[]; /** 是否正在删除 */ deleting?: boolean; /** 删除结果(删除完成后显示) */ deleteResult?: BatchDeleteResult | null; /** 确认删除回调 */ onConfirm: () => void; /** 取消回调 */ onCancel: () => void; /** 关闭结果对话框回调 */ onCloseResult?: () => void; } /** * 批量删除确认对话框组件 * 遵循前端开发规范的确认对话框设计,提供安全的批量删除确认流程 */ export const BatchDeleteConfirmDialog: React.FC = ({ isOpen, materials, deleting, deleteResult, onConfirm, onCancel, onCloseResult, }) => { const [showDetails, setShowDetails] = useState(false); // 如果有删除结果,显示结果对话框 if (deleteResult) { return ( {} : (onCloseResult || onCancel)} title="批量删除结果" icon={deleteResult.failed_count > 0 ? : } size="md" variant={deleteResult.failed_count > 0 ? "warning" : "success"} closeOnBackdropClick={!deleting} closeOnEscape={!deleting} >
{/* 删除结果统计 */}
{deleteResult.total_count}
总计
{deleteResult.success_count}
成功
{deleteResult.failed_count}
失败
{/* 成功消息 */} {deleteResult.success_count > 0 && (

成功删除 {deleteResult.success_count} 个素材

)} {/* 失败详情 */} {deleteResult.failed_count > 0 && (

{deleteResult.failed_count} 个素材删除失败

{showDetails && (
{deleteResult.failed_items.map((item, index) => (
ID: {item.id}
{item.error_message}
))}
)}
)} {/* 按钮区域 */}
); } // 确认删除对话框 return ( {} : onCancel} title="批量删除素材" icon={} size="md" variant="danger" closeOnBackdropClick={!deleting} closeOnEscape={!deleting} >

确定要删除选中的 {materials.length} 个素材吗?此操作无法撤销。

{/* 素材列表预览 */}

要删除的素材:

{materials.slice(0, 10).map((material) => (
• {material.name}
))} {materials.length > 10 && (
... 还有 {materials.length - 10} 个素材
)}

重要提醒

此操作将永久删除选中的素材及其相关数据,包括切分片段、分类记录等。请确认您要继续。

{/* 按钮区域 */}
); };