# 宝锐生物销售工作台 QA 报告

> **质检时间**：2026-07-26 16:00  
> **质检范围**：v2.0 MCP 实时数据版  
> **质检人**：Hermes Agent

---

## 一、总体评估

| 项 | 状态 | 说明 |
|----|------|------|
| 登录 | ✅ | 管理员密码登录正常 |
| 飞书免登 | ✅ | OAuth 跳转已部署 |
| Tab 切换 | ✅ | 8 个 Tab 正常跳转 |
| 自动刷新 | ✅ | 5 分钟定时器已加 |
| 数据加载 | ⚠️ | Tunnel 波动时降级到本地 JSON |

---

## 二、Bug 修复清单

### 已修复

| # | Bug | 根因 | 状态 |
|---|-----|------|:--:|
| 1 | 页面一直"加载中" | `refreshData()` 重复声明 JS 报错 | ✅ |
| 2 | 订单搜索框卡顿 | 每次按键全页重渲染，DOM 销毁 | ✅ |
| 3 | 客诉页面空数据无提示 | 无空状态处理，`filtered.map().join()` 空串 | ✅ |
| 4 | MCP 字段不兼容 | MCP 用 `field_5ed7ab`，旧格式用 `dept` | ✅ |

---

## 三、客诉页面分析

### 原因

飞书项目 `6593cd71471290e3cc6be6e6` 的 `issue`（缺陷）表中**没有任何记录**。

```
MQL: SELECT name,work_item_id FROM `6593cd71471290e3cc6be6e6`.`issue`
结果：list=null, data={}（0 条）
```

### 修复

添加空状态提示："✅ 暂无客诉记录，客诉数据来自飞书项目缺陷表，当前无未关闭的客诉工单"

---

## 四、数据准确性核查

### 4.1 看板 KPI

| 指标 | 值 | 来源 | 准确？ |
|------|-----|------|:--:|
| 年度目标 | 6,950 万 | `kpi_dashboard.json` | ✅ |
| H1 累计达成 | 2,164 万 | `kpi_dashboard.json` | ✅ |
| 达成率 | 31.1% | 计算 | ✅ |
| 7月实际 | 189.6 万 | `kpi_progress.json` | ✅ |
| 客户数 | 1,678 | MCP（实时） | ✅ |
| 联系人 | 7,723 | `shipment_status.json` | ✅ |
| 价税合计 | 2,303.9 万 | `shipment_status.json` | ✅ |

### 4.2 订单数据

| 数据 | 来源 | 状态 |
|------|------|:--:|
| 订单管理 Tab | `shipment_status.json`（343条） | ✅ 未受影响 |
| MCP 实时订单 | `GET /api/mcp/orders`（2,500条） | ⚠️ 加载到 `state.data.orders` 但订单 Tab 未使用 |
| MCP→旧格式映射 | `field_2d6367→customer` 等 | ✅ 已适配 |

### 4.3 客户数据

| 数据 | 来源 | 问题 |
|------|------|------|
| 客户列表 Tab | `mcp_customers.json`（本地） | ✅ 正常 |
| 客户筛选（`getFilteredCustomers`） | MCP API（通过 `customers` key） | ⚠️ `total`/`sales_2024`/`sales_2025`/`sales_2026` 均为 0 |
| 客户 Top 10 | 同上 | ⚠️ 销售金额显示为 0 |

### ⚠️ 重要：MCP 客户数据缺少销售金额

旧 `_key_customers.json` 是经过 ERP Excel 加工后的数据，包含 `total`(累计销售)、`sales_2024`、`sales_2025`、`sales_2026` 等计算字段。MCP 客户表只有基础属性（等级、行业、所在地、部门），**没有销售金额**。

这导致：
- 看板「客户 Top 10」→ 全部显示 0
- 「三年对比」→ 客户维度无金额
- 客户列表不显示销售额

**建议**：保留 `_key_customers.json` 作为客户主数据源（或从 MCP 订单聚合计算销售额）。

---

## 五、基础设施问题

### Tunnel 稳定性

| 时间 | 事件 |
|------|------|
| 11:15 | Tunnel 启动 `board-celebrate-...` |
| 16:01 | Tunnel 无响应（进程存活但空返回） |
| 16:02 | 重启，新 URL `drug-round-concert-...` |
| 16:03 | DNS 未解析（等待传播中） |

**风险**：Tunnel 每次重启 URL 随机变化，需手动更新前端代码+重新部署。DNS 传播有延迟。

**建议**：使用 Cloudflare 固定域名或 frp/ngrok 等稳定方案。

---

## 六、角色权限验证

| 角色 | 看板 | 客户 | 订单 | 活动 | 数据范围 |
|------|:--:|:--:|:--:|:--:|------|
| 刘新元 (admin) | ✅ | ✅ | ✅ | ✅ | 全量 |
| 刘欣 (manager) | ⚠️ | ⚠️ | ⚠️ | ⚠️ | 需实际登录测试 |
| 陈溪子 (sales) | — | — | — | — | 需实际登录测试 |

**说明**：通过代码审查确认权限逻辑正确（`getFilteredCustomers`、`getShipmentOrders` 的 `USER_DEPTS` 过滤），但未做实际多角色登录端到端测试。

---

## 七、建议优先级

| 优先级 | 问题 | 建议 |
|:--:|------|------|
| 🔴 高 | 客户销售金额为 0 | 从 MCP 订单聚合销售数据，或保持 `_key_customers.json` 作为主数据源 |
| 🔴 高 | Tunnel URL 不稳定 | 使用固定域名方案 |
| 🟡 中 | 订单 Tab 未使用 MCP 数据 | 统一数据源（`state.data.orders` → `getShipmentOrders`） |
| 🟡 中 | 缺少多角色端到端测试 | 逐角色登录验证数据过滤 |
| 🟢 低 | 客诉表为空 | 正常（项目无缺陷），已加提示 |
