1928 lines
58 KiB
Markdown
1928 lines
58 KiB
Markdown
|
|
# 自行招标流程接口文档(含前端需求说明)
|
|||
|
|
|
|||
|
|
**版本**:V1.3
|
|||
|
|
**日期**:2026-06-30
|
|||
|
|
**对应需求**:3.7.4 自行招标流程(完整流程:发起节点至投标方终报)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 1. 需求概述
|
|||
|
|
|
|||
|
|
### 1.1 流程说明
|
|||
|
|
|
|||
|
|
自行招标流程包含以下前端页面:
|
|||
|
|
|
|||
|
|
| 页面 | 节点名称 | 节点编号 | 页面类型 | 说明 |
|
|||
|
|
|------|----------|----------|----------|------|
|
|||
|
|
| 发起页面 | 招采发起人 | 3.7.4.1 | 表单填写 | 发起人填写招标信息,自动带出预招标数据 |
|
|||
|
|
| 审批页面 | 招采负责人初审 | 3.7.4.2 | 表单编辑 | 招采负责人补充招标公告信息,上传文件 |
|
|||
|
|
| 终审页面 | 总裁办负责人审批 | 3.7.4.3 | 审批节点 | 总裁办主任审核公告内容,终审通过 |
|
|||
|
|
| 供应商报名页面 | 招采平台供应商报名入口 | 3.7.4.4 | 外部节点 | 供应商查看项目列表并报名 |
|
|||
|
|
| 资质审核页面 | 供应商资质审核 | 3.7.4.5 | 审批节点 | 招采负责人审核供应商资质 |
|
|||
|
|
| 开标页面 | 开标 | 3.7.4.6 | 执行节点 | 招采负责人确认签到数量并开标 |
|
|||
|
|
| 投标页面 | 投标 | 3.7.4.6 | 执行节点 | 供应商签到、上传投标文件、填写报价 |
|
|||
|
|
| 唱标页面 | 唱标 | 3.7.4.7 | 展示节点 | 展示投标方报价信息,生成唱标记录表 |
|
|||
|
|
| 专家签到页面 | 专家签到 | 3.7.4.8 | 交互节点 | 专家线上签到并电子签署文件 |
|
|||
|
|
| 专家评标页面 | 专家评标 | 3.7.4.9 | 评审节点 | 专家对投标方进行评分 |
|
|||
|
|
| 资格认定表审批页面 | 资格认定表审批 | 3.7.4.10 | 审批节点 | 招采负责人审核资格认定表 |
|
|||
|
|
| 供应商报价页面 | 供应商多轮报价 | 3.7.4.11/15 | 报价节点 | 入围供应商进行多轮报价(含终报) |
|
|||
|
|
| 出报价分页面 | 出报价分 | 3.7.4.12 | 计算节点 | 根据评分规则计算报价分 |
|
|||
|
|
| 投票页面 | 投票页面 | 3.7.4.13 | 投票节点 | 业务部门进行投票选定入围供应商 |
|
|||
|
|
| 确定入围供应商页面 | 确定入围供应商 | 3.7.4.14 | 确认节点 | 确认入围名单并通知供应商 |
|
|||
|
|
|
|||
|
|
> **说明**:当前阶段已实现节点 3.7.4.1 和 3.7.4.2,后续节点(3.7.4.3-3.7.4.14)为待开发内容。
|
|||
|
|
|
|||
|
|
### 1.2 前端架构
|
|||
|
|
|
|||
|
|
- **主页面**:`PendingBidding.vue`(已有)通过流程引擎挂载,根据节点名称动态加载子页面
|
|||
|
|
- **子页面**:每个节点对应一个独立的 Vue 页面,通过 `<component :is="">` 动态切换
|
|||
|
|
- **技术栈**:Vue 3 + Element Plus + Pinia + TypeScript
|
|||
|
|
- **附件**:系统标准 MinIO 上传(`el-upload` + `/api/bidding-self/upload`)
|
|||
|
|
- **时区**:所有时间统一东八区(Asia/Shanghai)
|
|||
|
|
- **防抖**:按钮提交防抖 3 秒
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 2. 接口清单
|
|||
|
|
|
|||
|
|
### 2.1 基础接口(已实现)
|
|||
|
|
|
|||
|
|
| 序号 | 接口路径 | 方法 | 接口名称 | 说明 |
|
|||
|
|
|------|----------|------|----------|------|
|
|||
|
|
| 1 | `/api/bidding-self/pre-project/{id}` | GET | 获取预招标项目信息 | 根据预招标项目ID获取详情 |
|
|||
|
|
| 2 | `/api/bidding-self/draft` | POST | 保存招标发起草稿 | 保存发起节点数据为草稿 |
|
|||
|
|
| 3 | `/api/bidding-self/submit` | POST | 提交招标发起 | 提交发起节点,状态置为已提交 |
|
|||
|
|
| 4 | `/api/bidding-self/{id}` | GET | 获取招标发起详情 | 根据ID获取完整详情 |
|
|||
|
|
| 5 | `/api/bidding-self/{id}/update` | PUT | 更新招采负责人数据 | 招采负责人填写/修改审批数据 |
|
|||
|
|
| 6 | `/api/bidding-self/evaluation-principles` | GET | 获取评标原则列表 | 获取后台配置的评标原则 |
|
|||
|
|
| 7 | `/api/bidding-self/upload` | POST | 文件上传 | 系统标准文件上传(MinIO) |
|
|||
|
|
| 8 | `/api/bidding-self/organization-tree` | GET | 获取组织架构树 | 选择对接人时调用 |
|
|||
|
|
| 9 | `/api/bidding-self/user-dept-list` | GET | 获取用户部门列表 | 获取当前用户的所属部门及对应公司信息 |
|
|||
|
|
|
|||
|
|
### 2.2 后续流程接口(待开发)
|
|||
|
|
|
|||
|
|
| 序号 | 接口路径 | 方法 | 接口名称 | 对应节点 | 说明 |
|
|||
|
|
|------|----------|------|----------|----------|------|
|
|||
|
|
| 10 | `/api/bidding-self/{id}/final-approval` | PUT | 更新总裁办负责人数据 | 3.7.4.3 | 总裁办主任审核/修改审批数据 |
|
|||
|
|
| 11 | `/api/bidding-self/registration/list` | GET | 获取报名项目列表 | 3.7.4.4 | 供应商查看可报名项目 |
|
|||
|
|
| 12 | `/api/bidding-self/registration/submit` | POST | 提交报名 | 3.7.4.4 | 供应商提交报名信息 |
|
|||
|
|
| 13 | `/api/bidding-self/registration/my` | GET | 获取我的报名 | 3.7.4.4 | 查看已报名项目,返回报名信息及关联项目信息 |
|
|||
|
|
| 14 | `/api/bidding-self/qualification/list` | GET | 获取待审核供应商 | 3.7.4.5 | 招采负责人查看待审核供应商 |
|
|||
|
|
| 15 | `/api/bidding-self/qualification/audit` | POST | 审核供应商资质 | 3.7.4.5 | 审核供应商资质(入围/不入围) |
|
|||
|
|
| 16 | `/api/bidding-self/qualification/batch` | POST | 批量审核 | 3.7.4.5 | 批量审核供应商资质 |
|
|||
|
|
| 17 | `/api/bidding-self/bid/list` | GET | 获取待投标项目 | 3.7.4.6 | 供应商查看待投标项目 |
|
|||
|
|
| 18 | `/api/bidding-self/bid/sign` | POST | 开标签到 | 3.7.4.6 | 供应商开标签到 |
|
|||
|
|
| 19 | `/api/bidding-self/bid/submit` | POST | 提交投标 | 3.7.4.6 | 供应商提交投标文件和报价 |
|
|||
|
|
| 20 | `/api/bidding-self/bid/opening` | POST | 开标 | 3.7.4.6 | 招采负责人开标 |
|
|||
|
|
| 21 | `/api/bidding-self/bid/flow` | POST | 流标 | 3.7.4.6 | 流标处理 |
|
|||
|
|
| 22 | `/api/bidding-self/bid/sign-export` | GET | 导出签到表 | 3.7.4.6 | 导出签到表Excel |
|
|||
|
|
| 23 | `/api/bidding-self/opening/list` | GET | 获取唱标列表 | 3.7.4.7 | 获取投标方报价列表 |
|
|||
|
|
| 24 | `/api/bidding-self/opening/record` | POST | 生成唱标记录 | 3.7.4.7 | 生成唱标记录表 |
|
|||
|
|
| 25 | `/api/bidding-self/opening/complete` | POST | 唱标结束 | 3.7.4.7 | 确认唱标结束进入专家评标 |
|
|||
|
|
| 26 | `/api/bidding-self/expert/sign` | POST | 专家签到 | 3.7.4.8 | 专家线上签到 |
|
|||
|
|
| 27 | `/api/bidding-self/expert/sign-file` | POST | 上传签署文件 | 3.7.4.8 | 专家上传电子签署文件 |
|
|||
|
|
| 28 | `/api/bidding-self/expert/audit` | POST | 审核签署文件 | 3.7.4.8 | 招采负责人审核签署文件 |
|
|||
|
|
| 29 | `/api/bidding-self/evaluation/list` | GET | 获取待评标列表 | 3.7.4.9 | 获取待评标供应商 |
|
|||
|
|
| 30 | `/api/bidding-self/evaluation/detail` | GET | 获取投标方详情 | 3.7.4.9 | 查看投标方详情 |
|
|||
|
|
| 31 | `/api/bidding-self/evaluation/score` | POST | 提交评分 | 3.7.4.9 | 专家提交评分 |
|
|||
|
|
| 32 | `/api/bidding-self/evaluation/cert` | POST | 生成资质认定表 | 3.7.4.9 | 生成资格认定表 |
|
|||
|
|
| 33 | `/api/bidding-self/qualification-cert/audit` | POST | 审核资格认定表 | 3.7.4.10 | 审核资格认定表 |
|
|||
|
|
| 34 | `/api/bidding-self/qualification-cert/notify` | POST | 发送淘汰通知 | 3.7.4.10 | 发送淘汰通知 |
|
|||
|
|
| 35 | `/api/bidding-self/quote/submit` | POST | 提交报价 | 3.7.4.11/15 | 供应商提交报价 |
|
|||
|
|
| 36 | `/api/bidding-self/quote/history` | GET | 获取报价历史 | 3.7.4.11/15 | 查看历史报价 |
|
|||
|
|
| 37 | `/api/bidding-self/score/calculate` | POST | 计算报价分 | 3.7.4.12 | 计算报价分 |
|
|||
|
|
| 38 | `/api/bidding-self/score/config` | GET | 获取评分配置 | 3.7.4.12 | 获取评分方式配置 |
|
|||
|
|
| 39 | `/api/bidding-self/vote/submit` | POST | 提交投票 | 3.7.4.13 | 提交投票 |
|
|||
|
|
| 40 | `/api/bidding-self/vote/result` | GET | 获取投票结果 | 3.7.4.13 | 查看投票结果 |
|
|||
|
|
| 41 | `/api/bidding-self/finalist/confirm` | POST | 确认入围 | 3.7.4.14 | 确认入围名单 |
|
|||
|
|
| 42 | `/api/bidding-self/finalist/notify` | POST | 通知入围供应商 | 3.7.4.14 | 发送入围通知 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 3. 接口详细定义
|
|||
|
|
|
|||
|
|
### 3.1 获取预招标项目信息
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
GET /api/bidding-self/pre-project/{id}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数名 | 类型 | 必填 | 位置 | 说明 |
|
|||
|
|
|--------|------|------|------|------|
|
|||
|
|
| id | Long | 是 | Path | 预招标项目ID |
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfInitiateVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"preBiddingId": 123456789,
|
|||
|
|
"applicantId": 10001,
|
|||
|
|
"applicantName": "张三",
|
|||
|
|
"applyTime": "2026-06-17 14:30:00",
|
|||
|
|
"contactPhone": "13800138000",
|
|||
|
|
"companyId": 100,
|
|||
|
|
"companyName": "XX股份有限公司",
|
|||
|
|
"planNo": "PL20260001",
|
|||
|
|
"projectCode": "PRJ20260001",
|
|||
|
|
"projectName": "办公设备采购项目",
|
|||
|
|
"projectType": "货物采购",
|
|||
|
|
"budgetAmount": 500000.00,
|
|||
|
|
"demandDeptId": 200,
|
|||
|
|
"demandDeptName": "行政部",
|
|||
|
|
"demandCompanyId": 100,
|
|||
|
|
"demandCompanyName": "XX股份有限公司",
|
|||
|
|
"projectContactId": 10002,
|
|||
|
|
"projectContactName": "李四",
|
|||
|
|
"evaluationGroupSource": "指定专家",
|
|||
|
|
"subjectList": [
|
|||
|
|
{
|
|||
|
|
"seqNo": 1,
|
|||
|
|
"materialName": "笔记本电脑",
|
|||
|
|
"materialCode": "MAT001",
|
|||
|
|
"specification": "ThinkPad X1 Carbon",
|
|||
|
|
"brand": "联想",
|
|||
|
|
"unit": "台",
|
|||
|
|
"referencePrice": 8999.00,
|
|||
|
|
"estimatedQuantity": 10,
|
|||
|
|
"estimatedUseTime": "2026-07-01",
|
|||
|
|
"amount": 89990.00,
|
|||
|
|
"contactPersonId": 10002,
|
|||
|
|
"contactPersonName": "李四",
|
|||
|
|
"demandDesc": "高性能办公笔记本电脑",
|
|||
|
|
"remark": "需预装正版Office"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"expertList": [
|
|||
|
|
{
|
|||
|
|
"expertId": 20001,
|
|||
|
|
"expertName": "王专家",
|
|||
|
|
"expertType": "appoint"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"msg": "操作成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.2 保存招标发起草稿
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/draft
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfInitiateDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"preBiddingId": 123456789,
|
|||
|
|
"contactPhone": "13800138000",
|
|||
|
|
"companyId": 100,
|
|||
|
|
"companyName": "XX股份有限公司",
|
|||
|
|
"registrationStartTime": "2026-06-20 09:00:00",
|
|||
|
|
"registrationEndTime": "2026-06-25 17:00:00",
|
|||
|
|
"bidStartTime": "2026-06-26 09:00:00",
|
|||
|
|
"bidEndTime": "2026-06-30 17:00:00",
|
|||
|
|
"bidMethod": "online",
|
|||
|
|
"bidOpeningTime": "2026-07-01 10:00:00",
|
|||
|
|
"evaluationPrinciple": "低价优先法",
|
|||
|
|
"evaluationPrincipleDesc": "即能够满足招标文件的各项要求,投标价格最低的投标即可作为中选投标。",
|
|||
|
|
"subjectList": [
|
|||
|
|
{
|
|||
|
|
"seqNo": 1,
|
|||
|
|
"materialName": "笔记本电脑",
|
|||
|
|
"materialCode": "MAT001",
|
|||
|
|
"specification": "ThinkPad X1 Carbon",
|
|||
|
|
"brand": "联想",
|
|||
|
|
"unit": "台",
|
|||
|
|
"referencePrice": 8999.00,
|
|||
|
|
"estimatedQuantity": 10,
|
|||
|
|
"estimatedUseTime": "2026-07-01",
|
|||
|
|
"amount": 89990.00,
|
|||
|
|
"contactPersonId": 10002,
|
|||
|
|
"contactPersonName": "李四",
|
|||
|
|
"demandDesc": "高性能办公笔记本电脑",
|
|||
|
|
"remark": "需预装正版Office"
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfInitiateVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"id": 987654321,
|
|||
|
|
"status": "DRAFT",
|
|||
|
|
"createTime": "2026-06-17 14:30:00"
|
|||
|
|
},
|
|||
|
|
"msg": "保存草稿成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.3 提交招标发起
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/submit
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求体**:同保存草稿(字段完全一致)
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfInitiateVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"id": 987654321,
|
|||
|
|
"status": "SUBMITTED",
|
|||
|
|
"createTime": "2026-06-17 14:30:00"
|
|||
|
|
},
|
|||
|
|
"msg": "提交成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> **说明**:提交接口仅将状态从 DRAFT 改为 SUBMITTED,不触发流程引擎。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.4 获取招标发起详情
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
GET /api/bidding-self/{id}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数名 | 类型 | 必填 | 位置 | 说明 |
|
|||
|
|
|--------|------|------|------|------|
|
|||
|
|
| id | Long | 是 | Path | 发起主表ID |
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfInitiateVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"id": 987654321,
|
|||
|
|
"preBiddingId": 123456789,
|
|||
|
|
"applicantId": 10001,
|
|||
|
|
"applicantName": "张三",
|
|||
|
|
"applyTime": "2026-06-17 14:30:00",
|
|||
|
|
"contactPhone": "13800138000",
|
|||
|
|
"companyId": 100,
|
|||
|
|
"companyName": "XX股份有限公司",
|
|||
|
|
"planNo": "PL20260001",
|
|||
|
|
"projectCode": "PRJ20260001",
|
|||
|
|
"projectName": "办公设备采购项目",
|
|||
|
|
"projectType": "货物采购",
|
|||
|
|
"budgetAmount": 500000.00,
|
|||
|
|
"demandDeptId": 200,
|
|||
|
|
"demandDeptName": "行政部",
|
|||
|
|
"demandCompanyId": 100,
|
|||
|
|
"demandCompanyName": "XX股份有限公司",
|
|||
|
|
"projectContactId": 10002,
|
|||
|
|
"projectContactName": "李四",
|
|||
|
|
"registrationStartTime": "2026-06-20 09:00:00",
|
|||
|
|
"registrationEndTime": "2026-06-25 17:00:00",
|
|||
|
|
"bidStartTime": "2026-06-26 09:00:00",
|
|||
|
|
"bidEndTime": "2026-06-30 17:00:00",
|
|||
|
|
"bidMethod": "online",
|
|||
|
|
"bidOpeningTime": "2026-07-01 10:00:00",
|
|||
|
|
"evaluationPrinciple": "低价优先法",
|
|||
|
|
"evaluationPrincipleDesc": "即能够满足招标文件的各项要求,投标价格最低的投标即可作为中选投标。",
|
|||
|
|
"evaluationGroupSource": "指定专家",
|
|||
|
|
"status": "SUBMITTED",
|
|||
|
|
"bidLocation": "",
|
|||
|
|
"bidContact": "",
|
|||
|
|
"noticeFile": null,
|
|||
|
|
"subjectList": [...],
|
|||
|
|
"expertList": [...]
|
|||
|
|
},
|
|||
|
|
"msg": "操作成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.5 更新招采负责人数据
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
PUT /api/bidding-self/{id}/update
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数名 | 类型 | 必填 | 位置 | 说明 |
|
|||
|
|
|--------|------|------|------|------|
|
|||
|
|
| id | Long | 是 | Path | 发起主表ID |
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfUpdateDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"registrationStartTime": "2026-06-20 09:00",
|
|||
|
|
"registrationEndTime": "2026-06-25 17:00",
|
|||
|
|
"bidStartTime": "2026-06-26 09:00",
|
|||
|
|
"bidEndTime": "2026-06-30 17:00",
|
|||
|
|
"bidOpeningTime": "2026-07-01 10:00",
|
|||
|
|
"bidMethod": "online",
|
|||
|
|
"bidLocation": "",
|
|||
|
|
"bidContact": "张三,13800138000,zhangsan@example.com",
|
|||
|
|
"noticeFile": "[{\"name\":\"招标公告.pdf\",\"url\":\"/upload/2026/06/17/xxx.pdf\",\"size\":1024000}]"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> **说明**:`noticeFile` 字段是 JSON 字符串,存储 BladeFile 列表。附件先通过 `/api/bidding-self/upload` 上传,返回的 BladeFile 对象序列化后存入此字段。
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfInitiateVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"id": 987654321,
|
|||
|
|
"status": "SUBMITTED",
|
|||
|
|
"updateTime": "2026-06-17 16:00:00"
|
|||
|
|
},
|
|||
|
|
"msg": "保存成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.6 获取评标原则列表
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
GET /api/bidding-self/evaluation-principles
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<List<EvaluationPrincipleVO>>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"code": "lowest_price",
|
|||
|
|
"name": "低价优先法",
|
|||
|
|
"description": "即能够满足招标文件的各项要求,投标价格最低的投标即可作为中选投标。"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"msg": "操作成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.7 文件上传(系统标准)
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/upload
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数名 | 类型 | 必填 | 位置 | 说明 |
|
|||
|
|
|--------|------|------|------|------|
|
|||
|
|
| file | MultipartFile | 是 | FormData | 文件 |
|
|||
|
|
|
|||
|
|
**响应数据**(R<BladeFile>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"name": "招标公告.pdf",
|
|||
|
|
"url": "/upload/2026/06/17/xxx.pdf",
|
|||
|
|
"size": 1024000,
|
|||
|
|
"originalName": "招标公告.pdf",
|
|||
|
|
"contentType": "application/pdf"
|
|||
|
|
},
|
|||
|
|
"msg": "上传成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> **前端使用**:`el-upload` 组件,action 为 `/api/bidding-self/upload`,上传成功后从响应中获取 BladeFile 对象。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.8 获取组织架构树
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
GET /api/bidding-self/organization-tree
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<List<OrgNode>>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"id": 100,
|
|||
|
|
"name": "XX股份有限公司",
|
|||
|
|
"children": [
|
|||
|
|
{
|
|||
|
|
"id": 200,
|
|||
|
|
"name": "行政部",
|
|||
|
|
"children": [...]
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"msg": "操作成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.9 获取用户部门列表
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
GET /api/bidding-self/user-dept-list
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数**:无
|
|||
|
|
|
|||
|
|
**响应数据**(R<List<UserDeptVO>>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"deptId": 200,
|
|||
|
|
"deptName": "行政部",
|
|||
|
|
"tenantId": 100,
|
|||
|
|
"tenantName": "XX股份有限公司",
|
|||
|
|
"isDefault": true
|
|||
|
|
},
|
|||
|
|
{
|
|||
|
|
"deptId": 201,
|
|||
|
|
"deptName": "采购部",
|
|||
|
|
"tenantId": 101,
|
|||
|
|
"tenantName": "YY子公司",
|
|||
|
|
"isDefault": false
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"msg": "操作成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**数据项说明**:
|
|||
|
|
|
|||
|
|
| 字段名 | 类型 | 说明 |
|
|||
|
|
|--------|------|------|
|
|||
|
|
| deptId | Long | 部门ID |
|
|||
|
|
| deptName | String | 部门名称 |
|
|||
|
|
| tenantId | Long | 公司ID(租户ID)|
|
|||
|
|
| tenantName | String | 公司名称 |
|
|||
|
|
| isDefault | Boolean | 是否默认部门,页面加载时默认选中该项 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.10 更新总裁办负责人数据
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
PUT /api/bidding-self/{id}/final-approval
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数名 | 类型 | 必填 | 位置 | 说明 |
|
|||
|
|
|--------|------|------|------|------|
|
|||
|
|
| id | Long | 是 | Path | 发起主表ID |
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfFinalApprovalDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"approvalOpinion": "同意发布招标公告",
|
|||
|
|
"noticeFile": "[{\"name\":\"招标公告.pdf\",\"url\":\"/upload/2026/06/17/xxx.pdf\",\"size\":1024000}]"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfInitiateVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"id": 987654321,
|
|||
|
|
"status": "SUBMITTED",
|
|||
|
|
"updateTime": "2026-06-17 16:00:00"
|
|||
|
|
},
|
|||
|
|
"msg": "保存成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
> **说明**:此接口仅更新总裁办负责人的审核意见和附件数据,不触发流程流转。审批同意/驳回操作由后续流程统一接口处理。
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.11 获取报名项目列表
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
GET /api/bidding-self/registration/list
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数**:无
|
|||
|
|
|
|||
|
|
**响应数据**(R<List<BiddingSelfInitiateVO>>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"projectCode": "PRJ20260001",
|
|||
|
|
"projectName": "办公设备采购项目",
|
|||
|
|
"projectType": "货物采购",
|
|||
|
|
"registrationStartTime": "2026-06-20 09:00:00",
|
|||
|
|
"registrationEndTime": "2026-06-25 17:00:00",
|
|||
|
|
"bidOpeningTime": "2026-07-01 10:00:00"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"msg": "操作成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.12 提交报名
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/registration/submit
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfRegistrationDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"initiateId": 987654321,
|
|||
|
|
"supplierName": "XX科技有限公司",
|
|||
|
|
"contactName": "张三",
|
|||
|
|
"contactPhone": "13800138000",
|
|||
|
|
"contactEmail": "zhangsan@example.com",
|
|||
|
|
"qualificationFiles": "[{\"name\":\"营业执照.pdf\",\"url\":\"/upload/2026/06/20/license.pdf\"}]",
|
|||
|
|
"otherFiles": "[{\"name\":\"资质证书.pdf\",\"url\":\"/upload/2026/06/20/cert.pdf\"}]"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfRegistrationVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"id": 111222,
|
|||
|
|
"initiateId": 987654321,
|
|||
|
|
"supplierName": "XX科技有限公司",
|
|||
|
|
"status": "PENDING"
|
|||
|
|
},
|
|||
|
|
"msg": "报名成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.13 获取待审核供应商
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
GET /api/bidding-self/qualification/list
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求参数**:
|
|||
|
|
|
|||
|
|
| 参数名 | 类型 | 必填 | 位置 | 说明 |
|
|||
|
|
|--------|------|------|------|------|
|
|||
|
|
| initiateId | Long | 是 | Query | 发起主表ID |
|
|||
|
|
|
|||
|
|
**响应数据**(R<List<BiddingSelfRegistrationVO>>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": [
|
|||
|
|
{
|
|||
|
|
"id": 111222,
|
|||
|
|
"initiateId": 987654321,
|
|||
|
|
"supplierName": "XX科技有限公司",
|
|||
|
|
"contactName": "张三",
|
|||
|
|
"contactPhone": "13800138000",
|
|||
|
|
"status": "PENDING"
|
|||
|
|
}
|
|||
|
|
],
|
|||
|
|
"msg": "操作成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.14 审核供应商资质
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/qualification/audit
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfQualificationAuditDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"registrationId": 111222,
|
|||
|
|
"supplierId": 20001,
|
|||
|
|
"auditResult": "APPROVED",
|
|||
|
|
"rejectReason": ""
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfQualificationVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"id": 789012,
|
|||
|
|
"supplierId": 20001,
|
|||
|
|
"supplierName": "XX科技有限公司",
|
|||
|
|
"auditResult": "APPROVED",
|
|||
|
|
"paymentStatus": "UNPAID",
|
|||
|
|
"paymentAmount": 500.00
|
|||
|
|
},
|
|||
|
|
"msg": "审核成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.15 开标签到
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/bid/sign
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfBidSignDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"initiateId": 987654321,
|
|||
|
|
"supplierId": 20001
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfBidVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"signStatus": 1,
|
|||
|
|
"signTime": "2026-06-30 09:15:00"
|
|||
|
|
},
|
|||
|
|
"msg": "签到成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.16 提交投标
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/bid/submit
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfBidDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"initiateId": 987654321,
|
|||
|
|
"supplierId": 20001,
|
|||
|
|
"bidFiles": "[{\"name\":\"投标文件.pdf\",\"url\":\"/upload/2026/06/30/bid.pdf\"}]",
|
|||
|
|
"authorizationFile": "{\"name\":\"授权书.pdf\",\"url\":\"/upload/2026/06/30/auth.pdf\"}",
|
|||
|
|
"totalQuote": 450000.00,
|
|||
|
|
"quoteDetails": "[{\"subjectId\":1,\"unitPrice\":8999.00,\"quantity\":10,\"totalPrice\":89990.00}]"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfBidVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"id": 333444,
|
|||
|
|
"initiateId": 987654321,
|
|||
|
|
"supplierId": 20001,
|
|||
|
|
"totalQuote": 450000.00,
|
|||
|
|
"status": "PENDING"
|
|||
|
|
},
|
|||
|
|
"msg": "投标成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.17 生成唱标记录
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/opening/record
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfOpeningRecordDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"initiateId": 987654321,
|
|||
|
|
"bidIds": [333444, 333445, 333446]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfBidOpeningVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"recordFile": {
|
|||
|
|
"name": "唱标记录表.pdf",
|
|||
|
|
"url": "/upload/2026/07/01/opening_record.pdf"
|
|||
|
|
},
|
|||
|
|
"openingList": [
|
|||
|
|
{
|
|||
|
|
"supplierName": "XX科技有限公司",
|
|||
|
|
"totalQuote": 450000.00,
|
|||
|
|
"taxRate": 13.00,
|
|||
|
|
"totalWithTax": 508500.00,
|
|||
|
|
"totalWithoutTax": 450000.00
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"msg": "生成成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.18 专家提交评分
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/evaluation/score
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfEvaluationDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"initiateId": 987654321,
|
|||
|
|
"expertId": 30001,
|
|||
|
|
"supplierId": 20001,
|
|||
|
|
"qualificationScore": 85.00,
|
|||
|
|
"technicalScore": 90.00,
|
|||
|
|
"businessScore": 88.00,
|
|||
|
|
"priceScore": 92.00,
|
|||
|
|
"evaluationOpinion": "资质齐全,技术方案可行"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfEvaluationVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"comprehensiveScore": 88.75,
|
|||
|
|
"status": "COMPLETED"
|
|||
|
|
},
|
|||
|
|
"msg": "评分成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.19 计算报价分
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/score/calculate
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfScoreCalculateDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"initiateId": 987654321,
|
|||
|
|
"scoreMethod": "LOW_PRICE",
|
|||
|
|
"scoreWeight": 60.00,
|
|||
|
|
"quoteRound": 2
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfScoreVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"scoreMethod": "LOW_PRICE",
|
|||
|
|
"formula": "价格分 = (最低价 / 供应商报价) × 价格分权重",
|
|||
|
|
"scoreList": [
|
|||
|
|
{
|
|||
|
|
"supplierName": "XX科技有限公司",
|
|||
|
|
"quote": 450000.00,
|
|||
|
|
"priceReduction": 5.00,
|
|||
|
|
"lowestPrice": 420000.00,
|
|||
|
|
"priceScore": 56.00
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
},
|
|||
|
|
"msg": "计算成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.20 提交投票
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/vote/submit
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfVoteDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"initiateId": 987654321,
|
|||
|
|
"voteRound": 1,
|
|||
|
|
"voteType": "SINGLE",
|
|||
|
|
"voteResult": "[20001]",
|
|||
|
|
"personalOpinion": "建议选择该供应商"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfVoteVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"status": "COMPLETED",
|
|||
|
|
"voteTime": "2026-07-05 14:30:00"
|
|||
|
|
},
|
|||
|
|
"msg": "投票成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 3.21 确认入围名单
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
POST /api/bidding-self/finalist/confirm
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**请求体**(BiddingSelfFinalistDTO):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"initiateId": 987654321,
|
|||
|
|
"finalistList": [
|
|||
|
|
{
|
|||
|
|
"supplierId": 20001,
|
|||
|
|
"ranking": 1,
|
|||
|
|
"comprehensiveScore": 88.75,
|
|||
|
|
"voteCount": 3,
|
|||
|
|
"finalQuote": 450000.00
|
|||
|
|
}
|
|||
|
|
]
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
**响应数据**(R<BiddingSelfFinalistVO>):
|
|||
|
|
|
|||
|
|
```json
|
|||
|
|
{
|
|||
|
|
"code": 200,
|
|||
|
|
"success": true,
|
|||
|
|
"data": {
|
|||
|
|
"finalistCount": 3,
|
|||
|
|
"status": "CONFIRMED"
|
|||
|
|
},
|
|||
|
|
"msg": "确认成功"
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 4. 数据类型定义
|
|||
|
|
|
|||
|
|
### 4.1 BladeFile(附件对象)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface BladeFile {
|
|||
|
|
name: string; // 文件名(存储名)
|
|||
|
|
url: string; // 文件访问URL
|
|||
|
|
size: number; // 文件大小(字节)
|
|||
|
|
originalName: string; // 原始文件名
|
|||
|
|
contentType: string; // 文件类型
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.2 SubjectItem(标的物)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface SubjectItem {
|
|||
|
|
seqNo: number; // 序号
|
|||
|
|
materialName: string; // 物料名称
|
|||
|
|
materialCode: string; // 物料编码
|
|||
|
|
specification: string; // 规格型号
|
|||
|
|
brand: string; // 品牌
|
|||
|
|
unit: string; // 计量单位
|
|||
|
|
referencePrice: number; // 参考价(不含税)
|
|||
|
|
estimatedQuantity: number; // 预计数量
|
|||
|
|
estimatedUseTime: string; // 预计使用时间
|
|||
|
|
amount: number; // 金额(元)
|
|||
|
|
contactPersonId: number; // 对接人ID
|
|||
|
|
contactPersonName: string; // 对接人姓名
|
|||
|
|
demandDesc: string; // 需求简介
|
|||
|
|
remark: string; // 备注
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.3 ExpertItem(评标专家)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface ExpertItem {
|
|||
|
|
expertId: number; // 专家ID
|
|||
|
|
expertName: string; // 专家姓名
|
|||
|
|
expertType: string; // 专家类型:appoint-指定 / random-随机
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.4 UserDeptItem(用户部门信息)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface UserDeptItem {
|
|||
|
|
deptId: number; // 部门ID
|
|||
|
|
deptName: string; // 部门名称
|
|||
|
|
tenantId: number; // 公司ID(租户ID)
|
|||
|
|
tenantName: string; // 公司名称
|
|||
|
|
isDefault: boolean; // 是否默认部门
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.5 BiddingSelfRegistration(供应商报名)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface BiddingSelfRegistration {
|
|||
|
|
id: number; // 报名ID
|
|||
|
|
initiateId: number; // 发起主表ID
|
|||
|
|
supplierId: number; // 供应商ID
|
|||
|
|
supplierName: string; // 供应商名称
|
|||
|
|
contactName: string; // 联系人姓名
|
|||
|
|
contactPhone: string; // 联系人电话
|
|||
|
|
contactEmail: string; // 联系人邮箱
|
|||
|
|
qualificationFiles: string; // 资质文件(JSON BladeFile列表)
|
|||
|
|
otherFiles: string; // 其他资料(JSON BladeFile列表)
|
|||
|
|
status: string; // 状态:PENDING/APPROVED/REJECTED
|
|||
|
|
rejectReason: string; // 驳回原因
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.6 BiddingSelfQualification(资质审核)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface BiddingSelfQualification {
|
|||
|
|
id: number; // 审核ID
|
|||
|
|
initiateId: number; // 发起主表ID
|
|||
|
|
supplierId: number; // 供应商ID
|
|||
|
|
supplierName: string; // 供应商名称
|
|||
|
|
auditResult: string; // 审核结果:APPROVED/REJECTED
|
|||
|
|
rejectReason: string; // 未入围原因
|
|||
|
|
paymentStatus: string; // 付款状态:UNPAID/PAID
|
|||
|
|
paymentAmount: number; // 标书费用金额
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.7 BiddingSelfBid(投标/开标)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface BiddingSelfBid {
|
|||
|
|
id: number; // 投标ID
|
|||
|
|
initiateId: number; // 发起主表ID
|
|||
|
|
supplierId: number; // 供应商ID
|
|||
|
|
signStatus: number; // 签到状态:0-未签到,1-已签到
|
|||
|
|
signTime: string; // 签到时间
|
|||
|
|
bidFiles: string; // 投标文件(JSON BladeFile列表)
|
|||
|
|
authorizationFile: string; // 授权书(JSON BladeFile)
|
|||
|
|
otherFiles: string; // 其他资料(JSON BladeFile列表)
|
|||
|
|
totalQuote: number; // 总报价(元)
|
|||
|
|
quoteDetails: string; // 报价明细(JSON)
|
|||
|
|
status: string; // 状态:PENDING/OPENED/FLOWED
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.8 BiddingSelfBidOpening(唱标记录)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface BiddingSelfBidOpening {
|
|||
|
|
id: number; // 唱标ID
|
|||
|
|
initiateId: number; // 发起主表ID
|
|||
|
|
supplierId: number; // 供应商ID
|
|||
|
|
supplierName: string; // 供应商名称
|
|||
|
|
totalQuote: number; // 投标总报价(元)
|
|||
|
|
taxRate: number; // 税率
|
|||
|
|
totalWithTax: number; // 含税总价
|
|||
|
|
totalWithoutTax: number; // 不含税总价
|
|||
|
|
taxCategory: string; // 税目
|
|||
|
|
deliveryPeriod: string; // 工期/交货期/质保期
|
|||
|
|
remarks: string; // 补充说明
|
|||
|
|
openingRecordFile: string; // 唱标记录表文件(JSON BladeFile)
|
|||
|
|
status: string; // 状态:PENDING/COMPLETED
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.9 BiddingSelfExpertSign(专家签到)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface BiddingSelfExpertSign {
|
|||
|
|
id: number; // 签到ID
|
|||
|
|
initiateId: number; // 发起主表ID
|
|||
|
|
expertId: number; // 专家ID
|
|||
|
|
expertName: string; // 专家姓名
|
|||
|
|
expertTitle: string; // 职称
|
|||
|
|
expertCategory: string; // 专业类别
|
|||
|
|
expertOrg: string; // 所属单位
|
|||
|
|
signStatus: number; // 签到状态:0-未签到,1-已签到
|
|||
|
|
signTime: string; // 签到时间
|
|||
|
|
signFiles: string; // 电子签署文件(JSON BladeFile列表)
|
|||
|
|
signStatusFile: string; // 签署状态:UNSIGNED/SIGNED/REJECTED
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.10 BiddingSelfEvaluation(专家评标)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface BiddingSelfEvaluation {
|
|||
|
|
id: number; // 评分ID
|
|||
|
|
initiateId: number; // 发起主表ID
|
|||
|
|
expertId: number; // 专家ID
|
|||
|
|
expertName: string; // 专家姓名
|
|||
|
|
supplierId: number; // 供应商ID
|
|||
|
|
supplierName: string; // 供应商名称
|
|||
|
|
qualificationScore: number; // 资质审查评分
|
|||
|
|
technicalScore: number; // 技术标准评分
|
|||
|
|
businessScore: number; // 商务标准评分
|
|||
|
|
priceScore: number; // 价格评分
|
|||
|
|
comprehensiveScore: number; // 综合评分
|
|||
|
|
evaluationOpinion: string; // 评审意见
|
|||
|
|
status: string; // 状态:PENDING/COMPLETED
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.11 BiddingSelfQuote(供应商报价)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface BiddingSelfQuote {
|
|||
|
|
id: number; // 报价ID
|
|||
|
|
initiateId: number; // 发起主表ID
|
|||
|
|
supplierId: number; // 供应商ID
|
|||
|
|
quoteRound: number; // 报价轮次:1-第一轮,2-第二轮,3-终报
|
|||
|
|
totalAmount: number; // 报价总金额(元)
|
|||
|
|
totalAmountUpper: string; // 总金额大写
|
|||
|
|
deliveryPeriod: string; // 服务/交货周期/质保期
|
|||
|
|
remarks: string; // 补充说明/优惠承诺
|
|||
|
|
quoteDetails: string; // 报价明细(JSON)
|
|||
|
|
quoteFiles: string; // 报价附件(JSON BladeFile列表)
|
|||
|
|
deadline: string; // 报价截止时间
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.12 BiddingSelfScore(报价分计算)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface BiddingSelfScore {
|
|||
|
|
id: number; // 计算ID
|
|||
|
|
initiateId: number; // 发起主表ID
|
|||
|
|
scoreMethod: string; // 评分方式:LOW_PRICE/BASE_PRICE
|
|||
|
|
scoreWeight: number; // 价格分权重
|
|||
|
|
quoteRound: number; // 报价轮次
|
|||
|
|
scoreDetails: string; // 报价分明细(JSON)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
interface ScoreResultItem {
|
|||
|
|
supplierName: string; // 供应商名称
|
|||
|
|
quote: number; // 报价(元)
|
|||
|
|
priceReduction: number; // 降价幅度
|
|||
|
|
lowestPrice: number; // 本轮最低价
|
|||
|
|
priceScore: number; // 价格分
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.13 BiddingSelfVote(投票)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface BiddingSelfVote {
|
|||
|
|
id: number; // 投票ID
|
|||
|
|
initiateId: number; // 发起主表ID
|
|||
|
|
voterId: number; // 投票人ID
|
|||
|
|
voterName: string; // 投票人姓名
|
|||
|
|
voterRole: string; // 投票人角色:BUSINESS/PROCUREMENT/AUDIT
|
|||
|
|
voteRound: number; // 投票轮次
|
|||
|
|
voteType: string; // 投票类型:SINGLE/MULTIPLE
|
|||
|
|
voteResult: string; // 投票结果(JSON:供应商ID列表)
|
|||
|
|
personalOpinion: string; // 个人意见备注
|
|||
|
|
status: string; // 状态:PENDING/COMPLETED
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
interface VoteResultItem {
|
|||
|
|
supplierId: number; // 供应商ID
|
|||
|
|
supplierName: string; // 供应商名称
|
|||
|
|
voteCount: number; // 得票数
|
|||
|
|
ranking: number; // 排名
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4.14 BiddingSelfFinalist(入围供应商)
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
interface BiddingSelfFinalist {
|
|||
|
|
id: number; // 入围ID
|
|||
|
|
initiateId: number; // 发起主表ID
|
|||
|
|
supplierId: number; // 供应商ID
|
|||
|
|
supplierName: string; // 供应商名称
|
|||
|
|
ranking: number; // 排名
|
|||
|
|
comprehensiveScore: number; // 综合评分
|
|||
|
|
voteCount: number; // 得票数
|
|||
|
|
finalQuote: number; // 最终报价
|
|||
|
|
status: string; // 状态:CONFIRMED/REJECTED
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 5. 前端需求说明
|
|||
|
|
|
|||
|
|
> **说明**:以下内容为各前端页面的需求描述,供前端开发人员参考。具体页面实现由前端开发团队根据需求自行设计。
|
|||
|
|
|
|||
|
|
### 5.1 项目背景
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
【技术栈】
|
|||
|
|
- Vue 3(组合式 API)
|
|||
|
|
- Element Plus(UI 组件库)
|
|||
|
|
- Pinia(状态管理)
|
|||
|
|
- TypeScript
|
|||
|
|
- Vite
|
|||
|
|
|
|||
|
|
【项目结构】
|
|||
|
|
views/bidding/
|
|||
|
|
├── PendingBidding.vue # 主页面容器(已有,由流程引擎挂载)
|
|||
|
|
└── self/
|
|||
|
|
└── pages/ # 子页面目录
|
|||
|
|
├── InitiatePage.vue # 发起节点(招采发起人)
|
|||
|
|
├── ApprovalPage.vue # 审批节点(招采负责人初审)
|
|||
|
|
├── FinalApprovalPage.vue # 3.7.4.3 总裁办负责人审批
|
|||
|
|
├── RegistrationPage.vue # 3.7.4.4 供应商报名
|
|||
|
|
├── QualificationPage.vue # 3.7.4.5 资质审核
|
|||
|
|
├── BidPage.vue # 3.7.4.6 开标(招采负责人端)
|
|||
|
|
├── BidSupplierPage.vue # 3.7.4.6 投标(供应商端)
|
|||
|
|
├── OpeningPage.vue # 3.7.4.7 唱标
|
|||
|
|
├── ExpertSignPage.vue # 3.7.4.8 专家签到
|
|||
|
|
├── EvaluationPage.vue # 3.7.4.9 专家评标
|
|||
|
|
├── QualificationCertPage.vue # 3.7.4.10 资格认定表审批
|
|||
|
|
├── QuotePage.vue # 3.7.4.11 供应商多轮报价
|
|||
|
|
├── ScorePage.vue # 3.7.4.12 出报价分
|
|||
|
|
├── VotePage.vue # 3.7.4.13 投票
|
|||
|
|
├── FinalistPage.vue # 3.7.4.14 确定入围供应商
|
|||
|
|
└── FinalQuotePage.vue # 3.7.4.15 投标方终报
|
|||
|
|
|
|||
|
|
【核心原则】
|
|||
|
|
1. 每个子页面是一个完整的 Vue 组件,内部直接实现表单,不拆分小组件
|
|||
|
|
2. 主页面通过 <component :is=""> 动态加载子页面
|
|||
|
|
3. 子页面接收 nodeData prop(包含业务ID、预招标ID等)
|
|||
|
|
4. 子页面通过 $emit 通知主页面 save/submit/cancel
|
|||
|
|
5. 时间统一使用东八区(Asia/Shanghai)
|
|||
|
|
6. 按钮提交防抖 3 秒
|
|||
|
|
7. 文件上传使用系统标准 el-upload,上传到 /api/bidding-self/upload
|
|||
|
|
8. 附件信息以 JSON 字符串形式存储和传输(BladeFile 数组)
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5.2 发起页面(InitiatePage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.1
|
|||
|
|
**角色**:招采发起人
|
|||
|
|
**页面类型**:表单填写
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
招标发起人填写自行招标发起表单。页面数据根据预招标流程自动带出。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 加载预招标数据:GET /api/bidding-self/pre-project/{preBiddingId}
|
|||
|
|
- 获取用户部门列表:GET /api/bidding-self/user-dept-list
|
|||
|
|
- 保存草稿:POST /api/bidding-self/draft
|
|||
|
|
- 提交:POST /api/bidding-self/submit
|
|||
|
|
|
|||
|
|
**页面结构**(从上到下):
|
|||
|
|
|
|||
|
|
1. 发起人信息(自动带出,可编辑)
|
|||
|
|
- 申请人:自动带出当前登录用户姓名,只读
|
|||
|
|
- 申请时间:自动带出当前时间,只读
|
|||
|
|
- 联系电话:自动带出当前用户电话,可修改,需验证手机号格式
|
|||
|
|
- 所属公司:下拉框选择,调用 /api/bidding-self/user-dept-list 获取部门列表,默认选中 isDefault=true 的项,选择后自动带出公司信息
|
|||
|
|
|
|||
|
|
2. 项目信息(自动带出,只读展示)
|
|||
|
|
- 计划号、项目编号、项目名称、项目类型
|
|||
|
|
- 预算金额(金额格式,保留两位小数)
|
|||
|
|
- 需求部门、需求公司、项目对接人
|
|||
|
|
|
|||
|
|
3. 标的物信息(列表形式,部分可编辑)
|
|||
|
|
- 表格列:序号、物料名称、物料编码、规格型号、品牌、计量单位、参考价、预计数量、预计使用时间、金额、对接人、需求简介、备注
|
|||
|
|
- 序号自动生成(1开始)
|
|||
|
|
- 物料名称必填,限制100字符
|
|||
|
|
- 预计数量输入时,金额自动计算(参考价 × 数量)
|
|||
|
|
- 对接人:点击选择,弹窗组织架构树
|
|||
|
|
- 需求简介限制1000字符
|
|||
|
|
|
|||
|
|
4. 投标要求(填写区)
|
|||
|
|
- 报名开始/结束时间:时间控件,精确到时分秒
|
|||
|
|
- 投标开始/结束时间:时间控件,精确到时分秒
|
|||
|
|
- 投标方式:下拉选择(线上/线下)
|
|||
|
|
- 开标时间:时间控件,精确到时分秒
|
|||
|
|
- 校验:结束时间 > 开始时间
|
|||
|
|
|
|||
|
|
5. 评标原则(选择区)
|
|||
|
|
- 评标原则:下拉选择(调用 /api/bidding-self/evaluation-principles)
|
|||
|
|
- 说明:自动带出,只读展示
|
|||
|
|
|
|||
|
|
6. 评标小组(只读展示)
|
|||
|
|
- 评标小组来源、评标小组人员列表
|
|||
|
|
|
|||
|
|
7. 只读说明区(纯文本展示)
|
|||
|
|
- 定标原则、合同签订说明、其他(没收投标保证金/严禁转包)
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 取消:返回待招标库
|
|||
|
|
- 保存草稿:调用 /api/bidding-self/draft
|
|||
|
|
- 提交:调用 /api/bidding-self/submit,提交成功后返回待招标库
|
|||
|
|
|
|||
|
|
**提交校验**:
|
|||
|
|
- 所有必填字段已填写
|
|||
|
|
- 时间逻辑正确(结束时间 > 开始时间)
|
|||
|
|
- 预计数量 > 0
|
|||
|
|
- 联系电话格式正确
|
|||
|
|
- 物料名称不为空且 <= 100字符
|
|||
|
|
- 需求简介 <= 1000字符
|
|||
|
|
|
|||
|
|
**防抖**:保存草稿和提交按钮防抖 3 秒,提交期间按钮禁用
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.3 审批页面(ApprovalPage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.2
|
|||
|
|
**角色**:招采负责人
|
|||
|
|
**页面类型**:表单编辑
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
招采负责人对发起人提交的信息进行补充,填写招标公告核心信息并上传文件。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 加载数据:GET /api/bidding-self/{id}
|
|||
|
|
- 保存数据:PUT /api/bidding-self/{id}/update
|
|||
|
|
- 文件上传:POST /api/bidding-self/upload
|
|||
|
|
|
|||
|
|
**页面结构**(从上到下):
|
|||
|
|
|
|||
|
|
1. 上部:发起信息只读展示
|
|||
|
|
- 显示发起页面填写的所有信息(发起人、项目、标的物、投标要求、评标原则、评标小组)
|
|||
|
|
- 只读展示,不可编辑
|
|||
|
|
|
|||
|
|
2. 中部:招采负责人填写区
|
|||
|
|
- 报名开始/结束时间:时间控件,精确到年月日时分,可修改
|
|||
|
|
- 投标开始/结束时间:时间控件,精确到年月日时分,可修改
|
|||
|
|
- 开标时间:时间控件,精确到年月日时分,可修改
|
|||
|
|
- 投标方式:下拉选择(线上/线下),默认线上
|
|||
|
|
- 投标地点:文本输入,选择线下时必填
|
|||
|
|
- 投标联系方式:文本输入,格式:姓名、电话、邮箱
|
|||
|
|
- 招标公告:文件上传,必填,支持 PDF/DOC/DOCX/JPG/PNG
|
|||
|
|
|
|||
|
|
3. 文件上传说明
|
|||
|
|
- 使用 el-upload 组件
|
|||
|
|
- action: /api/bidding-self/upload
|
|||
|
|
- 上传成功后获取 BladeFile 对象
|
|||
|
|
- 多个文件以 JSON 数组形式存储
|
|||
|
|
- 支持文件预览(通过返回的 URL)和删除
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 取消:返回列表
|
|||
|
|
- 暂存:保存当前编辑内容(不校验必填)
|
|||
|
|
- 保存:调用 /api/bidding-self/{id}/update,保存业务数据
|
|||
|
|
|
|||
|
|
**保存校验**:
|
|||
|
|
- 时间逻辑正确(结束时间 > 开始时间)
|
|||
|
|
- 选择线下时,投标地点必填
|
|||
|
|
- 招标公告文件必须上传
|
|||
|
|
|
|||
|
|
**防抖**:保存和暂存按钮防抖 3 秒,提交期间按钮禁用
|
|||
|
|
|
|||
|
|
**注意**:此页面不处理审批同意/驳回操作(由后续流程统一接口处理),仅保存业务数据(时间、地点、联系方式、附件信息)
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.4 总裁办负责人审批页面(FinalApprovalPage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.3
|
|||
|
|
**角色**:总裁办主任
|
|||
|
|
**页面类型**:审批节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
总裁办主任对招采负责人提交的信息进行审核。审核表单同上一节点页面,若有意见可在表单上填写意见。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 加载数据:GET /api/bidding-self/{id}
|
|||
|
|
- 保存数据:PUT /api/bidding-self/{id}/final-approval
|
|||
|
|
- 文件上传:POST /api/bidding-self/upload
|
|||
|
|
|
|||
|
|
**页面结构**(从上到下):
|
|||
|
|
|
|||
|
|
1. 上部:发起信息只读展示
|
|||
|
|
- 显示发起页面和招采负责人填写的所有信息(发起人、项目、标的物、投标要求、评标原则、评标小组、招标公告文件等)
|
|||
|
|
- 只读展示,不可编辑
|
|||
|
|
|
|||
|
|
2. 中部:总裁办负责人填写区
|
|||
|
|
- 审批意见:文本输入,可填写审核意见
|
|||
|
|
- 附件:可上传补充文件
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 取消:返回列表
|
|||
|
|
- 暂存:保存当前编辑内容(不校验必填)
|
|||
|
|
- 保存:调用 /api/bidding-self/{id}/final-approval,保存业务数据
|
|||
|
|
|
|||
|
|
**保存校验**:
|
|||
|
|
- 审批意见可为空(同意时无需填写)
|
|||
|
|
- 驳回时需填写驳回原因
|
|||
|
|
|
|||
|
|
**防抖**:保存和暂存按钮防抖 3 秒,提交期间按钮禁用
|
|||
|
|
|
|||
|
|
**注意**:此页面不处理审批同意/驳回操作(由后续流程统一接口处理),仅保存业务数据(审批意见、附件信息)
|
|||
|
|
|
|||
|
|
**路由规则**:
|
|||
|
|
- 同意 → 供应商报名
|
|||
|
|
- 驳回 → 退回总裁办招采负责人审批节点
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.5 供应商报名页面(RegistrationPage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.4
|
|||
|
|
**角色**:供应商(外部用户)
|
|||
|
|
**页面类型**:外部节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
供应商通过招标公告中的报名网址进入系统,查看正在报名中的项目列表,选择项目进行报名。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 获取报名项目列表:GET /api/bidding-self/registration/list
|
|||
|
|
- 提交报名:POST /api/bidding-self/registration/submit
|
|||
|
|
- 获取我的报名:GET /api/bidding-self/registration/my
|
|||
|
|
- 文件上传:POST /api/bidding-self/upload
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 报名项目列表
|
|||
|
|
- 表格列:项目编号、项目名称、项目类型、报名开始时间、报名结束时间、剩余报名时间(倒计时)、开标时间、操作(报名按钮)
|
|||
|
|
|
|||
|
|
2. 报名弹窗
|
|||
|
|
- 供应商名称:自动带出(根据登录账号)
|
|||
|
|
- 联系人:输入,必填,限制50字符
|
|||
|
|
- 联系电话:输入,必填,手机号格式
|
|||
|
|
- 联系邮箱:输入,必填,邮箱格式
|
|||
|
|
- 资质文件:文件上传(PDF/图片),必填,营业执照、资质证书等
|
|||
|
|
- 其他资料:文件上传(PDF/图片),选填
|
|||
|
|
|
|||
|
|
3. 我的报名(在"与您相关的项目"窗口查看)
|
|||
|
|
- 表格列:招标方式、项目编号、开始投标时间、剩余投标时间(倒计时)、开标时间、操作(查看详情/修改报名)
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 提交报名:提交报名信息
|
|||
|
|
- 保存草稿:保存报名信息,不提交
|
|||
|
|
- 取消:关闭报名窗口
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.6 供应商资质审核页面(QualificationPage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.5
|
|||
|
|
**角色**:招采负责人
|
|||
|
|
**页面类型**:审批节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
在投标方报名完成后,审核投标方的相关资质,决定投标方是否入围。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 获取待审核供应商:GET /api/bidding-self/qualification/list?initiateId={id}
|
|||
|
|
- 审核供应商资质:POST /api/bidding-self/qualification/audit
|
|||
|
|
- 批量审核:POST /api/bidding-self/qualification/batch
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 已报名供应商列表
|
|||
|
|
- 表格列:投标方名称(可点击展开查看详情)、联系人、联系电话、报名状态、操作(审核按钮)
|
|||
|
|
|
|||
|
|
2. 审核弹窗
|
|||
|
|
- 供应商基本信息:自动带出(名称、联系人、联系方式)
|
|||
|
|
- 资质文件:文件预览(支持预览和下载)
|
|||
|
|
- 审核结果:下拉选择(入围/不入围)
|
|||
|
|
- 未入围原因:文本输入,选择"不入围"时必填,限制500字符
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 保存审核:保存当前审核结果
|
|||
|
|
- 批量通过:批量选中供应商审核通过
|
|||
|
|
- 批量驳回:批量选中供应商审核不通过
|
|||
|
|
- 取消:返回列表
|
|||
|
|
|
|||
|
|
**业务规则**:
|
|||
|
|
- 逐个审核供应商资质,可批量操作
|
|||
|
|
- 选择"入围"后,系统自动向供应商发送收款信息(标书费用)
|
|||
|
|
- 选择"不入围"时,必须填写未入围原因,系统通知供应商
|
|||
|
|
- 审核通过后,供应商可进行付款购买标书
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.7 开标/投标页面
|
|||
|
|
|
|||
|
|
#### 5.7.1 开标页面(BidPage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.6
|
|||
|
|
**角色**:招采负责人
|
|||
|
|
**页面类型**:执行节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
审核入围资质通过后,投标方在规定时间内进行报价投标。投标时间结束后,到达开标时间,进行开标操作。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 获取待投标项目:GET /api/bidding-self/bid/list
|
|||
|
|
- 开标:POST /api/bidding-self/bid/opening
|
|||
|
|
- 流标:POST /api/bidding-self/bid/flow
|
|||
|
|
- 导出签到表:GET /api/bidding-self/bid/sign-export?initiateId={id}
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 项目信息展示
|
|||
|
|
- 项目编码、项目名称、投标开始时间、投标截止时间、开标时间、标的物明细
|
|||
|
|
- 应签到/已签到:显示签到比例(如 5/8)
|
|||
|
|
|
|||
|
|
2. 签到列表
|
|||
|
|
- 表格列:投标方名称、签到时间、签到状态
|
|||
|
|
- 支持导出签到表(Excel/PDF)
|
|||
|
|
|
|||
|
|
3. 开标操作
|
|||
|
|
- 到达开标时间后,如已报价投标方达到至少三家,则可以进行开标操作
|
|||
|
|
- 开标时间到,现场宣布开标纪律,检查并先开启商务标,记录各投标人报价
|
|||
|
|
|
|||
|
|
4. 流标操作(投标方不足三家时显示)
|
|||
|
|
- 弹出流标公告通知窗口
|
|||
|
|
- 编辑流标公告内容:公告标题、关键字、查看范围、是否置顶、招标简介
|
|||
|
|
- 公告内容抓取招标内容自动生成,可手动编辑
|
|||
|
|
- 填写完成后点击【保存】,流程直接结束
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 导出签到表:导出签到供应商列表
|
|||
|
|
- 开始唱标:进入唱标环节
|
|||
|
|
- 流标:投标方不足时显示,结束流程
|
|||
|
|
- 取消:返回列表
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
#### 5.7.2 投标页面(BidSupplierPage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.6
|
|||
|
|
**角色**:供应商
|
|||
|
|
**页面类型**:执行节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
供应商在规定时间内进行报价投标,包括签到、上传投标文件、填写报价单。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 获取待投标项目:GET /api/bidding-self/bid/list
|
|||
|
|
- 开标签到:POST /api/bidding-self/bid/sign
|
|||
|
|
- 提交投标:POST /api/bidding-self/bid/submit
|
|||
|
|
- 文件上传:POST /api/bidding-self/upload
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 待投标项目列表
|
|||
|
|
- 表格列:项目编码、项目名称、开始投标时间、结束投标时间、开标时间、操作(投标按钮/已签到)、签订状态、招标人
|
|||
|
|
|
|||
|
|
2. 投标详情页
|
|||
|
|
- 项目信息展示
|
|||
|
|
- 开标签到按钮:到达投标截止时间后显示,点击后完成签到,按钮变灰
|
|||
|
|
- 投标按钮:投标时间内显示,点击打开投标页面
|
|||
|
|
|
|||
|
|
3. 投标弹窗
|
|||
|
|
- 投标文件:文件上传(PDF/Word),必填
|
|||
|
|
- 授权书:文件上传(PDF/图片),必填
|
|||
|
|
- 其他资料:文件上传(PDF/图片),选填
|
|||
|
|
- 报价单:表格填写,按标的物填写单价,自动计算合价和总报价
|
|||
|
|
- 总报价:自动计算,只读
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 开标签到:到达截止时间后显示,点击后变灰
|
|||
|
|
- 投标:投标时间内显示,打开投标页面
|
|||
|
|
- 取消:关闭投标窗口
|
|||
|
|
|
|||
|
|
**业务规则**:
|
|||
|
|
- 投标人须在投标截止时间前完成线上签到
|
|||
|
|
- 如未在规定时间内完成签到,将视为放弃投标
|
|||
|
|
- 投标时间结束后,不可以进行报价投标的操作
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.8 唱标页面(OpeningPage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.7
|
|||
|
|
**角色**:招采负责人
|
|||
|
|
**页面类型**:展示节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
唱标页面主要以表格形式展示投标方的第一轮报价信息,自动获取数据展示。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 获取唱标列表:GET /api/bidding-self/opening/list?initiateId={id}
|
|||
|
|
- 生成唱标记录:POST /api/bidding-self/opening/record
|
|||
|
|
- 唱标结束:POST /api/bidding-self/opening/complete
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 项目基本信息
|
|||
|
|
- 项目名称、招标编号、开标时间、开标地点
|
|||
|
|
|
|||
|
|
2. 投标方报价列表
|
|||
|
|
- 表格列:投标人名称、投标总报价(含税总价)、税率、含税总价、不含税总价、税目、工期/交货期/质保期、补充说明
|
|||
|
|
|
|||
|
|
3. 唱标记录
|
|||
|
|
- 所有投标方上传完成后,进行公开唱标,生成唱标记录表
|
|||
|
|
- 系统公示唱标信息表格,各供应商可进行查看
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 生成唱标记录表:生成并展示唱标记录表
|
|||
|
|
- 唱标结束:确认唱标无问题,进入专家评标
|
|||
|
|
- 返回:返回开标页面
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.9 专家签到/评标页面
|
|||
|
|
|
|||
|
|
#### 5.9.1 专家签到页面(ExpertSignPage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.8
|
|||
|
|
**角色**:抽取的专家
|
|||
|
|
**页面类型**:交互节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
专家登录系统后进行签到,签到完成后进行电子签署文件。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 专家签到:POST /api/bidding-self/expert/sign
|
|||
|
|
- 上传签署文件:POST /api/bidding-self/expert/sign-file
|
|||
|
|
- 文件上传:POST /api/bidding-self/upload
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 专家信息展示
|
|||
|
|
- 专家姓名、职称、专业类别、所属单位(自动带出)
|
|||
|
|
|
|||
|
|
2. 签到操作
|
|||
|
|
- 签到按钮:完成线上签到
|
|||
|
|
|
|||
|
|
3. 电子签署
|
|||
|
|
- 签署文件按钮:打开电子签署页面(法大大)
|
|||
|
|
- 上传回传文件:上传签字盖章后的文件
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 签到:完成线上签到
|
|||
|
|
- 签署文件:打开电子签署页面
|
|||
|
|
- 上传回传文件:上传签字盖章后的文件
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
#### 5.9.2 专家评标页面(EvaluationPage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.9
|
|||
|
|
**角色**:评审专家
|
|||
|
|
**页面类型**:评审节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
专家评标环节能够查看已入围投标方投标文件以及报价排名,进行资质审查及评标标准打分。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 获取待评标列表:GET /api/bidding-self/evaluation/list?initiateId={id}
|
|||
|
|
- 获取投标方详情:GET /api/bidding-self/evaluation/detail?initiateId={id}&supplierId={id}
|
|||
|
|
- 提交评分:POST /api/bidding-self/evaluation/score
|
|||
|
|
- 生成资质认定表:POST /api/bidding-self/evaluation/cert
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 投标方列表
|
|||
|
|
- 表格列:排名、投标方名称、报价(元)、操作(查看/评标按钮)
|
|||
|
|
|
|||
|
|
2. 查看投标方详情
|
|||
|
|
- 投标文件预览、报价明细、资质文件、其他上传资料
|
|||
|
|
|
|||
|
|
3. 评标打分弹窗
|
|||
|
|
- 资质审查评分:评分输入(0-100)
|
|||
|
|
- 技术标准评分:评分输入(0-100)
|
|||
|
|
- 商务标准评分:评分输入(0-100)
|
|||
|
|
- 价格评分:自动计算(根据报价)
|
|||
|
|
- 综合评分:自动计算(加权汇总)
|
|||
|
|
- 评审意见:文本输入,限制1000字符
|
|||
|
|
|
|||
|
|
4. 生成资质认定表(组长权限)
|
|||
|
|
- 根据资料审查及打分情况生成资质认定表
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 保存评分:保存当前评分结果
|
|||
|
|
- 提交评分:提交评分,不可修改
|
|||
|
|
- 查看详情:查看投标方详细信息
|
|||
|
|
- 生成资质认定表:组长权限,生成资质认定表
|
|||
|
|
- 取消:关闭评标窗口
|
|||
|
|
|
|||
|
|
**业务规则**:
|
|||
|
|
- 只有所有专家评分完成后,才可以展示评分结果
|
|||
|
|
- 提交评分后不可修改
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.10 资格认定表审批页面(QualificationCertPage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.10
|
|||
|
|
**角色**:招采负责人
|
|||
|
|
**页面类型**:审批节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
确认专家电子签署返回的资格认定表,确认淘汰的供应商单位,发送邮件通知,并进行电子确签。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 审核资格认定表:POST /api/bidding-self/qualification-cert/audit
|
|||
|
|
- 发送淘汰通知:POST /api/bidding-self/qualification-cert/notify
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 资格认定表展示
|
|||
|
|
- 表格列:项目编号、项目名称、供应商名称、资质审查结果、综合评分、排名、是否入围、电子签署状态
|
|||
|
|
|
|||
|
|
2. 淘汰单位处理
|
|||
|
|
- 确认淘汰的供应商单位
|
|||
|
|
- 发送邮件通知淘汰单位
|
|||
|
|
- 发送电子签署链接进行确签
|
|||
|
|
|
|||
|
|
3. 入围单位处理
|
|||
|
|
- 入围单位>=3家,进入线下磋商环节并进行多轮报价
|
|||
|
|
- 入围单位<3家,流程结束
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 通过:资格认定表审核通过
|
|||
|
|
- 驳回:退回专家重新评标
|
|||
|
|
- 发送通知:向淘汰单位发送邮件通知
|
|||
|
|
- 进入磋商:入围单位>=3家时显示,进入多轮报价
|
|||
|
|
- 取消:返回列表
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.11 供应商报价页面(QuotePage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.11 / 3.7.4.15
|
|||
|
|
**角色**:供应商(入围供应商)
|
|||
|
|
**页面类型**:报价节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
供应商通过此页面进行多轮报价(包括终报)。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 提交报价:POST /api/bidding-self/quote/submit
|
|||
|
|
- 获取报价历史:GET /api/bidding-self/quote/history?initiateId={id}&supplierId={id}
|
|||
|
|
- 文件上传:POST /api/bidding-self/upload
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 顶部信息
|
|||
|
|
- 报价截止时间(倒计时)、项目名称、项目编号、报价轮次
|
|||
|
|
|
|||
|
|
2. 投标人信息
|
|||
|
|
- 投标人名称:自动带出
|
|||
|
|
- 授权委托人:自动带出
|
|||
|
|
- 联系电话:自动带出
|
|||
|
|
|
|||
|
|
3. 报价信息
|
|||
|
|
- 报价总金额:输入,必填,精确到小数点后两位(含税金额)
|
|||
|
|
- 总金额大写:自动带出(根据报价总金额自动生成)
|
|||
|
|
- 服务/交货周期/质保期:输入,必填,限制200字符
|
|||
|
|
- 补充说明/优惠承诺:输入,必填,限制1000字符
|
|||
|
|
|
|||
|
|
4. 物料明细清单(分项报价表)
|
|||
|
|
- 表格列:名称、编码、规格型号、单位、数量、单价(手动输入)、合价(自动计算)
|
|||
|
|
- 系统合计总价:自动汇总所有行合价
|
|||
|
|
|
|||
|
|
5. 附件区
|
|||
|
|
- 文件上传、预览、删除
|
|||
|
|
|
|||
|
|
6. 历史记录
|
|||
|
|
- 表格列:轮次、报价金额、提交时间
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 提交报价:提交当前轮次报价
|
|||
|
|
- 保存草稿:保存报价信息,不提交
|
|||
|
|
- 取消:返回报价页面
|
|||
|
|
|
|||
|
|
**业务规则**:
|
|||
|
|
- 报价截止时间前可提交,超时不可提交
|
|||
|
|
- 单价输入时,合价自动计算(单价×数量)
|
|||
|
|
- 总金额大写自动生成
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.12 出报价分页面(ScorePage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.12
|
|||
|
|
**角色**:招采负责人
|
|||
|
|
**页面类型**:计算节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
针对供应商报价后进行计算报价分并展示。根据不同项目,可配置不同评分规则。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 计算报价分:POST /api/bidding-self/score/calculate
|
|||
|
|
- 获取评分配置:GET /api/bidding-self/score/config
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 项目信息展示
|
|||
|
|
- 项目编号、项目名称、评分方式(下拉选择)、报价轮次、项目类型、需求部门、需求公司、项目对接人、需求简介、备注
|
|||
|
|
- 以上字段均为只读,自动带出
|
|||
|
|
|
|||
|
|
2. 评分方法说明
|
|||
|
|
- 低价优先法:最低价为基准,价格越低得分越高
|
|||
|
|
- 基准价法:以平均价为核心,平衡成本和竞争
|
|||
|
|
- 计算公式展示
|
|||
|
|
|
|||
|
|
3. 报价分明细行
|
|||
|
|
- 表格列:序号、供应商名称、第二轮报价、降价幅度、本轮最低价、价格分
|
|||
|
|
|
|||
|
|
4. 计算说明
|
|||
|
|
- 展示当前采用的评分方法和计算公式
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 计算报价分:根据选择的评分方式计算报价分
|
|||
|
|
- 重新计算:重新计算报价分
|
|||
|
|
- 再次报价:到达投标方报价节点可再次报价
|
|||
|
|
- 进入下一环节:到达专家评分环节
|
|||
|
|
- 取消:返回列表
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.13 投票页面(VotePage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.13
|
|||
|
|
**角色**:业务人员、招采负责人、审计人员
|
|||
|
|
**页面类型**:投票节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
展示招标项目基本信息和供应商信息,进行投票选定入围供应商。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 提交投票:POST /api/bidding-self/vote/submit
|
|||
|
|
- 获取投票结果:GET /api/bidding-self/vote/result?initiateId={id}&voteRound={round}
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 投票规则展示
|
|||
|
|
- 投票范围:本轮所有有效供应商名单
|
|||
|
|
- 投票规则:单选/多选、可入围数量、投票权重、是否可弃权
|
|||
|
|
- 约束要求:每人限投1次、提交后不可修改
|
|||
|
|
- 入围规则:按得票多少排序、票数阈值、并列处理规则
|
|||
|
|
|
|||
|
|
2. 供应商投票列表
|
|||
|
|
- 表格列:排名、投标方名称、最新一轮报价、前期评审情况(点击查看详情)、详情(点击查看详情)、操作(单选按钮)、个人意见备注
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 提交投票:提交投票结果,提交后不可修改
|
|||
|
|
- 弃权:如规则允许,可选择弃权
|
|||
|
|
- 取消:返回列表
|
|||
|
|
|
|||
|
|
**业务规则**:
|
|||
|
|
- 每人限投1次
|
|||
|
|
- 提交后不可修改
|
|||
|
|
- 按得票多少排序确定入围名单
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.14 确定入围供应商页面(FinalistPage.vue)
|
|||
|
|
|
|||
|
|
**节点**:3.7.4.14
|
|||
|
|
**角色**:招采负责人
|
|||
|
|
**页面类型**:确认节点
|
|||
|
|
|
|||
|
|
**功能描述**:
|
|||
|
|
根据投票结果或评分结果,确定入围供应商名单。
|
|||
|
|
|
|||
|
|
**接口**:
|
|||
|
|
- 确认入围:POST /api/bidding-self/finalist/confirm
|
|||
|
|
- 通知入围供应商:POST /api/bidding-self/finalist/notify
|
|||
|
|
|
|||
|
|
**页面结构**:
|
|||
|
|
|
|||
|
|
1. 供应商入围情况
|
|||
|
|
- 表格列:排名、供应商名称、综合得分、得票数、是否入围、报价
|
|||
|
|
|
|||
|
|
2. 入围规则
|
|||
|
|
- 投标方>=3家:通知供应商并进入后续报价(第三次报价)
|
|||
|
|
- 投标方<3家:流程结束
|
|||
|
|
|
|||
|
|
**操作按钮**:
|
|||
|
|
- 确认入围:确认入围供应商名单
|
|||
|
|
- 通知供应商:向入围供应商发送通知
|
|||
|
|
- 结束流程:投标方<3家时显示,结束流程
|
|||
|
|
- 取消:返回列表
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### 5.15 公共说明
|
|||
|
|
|
|||
|
|
**文件上传通用说明**:
|
|||
|
|
- 所有文件上传使用 Element Plus el-upload 组件
|
|||
|
|
- action: '/api/bidding-self/upload'
|
|||
|
|
- headers: { Authorization: 'Bearer ' + getToken() }
|
|||
|
|
- 上传成功后从 response.data 获取 BladeFile 对象
|
|||
|
|
- 多个文件以 JSON 数组形式存储和传输
|
|||
|
|
- 回显时 JSON.parse 解析为 BladeFile 列表
|
|||
|
|
|
|||
|
|
**时区处理**:
|
|||
|
|
- 所有时间字段统一使用东八区(Asia/Shanghai)
|
|||
|
|
- 使用 dayjs + timezone 插件处理
|
|||
|
|
- 时间控件默认显示东八区时间
|
|||
|
|
- 提交时转换为 'YYYY-MM-DD HH:mm:ss' 格式字符串
|
|||
|
|
|
|||
|
|
**防抖处理**:
|
|||
|
|
- 所有提交操作(保存、提交、审核等)按钮防抖 3 秒
|
|||
|
|
- 提交期间按钮禁用,显示加载状态
|
|||
|
|
- 提交成功后或接口返回错误后解除禁用状态
|
|||
|
|
|
|||
|
|
**附件存储**:
|
|||
|
|
- 附件信息采用系统标准 MinIO 处理
|
|||
|
|
- 文件上传到 MinIO 对象存储,返回 BladeFile 对象
|
|||
|
|
- 附件信息以 JSON 字符串存储在业务字段中
|
|||
|
|
- 不单独建附件表
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 6. 附录
|
|||
|
|
|
|||
|
|
### 6.1 相关文档
|
|||
|
|
|
|||
|
|
- 需求文档:`doc/需求文档-自行招标流程.md`
|
|||
|
|
- 开发设计文档:`doc/开发设计文档-自行招标流程.md`
|
|||
|
|
- 前端项目路径:`D:\dachkj\shuyu\project\zcui\saber3`
|
|||
|
|
- 主页面入口:`frontend/src/views/bidding/PendingBidding.vue`
|
|||
|
|
|
|||
|
|
### 6.2 变更记录
|
|||
|
|
|
|||
|
|
| 版本 | 日期 | 修改人 | 修改内容 |
|
|||
|
|
|------|------|--------|----------|
|
|||
|
|
| V1.0 | 2026-06-17 | - | 初始版本,包含9个接口定义和前端需求说明(发起页面+审批页面) |
|
|||
|
|
| V1.2 | 2026-06-23 | - | 完整重构:补充节点3.7.4.3至3.7.4.15的接口定义和前端需求说明<br>1. 新增36个REST API接口,共45个接口<br>2. 新增16个前端页面需求说明(只含需求描述,不含代码实现)<br>3. 新增15个数据类型定义<br>4. 补充总裁办负责人审批节点(3.7.4.3)<br>5. 更新版本说明和流程节点列表 |
|
|||
|
|
| V1.3 | 2026-06-30 | - | 调整:3.7.4.4 公众号/招采平台发布公告模块由其他系统实现,当前业务仅描述流程,删除该模块相关接口(/notice/save、/notice/publish、/notice/detail)、数据类型(BiddingSelfNotice)、前端页面(NoticePage.vue)及需求说明;接口总数由45调整为42,前端页面由16调整为15,数据类型由15调整为14,后续节点编号依次前移 |
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
**文档结束**
|
|||
|
|
|
|||
|
|
> 说明:本文档为前端开发提供完整的接口定义和需求说明。后端接口已按此文档实现。前端具体实现由前端开发团队根据需求自行设计。
|