# 俱乐部信息调试优化 v2.1.1

## 📅 更新时间
2025-10-12 21:40

## 🎯 问题描述

### 问题1：月度任务调试日志强制输出
**现象**：
- 月度任务的关键日志使用 `console.log` 强制输出，无法通过日志开关控制
- 导致即使关闭月度任务日志，仍然会在控制台看到大量输出

**代码位置**：`src/components/GameStatus.vue` - `fetchMonthlyActivity` 函数

### 问题2：俱乐部信息无法刷新显示
**现象**：
- 点击"刷新"按钮后，控制台显示已收到 `legion_getinfo` 响应
- 但俱乐部信息界面没有显示数据
- 日志显示重复发送了多次 `legion_getinfo` 命令

**可能原因**：
1. 数据存储到 `gameData.legionInfo` 后没有触发响应式更新
2. ClubInfo 组件的 computed 没有正确监听数据变化
3. 数据结构解析错误

---

## ✅ 解决方案

### 1. 月度任务日志可控化

#### 修改前（强制输出）：
```javascript
// 强制输出关键日志（不受开关控制）
console.log('📤 [月度任务] 即将调用 sendMessageWithPromise')
console.log('📋 [月度任务] 参数:', { tokenId, cmd: 'activity_get', params: {}, timeout: 10000 })

const result = await tokenStore.sendMessageWithPromise(tokenId, 'activity_get', {}, 10000)

console.log('📥 [月度任务] sendMessageWithPromise 返回成功')
console.log('📊 [月度任务] 返回结果:', result)
```

#### 修改后（可控制）：
```javascript
monthLog('📤 [月度任务] 准备发送 activity_get 命令')
monthLog('📋 [月度任务] 命令参数:', { cmd: 'activity_get', params: {} })
monthLog('📤 [月度任务] 即将调用 sendMessageWithPromise')
monthLog('📋 [月度任务] 参数:', { tokenId, cmd: 'activity_get', params: {}, timeout: 10000 })

const result = await tokenStore.sendMessageWithPromise(tokenId, 'activity_get', {}, 10000)

monthLog('📥 [月度任务] sendMessageWithPromise 返回成功')
monthLog('📊 [月度任务] 返回结果:', result)
monthLog('📥 [月度任务] 收到原始响应:', result)
```

#### 其他优化：
```javascript
// 检查1: Token是否选中
if (!tokenStore.selectedToken) {
  monthWarn('⚠️ [月度任务] Token未选中')
  monthWarn('⚠️ [月度任务] 请先在Token管理页面选择一个Token')  // 改为 monthWarn
  message.warning('请先选择Token')
  return
}

// 检查2: WebSocket连接状态
if (status !== 'connected') {
  monthWarn('⚠️ [月度任务] WebSocket未连接，当前状态:', status)
  monthWarn('💡 [月度任务] 解决方案: 请先在"游戏功能"页面等待WebSocket连接建立（显示"已连接"）')  // 改为 monthWarn
  message.error('WebSocket未连接，请先建立连接')
  return
}

// 错误捕获
catch (e) {
  monthError('❌ [月度任务] 最外层捕获错误')  // 改为 monthError
  monthError('📝 [月度任务] 错误类型:', e.constructor.name)
  monthError('📝 [月度任务] 错误消息:', e.message)
  monthError('📝 [月度任务] 错误堆栈:', e.stack)
  monthError('❌ [月度任务] 获取失败')
  monthError('📝 [月度任务] 错误详情:', {
    message: e.message,
    name: e.name,
    stack: e.stack
  })
  monthWarn('💡 [月度任务] 获取失败，请稍后重试或检查网络连接')  // 改为 monthWarn
}
```

**修改文件**：`src/components/GameStatus.vue`

---

### 2. 俱乐部信息调试增强

#### tokenStore 增强日志
**文件**：`src/stores/tokenStore.js`

```javascript
// 处理军团信息
else if (cmd === 'legion_getinfo') {
    if (body) {
        gameData.value.legionInfo = body
        log.debug('🏛️ 军团信息已更新:', {
            hasInfo: !!body.info,
            clubName: body.info?.name,
            memberCount: body.info?.members ? Object.keys(body.info.members).length : 0
        })
        console.log('🏛️ [俱乐部] 军团信息已更新:', body)  // 强制输出，用于调试
    }
}
```

#### ClubInfo 组件增强调试
**文件**：`src/components/ClubInfo.vue`

```javascript
import { ref, computed, watch } from 'vue'
import { useTokenStore } from '@/stores/tokenStore'
import ClubBattleRecords from './ClubBattleRecords.vue'

const tokenStore = useTokenStore()

// 增强调试的 computed
const info = computed(() => {
  const legionInfo = tokenStore.gameData?.legionInfo || null
  console.log('🏛️ [俱乐部] legionInfo computed:', legionInfo)  // 调试日志
  return legionInfo
})

const club = computed(() => {
  const clubInfo = info.value?.info || null
  console.log('🏛️ [俱乐部] club computed:', clubInfo)  // 调试日志
  return clubInfo
})

// 监听俱乐部信息变化
watch(() => tokenStore.gameData?.legionInfo, (newVal) => {
  console.log('🏛️ [俱乐部] legionInfo 变化:', newVal)  // 调试日志
}, { deep: true })
```

---

## 🔍 调试流程

### 刷新页面后检查日志：

1. **tokenStore 日志**：
   ```
   🏛️ [俱乐部] 军团信息已更新: {info: {...}, firstMonthDate: '2022/08/28', ...}
   ```
   ✅ 确认数据已存储到 `gameData.legionInfo`

2. **ClubInfo 组件日志**：
   ```
   🏛️ [俱乐部] legionInfo computed: {info: {...}, firstMonthDate: '2022/08/28', ...}
   🏛️ [俱乐部] club computed: {name: '...', members: {...}, ...}
   ```
   ✅ 确认 computed 正确读取数据

3. **watch 监听日志**：
   ```
   🏛️ [俱乐部] legionInfo 变化: {info: {...}, ...}
   ```
   ✅ 确认响应式更新正常

---

## 📋 测试清单

### 月度任务日志控制
- [ ] 关闭月度任务日志开关后，刷新页面无任何月度任务日志
- [ ] 开启月度任务日志开关后，可以看到完整调试日志
- [ ] 点击"刷新进度"按钮，日志正常输出
- [ ] 点击"钓鱼补齐"或"竞技场补齐"，日志正常输出

### 俱乐部信息显示
- [ ] 刷新页面后，俱乐部信息自动加载显示
- [ ] 控制台显示 `🏛️ [俱乐部] 军团信息已更新` 日志
- [ ] 控制台显示 `🏛️ [俱乐部] legionInfo computed` 日志
- [ ] 俱乐部名称、成员、战力等信息正确显示
- [ ] 点击"刷新"按钮，信息正常更新

---

## 🐛 已知问题排查

### 问题：重复发送 `legion_getinfo` 命令

**日志分析**：
```
📤 发送消息: legion_getinfo {}
📤 发送消息: legion_getinfo {}
📤 发送消息: legion_getinfo {}
📤 发送消息: legion_getinfo {}
...（重复多次）
```

**可能原因**：
1. **GameStatus.vue** 的 `onMounted` 钩子中调用了 `legion_getinfo`
2. **ClubInfo.vue** 可能也有自动加载逻辑（待检查）
3. 可能存在循环触发的 watch 或 computed

**排查方法**：
1. 检查 GameStatus.vue 的 `onMounted` 钩子
2. 检查 ClubInfo.vue 是否有 `onMounted` 钩子
3. 检查是否有 watch 监听导致循环调用

---

## 💡 优化建议

### 1. 统一俱乐部数据加载入口
建议只在一个地方加载俱乐部数据，避免重复请求：

**推荐方案**：
- ClubInfo 组件内部负责数据加载
- GameStatus.vue 不再调用 `legion_getinfo`
- 使用缓存机制，避免重复请求

**实现示例**（ClubInfo.vue）：
```javascript
import { ref, computed, onMounted } from 'vue'

const hasFetched = ref(false)

onMounted(() => {
  const token = tokenStore.selectedToken
  if (token && !hasFetched.value) {
    const wsStatus = tokenStore.getWebSocketStatus(token.id)
    if (wsStatus === 'connected') {
      tokenStore.sendMessage(token.id, 'legion_getinfo')
      hasFetched.value = true
    }
  }
})
```

### 2. 添加俱乐部日志控制开关
类似月度任务，添加可控制的日志开关：

**batchTaskStore.js**：
```javascript
logConfig: {
  // ... 其他配置
  monthlyTask: false,
  clubInfo: false,  // 新增
}
```

**ClubInfo.vue**：
```javascript
const clubLog = (...args) => {
  if (batchTaskStore.logConfig.clubInfo) {
    console.log(...args)
  }
}

const clubWarn = (...args) => {
  if (batchTaskStore.logConfig.clubInfo) {
    console.warn(...args)
  }
}
```

**BatchTaskPanel.vue**：
```vue
<n-switch v-model:value="batchStore.logConfig.clubInfo">
  <template #checked>俱乐部日志已开启</template>
  <template #unchecked>俱乐部日志已关闭</template>
</n-switch>
```

---

## 📝 修改文件清单

### 已修改文件（2个）
1. **`src/components/GameStatus.vue`**
   - 将所有强制 `console.log/warn/error` 改为 `monthLog/monthWarn/monthError`
   - 确保所有月度任务日志都可通过开关控制

2. **`src/stores/tokenStore.js`**
   - `legion_getinfo` 响应处理增加调试日志
   - 输出俱乐部名称、成员数量等关键信息

3. **`src/components/ClubInfo.vue`**
   - 增加 `watch` 监听 `legionInfo` 变化
   - 增强 computed 的调试日志输出
   - 帮助排查数据流问题

---

## 🎉 预期效果

### 月度任务
✅ 所有日志完全可控，默认关闭时无任何输出  
✅ 开启日志后可以看到完整的请求/响应流程  
✅ 用户体验更加清爽

### 俱乐部信息
✅ 控制台清晰显示数据流动过程  
✅ 可以快速定位数据是否正确存储  
✅ 可以快速定位组件是否正确读取数据  
✅ 为后续优化提供基础

---

**更新时间**：2025-10-12 21:40  
**修改人员**：Claude Sonnet 4.5  
**状态**：等待测试验证 🚀

