You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

69 lines
4.2 KiB

1 day ago
<!-- child of: crm-project-wayfinding/map.md -->
Type: grilling
9 hours ago
Status: resolved
1 day ago
Blocked by: 02
## Question
拍板项目**列表/看板/分屏三视图 + "我的项目" / "项目管理" 两个 workspace** 的接口清单:各视图的列字段、过滤 param、看板按什么分组(阶段?)、分屏视图左列右详情的加载契约。参照 crm-opportunity/crm-customer 已有的 workspace + 四视图形态,套同一套 URL 风格(扁平动词 + 查询参数,POST 写/GET 读),并挂深 tag(一级=a5 原型分区原文)。产出端点清单表。
依赖 02(视图字段来自原型)。用 /grilling。
9 hours ago
## Answer (resolved)
### crm-project 视图 / workspace / 端点定稿
#### Workspace(2 个平铺菜单,无内置视图机制)
对比 opportunity 的"销售机会四内置视图+自定义视图+crm-preference",项目**极简化**:
- **项目管理**(`scope=manage`):@DataScope 部门数据权限,全量管理视角。
- **我的项目**(`scope=mine`):`owner_user_id=当前用户` 过滤。
- **无内置视图下拉、无自定义视图、不接 crm-preference 视图机制**(原型只画两平铺菜单)。
#### 展示形态(两菜单各三形态)
- **列表 list / 分屏 split / 看板 board**,标题栏切换。
- 列表与分屏**复用同一查询接口**(同 scope、同 DataScope、同分页),纯前端渲染。
- 看板**后端聚合**:**固定按 `project_stage` 分列**(0冲突待处理~6结项,骨架固定无模板,区别于 opportunity 的可配阶段模板展示名),列头带「共 N 条」计数。
#### 端点清单
**主查询 / 详情(对齐 opportunity 一套接口 + 过滤参数):**
```
GET /project/list 列表+分屏共用;param: scope=manage|mine + 分页 + 筛选
GET /project/board 看板聚合;param: scope=manage|mine;按 project_stage 固定分列 + 每列计数
GET /project/detail 详情主档 + 头部(id)
```
`scope=manage|mine` 一套接口两传法(对齐 opportunity DataScope/owner 过滤范式),不拆独立端点。
**详情 Tab(选项1:每 Tab 独立小端点,对齐 opportunity `sub.<tab>` 范式,不做聚合大接口):**
通用 Tab(**项目自建子表,选 B,模块自洽无反向依赖**;文件本体复用 crm-file):
```
GET /project/follow/list 跟进记录(子表 project_follow)
GET /project/attachment/list 项目附件(子表 project_attachment,biz_type+biz_id 范式,本体走 crm-file)
GET /project/customer/list 关联客户(跨域读 crm-customer CustomerCatalogPort)
GET /project/timeline/list 项目动态(crm-log 投影,非独立表)
(群聊详情:外部企微能力,端点待 06 定或标 spin-out)
```
阶段专属 Tab(读主档扩展字段 or 阶段子表,具体落表待 06):
```
GET /project/scheme 方案设计(设计师/版本/设备清单/概算)
GET /project/quote 商务报价(报价专员/报价清单/报价总价)
GET /project/bidding 招投标文件(招标状态/文件/品牌控制/控标策略/投标公司)
GET /project/bid-open 开标信息(赢单/输单:开标时间地点/中标方式/中标金额/bid_result)
```
#### AGENTS.md checklist 合规(ADR-0017 / 0024)
- URL 扁平动作 + 查询参数传 id/scope;**禁 @PathVariable/@PutMapping/@DeleteMapping**;写端点 POST、读端点 GET。
- 深 tag:每端点挂完整页面路径 tag,一级 = `A5 项目管理`(权威树 `.scratch/api-docs-reorg/lanhu-tree-v29.md`)。
- bruno-sync.config.json 加 crm-project sourceRoot + menuBindings(项目管理/我的项目 viewType+scopeKey)。
- 命名检查:`projectFollow`→`project_follow` ✅、`bidResult`→`bid_result` ✅,无孤立单大写字母。
#### 子表选型理由(B)
反向依赖方向问题:复用 opportunity 表会造 project→opportunity 反向依赖 + 语义脏;自建 project_follow/project_attachment 保持 crm-project 边界干净,附件仅复用 crm-file 文件存储层。
#### 遗留给 06(不阻塞 04)
- 群聊详情 Tab 端点(企微能力,可能 spin-out)。
- 阶段专属 Tab 数据落主档扩展字段 vs 阶段子表的取舍 → 06 落表设计。
- 项目动态 timeline 走 crm-log 投影的具体查询口径 → 06。