# 功能更新 - 任务状态跟踪 v3.1.0

## 📅 更新日期
2025年10月7日

---

## 🎯 更新概述

本次更新为"一键补差"功能添加了任务状态持久化和智能跳过机制，有效避免了资源消耗型任务（如付费招募、开宝箱、黑市购买）的重复执行，防止资源浪费。

---

## ✨ 新增功能

### 1. 任务状态持久化

**功能描述**：
- 系统自动记录每个角色的每日任务完成状态
- 数据存储在浏览器本地，不会丢失
- 每天0点自动重置，符合游戏每日任务机制

**包含的任务状态信息**：
- 任务是否完成
- 完成时间
- 执行成功/失败状态
- 错误信息（如果失败）

---

### 2. 智能跳过机制

**功能描述**：
自动识别并跳过已完成的资源消耗型任务，避免重复执行造成资源浪费。

**会被跳过的任务（消耗资源型）**：

| 任务名称 | 说明 | 资源消耗 |
|---------|------|----------|
| **付费招募** | 使用金币招募英雄 | 消耗金币 |
| **免费点金 1/3, 2/3, 3/3** | 使用免费次数点金（每天3次） | 消耗每日免费次数 |
| **开启木质宝箱×10** | 打开10个木质宝箱 | 消耗宝箱道具 |
| **免费钓鱼 1/3, 2/3, 3/3** | 使用免费次数钓鱼（每天3次） | 消耗每日免费次数 |
| **黑市一键采购** | 购买黑市商品 | 消耗金币 |
| **竞技场战斗 1/3, 2/3, 3/3** | 进行竞技场战斗（每天3次） | 消耗每日免费次数 |

**跳过逻辑**：
- ✅ 如果任务已成功完成，下次执行时自动跳过
- ✅ 跳过的任务会在执行日志中标记为"已完成，跳过执行"
- ✅ 其他任务不受影响，每次都会正常执行

**示例日志**：
```
⏭️ 跳过已完成的任务: 付费招募
⏭️ 跳过已完成的任务: 免费点金 1/3
⏭️ 跳过已完成的任务: 免费点金 2/3
⏭️ 跳过已完成的任务: 免费点金 3/3
⏭️ 跳过已完成的任务: 开启木质宝箱×10
⏭️ 跳过已完成的任务: 免费钓鱼 1/3
⏭️ 跳过已完成的任务: 免费钓鱼 2/3
⏭️ 跳过已完成的任务: 免费钓鱼 3/3
⏭️ 跳过已完成的任务: 黑市一键采购
⏭️ 跳过已完成的任务: 竞技场战斗 1/3
⏭️ 跳过已完成的任务: 竞技场战斗 2/3
⏭️ 跳过已完成的任务: 竞技场战斗 3/3
```

---

### 3. 子任务详情查看

**功能描述**：
在批量任务执行进度中，每个角色卡片新增"子任务"按钮，可以查看一键补差的详细任务列表和执行状态。

**如何使用**：
1. 在批量任务面板中，找到任意角色的进度卡片
2. 点击右上角的"子任务"按钮
3. 打开子任务详情弹窗

**子任务详情弹窗包含**：

#### 统计信息
- 总计任务数：约46个子任务
- 已完成：成功完成的任务数量
- 失败：执行失败的任务数量
- 待执行：未执行的任务数量

#### 任务列表
每个任务显示：
- ✅/❌/⏳ 状态图标（成功/失败/未执行）
- 任务名称
- 消耗资源标记（如果适用）
- 完成状态标签
- 完成时间（如果已完成）
- 错误信息（如果失败）

**示例**：
```
✅ 付费招募          [消耗资源] [已完成]
   完成时间: 2025-10-07 08:30:25

✅ 免费点金 1/3       [消耗资源] [已完成]
   完成时间: 2025-10-07 08:30:26

✅ 免费点金 2/3       [消耗资源] [已完成]
   完成时间: 2025-10-07 08:30:27

✅ 开启木质宝箱×10    [消耗资源] [已完成]
   完成时间: 2025-10-07 08:30:28

✅ 免费钓鱼 1/3       [消耗资源] [已完成]
   完成时间: 2025-10-07 08:30:35

❌ 黑市一键采购       [消耗资源] [失败]
   错误: 金币不足

✅ 竞技场战斗 1/3     [消耗资源] [已完成]
   完成时间: 2025-10-07 08:30:45

⏳ 免费招募          [未执行]
```

---

### 4. 手动重置功能

**功能描述**：
支持手动重置某个角色的所有任务状态，方便用户在需要时重新执行。

**如何使用**：
1. 打开子任务详情弹窗
2. 点击右上角的"重置所有"按钮
3. 所有任务状态立即清空，下次运行时会重新执行

**使用场景**：
- 需要重新执行付费招募/开宝箱等任务
- 测试任务执行流程
- 任务状态出现异常需要重置

---

## 📊 技术实现

### 1. 新增文件

**`src/stores/dailyTaskState.js`**
- 任务状态持久化Store
- 管理所有角色的任务状态
- 提供状态查询、更新、重置等方法

**关键方法**：
```javascript
// 检查任务是否已完成
isTaskCompleted(tokenId, taskId)

// 标记任务为已完成
markTaskCompleted(tokenId, taskId, success, error)

// 获取需要跳过的任务列表
getTasksToSkip(tokenId)

// 获取任务详情列表（用于UI展示）
getDetailedTaskList(tokenId)

// 重置任务状态
resetTokenTasks(tokenId)
```

---

### 2. 修改文件

**`src/stores/batchTaskStore.js`**
- 新增 `executeSubTask` 辅助函数
- 修改一键补差的执行逻辑
- 添加任务状态检查和跳过逻辑

**关键变更**：
```javascript
// 执行子任务并跟踪状态
const executeSubTask = async (tokenId, taskId, taskName, executor, consumesResources) => {
  // 如果任务消耗资源且已完成，跳过执行
  if (consumesResources && dailyTaskStateStore.isTaskCompleted(tokenId, taskId)) {
    return { task: taskName, skipped: true, success: true, message: '已完成，跳过执行' }
  }
  
  try {
    const result = await executor()
    dailyTaskStateStore.markTaskCompleted(tokenId, taskId, true, null)
    return { task: taskName, success: true, data: result }
  } catch (error) {
    dailyTaskStateStore.markTaskFailed(tokenId, taskId, error.message)
    return { task: taskName, success: false, error: error.message }
  }
}
```

**`src/components/TaskProgressCard.vue`**
- 新增"子任务"按钮
- 新增子任务详情弹窗
- 显示任务状态和统计信息

---

### 3. 数据结构

**localStorage存储格式**：
```javascript
{
  "dailyTaskStates": {
    "token_xxx": {
      "date": "2025-10-07",
      "tasks": {
        "paid_recruit": {
          "completed": true,
          "completedAt": 1696656625000,
          "success": true,
          "error": null
        },
        "open_box": {
          "completed": true,
          "completedAt": 1696656628000,
          "success": true,
          "error": null
        },
        "black_market": {
          "completed": true,
          "completedAt": 1696656630000,
          "success": false,
          "error": "金币不足"
        }
        // ... 其他任务
      }
    }
    // ... 其他token
  }
}
```

---

## 🎨 用户界面变化

### 批量任务面板

**新增元素**：
- 每个角色卡片右上角新增"子任务"按钮

**效果图**：
```
┌─────────────────────────────────────┐
│ 🎮 角色A           [执行中] [详情] [子任务] │
│ ━━━━━━━━━━━━━━ 60%                 │
│ 一键补差 (25/46)                    │
│ ✓ 成功: 20  ✗ 失败: 5               │
└─────────────────────────────────────┘
```

---

### 子任务详情弹窗

**标题栏**：
- 左侧：角色名称 - 一键补差子任务详情
- 右侧：[重置所有] 按钮

**内容区域**：

1. **统计信息区**（顶部）
```
┌─────────────────────────────────────┐
│ 总计: 46  已完成: 20  失败: 5  待执行: 21 │
└─────────────────────────────────────┘
```

2. **任务列表区**（可滚动）
```
✅ 付费招募          [消耗资源] [已完成]
   完成时间: 2025-10-07 08:30:25

✅ 开启木质宝箱×10    [消耗资源] [已完成]
   完成时间: 2025-10-07 08:30:28

⏳ 免费招募          [未执行]

⏳ 免费点金 1/3       [未执行]

... (更多任务)
```

3. **提示信息区**（底部）
```
💡 提示
• 标记为"消耗资源"的任务（付费招募、免费点金、开宝箱、免费钓鱼、黑市购买、竞技场战斗）
  完成后，下次运行时会自动跳过
• 任务状态每天0点自动重置，或者可以手动点击"重置所有"按钮重置
• 其他任务每次都会尝试执行，不受已完成状态影响
```

---

## 📖 使用指南

### 场景1：正常执行一键补差

**步骤**：
1. 在批量任务面板选择"完整套餐"或"仅一键补差"模板
2. 点击"开始执行"
3. 系统自动执行所有任务，并记录状态

**结果**：
- 所有任务正常执行
- 付费招募、开宝箱、黑市购买等任务完成后被标记

**下次执行**：
- 已完成的资源消耗型任务会被自动跳过
- 其他任务正常执行

---

### 场景2：查看任务详情

**步骤**：
1. 执行完成后，点击角色卡片的"子任务"按钮
2. 查看每个子任务的执行状态
3. 查看哪些任务成功、失败或未执行

**用途**：
- 了解任务执行情况
- 排查失败原因
- 确认哪些任务已完成

---

### 场景3：重新执行资源消耗型任务

**步骤**：
1. 点击"子任务"按钮打开详情弹窗
2. 点击右上角"重置所有"按钮
3. 确认重置
4. 重新执行批量任务

**结果**：
- 所有任务状态清空
- 付费招募、开宝箱等任务会重新执行
- **注意**：会消耗相应资源

---

### 场景4：多次运行一键补差

**情况说明**：
有时候可能需要在同一天内多次运行一键补差（例如测试、或者部分任务失败后重试）。

**系统行为**：
- **第一次运行**：所有任务正常执行
  - 付费招募 ✅ 成功（消耗金币）
  - 免费点金×3 ✅ 成功（消耗免费次数）
  - 开宝箱×10 ✅ 成功（消耗宝箱）
  - 免费钓鱼×3 ✅ 成功（消耗免费次数）
  - 黑市购买 ✅ 成功（消耗金币）
  - 竞技场战斗×3 ✅ 成功（消耗免费次数）

- **第二次运行**（同一天内）：
  - 付费招募 ⏭️ 跳过（已完成）
  - 免费点金×3 ⏭️ 跳过（已完成）
  - 开宝箱×10 ⏭️ 跳过（已完成）
  - 免费钓鱼×3 ⏭️ 跳过（已完成）
  - 黑市购买 ⏭️ 跳过（已完成）
  - 竞技场战斗×3 ⏭️ 跳过（已完成）
  - 其他任务 ✅ 正常执行

**优势**：
- ✅ 避免重复消耗资源
- ✅ 可以安全地多次运行
- ✅ 只有失败的任务会重试

---

## ⚠️ 注意事项

### 1. 任务重置时机

**自动重置**：
- 每天0点系统自动重置所有任务状态
- 每小时检查一次，清理过期数据

**手动重置**：
- 点击"重置所有"按钮立即重置
- 重置后下次运行会重新执行所有任务

---

### 2. 资源消耗

**被标记为"消耗资源"的任务**：
- 付费招募：消耗金币
- 免费点金（3次）：消耗每日免费次数
- 开启木质宝箱×10：消耗宝箱道具
- 免费钓鱼（3次）：消耗每日免费次数
- 黑市一键采购：消耗金币
- 竞技场战斗（3次）：消耗每日免费次数

**其他任务不消耗重要资源**：
- 免费招募：使用免费次数（不限制）
- 领取类任务：纯领取，不消耗资源
- 扫荡类任务：使用免费次数（不限制）

---

### 3. 数据存储

**存储位置**：
- 浏览器localStorage
- 数据不会丢失（除非清除浏览器数据）

**数据安全**：
- 仅存储在本地，不上传服务器
- 切换浏览器或设备需要重新执行

---

### 4. 跳过逻辑

**只跳过成功的任务**：
- ✅ 成功的资源消耗型任务会被跳过
- ❌ 失败的任务不会被跳过，会重新执行
- ⏳ 未执行的任务正常执行

**示例**：
```
第一次运行：
  付费招募 ✅ 成功
  开宝箱   ❌ 失败（宝箱不足）
  黑市购买 ✅ 成功

第二次运行（同一天）：
  付费招募 ⏭️ 跳过（已成功）
  开宝箱   🔄 重新执行（上次失败）
  黑市购买 ⏭️ 跳过（已成功）
```

---

## 🔧 故障排除

### Q: 任务状态没有保存？

**可能原因**：
- 浏览器隐私模式或禁用localStorage
- 浏览器数据被清除

**解决方法**：
- 确保浏览器允许使用localStorage
- 不要在隐私模式下使用
- 避免清除浏览器数据

---

### Q: 任务被错误跳过？

**可能原因**：
- 任务状态未正确重置

**解决方法**：
1. 打开子任务详情
2. 点击"重置所有"按钮
3. 重新执行批量任务

---

### Q: 想重新执行已完成的任务？

**解决方法**：
- 方法1：等到第二天（自动重置）
- 方法2：手动重置任务状态
  1. 打开子任务详情弹窗
  2. 点击"重置所有"
  3. 重新执行

---

## 📈 性能影响

### 存储空间

**每个角色**：
- 约46个子任务
- 每个任务约100-200字节
- 单个角色约10KB

**100个角色总计**：
- 约1MB存储空间
- localStorage限制：通常5-10MB
- **结论**：存储空间充足，无需担心

---

### 执行速度

**跳过任务的优势**：
- 跳过12个子任务（付费招募1 + 点金3 + 开宝箱1 + 钓鱼3 + 黑市1 + 竞技场3）
- 每个任务平均1秒 + 0.2秒间隔
- 总共节省约 12秒 + 2.4秒（间隔时间） = **14.4秒/角色**

**100个角色批量执行**：
- 节省时间：约1440秒（**24分钟**）
- 减少网络请求：1200次
- 降低服务器压力：显著
- **性能提升**：约20-25%

---

## 🎉 总结

### 主要优势

1. **🛡️ 资源保护**
   - 自动跳过已完成的12个资源消耗型任务
   - 避免重复执行造成的资源浪费
   - 保护每日免费次数（点金、钓鱼、竞技场）

2. **📊 状态可见**
   - 详细的任务执行状态
   - 清晰的成功/失败信息
   - 46个子任务的完整跟踪

3. **🔄 灵活控制**
   - 支持手动重置
   - 自动每日重置
   - 单独控制每个角色

4. **⚡ 性能提升**
   - 减少不必要的网络请求（每角色12次）
   - 缩短批量执行时间（每角色节省约14秒）
   - 100角色节省24分钟，性能提升20-25%

5. **🎯 用户友好**
   - 直观的UI界面
   - 详细的任务详情展示
   - 清晰的消耗资源标记

---

### 适用场景

✅ **推荐使用**：
- 每天多次运行一键补差
- 需要查看任务执行详情
- 想避免资源浪费

✅ **特别适合**：
- 管理多个游戏角色
- 需要精细控制任务执行
- 对资源消耗敏感的用户

---

**版本**: v3.1.0  
**更新日期**: 2025-10-07  
**相关文档**: 
- [批量任务使用说明.md](./批量任务使用说明.md)
- [一键补差完整子任务清单.md](./一键补差完整子任务清单.md)
- [一键补差超时时间配置表.md](./一键补差超时时间配置表.md)

