170 lines
4.5 KiB
Markdown
170 lines
4.5 KiB
Markdown
|
|
# 🐛 BUG修复 - 答题日志开关失效 v3.13.5.6
|
|||
|
|
|
|||
|
|
## 📋 问题描述
|
|||
|
|
|
|||
|
|
用户在"日志打印控制"中关闭了"一键答题"的日志开关,但控制台仍然显示大量答题相关的日志信息,例如:
|
|||
|
|
- `📚 正在加载答题数据...`
|
|||
|
|
- `📖 成功加载 XXX 道题目`
|
|||
|
|
- `✅ 找到匹配题目: "..." -> 答案: X`
|
|||
|
|
- `⚠️ 未找到题目匹配: "..."`
|
|||
|
|
- `🔄 答题数据缓存已清除`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🔍 问题原因
|
|||
|
|
|
|||
|
|
答题功能的日志有两个来源:
|
|||
|
|
|
|||
|
|
1. **`batchTaskStore.js`** - 批量任务执行逻辑
|
|||
|
|
- ✅ 已使用 `taskLog('autoStudy', ...)` 正确控制日志
|
|||
|
|
|
|||
|
|
2. **`studyQuestionsFromJSON.js`** - 答题数据加载和匹配逻辑
|
|||
|
|
- ❌ 直接使用 `console.log()` 输出日志,不受日志配置控制
|
|||
|
|
|
|||
|
|
**根本原因**:`studyQuestionsFromJSON.js` 是一个独立的工具模块,没有接入批量任务的日志配置系统。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 修复方案
|
|||
|
|
|
|||
|
|
在 `studyQuestionsFromJSON.js` 中添加日志配置检查函数:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
/**
|
|||
|
|
* 🔧 v3.13.5.6: 获取日志配置
|
|||
|
|
* 检查是否启用答题日志
|
|||
|
|
*/
|
|||
|
|
const shouldLog = () => {
|
|||
|
|
try {
|
|||
|
|
const config = localStorage.getItem('batchTaskLogConfig')
|
|||
|
|
if (config) {
|
|||
|
|
const logConfig = JSON.parse(config)
|
|||
|
|
return logConfig.autoStudy === true
|
|||
|
|
}
|
|||
|
|
} catch (e) {
|
|||
|
|
// 如果读取失败,默认不输出日志
|
|||
|
|
}
|
|||
|
|
return false
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
然后将所有的 `console.log/warn/error` 改为条件日志:
|
|||
|
|
|
|||
|
|
```javascript
|
|||
|
|
// 修改前
|
|||
|
|
console.log('📚 正在加载答题数据...')
|
|||
|
|
|
|||
|
|
// 修改后
|
|||
|
|
if (shouldLog()) console.log('📚 正在加载答题数据...')
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📊 修改的日志
|
|||
|
|
|
|||
|
|
修改了以下13处日志输出:
|
|||
|
|
|
|||
|
|
| 类型 | 原日志内容 | 位置 |
|
|||
|
|
|------|-----------|------|
|
|||
|
|
| `console.log` | `📚 正在加载答题数据...` | `loadQuestionsData()` |
|
|||
|
|
| `console.warn` | `标准 JSON.parse 失败,尝试转换...` | `loadQuestionsData()` |
|
|||
|
|
| `console.warn` | `JSON 转换失败,尝试使用 eval 解析` | `loadQuestionsData()` |
|
|||
|
|
| `console.error` | `所有解析方法都失败了` | `loadQuestionsData()` |
|
|||
|
|
| `console.log` | `📖 成功加载 X 道题目` | `loadQuestionsData()` |
|
|||
|
|
| `console.error` | `❌ 加载答题数据失败` | `loadQuestionsData()` |
|
|||
|
|
| `console.warn` | `⚠️ 题目数据为空` | `findAnswer()` |
|
|||
|
|
| `console.log` | `✅ 找到匹配题目...` | `findAnswer()` |
|
|||
|
|
| `console.log` | `⚠️ 未找到题目匹配` | `findAnswer()` |
|
|||
|
|
| `console.error` | `❌ 查找答案时出错` | `findAnswer()` |
|
|||
|
|
| `console.log` | `📚 答题数据预加载完成` | `preloadQuestions()` |
|
|||
|
|
| `console.error` | `❌ 答题数据预加载失败` | `preloadQuestions()` |
|
|||
|
|
| `console.log` | `🔄 答题数据缓存已清除` | `clearCache()` |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🎯 修复效果
|
|||
|
|
|
|||
|
|
### 修复前
|
|||
|
|
```
|
|||
|
|
关闭答题日志开关 ❌
|
|||
|
|
↓
|
|||
|
|
控制台仍然显示:
|
|||
|
|
📚 正在加载答题数据...
|
|||
|
|
📖 成功加载 1500 道题目
|
|||
|
|
✅ 找到匹配题目: "..." -> 答案: 1
|
|||
|
|
✅ 找到匹配题目: "..." -> 答案: 2
|
|||
|
|
...
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 修复后
|
|||
|
|
```
|
|||
|
|
关闭答题日志开关 ✅
|
|||
|
|
↓
|
|||
|
|
控制台清爽无日志 🎉
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📍 如何使用
|
|||
|
|
|
|||
|
|
在批量任务面板中:
|
|||
|
|
|
|||
|
|
1. 点击 **"自定义模板"** 按钮
|
|||
|
|
2. 在弹窗底部找到 **"日志打印控制"**
|
|||
|
|
3. 找到 **"一键答题"** 开关
|
|||
|
|
4. **关闭**开关即可隐藏所有答题相关日志
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📂 修改的文件
|
|||
|
|
|
|||
|
|
- `src/utils/studyQuestionsFromJSON.js`
|
|||
|
|
- 新增 `shouldLog()` 函数(第13-24行)
|
|||
|
|
- 所有 `console.log/warn/error` 改为条件日志(13处)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ✅ 测试建议
|
|||
|
|
|
|||
|
|
1. 关闭答题日志开关
|
|||
|
|
2. 执行一键答题任务
|
|||
|
|
3. 打开控制台(F12)
|
|||
|
|
4. 确认没有答题相关的日志输出
|
|||
|
|
|
|||
|
|
5. 再次打开答题日志开关
|
|||
|
|
6. 执行一键答题任务
|
|||
|
|
7. 确认答题日志正常显示
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 💡 技术说明
|
|||
|
|
|
|||
|
|
### 为什么不导入 batchTaskStore?
|
|||
|
|
|
|||
|
|
考虑过直接导入 `batchTaskStore` 来访问 `logConfig`,但这会造成:
|
|||
|
|
1. **循环依赖**风险(如果 batchTaskStore 引用了这个工具)
|
|||
|
|
2. **Store 初始化时序**问题(工具可能在 Store 之前加载)
|
|||
|
|
3. **模块耦合度**增加
|
|||
|
|
|
|||
|
|
因此采用直接读取 `localStorage` 的方式,优点:
|
|||
|
|
- ✅ 无依赖,独立运行
|
|||
|
|
- ✅ 配置实时生效
|
|||
|
|
- ✅ 读取失败时有默认值(不输出日志)
|
|||
|
|
- ✅ 性能影响极小(只在日志时读取一次)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 📌 版本信息
|
|||
|
|
|
|||
|
|
- **版本号**:v3.13.5.6
|
|||
|
|
- **修复日期**:2025-10-11
|
|||
|
|
- **影响范围**:一键答题功能的日志输出
|
|||
|
|
- **向后兼容**:是
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 🚀 相关问题
|
|||
|
|
|
|||
|
|
如果发现其他任务(如爬塔、补差等)也有类似的日志开关失效问题,请反馈,我们会统一修复。
|
|||
|
|
|