# 04 — 三 workspace 视图 + 归属流转 **What to build:** 客户能在「我的客户 / 客户总览 / 客户公海」三个 workspace 里按各自数据范围列出、切换视图模式,并支持归属流转动作(领取 / 分配 / 抛公海 / 归档 / 恢复)。三视图是逻辑视图不落池表;每个归属动作写操作日志、走 CAS 乐观锁。 **Blocked by:** 02 — 客户主表 CRUD + 查重校验 **Status:** ready-for-agent **Spec 依据(详见 issues/03-answer.md)**:D9 三视图=逻辑视图;D3 归属⊥档案双轴;D19 归档=删除语义(无独立 tab)。 - [ ] 三 workspace 查询(票 03 §A,逻辑视图**不落库**): - 我的客户 = 当前用户为销售负责人或协同人 且 `archive_status=1` 且 owner 非空 - 客户总览 = `@DataScope` 覆盖范围内 未删除、未进公海(默认只列 `archive_status=1`) - 客户公海 = `archive_status=1` 且 `owner_user_id IS NULL` - 管理职务不扩大「我的客户」范围(走「客户总览」) - [ ] 内置视图口径(票 03 §B,**硬编码不落库**):我的客户(我负责的/我协同的/待跟进的/我关注的/最近访问);公海(最近访问/我关注的);总览(最近访问/我关注的/我负责的/我协同的) - [ ] 视图模式(票 03 §C)+ **看板三分组页签**(客户阶段/客户星级/关系星级);⚠ 本期「客户阶段」分组下客户均堆在「潜在客户」列,重潜/已成交列恒空=预期行为(D20 改票 B),不得造假阶段数据 - [ ] 共用列 + 差异列(票 03 §D):公海列含 `enter_pool_time`「进入公海时间」、无负责人列 - [ ] **新增字段回填**:`customer.enter_pool_time`(票 03 §F,抛公海写入 / 领取·分配清空) - [ ] **归属流转动作**(票 03 §E):领取 / 分配 / 抛公海 / 归档(1→2) / 恢复(2→1),各带前置校验("无进行中商机"读 crm-opportunity opp_status=2;**项目侧留 seam** A5 未建先跳过;归档/合并仅销售负责人可) - [ ] 批量操作部分失败不回滚(逐条独立事务,跳过不可操作项);**例外**:批量归档整批预检,任一失败整批不执行 - [ ] 领取/分配副作用(D25,票 10 锚点):`last_valid_follow_time` 为空时→赋当前时刻;抛公海/归属迁移不动锚点 - [ ] 每个归属动作写 `customer_oplog`(票 06);CAS 乐观锁 + version - [ ] `@DataScope` 映射(票 03 §G):总览套 `DataScopeEnum(SELF/DEPT/DEPT_AND_CHILD/ALL)`;公海按可见部门范围