{files.map((file) => {
const isDownloading = file.status === 'downloading';
const isCompleted = file.status === 'completed';
const hasDownloadedFile = downloadedFiles?.has(file.id);
console.log('文件状态:', {
fileName: file.name,
status: file.status,
progress: file.progress,
isDownloading
});
// 计算传输进度信息
let transferInfo = null;
let currentProgress = 0; // 使用稳定的进度值
if (isDownloading && file) {
const fileKey = `${file.name}-${file.size}`;
let tracker = transferTrackers.current.get(fileKey);
// 如果tracker不存在,创建一个新的
if (!tracker) {
tracker = new TransferProgressTracker(file.size);
transferTrackers.current.set(fileKey, tracker);
}
// 更新传输进度
const transferredBytes = (file.progress / 100) * file.size;
const progressInfo = tracker.update(transferredBytes);
transferInfo = progressInfo;
currentProgress = progressInfo.percentage; // 使用稳定的百分比
} else {
// 如果不在传输中,使用原始进度值
currentProgress = file.progress;
}
// 清理已完成的tracker
if (file.status === 'completed') {
const fileKey = `${file.name}-${file.size}`;
transferTrackers.current.delete(fileKey);
}
return (
{getFileIcon(file.type)}
{file.name}
{formatFileSize(file.size)}
{hasDownloadedFile && (
✅ 传输完成,点击保存
)}
{isDownloading && (
{/* 传输速度和剩余时间信息 */}
{transferInfo && (
{transferInfo.speed.displaySpeed}
{transferInfo.speed.unit}
{transferInfo.remainingTime.seconds < Infinity && (
剩余
{transferInfo.remainingTime.display}
)}
)}
)}
{(isDownloading || isCompleted) && currentProgress > 0 && (
{hasDownloadedFile ? '传输完成' : '正在传输...'}
{currentProgress.toFixed(1)}%
)}
);
})}