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.
 
 
 
 
 

4.2 KiB

Type: grilling Status: resolved Blocked by: 02

Question

拍板项目列表/看板/分屏三视图 + "我的项目" / "项目管理" 两个 workspace 的接口清单:各视图的列字段、过滤 param、看板按什么分组(阶段?)、分屏视图左列右详情的加载契约。参照 crm-opportunity/crm-customer 已有的 workspace + 四视图形态,套同一套 URL 风格(扁平动词 + 查询参数,POST 写/GET 读),并挂深 tag(一级=a5 原型分区原文)。产出端点清单表。

依赖 02(视图字段来自原型)。用 /grilling。

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)。
  • 命名检查:projectFollowproject_follow bidResultbid_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。