36 KiB
商机模块 · 原型 → 预期接口 总清单
来源:
.scratch/opportunity-verify/lanhu-cache/scope-to-txt.json里 37 页原型的.txt抽取(+ 必要时 OCR fallback)。本文件只做原型 → 预期接口推断,不映射到后端已有 Controller、不判断实现正确性——那是票 03/04/05 的活。
约定:
- path 使用 REST 惯例路径(可能与后端实际不一致,实测时对齐)
- 每条接口末尾用
[子域]标注:列表/详情/状态机/阶段/方案卡/勘察/跟进/附件/团队/日志/视图/规则-阶段/规则-方案卡/规则-公海/规则-字典/字典查询/协作
子域:列表族(A3-0/1/2/3 列表 + 视图)
页面:A3-0-1 最近访问列表 (txt: a3-0-1_最近访问列表.txt)
-
顶层元素:
- 顶部系统栏(AI助手 / 消息提醒 / 当前用户)
- 左侧一级/二级菜单(商机管理 > 销售机会)
- 面包屑(商机 > 销售机会)
- 标题栏 + 视图入口下拉「最近访问 ▾」(可切到我负责的 / 我关注的 / 公海 / 自定义保存过的筛选方案)
- 视图切换(列表 / 分屏 / 看板)
- 查询筛选区(项目名称、甲方、地区、来源、行业……)
- 「查询」「重置」按钮
- 批量操作:批量关注、批量领取
- 列表操作区:行高调整、刷新、自定义显示字段
- 列表表格 + 分页
-
表格列(14 列,字段定义见 txt):NO / 选择框 / 商机名称 / 甲方 / 意向客户 / 行业 / 地区 / 预计金额 / 当前工作节点 / 节点停留时间 / 当前负责人 / 最近跟进 / 下一节点 / 操作
-
行操作(依商机状态动态展示):详情 / 写跟进 / 关注 / 取关 / 领取 / 转项目
-
业务规则:
- 仅展示当前用户「近期打开过详情页」的销售机会;默认按最近访问时间倒序
- 节点停留时间由后端算并返回(= 当前日期 − 进入当前工作节点日期)
- 未领取时「当前负责人」显示
--或「待领取」 - 未勾选批量操作时前端拦提示(无需后端)
-
预期接口:
POST /api/opportunity/recent-visits/page— 最近访问分页;入参含keyword,filters{industry, region, source, party},page,size,sort;出参列 14 字段全[列表]POST /api/opportunity/recent-visits/touch或POST /api/opportunity/{id}/visit— 用户打开详情时上报访问记录(前端进详情自动打)[列表]GET /api/dict/industry— 行业下拉候选[字典查询]GET /api/dict/region或GET /api/region/tree— 地区下拉[字典查询]GET /api/dict/source— 来源下拉[字典查询]GET /api/user/customize/columns?scene=opportunity-list或POST .../save— 自定义显示字段读/写[视图]POST /api/opportunity/follow/batch— 批量关注;body{opportunityIds: [...]}[协作]POST /api/opportunity/claim/batch— 批量领取;body{opportunityIds: [...]};返回失败明细[状态机]POST /api/opportunity/follow— 单个关注(行操作「关注」);{opportunityId}[协作]DELETE /api/opportunity/follow/{opportunityId}或POST /api/opportunity/unfollow— 取关[协作]POST /api/opportunity/claim— 单个领取(行操作「领取」);{opportunityId}[状态机]- (「写跟进」跳弹窗,接口归 A3-1-1-2-2 页;「详情」跳详情,无独立接口)
-
备注:
- 「自定义保存过的筛选方案」暗示有保存视图 CRUD,实际这页只展示切换入口,视图 CRUD 归下一页 A3-1-1 承载;此处仅登记读接口需求。
页面:A3-1-1 销售机会列表 (txt: a3-1-1_销售机会列表.txt)
一页承载三个视图(“结构完全一致的页面”):我负责的 / 我参与的 / 全部销售机会(个人)。
-
顶层元素:
- 视图下拉切换(与 A3-0-1 共用)
- 查询筛选区(商机名、甲方、地区、行业……)
- 「+新增商机」按钮
- 列表工具区(刷新 / 密度 / 自定义字段)
- 表格 13 列(相对最近访问新增「方案卡状态」,隐藏「当前负责人」)
- 行操作:详情 / 写跟进
-
业务规则:
- 数据范围 = 当前用户为负责人(或团队成员 / 无限制,看视图)
- 新增商机默认归当前用户(若无分配规则干预)
- 方案卡状态:未创建 / 填写中 / 已推送
- 分页切换保留筛选条件
-
预期接口:
POST /api/opportunity/page— 主列表分页;入参viewType: OWNED|PARTICIPATED|ALL_PERSONAL,keyword,filters{...},page,size,sort;若后端缺viewType语义入报告[列表]POST /api/opportunity— 新增商机(body 定义见 A3-1-1-2-1)[详情]GET /api/dict/industry,/region,/party-type— 筛选下拉[字典查询]GET /api/user/customize/columns?scene=opportunity-list— 自定义字段读[视图]POST /api/user/customize/columns— 自定义字段写[视图]
-
备注:「写跟进」弹窗接口归 A3-1-1-2-2;「详情」跳 A3-1-1-1-1。
页面:A3-2-1 全部销售机会管理列表 (txt: a3-2-1_全部销售机会管理列表.txt)
管理视角(领导/管理员权限),支持三种视图:传统列表 / 看板 / 分屏。
-
顶层元素:
- 筛选区(行业、地区等,无新增按钮)
- 列表视图列(与 A3-1-1 相同 13 列)+ 行操作:详情 / 分配 / 督办 / 关闭(督办 out-of-scope)
- 批量操作:批量关闭 / 批量催办 / 批量分配
- 看板视图:每阶段显示商机数+金额汇总,首批 5 条,「加载更多」按需追加
- 分屏视图:左侧列表+右侧详情
- 统计卡片:团队商机总数 / 各阶段分布
-
业务规则:
- 数据范围 = 当前用户权限范围内所有商机(非仅本人)
- 看板各阶段独立分页加载(offset+limit 而非全局 page)
- 筛选/切换视图后各阶段重置为首批
-
预期接口:
POST /api/opportunity/page— 管理列表分页;入参viewType: MANAGED,filters{assignee,industry,region,stage},page,size[列表]POST /api/opportunity/board/stage-summary— 看板各阶段数量+金额汇总[列表]POST /api/opportunity/board/cards— 看板单阶段卡片列表(按需加载);入参stageId,offset,limit,filters[列表]POST /api/opportunity/assign— 单个分配负责人[状态机]POST /api/opportunity/assign/batch— 批量分配[状态机]POST /api/opportunity/close/batch— 批量关闭[状态机]GET /api/user/assignable— 分配时选人候选[字典查询]
-
备注:督办(催办)接口 out-of-scope,不实测。看板视图 txt 明确描述"各阶段独立加载",需要按阶段查询接口。
页面:A3-3-1 商机公海列表 (txt: a3-3-1_商机公海列表.txt)
公海视图,展示已进入公海的商机,所有人可见可领取。
-
顶层元素:
- 筛选区:进入公海原因(销售主动释放 / 特殊原因暂停 / 领导释放 / 超期回收)、行业、地区
- 批量操作:批量领取 / 批量关注
- 表格 12 列:NO / 商机名称 / 甲方 / 意向客户 / 行业 / 地区 / 方案预算 / 入池前工作节点 / 节点停留时间 / 当前负责人(原负责人)/ 最近跟进 / 进入公海原因 / 操作
- 行操作:详情 / 关注 / 领取
-
业务规则:
- 进入公海原因枚举:销售主动释放 / 特殊原因暂停 / 领导释放 / 超期回收
- 领取后商机退出公海,归属领取人
-
预期接口:
POST /api/opportunity/pool/page或POST /api/opportunity/page含viewType: POOL— 公海列表分页;入参含entryReason,industry,region,page,size[列表]GET /api/dict/pool-entry-reason— 进入公海原因枚举[字典查询]POST /api/opportunity/claim— 单个领取[状态机]POST /api/opportunity/claim/batch— 批量领取[状态机]POST /api/opportunity/follow— 单个关注[协作]POST /api/opportunity/follow/batch— 批量关注[协作]
子域:详情族(A3-1-1-1-* tab + 详情操作)
所有详情 tab 页共用详情公共头部,包含:商机名称、招标形式、负责人、所属团队/部门、行业标签、项目阶段、商机状态、方案预算、「写跟进」「编辑」按钮、主要意向客户、「新增方案卡」、推进阶段进度条(节点+勾选状态)、tab 导航(概览/客户信息/方案卡/现场勘察/相关附件/跟进记录/工作计划/团队成员/操作日志)、顶部操作区(添加关联客户 / 推送方案 / 暂缓商机 / 抛公海 / 添加团队成员 / 关闭商机)。
公共头部预期接口:
GET /api/opportunity/{id}— 详情主体查询(名称/状态/负责人/阶段/预算等所有头部字段)[详情]GET /api/opportunity/stage/progress?opportunityId={id}— 推进阶段进度条(节点+完成状态)[阶段]
页面:A3-1-1-1-1 商机详情_概览 (txt: a3-1-1-1-1__个人_商机详情_概览.txt)
-
概览区元素:基础信息(项目名称、项目类型、行业、阶段、区域、招标形式、负责人、属地、团队、部门、金额、概况)、跟进记录摘要(最近 N 条,「查看更多」跳跟进记录 tab)、近期工作计划摘要、方案卡摘要
-
预期接口:
GET /api/opportunity/{id}— 基础信息(公共头部同)[详情]GET /api/opportunity/{id}/follow-ups?limit=3或POST /api/opportunity/{id}/follow-ups/page— 跟进记录摘要(首页概览只取最近几条)[跟进]GET /api/opportunity/{id}/scheme-cards或GET /api/opportunity/scheme-card/list?opportunityId={id}— 方案卡摘要列表[方案卡]
页面:A3-1-1-1-2 商机详情_客户信息 (txt: a3-1-1-1-2_个人_商机详情_客户信息.txt)
-
客户信息列表字段:客户名称 / 客户类型(总包/工程商/集成商)/ 关键联系人 / 联系方式(脱敏)/ 联系人职务 / 关系标记(主要意向客户/普通关联)/ 操作(查看客户详情/设为主要)
-
预期接口:
GET /api/opportunity/{id}/customers— 关联客户列表[详情]POST /api/opportunity/{id}/customers/set-primary或PUT /api/opportunity/customer/{relId}/set-primary— 设为主要意向客户[详情]GET /api/customer/{id}— 跳转客户详情(crm-customer 域,不属于本模块,不深测)[字典查询]- (「添加关联客户」归操作族 A3-1-1-2-4)
页面:A3-1-1-1-3 商机详情_方案卡 + A3-1-1-1-3-1 编辑方案卡 (txt: 同名)
-
方案卡列表字段:关联客户 / 客户类型 / 介入阶段 / 招标形式 / 预算 / 状态(未创建/草稿/已创建/已推送)
-
方案卡详情字段:客户名称、客户类型、联系人、联系方式、项目阶段、招标形式、预算金额、预计成交概率、预计投标时间、设计配置、品牌要求、是否可换品牌、投标编号、标底方、客户需求描述、方案卡填写时间、期望方案设计完成时间、现场勘察资料(系统自动提取)、是否看现场、是否电话沟通、是否百万级、预算是否明确
-
预期接口:
GET /api/opportunity/scheme-card/list?opportunityId={id}— 方案卡列表[方案卡]GET /api/opportunity/scheme-card/detail?id={schemeId}— 方案卡详情[方案卡]POST /api/opportunity/scheme-card/save— 保存/编辑方案卡[方案卡]POST /api/opportunity/scheme-card/submit— 提交方案卡[方案卡]GET /api/opportunity/scheme-card/selectable-templates?opportunityId={id}— 可选模板[方案卡]- (「新增方案卡」弹窗归操作族 A3-1-1-2-3)
页面:A3-1-1-1-4 商机详情_现场勘察 (txt: a3-1-1-1-4_个人_商机详情_现场勘察.txt)
-
勘察记录字段:申请单号 / 看现场日期 / 次数 / 工程师 / 联系方式(工单)/ 勘察说明 / 相关附件
-
预期接口:
GET /api/opportunity/{id}/surveys或POST /api/opportunity/{id}/surveys/page— 现场勘察记录列表[勘察]- (「新增勘察记录」归操作族 A3-1-1-2-10)
页面:A3-1-1-1-5 商机详情_相关附件 (txt: a3-1-1-1-5_个人_商机详情_相关附件.txt)
-
附件列表字段:资料类型(现场资料/设计清单图纸/客户需求资料/招投标相关资料/其它)/ 附件内容 / 操作人 / 操作时间 / 说明 / 操作(查看/下载/删除)
-
预期接口:
GET /api/opportunity/{id}/attachments— 附件列表[附件]POST /api/opportunity/{id}/attachments— 上传附件[附件]DELETE /api/opportunity/attachment/{attachId}— 删除附件[附件]GET /api/opportunity/attachment/{attachId}/download— 下载[附件]
页面:A3-1-1-1-6 商机详情_跟进记录 (txt: a3-1-1-1-6_个人_商机详情_跟进记录.txt)
-
跟进记录字段:跟进时间 / 跟进方式(微信/电话/拜访)/ 关联客户/联系人 / 跟进内容 / 下次跟进安排 / 记录人 / 附件(拜访打卡图等)
-
支持分页
-
预期接口:
POST /api/opportunity/{id}/follow-ups/page或GET /api/opportunity/{id}/follow-ups— 跟进记录分页查询[跟进]- (「写跟进」归操作族 A3-1-1-2-2)
页面:A3-1-1-1-8 商机详情_团队成员 (txt: a3-1-1-1-8_个人_商机详情_团队成员.txt)
-
团队成员表格字段:成员名称 / 所属部门 / 职位 / 项目角色 / 职责 / 加入时间 / 操作
-
顶部按钮:「+添加成员」「一键拉群」(一键拉群 out-of-scope)
-
预期接口:
GET /api/opportunity/{id}/members— 团队成员列表[团队]DELETE /api/opportunity/{id}/members/{userId}或POST /api/opportunity/{id}/members/remove— 移除成员[团队]- (「添加团队成员」弹窗归操作族 A3-1-1-2-8)
- 「一键拉群」out-of-scope
页面:A3-1-1-1-9 商机详情_操作日志 (txt: a3-1-1-1-9_个人_商机详情_操作日志.txt)
-
操作日志字段:操作时间 / 操作人 / 实体对象 / 字段名称 / 旧值 / 新值 / 操作说明
-
系统自动记录:商机状态变更、节点变更、推送方案创建等
-
预期接口:
GET /api/opportunity/{id}/operation-logs或POST /api/opportunity/{id}/operation-logs/page— 操作日志分页[日志]
页面:A3-0-1-1 商机详情(最近访问跳转)/ A3-2-1-1 管理商机详情 (txt: 同名)
-
与 A3-1-1-1-1 差异:
- A3-0-1-1:与个人详情相同结构,仅入口不同
- A3-2-1-1(管理详情):顶部操作区增加「分配」「督办」,无「暂缓/抛公海」等个人操作(管理员视角)
-
预期接口:复用
GET /api/opportunity/{id}+ 各 tab 接口,无新增接口;行为差异由权限控制。
子域:状态机 / 操作族(A3-1-1-2-* + A3-3 领取分配)
这里是本验收最关键的子域:domain 层
OpportunityTransition有 9 个 Cmd,但已知没有 HTTP 入口,逐一确认。
新增/编辑商机 A3-1-1-2-1 (txt: a3-1-1-2-1__新增_编辑商机.txt)
-
表单字段:商机名称*、商机来源*(线索转入/线下挖掘/客户转介绍)、商机行业*(多级枚举:普教/高校/党校/公安…)、甲方、意向客户、地区、招标形式、方案预算、项目阶段、描述等
-
预期接口:
POST /api/opportunity— 新增商机[详情]PUT /api/opportunity/{id}— 编辑商机[详情]GET /api/dict/opportunity-source— 商机来源枚举[字典查询]GET /api/dict/industry— 行业多级枚举[字典查询]GET /api/dict/bidding-type— 招标形式枚举[字典查询]GET /api/dict/region/tree— 地区树[字典查询]
写跟进 A3-1-1-2-2 (txt: a3-1-1-2-2_____.txt)
-
表单字段:跟进内容*、跟进时间、跟进方式*(电话沟通/上门拜访/微信对接/线上会议/展会沟通)、客户名称*(从关联客户选)、客户联系人、客户联系电话、跟进结果标签(暂无进展/需求确认/方案推进…)、计划下次跟进时间、附件(最多10个)
-
预期接口:
POST /api/opportunity/{id}/follow-ups— 新增跟进记录[跟进]POST /api/file/upload或POST /api/attachment/upload— 附件上传(先传文件拿 fileId)[附件]GET /api/dict/follow-up-method— 跟进方式枚举[字典查询]GET /api/dict/follow-up-result— 跟进结果标签枚举[字典查询]
新增方案卡 A3-1-1-2-3 (txt: a3-1-1-2-3_______.txt)
-
表单结构:公司标准字段(关联客户*、介入阶段*、招标形式*、预算金额、是否百万级、预算是否明确、设计配置、品牌要求、是否可换品牌、客户需求…)+ 部门级补充字段(动态模板)
-
预期接口:
POST /api/opportunity/scheme-card— 新增方案卡;body 含opportunityId, 各字段[方案卡]GET /api/opportunity/scheme-card/template?deptId={deptId}— 获取部门级动态模板[方案卡]GET /api/dict/intro-stage— 介入阶段枚举(标前设计/标前抢单/投标阶段…)[字典查询]GET /api/dict/bidding-type— 招标形式(同上,复用)[字典查询]
添加关联客户 A3-1-1-2-4 (txt: a3-1-1-2-4________.txt)
-
表单结构:搜索框(搜客户名)+ 客户类型筛选(总包/工程商/投资方/设计院/集成商/投标公司)+ 搜索结果表(客户名/类型/地区/联系人/联系电话/客户负责人/选择按钮)
-
预期接口:
POST /api/customer/search或GET /api/customer/list?keyword=&type=— 搜索/查询客户[字典查询]POST /api/opportunity/{id}/customers— 将选中客户关联到商机;body{customerId, customerRole}[详情]
暂缓商机 A3-1-1-2-6 (txt: a3-1-1-2-6______.txt)
-
弹窗字段:暂缓原因*(客户项目延期/预算冻结/招标暂停/政策与其他不可抗力因素/个人原因/其他)、预计重启日期*、补充说明
-
业务规则:暂缓后商机保留归属(不进公海、不被领取);仅个人暂缓用途
-
预期接口(状态机):
POST /api/opportunity/{id}/pause或POST /api/opportunity/transitionbody{cmd:"PAUSE", id, reason, restartDate, remark}— PauseCmd[状态机]GET /api/dict/pause-reason— 暂缓原因枚举[字典查询]
抛公海 A3-1-1-2-7 (txt: a3-1-1-2-7_____.txt)
-
弹窗字段:进入公海原因*(长期未有效跟进/客户暂无预算/项目暂停或延期/介入时机不成熟/其他)、进入公海范围*(所属部门公海/公司公海)、补充说明
-
业务规则:抛公海后原负责人失去跟进权限;历史数据保留
-
预期接口(状态机):
POST /api/opportunity/{id}/release-to-pool或POST /api/opportunity/transitionbody{cmd:"RELEASE_TO_POOL", ...}— ReleaseToPoolCmd[状态机]GET /api/dict/pool-entry-reason— 进入公海原因枚举(同公海列表筛选,复用)[字典查询]GET /api/dict/pool-scope— 公海范围枚举(所属部门/公司)[字典查询]
关闭商机 A3-1-1-2-9 (txt: a3-1-1-2-9______.txt)
-
弹窗字段:关闭原因*(项目取消/客户放弃/竞争失败/重复商机/无效商机/其他)、补充说明、「已确认」checkbox*
-
业务规则:关闭后停止推进,需管理员权限才能重新开启
-
预期接口(状态机):
POST /api/opportunity/{id}/close或POST /api/opportunity/transitionbody{cmd:"CLOSE", ...}— CloseCmd[状态机]GET /api/dict/close-reason— 关闭原因枚举[字典查询]
新增现场勘察记录 A3-1-1-2-10 (txt: a3-1-1-2-10________.txt)
-
弹窗字段:申请方式、勘察次数*(第一次/第二次/第三次/三次以上)、现场勘察日期*、申请单号、工程师选择(跨部门选人)、勘察补充说明、相关附件
-
预期接口:
POST /api/opportunity/{id}/surveys— 新增现场勘察记录[勘察]GET /api/user/list?dept=或GET /api/user/engineer-list— 工程师候选人[字典查询]
领取公海商机 A3-3-1-1-2 (txt: a3-3-1-1-2____.txt)
-
弹窗字段:领取说明(选填)+ 确认提示(商机名称、领取后效果说明)
-
业务规则:领取成功后成为负责人,商机退出公海
-
预期接口(状态机):
POST /api/opportunity/{id}/claim或POST /api/opportunity/claimbody{opportunityId, remark}— ClaimCmd[状态机]
分配公海商机 A3-3-1-1-4 (txt: a3-3-1-1-4____.txt)
-
弹窗字段:人员搜索+筛选(部门/姓名/当前参与商机数),分配对象*、是否发送提示通知*(是/否)、分配说明(选填)
-
业务规则:管理员/领导分配;商机退出公海归被分配人
-
预期接口(状态机):
POST /api/opportunity/{id}/assign或POST /api/opportunity/assignbody{opportunityId, assigneeId, notify, remark}— AssignToUserCmd[状态机]GET /api/user/list?dept=— 候选用户列表(同添加团队成员,复用)[字典查询]
已知缺失(白盒事实,在此预登记)
以下 domain Cmd 原型有对应操作入口,但目前无 HTTP 路由映射:
| Cmd | 对应原型操作 | 预期 HTTP | 状态 |
|---|---|---|---|
| ClaimCmd | A3-3-1-1-2 领取 | POST /api/opportunity/{id}/claim |
❓待实测 |
| AssignToUserCmd | A3-3-1-1-4 分配 | POST /api/opportunity/{id}/assign |
❓待实测 |
| ReleaseToPoolCmd | A3-1-1-2-7 抛公海 | POST /api/opportunity/{id}/release-to-pool |
❓待实测 |
| PauseCmd | A3-1-1-2-6 暂缓 | POST /api/opportunity/{id}/pause |
❓待实测 |
| ResumeCmd | 暂缓后「恢复」按钮 | POST /api/opportunity/{id}/resume |
❓待实测 |
| CloseCmd | A3-1-1-2-9 关闭 | POST /api/opportunity/{id}/close |
❓待实测 |
| ReopenCmd | 关闭后「重新开启」 | POST /api/opportunity/{id}/reopen |
❓待实测 |
| HandoverCmd | 移交(详情页操作) | POST /api/opportunity/{id}/handover |
❓待实测 |
| ConvertToProjectCmd | 转项目(out-of-scope) | — | ⊘ 不测 |
子域:规则族(A7-3-2-* 阶段/方案卡/公海/字典)
设置后台路径:商机 > 商机管理设置。左侧 tab:商机阶段设置 / 方案卡模板 / 方案推送规则(out-of-scope) / 查重规则(out-of-scope) / 公海与提醒 / 商机相关字典。
A7-3-2-1 商机阶段设置(列表页)
-
列表字段:序号 / 模板名称 / 模板编码(code) / 版本号 / 状态(草稿/发布中/已停用)/ 适用范围 / 最近更新 / 绑定商机数 / 操作(详情/编辑/删除/复制)
-
同一 code 可有多版本,只有一个版本"发布中"
-
预期接口:
GET /api/opportunity/stage-template/page或GET /api/opportunity/stage-template/list— 阶段模板列表[规则-阶段]DELETE /api/opportunity/stage-template/{id}— 删除(草稿态)[规则-阶段]POST /api/opportunity/stage-template/{id}/copy— 复制模板[规则-阶段]
A7-3-2-1-1 商机阶段设置(详情页)
-
详情区:版本号 / 模板编码 / 适用范围 / 适用对象 / 状态 / 绑定商机 / 是否默认 / 概览tab / 版本记录tab / 阶段节点配置(节点列表,可点选查看工作目标;节点有:字典值+自定义名称+阶段工作目标+是否固定节点)
-
阶段节点字典从
商机阶段字典分组中选,节点支持拖拽排序 -
预期接口:
GET /api/opportunity/stage-template/{id}— 模板详情[规则-阶段]GET /api/opportunity/stage-template/{id}/versions— 版本记录列表[规则-阶段]GET /api/dict/items?group=opportunity_stage— 商机阶段字典条目(供节点选择)[规则-字典]
A7-3-2-1-2 商机阶段设置(新增/编辑页)
-
表单字段:模板名称*、模板编码(系统生成只读)、适用范围*(所有商机/指定部门)、适用对象(范围=指定部门时)、是否默认*(是/否)、版本号(只读)、模板说明、阶段编辑区(可添加/删除/排序节点;每节点含字典值*、自定义节点名称、阶段工作目标)
-
操作按钮:保存草稿 / 保存并发布 / 取消
-
预期接口:
POST /api/opportunity/stage-template— 新增模板[规则-阶段]PUT /api/opportunity/stage-template/{id}— 编辑模板[规则-阶段]POST /api/opportunity/stage-template/{id}/publish— 发布模板[规则-阶段]POST /api/opportunity/stage-template/{id}/disable— 停用模板[规则-阶段]GET /api/dept/list— 适用对象部门选择[字典查询]
A7-3-2-2 方案卡模板(列表页)
-
列表字段:序号 / 模板名称 / 模板编码 / 版本号 / 状态 / 适用范围 / 最近更新 / 绑定商机数 / 操作(详情/编辑/删除/复制)
-
右侧有预览区:展示模板对应的方案卡字段(客户名称/客户角色/联系人/项目阶段/招标形式/是否看现场/是否电话沟通/勘察资料/是否百万级/预算金额/预算是否明确/设计配置/品牌要求/客户需求描述/业务需求等)
-
预期接口:
GET /api/opportunity/scheme-card-template/page或/list— 方案卡模板列表[规则-方案卡]DELETE /api/opportunity/scheme-card-template/{id}— 删除[规则-方案卡]POST /api/opportunity/scheme-card-template/{id}/copy— 复制[规则-方案卡]
A7-3-2-2-1 方案卡模板(详情页)
-
详情区:版本号 / 模板编码 / 适用范围 / 适用对象 / 状态 / 绑定商机 / 是否默认 / 字段配置详情(公司标准字段 + 部门补充字段,每字段含名称/是否必填/字段类型/选项值等)
-
预期接口:
GET /api/opportunity/scheme-card-template/{id}— 模板详情[规则-方案卡]GET /api/opportunity/scheme-card-template/{id}/versions— 版本记录[规则-方案卡]
A7-3-2-2-2 方案卡模板(新增/编辑页)
-
表单字段:模板名称* / 模板编码(只读)/ 适用范围* / 适用对象 / 是否默认* / 版本号(只读)/ 字段配置编辑区(可添加/删除/排序字段;每字段含字段名*、是否必填、字段类型、选项配置)
-
操作:保存草稿 / 保存并发布 / 取消
-
预期接口:
POST /api/opportunity/scheme-card-template— 新增[规则-方案卡]PUT /api/opportunity/scheme-card-template/{id}— 编辑[规则-方案卡]POST /api/opportunity/scheme-card-template/{id}/publish— 发布[规则-方案卡]POST /api/opportunity/scheme-card-template/{id}/disable— 停用[规则-方案卡]
A7-3-2-5 公海与提醒规则(列表页)
-
列表字段:序号 / 规则名称 / 规则编码 / 版本号 / 状态 / 适用范围 / 自动回收(天数)/ 提前提醒(天数)/ 最近更新 / 操作(详情/编辑/删除/复制)
-
预期接口:
GET /api/opportunity/pool-rule/page或/list— 公海规则列表[规则-公海]DELETE /api/opportunity/pool-rule/{id}— 删除[规则-公海]POST /api/opportunity/pool-rule/{id}/copy— 复制[规则-公海]
A7-3-2-5-1 公海与提醒规则(详情页)
-
详情字段:规则名称 / 规则编码 / 适用范围 / 适用对象 / 是否默认 / 版本号 / 规则说明 / 允许负责人手动转入公海(是/否)/ 连续未有效跟进自动回收(开关+天数)/ 允许自由领取(是/否)/ 提前提醒天数
-
有效跟进定义:产生跟进记录/附件上传/业务字段编辑,均视为有效跟进
-
预期接口:
GET /api/opportunity/pool-rule/{id}— 规则详情[规则-公海]GET /api/opportunity/pool-rule/{id}/versions— 版本记录[规则-公海]
A7-3-2-5-2 公海与提醒规则(新增/编辑页)
-
表单字段:规则名称* / 适用范围* / 适用对象 / 是否默认* / 规则说明 / 允许手动转入公海*(是/否)/ 连续未有效跟进自动回收*(开关)/ 自动回收天数(开关打开后必填)/ 允许自由领取*(是/否)/ 提前提醒天数*
-
操作:保存草稿 / 保存并发布 / 取消
-
预期接口:
POST /api/opportunity/pool-rule— 新增[规则-公海]PUT /api/opportunity/pool-rule/{id}— 编辑[规则-公海]POST /api/opportunity/pool-rule/{id}/publish— 发布[规则-公海]POST /api/opportunity/pool-rule/{id}/disable— 停用[规则-公海]
A7-3-2-6 商机相关字典(txt: a3-4-6_商机相关字典.txt)
- 字典分组(已知启用的分组):
| 分组名称 | 分组编码 | 用途 |
|---|---|---|
| 商机阶段 | opportunity_stage | 供阶段模板节点选择 |
| 商机状态 | opportunity_status | 商机当前业务状态枚举 |
| 暂缓原因 | opportunity_pause_reason | 暂缓弹窗选项 |
| 关闭原因 | opportunity_close_reason | 关闭弹窗选项 |
-
字典操作:新增/编辑分组、新增/编辑/启用/停用字典条目、分页查询
-
预期接口:
GET /api/opportunity/dict/groups— 字典分组列表[规则-字典]POST /api/opportunity/dict/groups— 新增分组[规则-字典]PUT /api/opportunity/dict/groups/{id}— 编辑分组[规则-字典]GET /api/opportunity/dict/items?groupCode={code}— 分组下条目列表[规则-字典]POST /api/opportunity/dict/items— 新增条目[规则-字典]PUT /api/opportunity/dict/items/{id}— 编辑条目[规则-字典]PUT /api/opportunity/dict/items/{id}/enable— 启用[规则-字典]PUT /api/opportunity/dict/items/{id}/disable— 停用[规则-字典]
-
备注:若字典走通用
crm-dict平台而非商机专属,路径可能是/api/dict/groups?module=opportunity;实测时按实际路径判定,本 spec 只登记需求侧预期。
接口聚合(按子域去重)
共 0 条唯一预期接口。
接口聚合(按子域去重)
共 2 条唯一预期接口。其中 状态机 子域是本次验收的"未实现高风险区"。
详情/基础 (1 条)
GET /api/opportunity/{id}— 详情主体查询(名称/状态/负责人/阶段/预算等所有头部字段)
阶段推进 (1 条)
GET /api/opportunity/stage/progress?opportunityId={id}— 推进阶段进度条(节点+完成状态)
接口聚合(按子域去重)
共 103 条唯一预期接口。状态机 子域是本次验收的"未实现高风险区"(已知 domain 层有 9 个 Cmd,仅 ConvertToProject out-of-scope)。
列表 (6 条)
POST /api/opportunity/recent-visits/pagePOST /api/opportunity/recent-visits/touchPOST /api/opportunity/pagePOST /api/opportunity/board/stage-summaryPOST /api/opportunity/board/cardsPOST /api/opportunity/pool/page
详情/基础 (6 条)
POST /api/opportunityGET /api/opportunity/{id}GET /api/opportunity/{id}/customersPOST /api/opportunity/{id}/customers/set-primaryPUT /api/opportunity/{id}POST /api/opportunity/{id}/customers
状态机(流转) (10 条)
POST /api/opportunity/claimPOST /api/opportunity/assignPOST /api/opportunity/assign/batchPOST /api/opportunity/close/batchPOST /api/opportunity/claim/batchPOST /api/opportunity/{id}/pausePOST /api/opportunity/{id}/release-to-poolPOST /api/opportunity/{id}/closePOST /api/opportunity/{id}/claimPOST /api/opportunity/{id}/assign
阶段推进 (1 条)
GET /api/opportunity/stage/progress?opportunityId={id}
方案卡 (8 条)
GET /api/opportunity/{id}/scheme-cardsGET /api/opportunity/scheme-card/list?opportunityId={id}GET /api/opportunity/scheme-card/detail?id={schemeId}POST /api/opportunity/scheme-card/savePOST /api/opportunity/scheme-card/submitGET /api/opportunity/scheme-card/selectable-templates?opportunityId={id}POST /api/opportunity/scheme-cardGET /api/opportunity/scheme-card/template?deptId={deptId}
跟进记录 (3 条)
GET /api/opportunity/{id}/follow-ups?limit=3POST /api/opportunity/{id}/follow-ups/pagePOST /api/opportunity/{id}/follow-ups
现场勘察 (2 条)
GET /api/opportunity/{id}/surveysPOST /api/opportunity/{id}/surveys
附件 (5 条)
GET /api/opportunity/{id}/attachmentsPOST /api/opportunity/{id}/attachmentsDELETE /api/opportunity/attachment/{attachId}GET /api/opportunity/attachment/{attachId}/downloadPOST /api/file/upload
团队成员 (2 条)
GET /api/opportunity/{id}/membersDELETE /api/opportunity/{id}/members/{userId}
操作日志 (1 条)
GET /api/opportunity/{id}/operation-logs
协作(关注/领取) (3 条)
POST /api/opportunity/followDELETE /api/opportunity/follow/{opportunityId}POST /api/opportunity/follow/batch
视图/自定义字段 (2 条)
GET /api/user/customize/columns?scene=opportunity-listPOST /api/user/customize/columns
字典查询/候选 (18 条)
GET /api/dict/industryGET /api/dict/regionGET /api/dict/sourceGET /api/user/assignableGET /api/dict/pool-entry-reasonGET /api/customer/{id}GET /api/dict/opportunity-sourceGET /api/dict/bidding-typeGET /api/dict/region/treeGET /api/dict/follow-up-methodGET /api/dict/follow-up-resultGET /api/dict/intro-stagePOST /api/customer/searchGET /api/dict/pause-reasonGET /api/dict/pool-scopeGET /api/dict/close-reasonGET /api/user/list?dept=GET /api/dept/list
规则-阶段模板 (9 条)
GET /api/opportunity/stage-template/pageDELETE /api/opportunity/stage-template/{id}POST /api/opportunity/stage-template/{id}/copyGET /api/opportunity/stage-template/{id}GET /api/opportunity/stage-template/{id}/versionsPOST /api/opportunity/stage-templatePUT /api/opportunity/stage-template/{id}POST /api/opportunity/stage-template/{id}/publishPOST /api/opportunity/stage-template/{id}/disable
规则-方案卡模板 (9 条)
GET /api/opportunity/scheme-card-template/pageDELETE /api/opportunity/scheme-card-template/{id}POST /api/opportunity/scheme-card-template/{id}/copyGET /api/opportunity/scheme-card-template/{id}GET /api/opportunity/scheme-card-template/{id}/versionsPOST /api/opportunity/scheme-card-templatePUT /api/opportunity/scheme-card-template/{id}POST /api/opportunity/scheme-card-template/{id}/publishPOST /api/opportunity/scheme-card-template/{id}/disable
规则-公海规则 (9 条)
GET /api/opportunity/pool-rule/pageDELETE /api/opportunity/pool-rule/{id}POST /api/opportunity/pool-rule/{id}/copyGET /api/opportunity/pool-rule/{id}GET /api/opportunity/pool-rule/{id}/versionsPOST /api/opportunity/pool-rulePUT /api/opportunity/pool-rule/{id}POST /api/opportunity/pool-rule/{id}/publishPOST /api/opportunity/pool-rule/{id}/disable
规则-字典 (9 条)
GET /api/dict/items?group=opportunity_stageGET /api/opportunity/dict/groupsPOST /api/opportunity/dict/groupsPUT /api/opportunity/dict/groups/{id}GET /api/opportunity/dict/items?groupCode={code}POST /api/opportunity/dict/itemsPUT /api/opportunity/dict/items/{id}PUT /api/opportunity/dict/items/{id}/enablePUT /api/opportunity/dict/items/{id}/disable