# app.html ↔ index.html 同步清单

> 每次修改看板/KPI相关代码，必须双文件同步。这是 T6 的过渡方案。

## 修改顺序

改看板代码时，**先改 index.html，验证后再改 app.html**。原因：index.html 在 CloudBase 上，用户直接访问；app.html 在本地 8765，验证更方便。

验证步骤：
1. 本地 `curl -s http://127.0.0.1:8765/工具/app.html | grep -c "改动关键字"` 确认
2. CloudBase `curl -s -H "Cache-Control: no-cache" https://.../workbench/index.html | grep -c "改动关键字"` 确认
3. 两个都 OK 才算完成

## 当前差异（2026-08-09）

| 模块 | index.html (CloudBase) | app.html (飞书) | 同步状态 |
|------|----------------------|-----------------|:--:|
| getKPI() admin | ✅ 已更新 | ✅ 已更新 | ✅ |
| getKPI() non-admin | ✅ 已更新 | ✅ 已更新 | ✅ |
| 当月数据源 | ✅ current优先 | ✅ current优先 | ✅ |
| deptBarHtml 拆分 | ✅ 已添加 | ✅ 已添加 | ✅ |
| 筛选器 | ✅ 有 | ❌ 无 | 差异 |
| stats-grid | ❌ 无 | ✅ 有 | 差异 |
| 月度趋势图 | ✅ 有 | ✅ 有 | ✅ |
| H2目标vs实际 | ✅ 有 | ✅ 有 | ✅ |
| 飞书免登 | ❌ 无 | ✅ 有 | 差异（不动） |
| 登录方式 | CloudBase | CloudBase + 飞书免登 | 差异 |

## 长期方案（T6 完成时）

将共享逻辑抽为 `/工具/js/kpi-core.js`，两个页面通过 `<script src="js/kpi-core.js">` 加载。保留差异点作为参数传入。

需要抽取的公共函数：
- `getKPI()` — KPI 计算核心
- `deptBarHtml()` — 三部门拆分渲染
- `colorByRate()` — 达成率配色
- `fmtW()` — 金额格式化
- 三卡片渲染逻辑
