# research: 商机列表「视图 / 自定义检索」机制(真实 demo HTML 抽取)
> 证据来源:`nginx/html/保伦CRM系统demo-重构版-S1_0803.html`(可运行 demo,比蓝湖 analyze 归纳可靠)。
> 抽取自 `oppModule` 段(约 line 1192–1620)。仅记事实,不含决策。
> 注意:demo 是交互样例,字段名/样例数据(张三/预计成交金额…)非最终验收值。
## 1. 内置视图 + 自定义检索(line 1228-1229)
```
viewTitles = { recent:'最近访问', mine:'我负责的销售机会',
participated:'我参与的销售机会', followed:'我关注的销售机会',
custom:'自定义检索' }
viewItems = ['recent','mine','participated','followed'] // 4 个系统内置视图
```
- **系统内置视图 4 个**:最近访问 / 我负责的 / 我参与的 / 我关注的。
- **无「领导层级下拉」**——蓝湖静态图里的「商机管理(领导)▾」不是层级选择器;真实 demo 里领导/管理是另一套 workspace(`state.workspace='manage'`),数据范围由数据权限决定,不是视图下拉里的层级档。
## 2. 视图行数据范围(line 1251 `viewRows()`)
| 视图 | 数据范围 |
|---|---|
| recent 最近访问 | `state.recentVisits`({id,scene,at})按 `at` 倒序,见 §5 |
| mine 我负责的 | `rows.filter(owner===当前用户)` |
| participated 我参与的 | `rows.filter(participatedIds.has(id))` |
| followed 我关注的 | `followedRows()`(关注集合) |
| manage 商机管理 | `rows`(全部,受 workspace/数据权限约束) |
| publicPool 公海 | `poolRows` |
## 3. 自定义检索(line 1279 `renderCustomForm` + 1254 `filteredRows`)
- **组成**:检索名称 + 检索条件(1 组:字段 / 运算符 / 值)+ 排序(字段 + 升/降序)。
- **条件字段**(demo 样例):机会名称 / 销售机会所有人 / 客户名称 / 计划成交时间。
- **运算符**:等于 / 不等于 / 包含 / 不包含 / 为空 / 不为空。
- **排序字段**(demo 样例):预计成交金额 / 计划成交时间;方向 desc/asc(默认 desc)。
- **"+ 添加更多条件"**:demo 提示"本次支持保存一组检索条件"(多条件复合是方向,demo 未全实现)。
- **"启用高级公式"**:demo 未启用(占位)。
- **动作**:保存为常用检索 `saveCustomSearch` / 检索 `runCustomSearch`(不保存,临时 `state.customDraft`);编辑态 = 另存为新检索 / 保存修改。
## 4. 保存的检索 = 可管理的自定义视图(line 1260-1278, 1599)
- 保存后进入「常用检索」菜单,与内置视图并列。
- 每项可:**编辑检索 / 重命名 / 删除**(line 1261 `customMenuRow`)。
- **设为默认视图**:`pinView`(line 1599)——内置视图或自定义检索都可 pin 为默认;`state.defaultView`。
- **持久化**:`persistCustomSearches`(line 1257)写 localStorage `{savedSearches, defaultView}`。
## 5. 最近访问(line 1222 `state.recentVisits`)
```
recentVisits:[{id:1,scene:'personal',at:now-3min}, {id:105,scene:'publicPool',...}, ...]
```
- 结构 = `{商机 id, 访问场景 scene, 访问时间 at}`。
- 按 `at` 倒序展示;同一商机一条(去重按 id)。
- demo 未画上限条数(→ 产品定,P2-2 拍板:配置值默认 50)。
- `scene`(personal/manage/publicPool)= 记录当时从哪个皮肤进入(对齐详情三皮肤)。
## 6. 数据权限(line 2710,独立于视图的一层,faithfulAdmin 段)
角色「默认数据范围」单选:全部数据 / 本团队及下级 / 本部门及下级 / 仅本人负责·参与 / 自定义组织范围 / 按业务关系。
- **业务对象例外**:商机 = "本部门及下级 + 我参与团队的商机"。
- 口径:"功能权限决定能做什么,数据权限决定能看哪些记录,最终取两者交集"。
- ⇒ 数据范围由**角色数据权限**决定,**不是视图下拉里选层级**。crm-auth `DataScopeEnum` = SELF/DEPT/DEPT_AND_CHILD/ALL 四档;demo 的"本团队及下级""自定义组织范围""按业务关系"是更细档,属数据权限模块扩展,非商机模块自建。
## 7. 视图模式(正交于视图内容,line 1281)
分屏视图 split / 列表视图 list / 看板视图 board——展示模式切换,与"哪个视图/检索"正交。