# P9→NS1/RNS1 缺失项 #2：助教详情页档位进度时间轴的视觉规范

## 简要结论
- 状态：⚠️ 部分解决
- 风险等级：🟠 中
- 已实现 `perf-progress-bar` 进度条组件（含渐变填充、刻度标记、高光/火花动画），但非 P9 定义的"时间轴"样式，缺少当前档位高亮节点和升档动画。

## 详细审查

### 审查范围
- `apps/backend/app/schemas/xcx_coaches.py` — `tier_nodes` 字段定义
- `apps/backend/app/services/coach_service.py` — `_build_tier_nodes()` 实现
- `apps/miniprogram/miniprogram/components/perf-progress-bar/` — 进度条组件
- `apps/miniprogram/miniprogram/pages/coach-detail/coach-detail.wxml` — 绩效概览区域
- `apps/miniprogram/miniprogram/pages/coach-detail/coach-detail.ts` — 进度条数据构建

### 发现

1. **后端：tier_nodes 数据已返回**
   - `CoachDetailResponse.tier_nodes: list[float]` 已定义
   - `_build_tier_nodes()` 从配置表读取档位节点

2. **前端：进度条组件已实现，但非时间轴**
   - `perf-progress-bar` 组件实现了水平进度条，含：
     - 渐变填充条（`ppb-fill` + `ppb-gradient-bar`）
     - 刻度标记（`ppb-ticks`，由 `ticks` 数组动态渲染）
     - 高光动画（`ppb-shine`）和火花动画（`ppb-spark`）
     - 当前档位高亮（`ppb-tick--done` class）
   - 但这是**水平进度条**，非 P9 定义的**垂直时间轴**样式
   - 缺少 P9 定义的"档位节点"（tierNodes）的时间轴展示（如里程碑节点、连接线、当前位置标记）

3. **动画已实现但非"升档动画"**
   - 高光（shine）和火花（spark）是循环播放的装饰动画
   - 非 P9 定义的"升档时触发的庆祝动画"

4. **前端 tier_nodes 未使用 API 数据**
   - `coach-detail.ts` 中 `tierNodes` 硬编码为 `[0, 100, 130, 160, 190, 220]`，注释标注 "Mock，实际由接口返回"
   - API 返回的 `tier_nodes` 未被前端消费

### 证据

前端硬编码 tierNodes：
```typescript
const tierNodes = [0, 100, 130, 160, 190, 220]  // Mock，实际由接口返回
```

进度条组件刻度渲染（水平进度条，非时间轴）：
```html
<view class="ppb-ticks">
  <text wx:for="{{ticks}}" wx:key="value"
    class="ppb-tick {{currentTier >= index ? 'ppb-tick--done' : ''}}">
    {{item.label}}
  </text>
</view>
```

### 建议（如未完全解决）
1. 将前端 `tierNodes` 改为使用 API 返回的 `detail.tierNodes` 数据
2. 如需时间轴样式，新建 `tier-timeline` 组件，展示垂直时间轴（里程碑节点 + 连接线 + 当前位置）
3. 添加升档动画：当 `currentTier` 变化时触发一次性庆祝效果
