# 失败原因统计持久化显示 - v3.13.5.7

## 更新日期
2025-10-12

## 问题描述
在批量任务执行完成后，失败原因统计信息会立即消失，用户无法查看之前执行的失败详情。

## 用户需求
希望失败原因统计能够一直保留显示，直到下一次开始执行新任务之前。这样用户可以：
- 在任务完成后仔细分析失败原因
- 记录和排查问题
- 决定是否需要调整配置后重试

## 解决方案

### 1. 失败原因统计的生命周期

**之前的行为**：
- 任务完成后，失败原因统计可能在某些情况下被意外清空
- 用户无法在任务完成后查看失败详情

**新的行为**：
- 任务完成后，失败原因统计保持显示
- 只有在开始**新的**批量任务执行时，才清空失败原因统计
- 重试模式下，失败原因统计会被保留并更新

### 2. 代码修改

**文件**：`src/stores/batchTaskStore.js`

**修改位置**：`startBatchExecution` 函数中的全新开始分支

```javascript
} else {
  // 全新开始：重置所有统计
  executionStats.value = {
    total: targetTokens.length,
    success: 0,
    failed: 0,
    skipped: 0,
    startTime: Date.now(),
    endTime: null
  }
  
  // 🔧 v3.13.5.7: 清空失败原因统计（只在全新开始时清空）
  failureReasonsStats.value = {}
  if (logConfig.value.batch) console.log('🗑️ 已清空失败原因统计（开始新任务）')
}
```

### 3. 功能特性

#### 3.1 失败原因统计的显示时机

| 场景 | 失败原因统计状态 |
|------|----------------|
| 任务执行中 | 实时更新显示 |
| 任务完成（有失败） | **持续显示** ✅ |
| 任务完成（全部成功） | 保持空状态 |
| 暂停任务 | 保持当前状态 |
| 继续执行 | 保持之前的统计 |
| 重试失败任务 | 保留并更新统计 |
| **开始新任务** | **清空统计** 🗑️ |
| 刷新页面后恢复进度 | 从localStorage恢复 |

#### 3.2 用户体验优化

1. **任务完成后**
   - 失败原因统计区域持续显示
   - 用户可以截图或记录失败信息
   - 可以基于失败原因决定后续操作

2. **开始新任务时**
   - 自动清空之前的失败统计
   - 从零开始统计新任务的失败情况
   - 控制台输出清空日志（如果启用批量日志）

3. **重试模式下**
   - 保留原有失败统计
   - 实时更新重试后的结果
   - 可以对比重试前后的失败情况

### 4. 技术细节

#### 4.1 清空时机（唯一触发点）

```javascript
// 只在全新开始执行任务时清空
if (!continueFromSaved) {
  if (isRetry) {
    // 重试模式：不清空失败统计
  } else {
    // 全新开始：清空失败统计 ✅
    failureReasonsStats.value = {}
  }
}
```

#### 4.2 保留时机

- 任务完成时（`completeBatchExecution`）：**不清空**
- 清除进度时（`clearSavedProgress`）：**不清空**
- 暂停任务时（`pauseBatchExecution`）：**不清空**
- 停止任务时（`stopBatchExecution`）：**不清空**

#### 4.3 持久化存储

失败原因统计会被保存到 localStorage 中：

```javascript
const progress = {
  // ... 其他数据
  failureReasons: currentFailureReasons // 保存失败原因统计
}
storageCache.set('batchTaskProgress', progress)
```

恢复时：

```javascript
if (savedProgress.value.failureReasons) {
  failureReasonsStats.value = savedProgress.value.failureReasons
  console.log(`📊 已恢复失败原因统计`)
}
```

### 5. UI 显示效果

**任务完成后的显示**：

```
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 失败原因统计（共 2 个Token失败）
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   • sendCar: sendCar(服务器错误: 310060 - 未知错误): 2个Token
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
```

**开始新任务时**（如果启用日志）：

```
🚀 开始批量执行任务
🗑️ 已清空失败原因统计（开始新任务）
```

### 6. 测试场景

#### 6.1 基础流程
1. 执行批量任务，部分Token失败
2. 任务完成后，失败原因统计持续显示 ✅
3. 开始新的批量任务
4. 失败原因统计被清空，从零开始 ✅

#### 6.2 重试流程
1. 执行批量任务，部分Token失败
2. 失败原因统计显示
3. 点击"重试失败任务"
4. 失败原因统计保留并实时更新 ✅

#### 6.3 页面刷新
1. 执行批量任务，部分Token失败
2. 刷新页面
3. 点击"继续执行"
4. 失败原因统计从localStorage恢复 ✅

### 7. 优势

1. **用户友好**
   - 失败信息不会突然消失
   - 有足够时间分析和记录问题

2. **问题排查**
   - 可以清楚看到哪些操作最容易失败
   - 便于定位和修复系统问题

3. **操作决策**
   - 基于失败原因决定是否重试
   - 可以调整配置后再次执行

4. **性能影响**
   - 几乎无性能开销
   - 只在开始新任务时清空一次

### 8. 注意事项

1. **失败统计的准确性**
   - 统计数据实时收集和更新
   - 不会因为清理任务详情而丢失

2. **内存占用**
   - 失败原因统计只保存摘要信息
   - 内存占用极小（通常 < 1KB）

3. **持久化存储**
   - 失败统计随进度保存到 localStorage
   - 支持页面刷新后恢复

## 相关文件

- `src/stores/batchTaskStore.js` - 批量任务状态管理
- `src/views/DailyTasks.vue` - 批量任务执行界面（显示失败统计）

## 版本信息

- **版本号**：v3.13.5.7
- **更新类型**：功能优化
- **影响范围**：批量任务执行模块

## 后续优化建议

1. **失败统计导出**
   - 支持将失败统计导出为文本或CSV
   - 便于长期记录和分析

2. **失败模式识别**
   - 自动识别常见失败模式
   - 提供针对性的解决建议

3. **历史对比**
   - 对比多次执行的失败情况
   - 发现系统性问题

