docs: 重构供应商招标报名模块详细设计文档

主要变更:
- 新增报名全流程 Mermaid 流程图,覆盖供应商端、STP平台内部及外部系统交互
- 重构页面流转图,简化登录验证流程,突出报名信息确认核心环节
- 重新设计报名信息确认页 SVG 原型,字段改为从 SRM 自动读取(只读),
  增加投标标段多选、业绩证明材料管理(上传/档案复用)功能
- 新增提交成功反馈页面 SVG 原型
- 新增业绩证明材料管理规则(首次上传归入档案、后续自动调出、去重等)
- 简化状态机,新增 BID_PLAN_PASSED 状态,明确招标方案评审通过后才触发缴费
- 补充报名审核通过通知模板
- 删除报名表单字段定义附录(字段已在页面元素定义表中体现)
- 移除冗余性能要求描述,精简安全要求
- 文件变更:+319 行,-122 行
This commit is contained in:
2026-07-01 12:19:11 +08:00
parent faeb980630
commit 637105cf64
@@ -4,33 +4,82 @@
供应商从获知招标公告到完成报名并获取投标资格,涉及**公告浏览 → 身份认证 → 报名申请 → 资质审核 → 费用缴纳 → 文件获取 → 投标文件上传**七大环节。本设计覆盖全流程的**页面交互**、**系统跳转**与**内部处理逻辑**,并充分复用现有 SRM 供应商库与统一认证体系。
```mermaid
%%{init: {'theme':'base', 'themeVariables': {'primaryColor':'#e91e63','lineColor':'#555','secondaryColor':'#f3f4f6'}}}%%
flowchart TD
subgraph 供应商端
A[浏览招标公告] --> B{是否已登录?}
B -- 是 --> D[点击“报名”]
B -- 否 --> C[登录/注册]
C --> D
D --> E[系统自动读取<br>联系人/手机号/营业执照]
E --> F[供应商确认信息并提交]
F --> G[报名提交成功<br>等待审核通知]
G --> H[收到审核结果通知]
H -- 通过 --> I[收到缴费通知<br>(招标方案评审通过后)]
H -- 不通过 --> J[查看拒绝原因]
J --> K{是否可重新提交?}
K -- 是 --> D
K -- 否 --> L[报名流程终止]
I --> M[进入缴费与投标环节<br>(后续流程)]
end
subgraph STP平台内部
STP1[接收报名请求] --> STP2[AI辅助资质审核<br>(核验已存证资质文件)]
STP2 --> STP3{是否需要人工评审?}
STP3 -- 是 --> STP4[推送人工评审任务]
STP3 -- 否 --> STP5[自动通过]
STP4 --> STP6[人工评审]
STP6 --> STP7[反馈结果]
STP5 --> STP8[更新报名状态]
STP7 --> STP8
STP8 --> STP9[形成报名通过单位名单]
STP9 --> STP10[发送审核结果通知]
STP10 --> STP11[等待招标方案评审通过]
STP11 -- 招标方案通过 --> STP12[发送缴费通知<br>解锁标书查看权限]
STP12 --> STP13[后续投标流程]
end
subgraph 外部系统
SRM[(SRM供应商库)]
OA[(OA审批系统)]
end
供应商端 -.-> STP平台内部
STP平台内部 -.-> SRM
STP平台内部 -.-> OA
SRM -- 供应商信息读取 --> STP2
OA -- 招标方案评审结果回调 --> STP11
```
## 页面流转与跳转设计
```mermaid
graph TD
A[招标公告详情页] -->|点击“立即报名”| B{登录检查}
B -->|未登录| C[登录/注册选择页]
C -->|选择“STP账号登录”| D[STP登录表单]
C -->|选择“SRM账号登录”| E[SRM登录表单(无感验证)]
D --> F[验证通过 → 跳转报名页]
E -->|调用SRM验证接口| F
C -->|选择“新用户注册”| G[注册表单]
G -->|提交注册| H[注册成功 → 自动登录 → 跳转报名页]
F --> I[报名信息填写页]
I -->|填写基本信息+上传资质| J[预览确认页]
J -->|提交| K[报名提交成功页(等待审核)]
K -->|审核通过(邮件通知)| L[缴费通知页]
L -->|选择支付方式| M[在线支付/上传凭证]
M -->|支付完成| N[缴费确认中]
N -->|财务确认到账| O[招标文件下载页]
O -->|下载文件| P[投标文件上传页]
P -->|加密上传| Q[上传成功页]
Q -->|等待开标| R[我的项目列表(状态已报名)]
C -->|选择登录方式| D[验证通过]
C -->|新用户注册| E[注册并同步至SRM]
E --> D
D --> F[报名信息确认页]
F -->|系统自动回填| G[联系人/手机号/营业执照<br>(只读展示,不可编辑)]
F -->|供应商可选择| H[投标标段(多选)]
F -->|供应商可填写| I[业绩简述/备注(可选)]
G --> J[确认信息并提交]
H --> J
I --> J
J --> K[报名提交成功页]
K --> L[等待审核通知(邮件/站内信)]
L --> M[审核通过/不通过通知]
M -->|不通过| N[查看原因,按需重新提交]
M -->|通过| O[报名通过名单公布<br>等待招标方案评审]
O --> P[招标方案通过→收到缴费通知]
P --> Q[进入后续缴费与投标环节]
style A fill:#fce4ec,stroke:#c2185b,stroke-width:2px
style A fill:#fce4ec,stroke:#c2185b
style F fill:#e3f2fd,stroke:#1565c0
style K fill:#e8f5e9,stroke:#388e3c
style Q fill:#e8f5e9,stroke:#388e3c
style R fill:#e3f2fd,stroke:#1565c0
style O fill:#fff3e0,stroke:#ff9800
```
@@ -87,110 +136,270 @@ sequenceDiagram
```
## 页面原型设计
下面以**报名信息填写页**为例,展示核心表单与操作区。
## 招标报名页面:
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 720" font-family="'Microsoft YaHei', sans-serif">
<!-- 背景 -->
<rect width="1024" height="720" fill="#f5f7fa"/>
<!-- 顶部导航栏 -->
<rect width="1024" height="64" fill="#ffffff" stroke="#e0e0e0" stroke-width="1"/>
<text x="24" y="40" font-size="20" font-weight="bold" fill="#c2185b">智慧招标平台</text>
<text x="750" y="40" font-size="14" fill="#666">欢迎,XX科技公司</text>
<rect x="880" y="20" width="100" height="30" rx="4" fill="#f44336" />
<text x="920" y="40" font-size="13" fill="#fff" text-anchor="middle">退出</text>
<!-- 步骤条 -->
<rect x="120" y="80" width="784" height="40" rx="6" fill="#fff" stroke="#e0e0e0"/>
<text x="180" y="105" font-size="14" fill="#c2185b" font-weight="bold">① 阅读公告</text>
<text x="330" y="105" font-size="14" fill="#c2185b" font-weight="bold">② 报名信息</text>
<text x="480" y="105" font-size="14" fill="#999">③ 资质审核</text>
<text x="630" y="105" font-size="14" fill="#999">④ 缴纳费用</text>
<text x="780" y="105" font-size="14" fill="#999">⑤ 投标文件</text>
<!-- 连线 -->
<line x1="240" y1="95" x2="320" y2="95" stroke="#c2185b" stroke-width="2"/>
<line x1="400" y1="95" x2="470" y2="95" stroke="#ccc" stroke-width="2"/>
<line x1="550" y1="95" x2="620" y2="95" stroke="#ccc" stroke-width="2"/>
<line x1="700" y1="95" x2="770" y2="95" stroke="#ccc" stroke-width="2"/>
<!-- 主表单卡片 -->
<rect x="120" y="140" width="784" height="520" rx="8" fill="#ffffff" filter="url(#shadow)"/>
<text x="150" y="180" font-size="18" font-weight="bold" fill="#333">报名信息填写</text>
<text x="150" y="205" font-size="14" fill="#888">项目:2026年生产用原材料采购(标段A)</text>
<line x1="150" y1="220" x2="874" y2="220" stroke="#eee" stroke-width="1"/>
<!-- 表单字段 -->
<text x="150" y="260" font-size="14" fill="#333">联系人姓名 <tspan fill="red">*</tspan></text>
<rect x="150" y="270" width="200" height="32" rx="4" fill="#fafafa" stroke="#ccc"/>
<text x="160" y="292" font-size="13" fill="#999">请输入联系人</text>
<text x="420" y="260" font-size="14" fill="#333">手机号 <tspan fill="red">*</tspan></text>
<rect x="420" y="270" width="200" height="32" rx="4" fill="#fafafa" stroke="#ccc"/>
<text x="430" y="292" font-size="13" fill="#999">请输入手机号</text>
<text x="150" y="330" font-size="14" fill="#333">投标标段(可多选)</text>
<rect x="150" y="340" width="300" height="32" rx="4" fill="#fafafa" stroke="#ccc"/>
<text x="160" y="362" font-size="13" fill="#999">☑ 标段A ☐ 标段B ☐ 标段C</text>
<text x="150" y="400" font-size="14" fill="#333">上传营业执照 <tspan fill="red">*</tspan></text>
<rect x="150" y="410" width="400" height="80" rx="4" stroke-dasharray="5,5" fill="#fafafa" stroke="#ccc"/>
<text x="280" y="445" font-size="13" fill="#999" text-anchor="middle">点击或拖拽上传(支持 PDF/JPG,≤10MB</text>
<text x="280" y="470" font-size="12" fill="#aaa" text-anchor="middle">已上传:0个文件</text>
<text x="150" y="520" font-size="14" fill="#333">业绩证明材料(可选)</text>
<rect x="150" y="530" width="400" height="60" rx="4" stroke-dasharray="5,5" fill="#fafafa" stroke="#ccc"/>
<text x="280" y="565" font-size="13" fill="#999" text-anchor="middle">点击上传合同/业绩报告</text>
<!-- 按钮区 -->
<rect x="150" y="610" width="120" height="36" rx="4" fill="#e0e0e0"/>
<text x="210" y="634" font-size="14" fill="#666" text-anchor="middle">返回</text>
<rect x="600" y="610" width="160" height="36" rx="4" fill="#c2185b"/>
<text x="680" y="634" font-size="14" fill="#fff" text-anchor="middle">提交报名</text>
<text x="630" y="655" font-size="12" fill="#888">* 提交后不可修改,请仔细核对</text>
<!-- 阴影定义 -->
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 820" font-family="'Microsoft YaHei', 'PingFang SC', sans-serif">
<defs>
<filter id="shadow" x="-5%" y="-5%" width="110%" height="110%">
<feDropShadow dx="0" dy="4" stdDeviation="6" flood-opacity="0.06"/>
</filter>
<filter id="hoverShadow" x="-5%" y="-5%" width="110%" height="110%">
<feDropShadow dx="0" dy="2" stdDeviation="4" flood-opacity="0.12"/>
</filter>
<linearGradient id="headerGrad" x1="0" y1="0" x2="1" y2="0">
<stop offset="0%" stop-color="#c2185b"/>
<stop offset="100%" stop-color="#e91e63"/>
</linearGradient>
<linearGradient id="btnGrad" x1="0" y1="0" x2="1" y2="0">
<stop offset="0%" stop-color="#c2185b"/>
<stop offset="100%" stop-color="#e91e63"/>
</linearGradient>
</defs>
<!-- 背景 -->
<rect width="1024" height="820" fill="#f5f7fa"/>
<!-- 顶部导航栏 -->
<rect width="1024" height="64" fill="#ffffff" stroke="#e8e8e8" stroke-width="1"/>
<circle cx="40" cy="32" r="16" fill="url(#headerGrad)"/>
<text x="64" y="38" font-size="20" font-weight="bold" fill="#c2185b">智慧招标平台</text>
<text x="760" y="38" font-size="14" fill="#666">欢迎,XX科技有限公司</text>
<rect x="880" y="18" width="36" height="36" rx="50%" fill="#f5f5f5"/>
<circle cx="898" cy="36" r="14" fill="#ccc"/>
<text x="898" y="40" font-size="12" fill="#666" text-anchor="middle"></text>
<!-- 面包屑 -->
<text x="120" y="100" font-size="13" fill="#999">首页</text>
<text x="155" y="100" font-size="13" fill="#999"></text>
<text x="175" y="100" font-size="13" fill="#999">招标公告</text>
<text x="255" y="100" font-size="13" fill="#999"></text>
<text x="275" y="100" font-size="13" fill="#c2185b" font-weight="bold">报名确认</text>
<!-- 步骤条 -->
<rect x="120" y="120" width="784" height="40" rx="8" fill="#ffffff" stroke="#e8e8e8"/>
<circle cx="170" cy="140" r="14" fill="#c2185b"/>
<text x="170" y="145" font-size="12" fill="#fff" text-anchor="middle" font-weight="bold">1</text>
<text x="192" y="145" font-size="14" fill="#c2185b" font-weight="bold">阅读公告</text>
<line x1="280" y1="140" x2="360" y2="140" stroke="#c2185b" stroke-width="2"/>
<circle cx="330" cy="140" r="14" fill="#c2185b"/>
<text x="330" y="145" font-size="12" fill="#fff" text-anchor="middle" font-weight="bold">2</text>
<text x="352" y="145" font-size="14" fill="#c2185b" font-weight="bold">确认报名</text>
<line x1="440" y1="140" x2="520" y2="140" stroke="#ddd" stroke-width="2"/>
<circle cx="490" cy="140" r="14" fill="#ddd"/>
<text x="490" y="145" font-size="12" fill="#999" text-anchor="middle">3</text>
<text x="512" y="145" font-size="14" fill="#999">审核</text>
<line x1="600" y1="140" x2="680" y2="140" stroke="#ddd" stroke-width="2"/>
<circle cx="650" cy="140" r="14" fill="#ddd"/>
<text x="650" y="145" font-size="12" fill="#999" text-anchor="middle">4</text>
<text x="672" y="145" font-size="14" fill="#999">后续环节</text>
<!-- 主卡片 -->
<rect x="120" y="180" width="784" height="590" rx="10" fill="#ffffff" filter="url(#shadow)"/>
<!-- 项目信息头部 -->
<rect x="120" y="180" width="784" height="56" rx="10" fill="url(#headerGrad)"/>
<rect x="120" y="220" width="784" height="16" fill="url(#headerGrad)"/>
<text x="150" y="216" font-size="18" font-weight="bold" fill="#fff">报名信息确认</text>
<!-- 项目信息条 -->
<rect x="150" y="250" width="724" height="44" rx="6" fill="#fce4ec"/>
<text x="170" y="278" font-size="14" fill="#c2185b" font-weight="bold">项目名称:</text>
<text x="270" y="278" font-size="14" fill="#333">2026年生产用原材料框架协议采购</text>
<text x="620" y="278" font-size="13" fill="#999">项目编号:BH-PROC-2026-0018</text>
<!-- 信息提示 -->
<rect x="150" y="308" width="724" height="30" rx="4" fill="#e3f2fd"/>
<text x="170" y="329" font-size="13" fill="#1565c0">📋 以下信息已从您的注册资料中自动读取,请核对</text>
<!-- 表单区域 -->
<!-- 公司名称 -->
<text x="150" y="368" font-size="14" fill="#555">公司名称</text>
<rect x="150" y="378" width="340" height="36" rx="4" fill="#f9f9f9" stroke="#e0e0e0"/>
<text x="165" y="402" font-size="14" fill="#333">XX科技有限公司</text>
<!-- 联系人 -->
<text x="530" y="368" font-size="14" fill="#555">联系人</text>
<rect x="530" y="378" width="340" height="36" rx="4" fill="#f9f9f9" stroke="#e0e0e0"/>
<text x="545" y="402" font-size="14" fill="#333">张三</text>
<!-- 联系电话 -->
<text x="150" y="438" font-size="14" fill="#555">联系电话</text>
<rect x="150" y="448" width="340" height="36" rx="4" fill="#f9f9f9" stroke="#e0e0e0"/>
<text x="165" y="472" font-size="14" fill="#333">138-0000-8888</text>
<!-- 电子邮件 -->
<text x="530" y="438" font-size="14" fill="#555">电子邮件</text>
<rect x="530" y="448" width="340" height="36" rx="4" fill="#f9f9f9" stroke="#e0e0e0"/>
<text x="545" y="472" font-size="14" fill="#333">zhangsan@xx-tech.com</text>
<!-- 投标标段 -->
<text x="150" y="518" font-size="14" fill="#555">投标标段 <tspan fill="#e53935">*</tspan></text>
<rect x="150" y="528" width="340" height="36" rx="4" fill="#fafafa" stroke="#d0d0d0"/>
<text x="170" y="552" font-size="14" fill="#333">☑ 标段A(原材料)</text>
<text x="330" y="552" font-size="14" fill="#333">☐ 标段B(辅料)</text>
<text x="490" y="552" font-size="14" fill="#333">☐ 标段C(包装)</text>
<!-- 业绩证明材料 -->
<text x="150" y="598" font-size="14" fill="#555">业绩证明材料</text>
<text x="290" y="598" font-size="12" fill="#999">(首次上传将自动归入用户档案,下次可复用)</text>
<!-- 上传区域 -->
<rect x="150" y="608" width="724" height="80" rx="6" stroke-dasharray="6,6" fill="#fafafa" stroke="#ccc"/>
<text x="512" y="640" font-size="14" fill="#999" text-anchor="middle">📤 点击或拖拽上传业绩证明材料</text>
<text x="512" y="665" font-size="12" fill="#bbb" text-anchor="middle">支持 PDF、DOC、JPG 格式,单个文件不超过 20MB</text>
<!-- 已有档案材料(复用) -->
<rect x="150" y="700" width="724" height="1" fill="#eee"/>
<text x="150" y="722" font-size="13" fill="#888">📂 从用户档案中选用已有材料:</text>
<rect x="150" y="732" width="200" height="28" rx="4" fill="#e8f5e9" stroke="#a5d6a7"/>
<text x="165" y="752" font-size="13" fill="#2e7d32">✅ 2025年业绩报告.pdf</text>
<rect x="362" y="732" width="28" height="28" rx="50%" fill="#ef5350"/>
<text x="376" y="752" font-size="14" fill="#fff" text-anchor="middle">×</text>
<rect x="400" y="732" width="180" height="28" rx="4" fill="#e8f5e9" stroke="#a5d6a7"/>
<text x="415" y="752" font-size="13" fill="#2e7d32">✅ 2024年合同.pdf</text>
<rect x="592" y="732" width="28" height="28" rx="50%" fill="#ef5350"/>
<text x="606" y="752" font-size="14" fill="#fff" text-anchor="middle">×</text>
<!-- 按钮 -->
<rect x="150" y="780" width="100" height="38" rx="6" fill="#e8e8e8"/>
<text x="200" y="805" font-size="14" fill="#666" text-anchor="middle">返回</text>
<rect x="650" y="780" width="160" height="38" rx="6" fill="url(#btnGrad)" filter="url(#hoverShadow)"/>
<text x="730" y="805" font-size="14" fill="#fff" text-anchor="middle" font-weight="bold">确认提交报名</text>
<text x="650" y="818" font-size="11" fill="#999">提交后不可修改</text>
</svg>
```
## 页面元素定义表
| 序号 | 字段名称 | 数据来源 | 可编辑性 | 说明 |
| --- | ---------- | --------- | ---- | ---------------------------- |
| 1 | **项目名称** | 系统自动带入 | 只读 | 显示拟报名的投标项目名称 |
| 2 | **项目编号** | 系统自动带入 | 隐藏字段 | 内部项目编号,用于后台关联,页面不展示 |
| 3 | **公司名称** | SRM注册信息 | 只读 | 统一社会信用代码对应的企业全称 |
| 4 | **联系人** | SRM注册信息 | 只读 | 供应商主联系人姓名 |
| 5 | **联系电话** | SRM注册信息 | 只读 | 供应商注册手机号 |
| 6 | **电子邮件** | SRM注册信息 | 只读 | 供应商注册邮箱 |
| 7 | **投标标段** | 系统配置 | 可多选 | 仅当项目分标段时显示;可多选或全选 |
| 8 | **业绩证明材料** | 上传 / 用户档案 | 可编辑 | 首次上传自动归入用户档案,下次自动调出;用户可删除或新增 |
## 提交成功反馈页面
```svg
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 600" font-family="'Microsoft YaHei', 'PingFang SC', sans-serif">
<defs>
<filter id="shadow" x="-5%" y="-5%" width="110%" height="110%">
<feDropShadow dx="0" dy="4" stdDeviation="8" flood-opacity="0.08"/>
</filter>
<linearGradient id="successGrad" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stop-color="#e8f5e9"/>
<stop offset="100%" stop-color="#f1f8e9"/>
</linearGradient>
</defs>
<rect width="1024" height="600" fill="#f5f7fa"/>
<!-- 顶部导航 -->
<rect width="1024" height="56" fill="#ffffff" stroke="#e8e8e8" stroke-width="1"/>
<text x="40" y="38" font-size="20" font-weight="bold" fill="#c2185b">智慧招标平台</text>
<!-- 成功卡片 -->
<rect x="262" y="80" width="500" height="420" rx="12" fill="#ffffff" filter="url(#shadow)"/>
<!-- 成功图标 -->
<circle cx="512" cy="170" r="50" fill="#4caf50"/>
<path d="M485 170 L505 190 L545 150" stroke="#fff" stroke-width="6" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
<text x="512" y="260" font-size="24" font-weight="bold" fill="#333" text-anchor="middle">报名提交成功!</text>
<text x="512" y="300" font-size="15" fill="#666" text-anchor="middle">您的报名申请已提交,请耐心等待审核。</text>
<rect x="330" y="320" width="364" height="36" rx="6" fill="#fff8e1"/>
<text x="512" y="344" font-size="13" fill="#f57c00" text-anchor="middle">📌 审核结果将通过站内信、邮件、短信通知,请注意查收</text>
<!-- 分隔线 -->
<line x1="330" y1="370" x2="694" y2="370" stroke="#eee" stroke-width="1"/>
<!-- 快捷操作 -->
<text x="512" y="400" font-size="14" fill="#888" text-anchor="middle">您还可以:</text>
<rect x="330" y="415" width="160" height="36" rx="6" fill="#f5f5f5" stroke="#ddd"/>
<text x="410" y="439" font-size="14" fill="#555" text-anchor="middle">📋 查看我的报名</text>
<rect x="510" y="415" width="160" height="36" rx="6" fill="#f5f5f5" stroke="#ddd"/>
<text x="590" y="439" font-size="14" fill="#555" text-anchor="middle">📄 返回招标公告</text>
<rect x="362" y="468" width="300" height="36" rx="6" fill="#c2185b"/>
<text x="512" y="492" font-size="14" fill="#fff" text-anchor="middle" font-weight="bold">进入个人中心查看报名状态</text>
</svg>
```
## 业绩证明材料管理规则
```mermaid
flowchart LR
subgraph 首次报名
A[上传业绩材料] --> B[提交报名]
B --> C[系统自动归入<br>用户档案]
end
subgraph 后续报名
D[进入报名页] --> E[系统自动调出<br>用户档案材料]
E --> F{用户操作}
F -->|选用已有| G[直接使用]
F -->|删除| H[从本次报名移除<br>(档案中保留)]
F -->|新增| I[上传新材料]
I --> J[归入档案]
G --> K[提交报名]
H --> K
J --> K
end
```
|规则|说明|
|---|---|
|**首次上传**|用户上传的业绩材料在报名提交后,系统自动复制一份归入用户档案(用户档案表),标记来源为“报名上传”|
|**后续复用**|用户进入报名页时,系统从用户档案中读取历史业绩材料,以列表形式展示,用户可直接选用|
|**删除**|用户在本次报名中删除某材料,仅从本次报名清单移除,用户档案中仍保留,不影响后续使用|
|**新增**|用户上传新材料,归入档案的同时也纳入本次报名,后续报名可继续复用|
|**去重**|系统按文件名+哈希值去重,同一文件不重复存储|
### 提交成功(邮件/站内信)
|项目|内容|
|---|---|
|**标题**|【STP平台】报名提交成功通知|
|**正文**|尊敬的 XX科技有限公司: <br> <br>您对【2026年生产用原材料框架协议采购(标段A)】的报名已成功提交。 <br> <br>我们将对您的报名资格进行审核,审核结果将通过邮件和站内信通知您,请耐心等待。 <br> <br>如需查看报名状态,请登录STP平台“我的报名”页面。 <br> <br>🔗 [https://stp.bhtz.com/my-registrations](https://stp.bhtz.com/my-registrations)|
## 状态机与内部处理逻辑
| 状态码 | 状态名称 | 描述 | 触发动作 |
| -------------------- | ------ | ------------------- | --------------------- |
| `DRAFT` | 草稿 | 供应商正在填写报名表单,尚未提交 | 保存草稿,允许修改 |
| `PENDING_REVIEW` | 待审核 | 提交报名,等待AI初审或人工评审 | 触发AI审核;若需人工,则生成评审任务 |
| `AI_PASS` | AI自动通过 | 资质齐全,无风险,直接通过 | 发送审核通过通知,生成缴费单 |
| `MANUAL_REVIEW` | 人工评审中 | 需采购部门/供应商管理专员人工确认 | 推送待办至相关人员,超时催办 |
| `REJECTED` | 审核不通过 | 资质不符存在风险,被驳回 | 发送拒绝原因,允许重新提交(在报名截止前) |
| `PENDING_PAYMENT` | 待缴费 | 审核通过,等待缴纳标书费/保证金 | 生成缴费单,发送缴费通知 |
| `PAYMENT_CONFIRMING` | 缴费确认中 | 供应商已上传凭证,等待财务确认 | 发起OA审批,财务确认到账 |
| `PAYMENT_FAILED` | 缴费失败 | 超时未缴或财务确认为未到账 | 取消报名资格,释放名额 |
| `PAID` | 已缴费 | 缴费成功,招标文件已解锁 | 开放文件下载权限,记录缴费信息 |
| `BID_SUBMITTED` | 已投标 | 投标文件加密上传完成 | 存证哈希,报名流程结束 |
| `CANCELLED` | 已取消 | 供应商主动取消报名,或项目废标导致失效 | 退回保证金(如有),归档取消记录 |
| 状态码 | 状态名称 | 描述 | 触发动作 |
| ----------------- | ------ | --------------- | ----------------------- |
| `DRAFT` | 草稿 | 供应商正在查看报名页,尚未提交 | 保存草稿 |
| `SUBMITTED` | 已提交 | 确认提交报名,等待审核 | 触发AI初审,生成审核任务 |
| `AI_PASS` | AI自动通过 | 资质审核通过 | 进入“报名通过名单”候选池 |
| `MANUAL_REVIEW` | 人工评审中 | 需采购/供应商管理专员确认 | 推送待办,超时催办 |
| `REJECTED` | 审核不通过 | 资质不符/存在风险 | 发送拒绝原因,允许在截止前重新提交 |
| `APPROVED` | 报名通过 | 审核通过,已纳入报名通过名单 | **等待招标方案评审通过**(此处为关键状态) |
| `BID_PLAN_PASSED` | 招标方案通过 | 招标方案已过审 | **发送缴费通知**,进入后续流程 |
| `CANCELLED` | 已取消 | 供应商主动取消 | 归档取消记录 |
## 关键业务规则与异常处理
| 场景 | 处理方式 |
| ------------------------ | ------------------------------------------------------------------ |
| **标书费/保证金支付超时** | 系统在截止时间前24h/12h/1h 三级催办;超时自动取消报名资格并释放名额。 |
| **同一供应商重复报名** | 系统检测到同一税号或统一信用代码的供应商已报名,提示“已报名,不能重复提交”。 |
| **资质文件大小/格式不符** | 前端限制 + 后端二次校验,不符合时返回明确错误提示。 |
| **报名截止时间已过** | 按钮置灰,提示“报名已截止”,不允许新提交。 |
| **==联合体投标(待确定,留扩展接口)==** | 允许在报名时添加联合体成员(需分别提供资质),系统自动校验成员关联关系。 |
| **无感登录票据过期** | 跳转时若票据超时,提示“登录状态已过期,请重新登录”,跳转至登录页。 |
| **财务确认超时** | 系统自动催办财务审批人;若超时,支持招标专员手动确认(需备注理由)。 |
| **==投标文件加密方式(待确定)==** | 沿用系统统一加密方案(平台端加解密),同时为供应商提供“个人加密”选项(开关),若选个人加密则生成独立密钥,开标时需供应商在线解密。 |
| 场景 | 处理方式 |
| ------------------------ | --------------------------------------- |
| **同一供应商重复报名** | 系统检测到同一税号或统一信用代码的供应商已报名,提示“已报名,不能重复提交”。 |
| **资质文件大小/格式不符** | 前端限制 + 后端二次校验,不符合时返回明确错误提示。 |
| **报名截止时间已过** | 按钮置灰,提示“报名已截止”,不允许新提交。 |
| **==联合体投标(待确定,留扩展接口)==** | 允许在报名时添加联合体成员(需分别提供资质),系统自动校验成员关联关系。 |
| **无感登录票据过期** | 跳转时若票据超时,提示“登录状态已过期,请重新登录”,跳转至登录页。 |
| | |
## 通知与提醒策略
@@ -205,28 +414,16 @@ sequenceDiagram
| 财务审批待办 | 站内信 + 邮件 | 财务人员 |
| 系统异常告警(支付回调失败等) | 飞书/短信 | 系统管理员 |
### 报名审核通过 → 缴费通知
| 项目 | 内容 |
| ------ | ----------------------------------------------------------------------------------------------------------------------------------- |
| **标题** | 【STP平台】报名审核通过通知 |
| **正文** | 尊敬的 XX科技有限公司: <br>您对【2026年生产用原材料框架协议采购(标段A)】的报名已通过审核,已纳入本项目报名通过名单。 请及时登录STP平台查看和下载招标文件。<br> <br>如有疑问,请联系招标专员:王工 010-8888xxxx<br> |
## 性能与安全要求
- **并发报名**:支持单项目100+供应商同时报名,响应时间≤3秒。
- **文件上传**:支持断点续传,单个文件≤500MB,总大小≤2GB。
- **数据加密**:报名表单中的联系人手机号、身份证号采用字段级加密存储
- **防机器人**:报名提交时增加图形验证码或行为验证,防止恶意刷单。
- **并发报名**:支持单项目100+供应商同时报名,响应时间≤3秒。
- **文件上传**:支持断点续传,单个文件≤500MB,总大小≤2GB。
- **数据加密**:报名表单中的联系人手机号、身份证号采用字段级加密存储
- **日志审计**:所有报名操作(登录、提交、审核、缴费)均记录审计日志,保留≥7年。
## 附录:报名表单字段定义
| 字段名 | 类型 | 必填 | 说明 |
| --------------------- | ------ | --- | --------------------------------- |
| `projectId` | String | 是 | 招标项目ID,自动带入 |
| `bidSection` | Array | 是 | 投标标段(多选) |
| `contactName` | String | 是 | 联系人姓名 |
| `contactPhone` | String | 是 | 手机号,需短信验证(可选) |
| `contactEmail` | String | 是 | 邮箱 |
| `qualificationFiles` | Array | 是 | 资质文件列表(营业执照、资质证书、授权书等),每个文件需有类型标签 |
| `performanceFiles` | Array | 否 | 业绩证明文件 |
| `jointVentureMembers` | Array | 否 | 联合体成员列表(供应商ID+名称+税号) |
| `remarks` | String | 否 | 备注 |