# 客户档案页面架构模式

## 双视图设计

### 列表视图（首页）
- 搜索栏 + 部门筛选
- KPI 总览卡片（客户数、累计采购额）
- 客户清单表格：客户名 | 累计采购 | 决策链 | 联系人 | 商机 | 项目 | 客诉
- 📥 CSV 导出按钮（BOM头，Excel友好）
- 点击行 → 进入档案详情

### 详情视图
- 暗色 Hero：客户名 + 4个KPI（采购额/订单数/级别/决策链状态）
- IMA风格统计卡片行：👤联系人(蓝) | 💼商机(玫红) | 🏗️项目(绿) | 🔴客诉(橙)
- 3列网格面板布局
- 全宽决策链面板（3:2画板:集团列表，1200px高度）
- 待办事项面板（底部全宽）

## 决策链 iframe 嵌入模式

直接嵌入飞书Wiki画板，用户可在档案页内编辑：
```html
<iframe src="{wiki_url}" style="width:100%;height:1200px;border:none"
  sandbox="allow-same-origin allow-scripts allow-forms allow-popups"></iframe>
```
- ⚠️ 需要用户浏览器已登录飞书（iframe复用登录态）
- ⚠️ 远程/headless浏览器无法使用（显示登录页）
- 决策链面板全宽 + 右侧集团客户列表（3:2比例）

## 价格单位显示

从ERP "销售单位" 列提取单位（ml, U, 包, 只, 瓶等）：
- 全量扫描3年ERP数据（73,000+行）→ 6,729个SKU→单位映射
- 价格显示格式：`175.00/ml`、`2400.00/ml`
- 无单位的SKU显示原始价格

```python
# 单位映射生成
units = {}
for year, fp in [('2024',...), ('2025',...), ('2026H1',...)]:
    df = pd.read_excel(fp, sheet_name='Sheet1')
    for _, r in df.iterrows():
        sku = r.get('货号#', r.get('物料编码', ''))
        unit = str(r['销售单位'])
        if sku != 'nan' and unit != 'nan':
            units.setdefault(sku, Counter())[unit] += 1
unit_map = {sku: cnt.most_common(1)[0][0] for sku, cnt in units.items()}
```

## 数据预生成策略

- **关键客户索引** (_key_customers.json)：仅大客户部89家客户
- **全量档案** (profiles/*_full.json)：75家有ERP数据的KA客户
- **批量生成防崩溃**：每个mcp()返回值做None检查 + existing set跳过已生成
- **续跑策略**：崩溃后修复脚本直接续跑，不重跑已完成的部分

## 待办事项

- localStorage 按客户隔离：`cust_todos_{客户名}`
- 增/删/勾选，无后端依赖
