# 问题修复-发车次数按账号独立计数 v3.8.1

## 📋 问题描述

用户切换到新账号后，发现4辆待发车的车都无法发送，提示"今日发车次数已达上限: 4/4"。

**用户反馈**：
> 明明我的四辆跑车都是待发车的状态，为什么不能发车？好像是上一个token的号发过车，限制4个车就满了，现在这个号的车就不能发了

## 🔍 问题分析

### 问题现象
```
当前账号状态：
- 车辆1: 待发车 ✓
- 车辆2: 待发车 ✓
- 车辆3: 待发车 ✓
- 车辆4: 待发车 ✓

但点击"一键发车"时：
⚠️ 今日发车次数已达上限: 4/4，跳过发送步骤
```

### 根本原因

**v3.8.0 版本的 localStorage key 设计有缺陷**：

```javascript
// 旧版本 key（v3.8.0）
const getTodayKey = () => {
  const today = new Date().toLocaleDateString('zh-CN', ...)
  return `car_daily_send_count_${today}`  
  // 例如: car_daily_send_count_2025/01/08
}
```

**问题**：
1. Key 只包含日期，不包含 `tokenId`
2. 所有账号共享同一个计数器
3. 账号A发了4辆车 → 计数器变成 4/4
4. 切换到账号B → 计数器还是 4/4
5. 账号B无法发车 ❌

### 执行流程（问题版本 v3.8.0）
```
账号A（token_123）:
  - 发送4辆车
  - localStorage['car_daily_send_count_2025/01/08'] = "4"

切换账号 → 

账号B（token_456）:
  - 读取 localStorage['car_daily_send_count_2025/01/08'] → "4"
  - 计数器: 4/4
  - 提示: "今日发车次数已达上限" ❌
  - 无法发送任何车辆
```

## ✅ 解决方案

### 1. **localStorage Key 增加 TokenId**

```javascript
// 新版本 key（v3.8.1）
const getTodayKey = (tokenId) => {
  const today = new Date().toLocaleDateString('zh-CN', ...)
  const currentTokenId = tokenId || tokenStore.selectedToken?.id || 'default'
  return `car_daily_send_count_${today}_${currentTokenId}`
  // 例如: car_daily_send_count_2025/01/08_token_123
}
```

**改进**：
- Key 包含 `日期 + tokenId`
- 每个账号有独立的计数器
- 不同账号互不影响

### 2. **Token 切换监听**

添加 `watch` 监听器，自动切换计数器：

```javascript
import { watch } from 'vue'

// 监听 token 切换，重新加载对应 token 的发车次数
watch(() => tokenStore.selectedToken?.id, (newTokenId, oldTokenId) => {
  if (newTokenId !== oldTokenId) {
    const newCount = loadDailySendCount()
    dailySendCount.value = newCount
    console.log(`🔄 Token切换: ${oldTokenId} → ${newTokenId}，发车计数: ${newCount}/4`)
  }
})
```

## 🎯 修复效果

### 执行流程（修复版本 v3.8.1）
```
账号A（token_123）:
  - 发送4辆车
  - localStorage['car_daily_send_count_2025/01/08_token_123'] = "4"
  - 计数器: 4/4 ✓

切换账号 → 

账号B（token_456）:
  - 读取 localStorage['car_daily_send_count_2025/01/08_token_456'] → null
  - 计数器: 0/4 ✓
  - 可以正常发送4辆车 ✓
  
  - 发送4辆车
  - localStorage['car_daily_send_count_2025/01/08_token_456'] = "4"
  - 计数器: 4/4 ✓

切换回账号A → 

账号A（token_123）:
  - 读取 localStorage['car_daily_send_count_2025/01/08_token_123'] → "4"
  - 计数器: 4/4 ✓
  - 今日已发满，无法继续发车 ✓
```

## 📊 新增日志

### 初始化日志
```
🚗 初始化发车计数: 0/4（今日: 2025/1/8，Token: token_1759860115131_cofnrgq8e）
```

### Token 切换日志
```
🔄 Token切换: token_123 → token_456，发车计数: 0/4
```

### localStorage 数据结构
```javascript
// 账号A的计数
localStorage['car_daily_send_count_2025/01/08_token_123'] = "4"

// 账号B的计数
localStorage['car_daily_send_count_2025/01/08_token_456'] = "2"

// 账号C的计数
localStorage['car_daily_send_count_2025/01/08_token_789'] = "0"
```

## 🧪 测试场景

### 场景1：多账号独立计数
1. **账号A**：发送4辆车（4/4）
2. 切换到 **账号B**：显示 0/4 ✓
3. **账号B**：发送2辆车（2/4）
4. 切换回 **账号A**：显示 4/4 ✓
5. **账号A**：无法继续发车 ✓
6. 切换回 **账号B**：显示 2/4 ✓
7. **账号B**：可以继续发送2辆车 ✓

### 场景2：刷新页面后切换账号
1. **账号A**：发送3辆车（3/4）
2. 刷新页面（Ctrl + F5）
3. 页面加载后显示：3/4 ✓
4. 切换到 **账号B**：自动切换为 0/4 ✓
5. **账号B**：可以正常发送4辆车 ✓

### 场景3：跨日期自动重置（每个账号独立）
1. **2025/01/08**：
   - 账号A：发送4辆（4/4）
   - 账号B：发送2辆（2/4）
2. **2025/01/09**（第二天）：
   - 账号A：自动重置为 0/4 ✓
   - 账号B：自动重置为 0/4 ✓
   - 两个账号都可以重新发送4辆车

## 🔧 技术细节

### localStorage Key 对比

| 版本 | Key 格式 | 问题 |
|------|----------|------|
| v3.8.0 | `car_daily_send_count_2025/01/08` | ❌ 所有账号共享 |
| v3.8.1 | `car_daily_send_count_2025/01/08_token_123` | ✅ 按账号独立 |

### 数据迁移

旧版本的数据（`car_daily_send_count_2025/01/08`）不会自动删除，但也不会影响新版本。新版本会创建新的 key。

如需手动清理旧数据（可选），可在浏览器控制台执行：

```javascript
// 清理旧版本的全局计数器
const today = new Date().toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })
localStorage.removeItem(`car_daily_send_count_${today}`)
console.log('已清理旧版本数据')
```

### watch 监听逻辑

```javascript
watch(() => tokenStore.selectedToken?.id, (newTokenId, oldTokenId) => {
  // 只有当 tokenId 真正改变时才触发
  if (newTokenId !== oldTokenId) {
    // 从 localStorage 加载新 token 的计数
    const newCount = loadDailySendCount()
    // 更新响应式变量
    dailySendCount.value = newCount
    // 输出日志
    console.log(`🔄 Token切换: ${oldTokenId} → ${newTokenId}，发车计数: ${newCount}/4`)
  }
})
```

## 📝 相关文件

### 修改的文件
- `src/components/CarManagement.vue`
  - 修改 `getTodayKey()` 函数，增加 `tokenId` 参数
  - 添加 `watch` 监听 token 切换
  - 更新初始化日志，显示 tokenId
  - 导入 `watch` 函数

### 新增文件
- `MD说明/问题修复-发车次数按账号独立计数v3.8.1.md`

### 前置版本
- `MD说明/问题修复-每日发车次数限制v3.8.0.md`

## 🔄 版本信息

- **版本号**: v3.8.1
- **修复日期**: 2025-01-08
- **修复内容**: 
  - 修复发车次数计数器在多账号间共享的问题
  - 添加按 tokenId 区分的独立计数
  - 添加 token 切换监听，自动加载对应计数
- **依赖版本**: v3.8.0

## 🚀 使用说明

### 查看当前账号计数（调试用）
```javascript
const today = new Date().toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })
const tokenId = 'your_token_id_here'  // 替换为实际的 tokenId
const count = localStorage.getItem(`car_daily_send_count_${today}_${tokenId}`)
console.log(`账号 ${tokenId} 今日发车次数: ${count || 0}/4`)
```

### 清除指定账号的计数（调试用）
```javascript
const today = new Date().toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })
const tokenId = 'your_token_id_here'  // 替换为实际的 tokenId
localStorage.removeItem(`car_daily_send_count_${today}_${tokenId}`)
location.reload()  // 刷新页面
```

### 清除所有账号的计数（调试用）
```javascript
const today = new Date().toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })
const prefix = `car_daily_send_count_${today}_`

// 遍历所有 localStorage key
Object.keys(localStorage).forEach(key => {
  if (key.startsWith(prefix)) {
    localStorage.removeItem(key)
    console.log(`已清除: ${key}`)
  }
})

location.reload()  // 刷新页面
```

## 🎨 UI 表现

### 账号A（已发4辆）
```
┌──────────────────────────────────┐
│ 🚗 俱乐部赛车                     │
│ [4辆车] [🎫 0] [🚗 4/4] ← 红色闪烁 │
└──────────────────────────────────┘
```

### 切换到账号B（未发车）
```
┌──────────────────────────────────┐
│ 🚗 俱乐部赛车                     │
│ [4辆车] [🎫 0] [🚗 0/4] ← 绿色     │
└──────────────────────────────────┘
```

---

**✅ 修复完成！现在每个账号都有独立的发车次数限制，互不影响！刷新页面（Ctrl + F5）测试吧！**

