1.0
This commit is contained in:
245
MD说明文件夹/问题修复-每日发车次数限制v3.8.0.md
Normal file
245
MD说明文件夹/问题修复-每日发车次数限制v3.8.0.md
Normal file
@@ -0,0 +1,245 @@
|
||||
# 问题修复-每日发车次数限制 v3.8.0
|
||||
|
||||
## 📋 问题描述
|
||||
|
||||
每日发车4辆限制功能未生效,所有4辆车都能发送成功,没有触发限制。
|
||||
|
||||
## 🔍 问题分析
|
||||
|
||||
通过日志分析发现:
|
||||
|
||||
1. **计数增加正常**:每次发送成功后,`dailySendCount` 会正确增加
|
||||
```
|
||||
✅ 今日发车次数更新: 1/4
|
||||
```
|
||||
|
||||
2. **计数被重置**:但紧接着调用 `queryClubCars()` 时,会从服务器响应中读取 `sendCount` 字段
|
||||
```
|
||||
🚗 今日已发车次数: 0 // 服务器返回的值始终为0
|
||||
```
|
||||
|
||||
3. **覆盖客户端值**:`dailySendCount.value = sendCount` 将客户端计数重置为0
|
||||
|
||||
### 执行流程(问题版本)
|
||||
```
|
||||
发送第1辆 → 计数+1 → 查询 → 服务器返回0 → 计数重置为0
|
||||
发送第2辆 → 计数+1 → 查询 → 服务器返回0 → 计数重置为0
|
||||
发送第3辆 → 计数+1 → 查询 → 服务器返回0 → 计数重置为0
|
||||
发送第4辆 → 计数+1 → 查询 → 服务器返回0 → 计数重置为0
|
||||
```
|
||||
|
||||
### 根本原因
|
||||
服务器的 `roleCar.sendCount` 字段可能:
|
||||
- 不存在或位置不对
|
||||
- 或者服务器确实没有维护这个字段
|
||||
|
||||
## ✅ 解决方案
|
||||
|
||||
### 1. **客户端维护计数**
|
||||
不再完全依赖服务器返回的 `sendCount`,改为客户端自己维护,只在特定情况下更新:
|
||||
|
||||
```javascript
|
||||
// 只有当服务器返回的值更大时,才更新客户端计数
|
||||
if (response.roleCar.sendCount !== undefined && response.roleCar.sendCount !== null) {
|
||||
if (response.roleCar.sendCount > dailySendCount.value) {
|
||||
dailySendCount.value = response.roleCar.sendCount
|
||||
saveDailySendCount(dailySendCount.value)
|
||||
console.log('🚗 从服务器更新今日发车次数:', dailySendCount.value)
|
||||
} else {
|
||||
console.log(`🚗 保持客户端发车次数: ${dailySendCount.value}(服务器值: ${response.roleCar.sendCount})`)
|
||||
}
|
||||
} else {
|
||||
console.log('🚗 服务器未返回sendCount,保持客户端计数:', dailySendCount.value)
|
||||
}
|
||||
```
|
||||
|
||||
### 2. **localStorage 持久化**
|
||||
将发车次数保存到 localStorage,按日期区分:
|
||||
|
||||
```javascript
|
||||
// 生成今日的存储key
|
||||
const STORAGE_KEY_PREFIX = 'car_daily_send_count_'
|
||||
const getTodayKey = () => {
|
||||
const today = new Date().toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })
|
||||
return `${STORAGE_KEY_PREFIX}${today}` // 例如: car_daily_send_count_2025/01/08
|
||||
}
|
||||
|
||||
// 从localStorage加载
|
||||
const loadDailySendCount = () => {
|
||||
try {
|
||||
const savedCount = localStorage.getItem(getTodayKey())
|
||||
return savedCount ? parseInt(savedCount, 10) : 0
|
||||
} catch (error) {
|
||||
console.error('读取发车次数失败:', error)
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
// 保存到localStorage
|
||||
const saveDailySendCount = (count) => {
|
||||
try {
|
||||
localStorage.setItem(getTodayKey(), count.toString())
|
||||
console.log(`💾 已保存今日发车次数: ${count}`)
|
||||
} catch (error) {
|
||||
console.error('保存发车次数失败:', error)
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 3. **发送成功后持久化**
|
||||
每次发送成功后,立即保存到 localStorage:
|
||||
|
||||
```javascript
|
||||
if (response) {
|
||||
dailySendCount.value++
|
||||
saveDailySendCount(dailySendCount.value) // 持久化
|
||||
message.success(`车辆 ${carId} 发送成功(今日已发${dailySendCount.value}/4)`)
|
||||
await queryClubCars()
|
||||
}
|
||||
```
|
||||
|
||||
## 🎯 修复效果
|
||||
|
||||
### 执行流程(修复版本)
|
||||
```
|
||||
初始化 → 从localStorage加载计数: 0/4
|
||||
|
||||
发送第1辆 → 计数+1 → 保存到localStorage → 查询
|
||||
→ 服务器返回0 → 判断0 < 1 → 保持客户端计数1
|
||||
|
||||
发送第2辆 → 计数+1 → 保存到localStorage → 查询
|
||||
→ 服务器返回0 → 判断0 < 2 → 保持客户端计数2
|
||||
|
||||
发送第3辆 → 计数+1 → 保存到localStorage → 查询
|
||||
→ 服务器返回0 → 判断0 < 3 → 保持客户端计数3
|
||||
|
||||
发送第4辆 → 计数+1 → 保存到localStorage → 查询
|
||||
→ 服务器返回0 → 判断0 < 4 → 保持客户端计数4
|
||||
→ 达到上限!
|
||||
|
||||
尝试发送第5辆 → 检查计数4 >= 4 → 拦截!
|
||||
→ 提示: "今日发车次数已达上限(4/4),明天再来吧!"
|
||||
```
|
||||
|
||||
## 📊 新增日志
|
||||
|
||||
### 初始化日志
|
||||
```
|
||||
🚗 初始化发车计数: 0/4(今日: 2025/1/8)
|
||||
```
|
||||
|
||||
### 发送过程日志
|
||||
```
|
||||
🚀 开始发送车辆,ID: 11p3-7462375(今日已发0/4)
|
||||
🚀 车辆发送成功,ID: 11p3-7462375
|
||||
✅ 今日发车次数更新: 1/4
|
||||
💾 已保存今日发车次数: 1
|
||||
🚗 保持客户端发车次数: 1(服务器值: 0)
|
||||
```
|
||||
|
||||
### 达到上限日志
|
||||
```
|
||||
⚠️ 今日发车次数已达上限: 4/4
|
||||
```
|
||||
|
||||
## 🔧 技术细节
|
||||
|
||||
### localStorage 数据结构
|
||||
```javascript
|
||||
// Key 格式
|
||||
car_daily_send_count_2025/01/08
|
||||
|
||||
// Value
|
||||
"4" // 字符串格式
|
||||
```
|
||||
|
||||
### 跨日期自动重置
|
||||
由于 localStorage key 包含日期,不同日期会自动使用不同的key,实现自动重置:
|
||||
```
|
||||
2025/01/08: car_daily_send_count_2025/01/08 → 4
|
||||
2025/01/09: car_daily_send_count_2025/01/09 → 0 (新的一天,自动重置)
|
||||
```
|
||||
|
||||
## 🎨 UI 变化
|
||||
|
||||
### 未达上限(0-3辆)
|
||||
```
|
||||
[🚗 2/4] // 绿色徽章
|
||||
```
|
||||
|
||||
### 已达上限(4辆)
|
||||
```
|
||||
[🚗 4/4] // 红色徽章 + 闪烁动画
|
||||
```
|
||||
|
||||
## 🧪 测试场景
|
||||
|
||||
### 场景1:正常发车
|
||||
1. 初始计数:0/4
|
||||
2. 一键发车(4辆待发)
|
||||
3. 成功发送4辆
|
||||
4. 计数更新为:4/4
|
||||
5. UI显示红色徽章并闪烁
|
||||
|
||||
### 场景2:达到上限后尝试发送
|
||||
1. 当前计数:4/4
|
||||
2. 点击"🚀发送"按钮
|
||||
3. **拦截成功**:提示"今日发车次数已达上限(4/4),明天再来吧!"
|
||||
4. 未执行发送操作
|
||||
|
||||
### 场景3:刷新页面后
|
||||
1. 发送3辆车后刷新页面
|
||||
2. 计数从 localStorage 恢复:3/4
|
||||
3. 可以继续发送1辆车
|
||||
4. 第2辆被拦截
|
||||
|
||||
### 场景4:跨日期重置
|
||||
1. 2025/01/08 发送4辆(4/4)
|
||||
2. 第二天(2025/01/09)打开页面
|
||||
3. 计数自动重置为 0/4
|
||||
4. 可以继续发送4辆车
|
||||
|
||||
## 📝 相关文件
|
||||
|
||||
### 修改的文件
|
||||
- `src/components/CarManagement.vue`
|
||||
- 添加 `loadDailySendCount()` 函数
|
||||
- 添加 `saveDailySendCount()` 函数
|
||||
- 添加 `getTodayKey()` 函数
|
||||
- 修改 `queryClubCars()` 中的计数更新逻辑
|
||||
- 修改 `sendCar()` 添加持久化调用
|
||||
|
||||
### 新增文件
|
||||
- `MD说明/问题修复-每日发车次数限制v3.8.0.md`
|
||||
|
||||
## 🔄 版本信息
|
||||
|
||||
- **版本号**: v3.8.0
|
||||
- **修复日期**: 2025-01-08
|
||||
- **修复内容**:
|
||||
- 修复每日发车次数限制未生效的问题
|
||||
- 添加 localStorage 持久化功能
|
||||
- 优化计数更新逻辑,避免被服务器覆盖
|
||||
|
||||
## 🚀 使用说明
|
||||
|
||||
### 清除计数(调试用)
|
||||
如需手动重置今日发车次数,可在浏览器控制台执行:
|
||||
|
||||
```javascript
|
||||
// 清除今日计数
|
||||
const today = new Date().toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })
|
||||
localStorage.removeItem(`car_daily_send_count_${today}`)
|
||||
location.reload() // 刷新页面
|
||||
```
|
||||
|
||||
### 查看计数(调试用)
|
||||
```javascript
|
||||
const today = new Date().toLocaleDateString('zh-CN', { year: 'numeric', month: '2-digit', day: '2-digit' })
|
||||
console.log('今日发车次数:', localStorage.getItem(`car_daily_send_count_${today}`))
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**✅ 修复完成!刷新页面(Ctrl + F5)后,每日发车4辆限制将正常工作!**
|
||||
|
||||
Reference in New Issue
Block a user