// frontend/src/components/exceptions/steps/StepConfirm.jsx import { ShieldAlert, Sparkles, LoaderCircle } from 'lucide-react'; import { actionButtonClass, riskClass, formatSeconds, isTerminalRepairStatus } from '../../../utils/exceptions'; function InfoField({ label, value, mono = false }) { return (
{label}
{value || '--'}
); } export default function StepConfirm({ detailRecord, isLoading, selectedAction, previewState, executionState, repairTask, repairLogs, onPreview, onExecute, canIngest }) { if (!detailRecord && !isLoading) { return (

请先选择一首歌曲

); } if (isLoading) { return (
); } const finalPreviewItem = previewState.action === 'save_and_organize' && previewState.payload ? previewState.payload.items?.find((item) => item.exception_id === detailRecord.exception_id) || null : null; const finalPreview = finalPreviewItem?.final_library_preview || null; const ap = detailRecord.audio_props_json || {}; return (

{detailRecord.display_title || '-'}

{finalPreview && (
入库确认
风险 {previewState.payload?.risk_level}
)} {(previewState.action === 'ignore_exception' || previewState.action === 'delete_file') && previewState.payload && !previewState.loading && (
操作预览
风险 {previewState.payload?.risk_level}
{previewState.payload.items?.map((item) => (
{item.filename}
{item.planned_operations?.map((op, i) => (
{op.description}
))}
))}
)} {previewState.error && previewState.action ? (

{previewState.error}

) : null}
{executionState?.status && (
{executionState.status === 'submitting' ? '正在提交执行请求' : executionState.status === 'accepted' ? '任务已提交' : executionState.status === 'running' ? '任务执行中' : executionState.status === 'completed' ? '执行完成' : executionState.status === 'failed' ? '执行失败' : ''}
{executionState.repairTaskId && (
任务号 {executionState.repairTaskId}
)} {executionState.error && (
{executionState.error}
)}
)} {repairTask && repairLogs.length > 0 && executionState?.repairTaskId === repairTask.task_id && (
任务日志 ({repairTask.status})
{repairLogs.map((log, i) => (
{log.message || log.stage || '--'}
))}
)}
); }