# 宝锐生物销售工作台 · 账号体系与业务线整体规划

> **目标：** 统一两条业务线（诊断原料、生命科学）的账号体系、权限模型、数据隔离逻辑，覆盖正式工作台和测试页面。

**当前状态：** 正式工作台（`index.html`）无业务线区分，测试页面（`app.html`）已实现基础分流。需要系统性规划后逐步统一。

---

## 1. 人员架构全景

### 1.1 组织架构

```
营销中心（何超锦 · gm）
├── 诊断原料销售部（刘新元 · admin）
│   ├── 大客户部（2人）
│   │   ├── 张立娅 · sales
│   │   └── 赵云浩 · sales
│   └── 销售拓展部（经理：刘欣 · manager + 12人）
│       ├── 陈溪子、冯贤平、黄文才、李江辉
│       ├── 林潇、刘虹晶、路要峰、宋学伟
│       ├── 徐卓凡、杨天雄、张文蝶
│       └── 刘欣（经理，兼管）
└── 生命科学销售部（无部门经理，直接向刘新元汇报）
    ├── 浙江区域（4人）
    │   ├── 吴云 · manager（区域经理）
    │   ├── 侯海瑜 · sales
    │   ├── 叶信福 · sales
    │   └── 袁殿果 · sales
    └── 广东区域（4人）
        ├── 韩远怀 · manager（区域经理）
        ├── 王诗香 · sales（实际是区域经理 role）
        ├── 黄建华 · sales
        └── 刘斌 · sales
```

### 1.2 角色定义

| 角色 | role 值 | 数据可见范围 | 管理权限 | 适用人员 |
|------|---------|-------------|---------|---------|
| **超管** | `admin` | 全公司·两条业务线 | ✅ 全部 | 刘新元 |
| **总经理** | `gm` | 全公司·两条业务线（只读） | ❌ | 何超锦 |
| **部门经理** | `manager` | 本部门全量 | ❌ | 刘欣、吴云、韩远怀（王诗香role待确认） |
| **销售员** | `sales` | 仅自己名下 | ❌ | 其余所有人 |

---

## 2. 业务线数据模型差异

| 维度 | 🧬 诊断原料 | 🔬 生命科学 |
|------|------------|------------|
| **客户类型** | 企业/公司（IVD厂商等） | 大学/研究院 → 课题组 |
| **MCP 客户识别** | `field_5ed7ab` = `诊断原料销售拓展部` / `诊断原料大客户销售部` | 不使用客户表！改用 `商机` 视图 `_rz-opbvg` |
| **核心数据单元** | 客户 → 订单 | **课题组（商机 story）** |
| **MCP 订单 dept** | `诊断原料销售拓展部` / `诊断原料大客户销售部` | `浙江` / `广东`（区域标签） |
| **KPI 指标** | 销售额/订单数/回款 | 课题组数/状态分布/转化率 |
| **决策链位置** | 客户层级 | **商机层级** |
| **数据刷新** | `workbench_data.json`（ERP+MCP合并） | `ls_groups.json`（MCP商机视图拉取） |

### 2.1 关键 MCP 字段映射

```
诊断原料客户: 销售管理.客户  WHERE field_5ed7ab IN ('诊断原料销售拓展部','诊断原料大客户销售部')
生命科学课题组: 销售管理.商机  WHERE view = _rz-opbvg
生命科学订单:   销售管理.销售订单 WHERE dept IN ('浙江','广东')
```

---

## 3. 页面矩阵规划

### 3.1 当前页面

| 页面 | CloudBase 路径 | 飞书限制 | 业务线 | 状态 |
|------|---------------|:--:|------|:--:|
| `工具/index.html` | `/workbench/index.html` | ✅ 仅飞书 | 未区分 | 🟢 主力 |
| `工具/landing.html` | `/工具/landing.html` | ❌ 无 | 分流入口 | 🟢 在用 |
| `工具/app.html` | `/工具/app.html` | ❌ 无 | da + ls | 🟡 测试中 |
| `工具/admin.html` | `/admin.html` | ❌ | 超管 | 🟢 在用 |

### 3.2 目标页面矩阵

```
                    ┌─────────────────────┐
                    │   landing.html       │  公网入口·无飞书限制
                    │   "选择业务线"        │
                    └──────┬──────────────┘
                           │
              ┌────────────┴────────────┐
              ▼                         ▼
    ┌─────────────────┐      ┌─────────────────┐
    │  app.html?line=da│      │  app.html?line=ls│  测试版（公网）
    │  🧬 诊断原料      │      │  🔬 生命科学      │
    └─────────────────┘      └─────────────────┘
              │                         │
              │    数据隔离+权限过滤      │
              ▼                         ▼
    ┌─────────────────────────────────────────┐
    │         index.html（飞书工作台）           │  正式版（仅飞书）
    │    登录后自动识别业务线 → da/ls 视图       │
    └─────────────────────────────────────────┘
```

**核心原则：**
- `app.html`：公网可用，快速测试，两个业务线各自独立渲染
- `index.html`：飞书正式入口，登录后根据用户部门自动切业务线视图
- 两者**共享同一套 CloudBase 认证**（`user_roles` 集合）
- 两者**共享同一套权限逻辑**（role-based isolation）

---

## 4. 账号体系设计

### 4.1 CloudBase `user_roles` 集合（唯一认证源）

| 字段 | 类型 | 说明 | 示例 |
|------|------|------|------|
| `name` | string | 姓名 | `刘新元` |
| `email` | string | 邮箱 | `liuxinyuan@biori.com` |
| `pwd` | string | 密码明文（⚠️ 待哈希） | `liuxinyuan` |
| `dept` | string | HR 部门 | `诊断原料销售部` |
| `role` | string | 系统角色 | `admin` / `gm` / `manager` / `sales` |
| `line` | string | **🆕 业务线** | `da` / `ls` / `both` |
| `status` | string | 状态 | `在职` / `离职` |
| `tabs` | object | 可见 Tab 配置 | `{dashboard:true, customers:true}` |

**🆕 新增 `line` 字段：**

```json
{
  "刘新元": "both",     // 超管，可切两条线
  "何超锦": "both",     // gm，可切两条线
  "刘欣": "da",         // 诊断原料拓展部
  "张立娅": "da",       // 大客户部
  "赵云浩": "da",       // 大客户部
  "韩远怀": "ls",       // 生命科学广东
  "王诗香": "ls",       // 生命科学广东
  "吴云": "ls",         // 生命科学浙江
  ...
}
```

### 4.2 登录流程统一

```
┌──────────┐     ┌──────────────┐     ┌────────────────┐
│ 用户输入  │────▶│ CloudBase    │────▶│ 返回 user 对象  │
│ 姓名+密码 │     │ user_roles   │     │ {name,role,    │
└──────────┘     │ 验证 pwd      │     │  dept,line,...}│
                 └──────────────┘     └────────────────┘
                                              │
                          ┌───────────────────┤
                          ▼                   ▼
                   ┌──────────┐        ┌──────────┐
                   │ line=da  │        │ line=ls  │
                   │ or both  │        │ or both  │
                   └──────────┘        └──────────┘
                          │                   │
                          ▼                   ▼
                   诊断原料视图          生命科学视图
```

**index.html 自动分流逻辑（拟）：**
```javascript
// finishLogin 后自动检测
if (user.line === 'both') {
  // admin/gm：显示业务线切换器，默认看 da
  showLineSwitcher();
  currentLine = 'da';
} else {
  // 普通用户：锁定到自己的业务线
  currentLine = user.line; // 'da' or 'ls'
}
```

### 4.3 密码策略

| 项目 | 当前 | 目标 |
|------|------|------|
| 存储方式 | CloudBase `pwd` 明文 | CloudBase `pwd` 明文（短期） → bcrypt 哈希（中期） |
| 默认密码 | 各人不一 | 统一 `biori2026`，首次登录强制修改 |
| 修改方式 | 超管 `admin.html` | 超管 `admin.html` + 用户自助改密 |
| 登录限制 | 5次/h | 保持 |

---

## 5. 权限与数据隔离矩阵

### 5.1 诊断原料（da）

| 角色 | 客户 | 订单 | 客诉 | 商机 | KPI |
|------|:--:|:--:|:--:|:--:|:--:|
| admin/gm | 全量 | 全量 | 全量 | 全量 | 全量 |
| manager（刘欣） | 拓展部全量 | 拓展部全量 | 拓展部全量 | 拓展部全量 | 拓展部全量 |
| sales（赵云浩等） | 仅自己 | 仅自己 | 仅自己 | 仅自己 | 仅自己 |

**隔离方式：** `creatorEmail` / `current_status_operator` 匹配

### 5.2 生命科学（ls）

| 角色 | 课题组 | 订单 | 活动 | KPI |
|------|:--:|:--:|:--:|:--:|
| admin/gm | 全量 143 | 全量 | 全量 | 全量 |
| manager（吴云/韩远怀） | 本区域全量 | 本区域全量 | 本区域 | 本区域 |
| sales（王诗香等） | 仅自己 | 仅自己 | 仅自己 | 仅自己 |

**隔离方式：** 商机 `beforesales` 角色 / `creatorEmail` 匹配

### 5.3 跨线访问规则

| 用户 line | 可访问 da | 可访问 ls | 切换方式 |
|:--:|:--:|:--:|------|
| `da` | ✅ | ❌ | 不可切换 |
| `ls` | ❌ | ✅ | 不可切换 |
| `both` | ✅ | ✅ | 页面内切换器 |

---

## 6. 实施路线图

### Phase 1：账号体系统一（本次）

| # | 任务 | 位置 | 优先级 |
|---|------|------|:--:|
| 1.1 | CloudBase `user_roles` 增加 `line` 字段，全员标注 | CloudBase | P0 |
| 1.2 | `app.html` 读取 `user.line` 自动锁定业务线 | app.html | P0 |
| 1.3 | `admin.html` 支持编辑 `line` 字段 | admin.html | P1 |
| 1.4 | 新增用户检查清单更新，加入 `line` 字段 | 文档 | P1 |

### Phase 2：正式工作台业务线化

| # | 任务 | 位置 | 优先级 |
|---|------|------|:--:|
| 2.1 | `index.html` 增加业务线自动检测+切换器 | index.html | P0 |
| 2.2 | 诊断原料视图保持现有逻辑不变 | index.html | P0 |
| 2.3 | 生命科学视图新增课题组 Tab（从 `ls_groups.json` 加载） | index.html | P0 |
| 2.4 | 生命科学 KPI 卡片改为课题组维度 | index.html | P1 |

### Phase 3：数据管线完善

| # | 任务 | 位置 | 优先级 |
|---|------|------|:--:|
| 3.1 | MCP 定时拉取全量 143 课题组 → `ls_groups.json` | cron | P1 |
| 3.2 | 课题组关联客户/订单/决策链数据 | pipeline | P2 |
| 3.3 | 生命科学 ERP 销售数据按课题组聚合 | pipeline | P2 |

### Phase 4：体验优化

| # | 任务 | 位置 | 优先级 |
|---|------|------|:--:|
| 4.1 | `landing.html` 优化：已登录用户自动跳转 | landing.html | P2 |
| 4.2 | 密码统一策略（biori2026 + 首次强制修改） | 全局 | P2 |
| 4.3 | 登录页 SDK 加载失败友好提示（P23修复） | 全局 | P1 |

---

## 7. 文件影响清单

| 文件 | 变更类型 | 说明 |
|------|------|------|
| `工具/index.html` | 改造 | 增加业务线自动检测、ls 课题组视图 |
| `工具/app.html` | 改造 | 增加 `line` 字段读取，完善隔离 |
| `工具/admin.html` | 改造 | 增加 `line` 字段编辑 |
| `工具/landing.html` | 微调 | 已登录跳转优化 |
| `数据/ls_groups.json` | 新建 | 课题组数据（已完成） |
| `数据/pricing/_personnel.json` | 补充 | 可考虑增加 `line` 字段 |
| CloudBase `user_roles` | 迁移 | 全员增加 `line` 字段 |

---

## 8. 风险与注意事项

| 风险 | 影响 | 缓解 |
|------|------|------|
| `line` 字段遗漏导致用户无法登录 | 高 | 默认值 `both`，逐个验证 |
| 生命科学课题组全量未拉取（仅50/143） | 中 | Phase 3 建立定时拉取 |
| 两条线的 KPI 口径不一致 | 中 | 明确文档，各自独立计算 |
| `app.html` 与 `index.html` 代码分叉 | 中 | 共享 auth 逻辑，视图层各自维护 |

---

## 9. 待确认事项

1. **王诗香的角色**：`_personnel.json` 中是"区域经理"，但在 MCP 课题组数据中归属是 `sales`。确认是否应为 `manager`？
2. **生命科学是否需要部门经理岗**：当前浙江（吴云）和广东（韩远怀/王诗香）各有负责人，但 `user_roles` 中角色可能不一致
3. **`_rz-opbvg` 视图的持久性**：如果飞书中该视图被删除/改名，是否有备选方案？
4. **index.html 业务线改造时间窗口**：正式工作台涉及全公司使用，需要安排发布时间
