Files
xyzw_web_helper/MD说明文件夹/问题修复-发车次数按账号独立计数v3.8.1.md
2025-10-17 20:56:50 +08:00

293 lines
8.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 问题修复-发车次数按账号独立计数 v3.8.1
## 📋 问题描述
用户切换到新账号后发现4辆待发车的车都无法发送提示"今日发车次数已达上限: 4/4"。
**用户反馈**
> 明明我的四辆跑车都是待发车的状态为什么不能发车好像是上一个token的号发过车限制4个车就满了现在这个号的车就不能发了
## 🔍 问题分析
### 问题现象
```
当前账号状态:
- 车辆1: 待发车 ✓
- 车辆2: 待发车 ✓
- 车辆3: 待发车 ✓
- 车辆4: 待发车 ✓
但点击"一键发车"时:
⚠️ 今日发车次数已达上限: 4/4跳过发送步骤
```
### 根本原因
**v3.8.0 版本的 localStorage key 设计有缺陷**
```javascript
// 旧版本 keyv3.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
```
账号Atoken_123:
- 发送4辆车
- localStorage['car_daily_send_count_2025/01/08'] = "4"
切换账号 →
账号Btoken_456:
- 读取 localStorage['car_daily_send_count_2025/01/08'] → "4"
- 计数器: 4/4
- 提示: "今日发车次数已达上限" ❌
- 无法发送任何车辆
```
## ✅ 解决方案
### 1. **localStorage Key 增加 TokenId**
```javascript
// 新版本 keyv3.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
```
账号Atoken_123:
- 发送4辆车
- localStorage['car_daily_send_count_2025/01/08_token_123'] = "4"
- 计数器: 4/4 ✓
切换账号 →
账号Btoken_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 →
账号Atoken_123:
- 读取 localStorage['car_daily_send_count_2025/01/08_token_123'] → "4"
- 计数器: 4/4 ✓
- 今日已发满,无法继续发车 ✓
```
## 📊 新增日志
### 初始化日志
```
🚗 初始化发车计数: 0/4今日: 2025/1/8Token: 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测试吧**