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.
 
 
 
 
 

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/pagePOST /api/opportunity/pageviewType: 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=3POST /api/opportunity/{id}/follow-ups/page — 跟进记录摘要(首页概览只取最近几条) [跟进]
    • GET /api/opportunity/{id}/scheme-cardsGET /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-primaryPUT /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}/surveysPOST /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/pageGET /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-logsPOST /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/uploadPOST /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/searchGET /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}/pausePOST /api/opportunity/transition body {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-poolPOST /api/opportunity/transition body {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}/closePOST /api/opportunity/transition body {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}/claimPOST /api/opportunity/claim body {opportunityId, remark}ClaimCmd [状态机]

分配公海商机 A3-3-1-1-4 (txt: a3-3-1-1-4____.txt

  • 弹窗字段:人员搜索+筛选(部门/姓名/当前参与商机数),分配对象*、是否发送提示通知*(是/否)、分配说明(选填)

  • 业务规则:管理员/领导分配;商机退出公海归被分配人

  • 预期接口(状态机)

    • POST /api/opportunity/{id}/assignPOST /api/opportunity/assign body {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/pageGET /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/page
  • POST /api/opportunity/recent-visits/touch
  • POST /api/opportunity/page
  • POST /api/opportunity/board/stage-summary
  • POST /api/opportunity/board/cards
  • POST /api/opportunity/pool/page

详情/基础 (6 条)

  • POST /api/opportunity
  • GET /api/opportunity/{id}
  • GET /api/opportunity/{id}/customers
  • POST /api/opportunity/{id}/customers/set-primary
  • PUT /api/opportunity/{id}
  • POST /api/opportunity/{id}/customers

状态机(流转) (10 条)

  • POST /api/opportunity/claim
  • POST /api/opportunity/assign
  • POST /api/opportunity/assign/batch
  • POST /api/opportunity/close/batch
  • POST /api/opportunity/claim/batch
  • POST /api/opportunity/{id}/pause
  • POST /api/opportunity/{id}/release-to-pool
  • POST /api/opportunity/{id}/close
  • POST /api/opportunity/{id}/claim
  • POST /api/opportunity/{id}/assign

阶段推进 (1 条)

  • GET /api/opportunity/stage/progress?opportunityId={id}

方案卡 (8 条)

  • GET /api/opportunity/{id}/scheme-cards
  • 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}
  • POST /api/opportunity/scheme-card
  • GET /api/opportunity/scheme-card/template?deptId={deptId}

跟进记录 (3 条)

  • GET /api/opportunity/{id}/follow-ups?limit=3
  • POST /api/opportunity/{id}/follow-ups/page
  • POST /api/opportunity/{id}/follow-ups

现场勘察 (2 条)

  • GET /api/opportunity/{id}/surveys
  • POST /api/opportunity/{id}/surveys

附件 (5 条)

  • GET /api/opportunity/{id}/attachments
  • POST /api/opportunity/{id}/attachments
  • DELETE /api/opportunity/attachment/{attachId}
  • GET /api/opportunity/attachment/{attachId}/download
  • POST /api/file/upload

团队成员 (2 条)

  • GET /api/opportunity/{id}/members
  • DELETE /api/opportunity/{id}/members/{userId}

操作日志 (1 条)

  • GET /api/opportunity/{id}/operation-logs

协作(关注/领取) (3 条)

  • POST /api/opportunity/follow
  • DELETE /api/opportunity/follow/{opportunityId}
  • POST /api/opportunity/follow/batch

视图/自定义字段 (2 条)

  • GET /api/user/customize/columns?scene=opportunity-list
  • POST /api/user/customize/columns

字典查询/候选 (18 条)

  • GET /api/dict/industry
  • GET /api/dict/region
  • GET /api/dict/source
  • GET /api/user/assignable
  • GET /api/dict/pool-entry-reason
  • GET /api/customer/{id}
  • GET /api/dict/opportunity-source
  • GET /api/dict/bidding-type
  • GET /api/dict/region/tree
  • GET /api/dict/follow-up-method
  • GET /api/dict/follow-up-result
  • GET /api/dict/intro-stage
  • POST /api/customer/search
  • GET /api/dict/pause-reason
  • GET /api/dict/pool-scope
  • GET /api/dict/close-reason
  • GET /api/user/list?dept=
  • GET /api/dept/list

规则-阶段模板 (9 条)

  • GET /api/opportunity/stage-template/page
  • DELETE /api/opportunity/stage-template/{id}
  • POST /api/opportunity/stage-template/{id}/copy
  • GET /api/opportunity/stage-template/{id}
  • GET /api/opportunity/stage-template/{id}/versions
  • 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

规则-方案卡模板 (9 条)

  • GET /api/opportunity/scheme-card-template/page
  • DELETE /api/opportunity/scheme-card-template/{id}
  • POST /api/opportunity/scheme-card-template/{id}/copy
  • GET /api/opportunity/scheme-card-template/{id}
  • GET /api/opportunity/scheme-card-template/{id}/versions
  • 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

规则-公海规则 (9 条)

  • GET /api/opportunity/pool-rule/page
  • DELETE /api/opportunity/pool-rule/{id}
  • POST /api/opportunity/pool-rule/{id}/copy
  • GET /api/opportunity/pool-rule/{id}
  • GET /api/opportunity/pool-rule/{id}/versions
  • 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

规则-字典 (9 条)

  • GET /api/dict/items?group=opportunity_stage
  • 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