/**
* 任务表格组件
*/
import { FileText, FileType2, Loader2, Play, Eye, RefreshCw, Trash2 } from 'lucide-react';
import type { ReviewTask } from '../types';
import { formatFileSize, formatTime } from '../api';
interface TaskTableProps {
tasks: ReviewTask[];
selectedIds: string[];
onSelectChange: (ids: string[]) => void;
onViewReport: (task: ReviewTask) => void;
onRunTask: (task: ReviewTask) => void;
onDeleteTask: (task: ReviewTask) => void;
}
export default function TaskTable({
tasks,
selectedIds,
onSelectChange,
onViewReport,
onRunTask,
onDeleteTask
}: TaskTableProps) {
const allSelected = tasks.length > 0 && selectedIds.length === tasks.length;
const toggleSelectAll = () => {
if (allSelected) {
onSelectChange([]);
} else {
onSelectChange(tasks.map(t => t.id));
}
};
const toggleSelect = (id: string) => {
if (selectedIds.includes(id)) {
onSelectChange(selectedIds.filter(i => i !== id));
} else {
onSelectChange([...selectedIds, id]);
}
};
// 获取文件图标
const getFileIcon = (fileName: string) => {
if (fileName.endsWith('.pdf')) {
return
暂无稿件,请上传新稿件开始审查
| 文件名称 / 信息 | 上传时间 | 审稿维度 | 结果摘要 | 操作 | |
|---|---|---|---|---|---|
| toggleSelect(task.id)} className="rounded border-gray-300 text-indigo-600 focus:ring-indigo-500 cursor-pointer" /> |
{getFileIcon(task.fileName)}
task.status === 'completed' && onViewReport(task)}
>
{task.fileName}
{formatFileSize(task.fileSize)}
{task.wordCount && (
<>
•
{task.wordCount.toLocaleString()} 字
>
)}
|
{formatTime(task.createdAt)} | {renderAgentTags(task)} | {renderResultSummary(task)} | {renderActions(task)} |