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

8.5 KiB
Raw Permalink Blame History

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

📋 问题描述

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

用户反馈

明明我的四辆跑车都是待发车的状态为什么不能发车好像是上一个token的号发过车限制4个车就满了现在这个号的车就不能发了

🔍 问题分析

问题现象

当前账号状态:
- 车辆1: 待发车 ✓
- 车辆2: 待发车 ✓
- 车辆3: 待发车 ✓
- 车辆4: 待发车 ✓

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

根本原因

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

// 旧版本 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

// 新版本 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 监听器,自动切换计数器:

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 数据结构

// 账号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。

如需手动清理旧数据(可选),可在浏览器控制台执行:

// 清理旧版本的全局计数器
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 监听逻辑

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

🚀 使用说明

查看当前账号计数(调试用)

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`)

清除指定账号的计数(调试用)

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()  // 刷新页面

清除所有账号的计数(调试用)

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测试吧