fix: 修复模板导入功能的关键问题
修复问题: - 修复数据库状态格式不一致导致的列表显示错误 - 修复单个导入完成后统计信息显示为0的问题 - 修复日期时间解析错误导致的panic问题 - 修复所有unwrap()调用导致的潜在崩溃 技术改进: - 统一使用Debug格式保存和查询import_status - 改进日期解析支持多种格式(RFC3339和SQLite格式) - 优化进度监控逻辑,保留最后有效统计数据 - 完善错误处理,避免锁中毒和解析错误 功能完善: - 模板导入完成后正确显示'已完成'状态 - 统计信息准确显示成功/失败数量 - 进度监控稳定运行,无无限轮询问题
This commit is contained in:
@@ -15,6 +15,7 @@ export const ImportProgressModal: React.FC<ImportProgressModalProps> = ({
|
||||
onComplete,
|
||||
}) => {
|
||||
const [progress, setProgress] = useState<ImportProgress | null>(null);
|
||||
const [lastValidProgress, setLastValidProgress] = useState<ImportProgress | null>(null);
|
||||
const { getImportProgress } = useTemplateStore();
|
||||
|
||||
useEffect(() => {
|
||||
@@ -28,23 +29,24 @@ export const ImportProgressModal: React.FC<ImportProgressModalProps> = ({
|
||||
const progressData = await getImportProgress(templateId);
|
||||
if (!isMounted) return;
|
||||
|
||||
setProgress(progressData);
|
||||
// 如果有有效的进度数据,保存它并更新显示
|
||||
if (progressData) {
|
||||
setProgress(progressData);
|
||||
setLastValidProgress(progressData);
|
||||
}
|
||||
|
||||
// 如果进度数据为空(已被清除),说明导入已完成,停止轮询
|
||||
if (!progressData) {
|
||||
// 设置一个完成状态的进度对象
|
||||
const completedProgress: ImportProgress = {
|
||||
template_id: templateId,
|
||||
template_name: "模板",
|
||||
status: ImportStatus.Completed,
|
||||
total_materials: 0,
|
||||
uploaded_materials: 0,
|
||||
failed_materials: 0,
|
||||
current_operation: "导入完成",
|
||||
error_message: undefined,
|
||||
progress_percentage: 100
|
||||
};
|
||||
setProgress(completedProgress);
|
||||
// 使用最后一次有效的进度数据,但更新状态为完成
|
||||
if (lastValidProgress) {
|
||||
const completedProgress: ImportProgress = {
|
||||
...lastValidProgress,
|
||||
status: ImportStatus.Completed,
|
||||
current_operation: "导入完成",
|
||||
progress_percentage: 100
|
||||
};
|
||||
setProgress(completedProgress);
|
||||
}
|
||||
|
||||
// 清除轮询
|
||||
if (interval) {
|
||||
|
||||
Reference in New Issue
Block a user