import type { Library } from '../types' type PreviewItem = { source: string target?: string action: string reason?: string } type ManualOrganizePanelProps = { organizeSource: string selectedCount: number localLibraries: Library[] organizeLibraryID: string organizeDestPath: string organizeMediaType: string organizeTransferMode: string scanAfter: boolean scrapeAfter: boolean organizeReady: boolean organizeBusy: string previewItems: PreviewItem[] onClearSelected: () => void onLibraryChange: (value: string) => void onDestPathChange: (value: string) => void onMediaTypeChange: (value: string) => void onTransferModeChange: (value: string) => void onScanAfterChange: (value: boolean) => void onScrapeAfterChange: (value: boolean) => void onPreview: () => void onRun: () => void } export function ManualOrganizePanel({ organizeSource, selectedCount, localLibraries, organizeLibraryID, organizeDestPath, organizeMediaType, organizeTransferMode, scanAfter, scrapeAfter, organizeReady, organizeBusy, previewItems, onClearSelected, onLibraryChange, onDestPathChange, onMediaTypeChange, onTransferModeChange, onScanAfterChange, onScrapeAfterChange, onPreview, onRun, }: ManualOrganizePanelProps) { return (

手动整理入库

来源优先使用选中项;未选中时使用当前目录。

来源:{organizeSource || '未选择'}
{selectedCount > 0 && (
已选择 {selectedCount} 个项目用于整理。
)}
{previewItems.length > 0 && }
) } function ManualOrganizePreviewTable({ items }: { items: PreviewItem[] }) { return (
{items.map((item, index) => ( ))}
动作 来源 目标 原因
{item.action} {item.source} {item.target || '—'} {item.reason || '—'}
) }