fix: 修复模板导入功能的关键问题

修复问题:
- 修复数据库状态格式不一致导致的列表显示错误
- 修复单个导入完成后统计信息显示为0的问题
- 修复日期时间解析错误导致的panic问题
- 修复所有unwrap()调用导致的潜在崩溃

 技术改进:
- 统一使用Debug格式保存和查询import_status
- 改进日期解析支持多种格式(RFC3339和SQLite格式)
- 优化进度监控逻辑,保留最后有效统计数据
- 完善错误处理,避免锁中毒和解析错误

 功能完善:
- 模板导入完成后正确显示'已完成'状态
- 统计信息准确显示成功/失败数量
- 进度监控稳定运行,无无限轮询问题
This commit is contained in:
imeepos
2025-07-14 21:50:29 +08:00
parent 939efd70d4
commit 2d88274c3a
4 changed files with 72 additions and 35 deletions

View File

@@ -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) {