# 问题处理：统计页面 JavaScript 错误

## 文档信息

- 创建时间：2026-07-22
- 问题来源：用户反馈
- 关联模块：service_monitor/statistics

---

## 1. 问题描述

### 错误信息

```
statistics:349 Uncaught ReferenceError: fetchAllData is not defined
    at HTMLButtonElement.onclick (statistics:349:60)
```

### 触发条件

打开监测统计页面后，点击"查询"按钮触发错误。

---

## 2. 根因分析

### 代码残留问题

在编辑 `statistics.html` 时，替换 `fetchItemKeys` 函数后，旧代码片段未被完全删除，导致：

**问题代码（第 330-333 行）**：
```javascript
        });
        if (current) sel.value = current;
    } catch (e) { console.error('fetchItemKeys error:', e); }
}
```

这段代码是旧版 `fetchItemKeys` 函数的尾部残留，它：
1. 错误闭合了新 `fetchItemKeys` 函数
2. 导致后续 `fetchItemTrend`、`fetchAllData` 等函数定义在错误的函数体内
3. 最终 `fetchAllData` 在全局作用域不可见

### 根本原因

编辑时使用 `Edit` 工具替换函数，但 `old_string` 未精确匹配旧代码的完整范围，只替换了函数开头，尾部残留。

---

## 3. 影响范围

| 影响 | 说明 |
|------|------|
| 统计页面完全不可用 | 所有 API 调用失败 |
| 查询按钮点击报错 | `fetchAllData` 未定义 |
| 模块选择器不联动 | `onModuleChange` 可能受影响 |

---

## 4. 修复方案

### 方案：删除残留代码

删除第 330-333 行的残留代码，确保 `fetchItemKeys` 函数正确闭合。

**修复前（第 298-334 行）**：
```javascript
        }
    } catch (e) { console.error('fetchItemKeys error:', e); }
}

// 模块选择变化时，更新检测项选择器
function onModuleChange() {
    ...
}
        });  // ← 残留开始
        if (current) sel.value = current;
    } catch (e) { console.error('fetchItemKeys error:', e); }
}

// 检测项趋势
```

**修复后**：
```javascript
        }
    } catch (e) { console.error('fetchItemKeys error:', e); }
}

// 模块选择变化时，更新检测项选择器
function onModuleChange() {
    ...
}

// 检测项趋势
```

---

## 5. 预防措施

1. **编辑前完整阅读原代码**：确保 `old_string` 匹配完整的函数范围
2. **编辑后检查文件完整性**：查看修改后的文件是否有语法错误
3. **本地测试后再部署**：在浏览器控制台验证无 JS 错误

---

## 6. 验收标准

| 标准 | 验证方法 |
|------|---------|
| 页面无 JavaScript 错误 | 打开浏览器控制台检查 |
| 查询按钮正常工作 | 点击查询，数据刷新 |
| 模块选择器联动正常 | 选择模块后检测项填充 |
| 趋势图表正常显示 | 选择检测项后图表渲染 |