|
|
# 分段招标管理
|
|
|
|
|
|
> 模块编码:bidding
|
|
|
> 端侧:Web专属(仅医院账号)
|
|
|
> 关联文档:01-模块划分 §4.2 / 02-功能清单-医院 §2 / 03-业务流转逻辑-医院 §2 / 05-接口规范 §9.2
|
|
|
> 强制规范遵循 `07-前端界面开发规范.md`
|
|
|
|
|
|
## 功能概览
|
|
|
|
|
|
| 项目 | 说明 |
|
|
|
|------|------|
|
|
|
| 菜单名称 | 分段招标管理 |
|
|
|
| 子菜单 | 招标计划、标段管理、供应商管理、招标发布、投标管理、评标管理、定标审批、中标公示 |
|
|
|
| 功能编号 | HO-BD-01 ~ HO-BD-09 |
|
|
|
| 权限编码前缀 | bidding:plan:* / bidding:section:* / bidding:supplier:* / bidding:award:* |
|
|
|
|
|
|
> **重要**:分段招标管理仅医院账号可用,物业公司不可操作此模块。
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面1:招标计划页
|
|
|
|
|
|
**页面编号**:HO-BD-01-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/bidding/plans
|
|
|
|
|
|
### 界面布局
|
|
|
|
|
|
```
|
|
|
┌──────────────────────────────────────────────────────────────────┐
|
|
|
│ [面包屑] 分段招标管理 > 招标计划 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [查询条件区] │
|
|
|
│ 计划名称[____] 状态[▼] 招标方式[▼] [查询] [重置] │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [操作栏] [新增招标计划] │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [列表区] │
|
|
|
│ 序号| 计划名称 | 招标方式 | 标段数 | 状态 | 创建时间 | 操作 │
|
|
|
│ 1 | 2026年保洁招标 | 公开招标 | 3 | 投标中 | 04-01 | 查看 │
|
|
|
│ 2 | 2026年维修招标 | 邀请招标 | 2 | 计划中 | 04-10 | 编辑 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [分页] 共8条 │
|
|
|
└──────────────────────────────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### 表单字段(新增/编辑页)
|
|
|
|
|
|
| 字段名 | 控件类型 | 必填 | 默认值 | 数据来源 | 校验规则 |
|
|
|
|--------|----------|------|--------|----------|----------|
|
|
|
| 计划名称 | 文本输入 | 是 | — | 自填 | 最大100字 |
|
|
|
| 关联项目 | 下拉单选 | 是 | — | 本医院院区 | — |
|
|
|
| 招标方式 | 下拉单选 | 是 | — | 固定选项 | 公开招标/邀请招标/竞争性谈判 |
|
|
|
| 预算金额 | 数字输入 | 是 | — | 自填 | >0 |
|
|
|
| 投标截止日期 | 日期时间 | 是 | — | 自填 | 晚于当前时间 |
|
|
|
| 计划描述 | 多行文本 | 否 | — | 自填 | 最大500字 |
|
|
|
|
|
|
### 操作按钮
|
|
|
|
|
|
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|
|
|
|------|----------|------|----------|------|
|
|
|
| 新增招标计划 | bidding:plan:create | 操作栏 | 始终 | — |
|
|
|
| 编辑 | bidding:plan:update | 行操作 | 状态=计划中 | — |
|
|
|
| 查看 | bidding:plan:view | 行操作 | 始终 | — |
|
|
|
|
|
|
### API端点
|
|
|
|
|
|
| 页面操作 | API路径 | 方法 | 说明 |
|
|
|
|----------|---------|------|------|
|
|
|
| 列表查询 | /api/v1/bidding-plans | GET | — |
|
|
|
| 新增 | /api/v1/bidding-plans | POST | — |
|
|
|
| 编辑 | /api/v1/bidding-plans/{id} | PUT | — |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**:进入页面 → 调用招标计划列表API → 渲染列表
|
|
|
2. **查询/筛选交互流程**:填写筛选条件 → 点击"查询"按钮 → 调用API携带筛选参数 → 刷新列表;点击"重置"清空条件重新加载
|
|
|
3. **表单填写与提交流程**:点击"新增招标计划" → 弹出新增弹窗(或跳转新增页)→ 填写表单 → 提交保存;点击"编辑"(状态=计划中)→ 弹出编辑弹窗 → 修改后保存
|
|
|
4. **弹窗/抽屉交互流程**:新增/编辑弹窗(el-dialog,含招标计划表单字段)
|
|
|
5. **行内操作流程**:点击"查看"跳转计划详情页;点击"编辑"弹出编辑弹窗
|
|
|
6. **异常与错误处理**:API请求失败显示el-message错误提示;投标截止日期早于当前时间提交时提示错误
|
|
|
7. **联动/级联交互**:状态筛选与列表数据联动,筛选后分页重置为第1页
|
|
|
8. **权限控制交互表现**:无创建权限隐藏"新增招标计划"按钮;状态非"计划中"时隐藏"编辑"按钮
|
|
|
|
|
|
### 前端硬性约束
|
|
|
|
|
|
- **H1 防重复提交(强制)**: "查询"/"新增招标计划"按钮请求期间置 loading+disabled 状态;行操作(编辑/查看)点击后禁用该行操作直至请求完成;翻页时 abort 未完成请求
|
|
|
- **H2 超时控制(强制)**: 列表查询(GET)超时 15s;表单提交(POST)超时 30s;超过阈值提示"请求超时,请稍后重试"
|
|
|
- **H3 操作确认(强制)**: 本页面无危险操作需二次确认
|
|
|
- **H5 权限隔离(建议)**: 返回空列表展示"暂无招标计划";code=403 时展示"无权限访问"
|
|
|
- **H6 批量限制(建议)**: 本页面无批量导出操作
|
|
|
- **H8 反馈机制(建议)**: 操作成功 success(duration=2s)+ 静默刷新;失败 error(duration=0);网络异常显示重试按钮
|
|
|
- **弹窗表单(新增/编辑招标计划)额外约束**:
|
|
|
- **H1 防重复提交(强制)**: 弹窗内提交按钮 loading+disabled
|
|
|
- **H2 超时控制(强制)**: 提交(POST/PUT)超时 30s
|
|
|
- **H4 脏数据检测(强制)**: 弹窗内表单修改后尝试关闭时拦截确认
|
|
|
- **H8 反馈机制(建议)**: 成功关闭弹窗 + 刷新 + success(2s);失败 error(0)
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| 计划名称输入 | el-input | placeholder="请输入计划名称",clearable,maxlength=100 |
|
|
|
| 状态选择 | el-select | placeholder="请选择状态",clearable |
|
|
|
| 招标方式选择 | el-select | placeholder="请选择招标方式",clearable,options: 公开招标/邀请招标/竞争性谈判 |
|
|
|
| 查询按钮 | el-button | type="primary",icon="Search" |
|
|
|
| 重置按钮 | el-button | type="default",icon="Refresh" |
|
|
|
| 新增招标计划按钮 | el-button | type="primary",icon="Plus" |
|
|
|
| 计划列表 | el-table | stripe,border,row-key="id" |
|
|
|
| 状态列 | el-tag | :type根据状态配色(计划中=info,投标中=warning,已完成=success) |
|
|
|
| 编辑按钮 | el-button | type="primary",size="small",link样式 |
|
|
|
| 查看按钮 | el-button | type="default",size="small",link样式 |
|
|
|
| 新增/编辑弹窗 | el-dialog | title="新增招标计划/编辑招标计划",width="600px" |
|
|
|
| 关联项目选择 | el-select | placeholder="请选择关联项目",filterable |
|
|
|
| 预算金额 | el-input-number | :min=0.01,:precision=2,controls-position="right" |
|
|
|
| 投标截止日期 | el-date-picker | type="datetime",placeholder="请选择投标截止日期" |
|
|
|
| 计划描述 | el-input | type="textarea",:rows=4,maxlength=500,show-word-limit |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 计划名称 | required,maxlength=100 | 请输入计划名称 / 计划名称不能超过100个字符 |
|
|
|
| 关联项目 | required | 请选择关联项目 |
|
|
|
| 招标方式 | required | 请选择招标方式 |
|
|
|
| 预算金额 | required,>0 | 请输入预算金额 / 预算金额必须大于0 |
|
|
|
| 投标截止日期 | required,晚于当前时间 | 请选择投标截止日期 / 截止日期必须晚于当前时间 |
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px(桌面端) | 查询条件区单行排列,列表全字段展示 |
|
|
|
| 1024-1279px(Pad横屏) | 查询条件区双行排列,隐藏"创建时间"列,编辑弹窗宽度90% |
|
|
|
| 768-1023px(Pad竖屏) | 查询条件区纵向堆叠,仅显示计划名称/状态筛选,列表显示核心字段(计划名称/招标方式/状态/操作),弹窗全屏宽度 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面2:标段管理页
|
|
|
|
|
|
**页面编号**:HO-BD-02-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/bidding/sections
|
|
|
|
|
|
### 列表字段
|
|
|
|
|
|
| 序号 | 字段名 | 列宽 | 支持排序 | 说明 |
|
|
|
|------|--------|------|----------|------|
|
|
|
| 1 | 标段名称 | 150px | 否 | — |
|
|
|
| 2 | 所属计划 | 150px | 否 | — |
|
|
|
| 3 | 标段范围 | 200px | 否 | — |
|
|
|
| 4 | 预算金额 | 100px | 是 | — |
|
|
|
| 5 | 投标供应商数 | 100px | 否 | — |
|
|
|
| 6 | 状态 | 80px | 否 | — |
|
|
|
| 7 | 操作 | 100px | — | 编辑/查看 |
|
|
|
|
|
|
### 表单字段(新增/编辑弹窗)
|
|
|
|
|
|
| 字段名 | 控件类型 | 必填 | 默认值 | 数据来源 | 校验规则 |
|
|
|
|--------|----------|------|--------|----------|----------|
|
|
|
| 标段名称 | 文本输入 | 是 | — | 自填 | 最大50字 |
|
|
|
| 标段范围 | 多行文本 | 是 | — | 自填 | 最大500字 |
|
|
|
| 预算金额 | 数字输入 | 是 | — | 自填 | >0 |
|
|
|
| 资质要求 | 多行文本 | 否 | — | 自填 | — |
|
|
|
| 评标标准 | 多行文本 | 否 | — | 自填 | — |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**:进入页面(从招标计划详情进入)→ 调用标段列表API → 渲染列表
|
|
|
2. **查询/筛选交互流程**:不适用(按所属计划自动过滤)
|
|
|
3. **表单填写与提交流程**:点击"新增标段"(操作栏)→ 弹出新增弹窗 → 填写标段信息 → 保存;点击"编辑" → 弹出编辑弹窗 → 修改后保存
|
|
|
4. **弹窗/抽屉交互流程**:新增/编辑标段弹窗(el-dialog,含标段名称、范围、预算金额、资质要求、评标标准字段)
|
|
|
5. **行内操作流程**:点击"编辑"弹出编辑弹窗;点击"查看"跳转标段详情
|
|
|
6. **异常与错误处理**:保存失败显示el-message错误提示;预算金额为0时阻止提交
|
|
|
7. **联动/级联交互**:所属计划与标段数据联动,切换计划自动加载对应标段
|
|
|
8. **权限控制交互表现**:无编辑权限时行操作仅显示"查看"
|
|
|
|
|
|
### 前端硬性约束
|
|
|
|
|
|
- **H1 防重复提交(强制)**: "新增标段"/行操作(编辑/查看)按钮请求期间置 loading+disabled 状态;操作期间禁用该行其他操作
|
|
|
- **H2 超时控制(强制)**: 列表查询(GET)超时 15s;标段保存(POST)超时 30s;超过阈值提示"请求超时,请稍后重试"
|
|
|
- **H3 操作确认(强制)**: 本页面无危险操作需二次确认
|
|
|
- **H5 权限隔离(建议)**: 返回空列表展示"暂无标段数据";code=403 时展示"无权限访问"
|
|
|
- **H8 反馈机制(建议)**: 操作成功 success(duration=2s)+ 静默刷新列表;失败 error(duration=0);网络异常显示重试按钮
|
|
|
- **弹窗表单(新增/编辑标段)额外约束**:
|
|
|
- **H1 防重复提交(强制)**: 弹窗内提交按钮 loading+disabled
|
|
|
- **H2 超时控制(强制)**: 提交(POST)超时 30s
|
|
|
- **H4 脏数据检测(强制)**: 弹窗内表单修改后尝试关闭时拦截确认
|
|
|
- **H8 反馈机制(建议)**: 成功关闭弹窗 + 刷新 + success(2s);失败 error(0)
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| 标段列表 | el-table | stripe,border,row-key="id" |
|
|
|
| 状态列 | el-tag | :type根据状态配色 |
|
|
|
| 编辑按钮 | el-button | type="primary",size="small",link样式 |
|
|
|
| 查看按钮 | el-button | type="default",size="small",link样式 |
|
|
|
| 新增/编辑弹窗 | el-dialog | title="新增标段/编辑标段",width="600px" |
|
|
|
| 标段名称输入 | el-input | placeholder="请输入标段名称",maxlength=50 |
|
|
|
| 标段范围 | el-input | type="textarea",:rows=3,maxlength=500,show-word-limit |
|
|
|
| 预算金额 | el-input-number | :min=0.01,:precision=2,controls-position="right" |
|
|
|
| 资质要求 | el-input | type="textarea",:rows=3 |
|
|
|
| 评标标准 | el-input | type="textarea",:rows=3 |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 标段名称 | required,maxlength=50 | 请输入标段名称 / 标段名称不能超过50个字符 |
|
|
|
| 标段范围 | required,maxlength=500 | 请输入标段范围 / 标段范围不能超过500个字符 |
|
|
|
| 预算金额 | required,>0 | 请输入预算金额 / 预算金额必须大于0 |
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px(桌面端) | 列表全字段展示,操作列右对齐 |
|
|
|
| 1024-1279px(Pad横屏) | 隐藏"标段范围"列,编辑弹窗宽度90% |
|
|
|
| 768-1023px(Pad竖屏) | 仅显示标段名称/预算金额/状态/操作核心字段,弹窗全屏宽度 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面3:供应商管理页
|
|
|
|
|
|
**页面编号**:HO-BD-03-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/bidding/suppliers
|
|
|
|
|
|
### 列表字段
|
|
|
|
|
|
| 序号 | 字段名 | 列宽 | 支持排序 | 说明 |
|
|
|
|------|--------|------|----------|------|
|
|
|
| 1 | 供应商名称 | 150px | 是 | — |
|
|
|
| 2 | 联系人 | 80px | 否 | — |
|
|
|
| 3 | 联系电话 | 120px | 否 | — |
|
|
|
| 4 | 资质状态 | 80px | 否 | 已审核/待审核/黑名单 |
|
|
|
| 5 | 合作次数 | 80px | 是 | — |
|
|
|
| 6 | 操作 | 140px | — | 编辑/审核/拉黑 |
|
|
|
|
|
|
### 表单字段(新增/编辑弹窗)
|
|
|
|
|
|
| 字段名 | 控件类型 | 必填 | 默认值 | 数据来源 | 校验规则 |
|
|
|
|--------|----------|------|--------|----------|----------|
|
|
|
| 供应商名称 | 文本输入 | 是 | — | 自填 | 最大100字 |
|
|
|
| 统一社会信用代码 | 文本输入 | 是 | — | 自填 | 18位 |
|
|
|
| 联系人 | 文本输入 | 是 | — | 自填 | — |
|
|
|
| 联系电话 | 文本输入 | 是 | — | 自填 | 手机号格式 |
|
|
|
| 地址 | 文本输入 | 否 | — | 自填 | — |
|
|
|
| 资质文件 | 文件上传 | 否 | — | 上传 | ≤5个文件 |
|
|
|
| 备注 | 多行文本 | 否 | — | 自填 | 最大200字 |
|
|
|
|
|
|
### 操作按钮
|
|
|
|
|
|
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|
|
|
|------|----------|------|----------|------|
|
|
|
| 新增供应商 | bidding:supplier:create | 操作栏 | 始终 | — |
|
|
|
| 编辑 | bidding:supplier:update | 行操作 | 始终 | — |
|
|
|
| 资质审核 | bidding:supplier:approve | 行操作 | 资质状态=待审核 | 通过/驳回 |
|
|
|
| 拉黑/移出黑名单 | bidding:supplier:update | 行操作 | 始终 | 黑名单供应商不可投标 |
|
|
|
|
|
|
### API端点
|
|
|
|
|
|
| 页面操作 | API路径 | 方法 | 说明 |
|
|
|
|----------|---------|------|------|
|
|
|
| 列表查询 | /api/v1/suppliers | GET | — |
|
|
|
| 新增 | /api/v1/suppliers | POST | — |
|
|
|
| 资质审核 | /api/v1/suppliers/{id}/audit | POST | — |
|
|
|
| 拉黑 | /api/v1/suppliers/{id}/blacklist | PUT | — |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**:进入页面 → 调用供应商列表API → 渲染列表,黑名单供应商行灰色标记
|
|
|
2. **查询/筛选交互流程**:支持按供应商名称、资质状态筛选,查询后刷新列表
|
|
|
3. **表单填写与提交流程**:点击"新增供应商" → 弹出新增弹窗 → 填写供应商信息 → 保存;点击"编辑" → 弹出编辑弹窗 → 修改后保存
|
|
|
4. **弹窗/抽屉交互流程**:新增/编辑供应商弹窗(el-dialog);资质审核弹窗(选择通过/驳回,驳回需填写原因);拉黑确认弹窗(el-message-box)
|
|
|
5. **行内操作流程**:点击"资质审核"弹出审核弹窗;点击"拉黑"弹出确认弹窗,确认后状态变更;点击"移出黑名单"恢复正常状态
|
|
|
6. **异常与错误处理**:统一社会信用代码重复时提示"该供应商已存在";拉黑后该供应商不可投标,操作时二次确认提醒
|
|
|
7. **联动/级联交互**:资质状态与操作按钮联动(待审核显示审核按钮,黑名单显示移出黑名单按钮)
|
|
|
8. **权限控制交互表现**:无审核权限隐藏"资质审核"按钮;无拉黑权限隐藏"拉黑/移出黑名单"按钮
|
|
|
|
|
|
### 前端硬性约束
|
|
|
|
|
|
- **H1 防重复提交(强制)**: "新增供应商"/行操作(编辑/资质审核/拉黑)按钮请求期间置 loading+disabled 状态;操作期间禁用该行其他操作
|
|
|
- **H2 超时控制(强制)**: 列表查询(GET)超时 15s;提交/审核(POST)超时 30s;超过阈值提示"请求超时,请稍后重试"
|
|
|
- **H3 操作确认(强制)**: "拉黑"前弹出 confirm(`确定要将供应商"${supplierName}"加入黑名单?加入后该供应商将无法参与任何投标。`, type='error');"移出黑名单"前弹出 confirm("确定要将该供应商移出黑名单?", type='warning');"资质审核-驳回"前弹出 confirm + 驳回原因输入框(必填)
|
|
|
- **H5 权限隔离(建议)**: 返回空列表展示"暂无供应商数据";code=403 时展示"无权限访问"
|
|
|
- **H7 文件上传(建议)**: 资质文件上传限制单个文件≤10MB、总数≤9个;超出时提示"单文件不超过10MB,附件总数不超过9个"
|
|
|
- **H8 反馈机制(建议)**: 操作成功 success(duration=2s)+ 静默刷新列表;失败 error(duration=0);网络异常显示重试按钮
|
|
|
- **弹窗表单(新增/编辑供应商)额外约束**:
|
|
|
- **H1 防重复提交(强制)**: 弹窗内提交按钮 loading+disabled
|
|
|
- **H2 超时控制(强制)**: 提交(POST)超时 30s
|
|
|
- **H4 脏数据检测(强制)**: 弹窗内表单修改后尝试关闭时拦截确认
|
|
|
- **H8 反馈机制(建议)**: 成功关闭弹窗 + 刷新 + success(2s);失败 error(0)
|
|
|
- **弹窗表单(资质审核)额外约束**:
|
|
|
- **H1 防重复提交(强制)**: 弹窗内确认按钮 loading+disabled
|
|
|
- **H2 超时控制(强制)**: 审核(POST)超时 30s
|
|
|
- **H3 操作确认(强制)**: 已由外层 H3 覆盖(驳回需原因)
|
|
|
- **H4 脏数据检测(强制)**: 审核结果/驳回原因修改后尝试关闭时拦截
|
|
|
- **H8 反馈机制(建议)**: 成功关闭弹窗 + 刷新 + success(2s);失败 error(0)
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| 供应商列表 | el-table | stripe,border,:row-class-name黑名单行灰色 |
|
|
|
| 资质状态列 | el-tag | :type根据状态配色(已审核=success,待审核=warning,黑名单=danger) |
|
|
|
| 新增供应商按钮 | el-button | type="primary",icon="Plus" |
|
|
|
| 编辑按钮 | el-button | type="primary",size="small",link样式 |
|
|
|
| 资质审核按钮 | el-button | type="warning",size="small",link样式 |
|
|
|
| 拉黑按钮 | el-button | type="danger",size="small",link样式 |
|
|
|
| 新增/编辑弹窗 | el-dialog | title="新增供应商/编辑供应商",width="600px" |
|
|
|
| 统一社会信用代码 | el-input | placeholder="请输入统一社会信用代码",maxlength=18 |
|
|
|
| 联系电话 | el-input | placeholder="请输入联系电话" |
|
|
|
| 资质文件上传 | el-upload | action="/api/v1/files/upload",:limit=5,:file-list.sync |
|
|
|
| 资质审核弹窗 | el-dialog | title="资质审核",width="500px" |
|
|
|
| 审核结果 | el-radio-group | 通过/驳回单选 |
|
|
|
| 审核驳回原因 | el-input | type="textarea",:rows=3,v-if="审核结果=驳回" |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 供应商名称 | required,maxlength=100 | 请输入供应商名称 / 供应商名称不能超过100个字符 |
|
|
|
| 统一社会信用代码 | required,pattern=/^[0-9A-Z]{18}$/ | 请输入统一社会信用代码 / 统一社会信用代码格式不正确(18位字母数字) |
|
|
|
| 联系人 | required | 请输入联系人 |
|
|
|
| 联系电话 | required,pattern=/^1[3-9]\d{9}$/ | 请输入联系电话 / 联系电话格式不正确 |
|
|
|
| 审核结果 | required(审核时) | 请选择审核结果 |
|
|
|
| 审核驳回原因 | required(审核驳回时) | 请输入驳回原因 |
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px(桌面端) | 列表全字段展示,操作列右对齐 |
|
|
|
| 1024-1279px(Pad横屏) | 隐藏"合作次数"列,操作收入"更多"下拉 |
|
|
|
| 768-1023px(Pad竖屏) | 仅显示供应商名称/资质状态/操作核心字段,弹窗全屏宽度 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面4:招标发布页
|
|
|
|
|
|
**页面编号**:HO-BD-04-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/bidding/publish
|
|
|
|
|
|
### 操作流程
|
|
|
|
|
|
```
|
|
|
选择招标计划 → 确认标段 → 上传招标文件 → 邀请供应商(邀请招标时) → 发布
|
|
|
```
|
|
|
|
|
|
### 表单字段
|
|
|
|
|
|
| 字段名 | 控件类型 | 必填 | 默认值 | 数据来源 | 校验规则 |
|
|
|
|--------|----------|------|--------|----------|----------|
|
|
|
| 招标计划 | 下拉单选 | 是 | — | 计划中/待发布的计划 | — |
|
|
|
| 招标公告 | 多行文本 | 是 | — | 自填 | — |
|
|
|
| 招标文件 | 文件上传 | 是 | — | 上传 | ≤10个文件 |
|
|
|
| 邀请供应商 | 下拉多选 | 条件 | — | 供应商列表(已审核) | 邀请招标时必填 |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**:进入页面 → 加载可选招标计划(状态=待发布)→ 渲染发布表单
|
|
|
2. **查询/筛选交互流程**:不适用
|
|
|
3. **表单填写与提交流程**:选择招标计划 → 自动加载关联标段信息 → 确认标段 → 上传招标文件 → 填写招标公告 → (邀请招标时)选择邀请供应商 → 点击"发布" → 二次确认后调用发布API → 发布成功跳转招标计划页
|
|
|
4. **弹窗/抽屉交互流程**:发布确认弹窗(el-message-box,提示"确认发布招标?发布后不可撤回");招标文件上传使用el-upload,支持预览已上传文件
|
|
|
5. **行内操作流程**:不适用(发布页为表单交互)
|
|
|
6. **异常与错误处理**:招标文件未上传时阻止发布;邀请招标未选择供应商时提示"请选择邀请供应商";发布失败显示el-message错误提示
|
|
|
7. **联动/级联交互**:招标方式为"邀请招标"时显示邀请供应商选择(必填);招标方式为"公开招标"时隐藏;选择招标计划后自动加载标段信息
|
|
|
8. **权限控制交互表现**:无发布权限时隐藏"发布"按钮
|
|
|
|
|
|
### 前端硬性约束
|
|
|
|
|
|
- **H1 防重复提交(强制)**: "发布"按钮请求期间置 loading+disabled 状态;提交后禁用所有表单交互直至请求完成
|
|
|
- **H2 超时控制(强制)**: 表单提交(POST)超时 30s;文件上传超时 60s;超过阈值提示"请求超时,请稍后重试"
|
|
|
- **H3 操作确认(强制)**: "发布"前弹出 confirm("确定要发布该招标?发布后不可撤回,供应商将可查看并投标。", type='warning')
|
|
|
- **H4 脏数据检测(强制)**: 页面加载时 deep clone 初始表单数据为 _originData;监听表单变化维护 isDirty 标志;用户未保存尝试离开时通过 beforeRouteLeave 拦截并弹窗确认
|
|
|
- **H7 文件上传(建议)**: 招标文件上传限制单个文件≤10MB、总数≤9个;超出时提示"单文件不超过10MB,文件总数不超过9个";支持 .pdf/.doc/.docx
|
|
|
- **H8 反馈机制(建议)**: 发布成功显示 success(duration=2s)+ 延迟跳转招标计划页;失败显示 error(duration=0);网络异常时显示重试按钮
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| 招标计划选择 | el-select | placeholder="请选择招标计划",filterable,@change加载标段信息 |
|
|
|
| 标段确认区 | el-table | :data=关联标段,stripe,border,disabled不可编辑 |
|
|
|
| 招标公告 | el-input | type="textarea",:rows=6,placeholder="请输入招标公告" |
|
|
|
| 招标文件上传 | el-upload | action="/api/v1/files/upload",:limit=10,accept=".pdf,.doc,.docx",drag拖拽上传,:on-preview预览 |
|
|
|
| 邀请供应商 | el-select | placeholder="请选择供应商",multiple,filterable,collapse-tags,v-if="招标方式=邀请招标" |
|
|
|
| 发布按钮 | el-button | type="primary",icon="Promotion",:loading提交中 |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 招标计划 | required | 请选择招标计划 |
|
|
|
| 招标公告 | required | 请输入招标公告 |
|
|
|
| 招标文件 | required,≤10个 | 请上传招标文件 / 招标文件不能超过10个 |
|
|
|
| 邀请供应商 | required(邀请招标时) | 请选择邀请供应商 |
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px(桌面端) | 表单双列布局,标段确认区全宽展示 |
|
|
|
| 1024-1279px(Pad横屏) | 表单单列布局,标段确认区全宽展示 |
|
|
|
| 768-1023px(Pad竖屏) | 表单单列布局,文件上传区域宽度100%,邀请供应商选择全宽展示 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面5:投标管理页
|
|
|
|
|
|
**页面编号**:HO-BD-05-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/bidding/bids
|
|
|
|
|
|
### 列表字段
|
|
|
|
|
|
| 序号 | 字段名 | 列宽 | 支持排序 | 说明 |
|
|
|
|------|--------|------|----------|------|
|
|
|
| 1 | 标段名称 | 120px | 否 | — |
|
|
|
| 2 | 供应商 | 120px | 否 | — |
|
|
|
| 3 | 投标时间 | 140px | 是 | — |
|
|
|
| 4 | 投标金额 | 100px | 是 | — |
|
|
|
| 5 | 投标文件 | 100px | 否 | 下载查看 |
|
|
|
| 6 | 状态 | 80px | 否 | 已投标/已开标 |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**:进入页面 → 调用投标列表API → 渲染列表,默认按投标时间倒序
|
|
|
2. **查询/筛选交互流程**:支持按标段名称、供应商、状态筛选
|
|
|
3. **表单填写与提交流程**:不适用(医院端仅查看投标数据,投标由供应商提交)
|
|
|
4. **弹窗/抽屉交互流程**:点击投标文件"下载查看" → 新窗口打开/下载投标文件
|
|
|
5. **行内操作流程**:点击投标文件列链接下载查看
|
|
|
6. **异常与错误处理**:投标文件下载失败提示"文件下载失败,请重试";列表为空显示el-empty
|
|
|
7. **联动/级联交互**:标段选择后自动过滤该标段下的投标数据
|
|
|
8. **权限控制交互表现**:医院账号仅查看,无操作按钮
|
|
|
|
|
|
### 前端硬性约束
|
|
|
|
|
|
- **H1 防重复提交(强制)**: 投标文件下载按钮点击后置 loading+disabled 状态直至下载完成
|
|
|
- **H2 超时控制(强制)**: 列表查询(GET)超时 15s;文件下载超时 60s;超过阈值提示"请求超时,请稍后重试"
|
|
|
- **H8 反馈机制(建议)**: 文件下载失败显示 error(duration=0);网络异常时显示重试按钮;列表加载成功静默刷新
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| 投标列表 | el-table | stripe,border,:default-sort="{prop: 'bidTime', order: 'descending'}" |
|
|
|
| 状态列 | el-tag | :type根据状态配色(已投标=info,已开标=success) |
|
|
|
| 投标文件 | el-link | type="primary",:underline=false,icon="Download",@click下载 |
|
|
|
| 标段筛选 | el-select | placeholder="请选择标段",clearable,filterable |
|
|
|
| 供应商筛选 | el-input | placeholder="请输入供应商名称",clearable |
|
|
|
| 状态筛选 | el-select | placeholder="请选择状态",clearable |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| (无表单校验) | — | — |
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px(桌面端) | 列表全字段展示 |
|
|
|
| 1024-1279px(Pad横屏) | 隐藏"投标文件"列(改为行操作下载按钮) |
|
|
|
| 768-1023px(Pad竖屏) | 仅显示标段名称/供应商/投标金额/状态核心字段 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面6:评标管理页
|
|
|
|
|
|
**页面编号**:HO-BD-06-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/bidding/evaluations
|
|
|
|
|
|
### 界面布局
|
|
|
|
|
|
```
|
|
|
┌──────────────────────────────────────────────────────────────────┐
|
|
|
│ [面包屑] 分段招标管理 > 评标管理 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [评标委员会] [组建评标委员会] │
|
|
|
│ 评标人1:张三 评标人2:李四 评标人3:王五 │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [评分标准] [设置评分标准] │
|
|
|
│ 商务评分权重:40% 技术评分权重:40% 价格评分权重:20% │
|
|
|
├──────────────────────────────────────────────────────────────────┤
|
|
|
│ [评分录入] │
|
|
|
│ 供应商 | 商务分 | 技术分 | 价格分 | 总分 | 排名 │
|
|
|
│ XX公司 | [___] | [___] | [___] | — | — │
|
|
|
│ YY公司 | [___] | [___] | [___] | — | — │
|
|
|
│ [提交评标结果] │
|
|
|
└──────────────────────────────────────────────────────────────────┘
|
|
|
```
|
|
|
|
|
|
### 操作按钮
|
|
|
|
|
|
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|
|
|
|------|----------|------|----------|------|
|
|
|
| 组建评标委员会 | bidding:award:create | 操作栏 | 始终 | — |
|
|
|
| 设置评分标准 | bidding:award:create | 操作栏 | 始终 | — |
|
|
|
| 提交评标结果 | bidding:award:update | 操作栏 | 始终 | — |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**:进入页面 → 调用评标数据API → 渲染评标委员会信息、评分标准、评分录入表格
|
|
|
2. **查询/筛选交互流程**:不适用
|
|
|
3. **表单填写与提交流程**:流程步骤:组建评标委员会 → 设置评分标准 → 录入各供应商评分 → 提交评标结果。组建委员会:点击按钮 → 弹窗选择评标人员 → 保存;设置评分标准:点击按钮 → 弹窗设置各维度权重 → 保存(权重之和必须=100%);录入评分:在评分表格中逐行填写各供应商的商务分/技术分/价格分 → 系统自动计算总分和排名 → 点击"提交评标结果"
|
|
|
4. **弹窗/抽屉交互流程**:组建评标委员会弹窗(el-dialog,含评标人员多选);设置评分标准弹窗(el-dialog,含各维度权重滑块/输入)
|
|
|
5. **行内操作流程**:评分录入表格中行内输入评分数据,总分和排名自动计算
|
|
|
6. **异常与错误处理**:评分权重之和不等于100%时阻止保存;单项评分超出范围提示错误;提交评标结果时校验所有供应商评分是否填写完整
|
|
|
7. **联动/级联交互**:评分标准设置后,评分录入表头动态显示对应权重;各维度评分输入后自动计算总分和排名
|
|
|
8. **权限控制交互表现**:无评标权限时仅查看评分结果,不可编辑
|
|
|
|
|
|
### 前端硬性约束
|
|
|
|
|
|
- **H1 防重复提交(强制)**: "组建评标委员会"/"设置评分标准"/"提交评标结果"按钮请求期间置 loading+disabled 状态;评分录入期间锁定已填写行
|
|
|
- **H2 超时控制(强制)**: 数据加载(GET)超时 15s;提交(POST)超时 30s;超过阈值提示"请求超时,请稍后重试"
|
|
|
- **H3 操作确认(强制)**: "提交评标结果"前弹出 confirm("确定要提交评标结果?提交后将进入定标审批流程,不可修改评分。", type='warning')
|
|
|
- **H4 脏数据检测(强制)**: 页面加载时 deep clone 初始评分数据为 _originData;监听评分变化维护 isDirty 标志;用户有未保存评分尝试离开时通过 beforeRouteLeave 拦截确认
|
|
|
- **H8 反馈机制(建议)**: 操作成功显示 success(duration=2s)+ 静默刷新页面状态;失败显示 error(duration=0);网络异常显示重试按钮
|
|
|
- **弹窗表单(组建委员会/设置标准)额外约束**:
|
|
|
- **H1 防重复提交(强制)**: 弹窗内确认按钮 loading+disabled
|
|
|
- **H2 超时控制(强制)**: 提交(POST)超时 30s
|
|
|
- **H4 脏数据检测(强制)**: 弹窗内数据修改后尝试关闭时拦截确认
|
|
|
- **H8 反馈机制(建议)**: 成功关闭弹窗 + 刷新 + success(2s);失败 error(0)
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| 评标步骤指示 | el-steps | :active=当前步骤,:space=200,finish-status="success" |
|
|
|
| 评标委员会区 | el-card | shadow="hover",含评标人员列表 |
|
|
|
| 组建评标委员会按钮 | el-button | type="primary",icon="User",size="small" |
|
|
|
| 评标人员展示 | el-tag | v-for遍历评标人员,closable |
|
|
|
| 评分标准区 | el-card | shadow="hover",含各维度权重展示 |
|
|
|
| 设置评分标准按钮 | el-button | type="primary",icon="Setting",size="small" |
|
|
|
| 评分录入表格 | el-table | :data=供应商评分数据,stripe,border,show-summary |
|
|
|
| 商务分/技术分/价格分 | el-input-number | :min=0,:max=100,:precision=1,controls-position="right",size="small" |
|
|
|
| 总分列 | 自动计算 | :formatter根据权重加权计算 |
|
|
|
| 排名列 | 自动计算 | 根据总分降序排列 |
|
|
|
| 提交评标结果按钮 | el-button | type="primary",icon="Check",:loading提交中 |
|
|
|
| 组建评标委员会弹窗 | el-dialog | title="组建评标委员会",width="600px" |
|
|
|
| 评标人员选择 | el-select | multiple,filterable,placeholder="请选择评标人员" |
|
|
|
| 设置评分标准弹窗 | el-dialog | title="设置评分标准",width="500px" |
|
|
|
| 权重输入 | el-slider | :min=0,:max=100,show-input,:marks="{0:'0%', 50:'50%', 100:'100%'}" |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 评标人员 | required,≥3人 | 请选择评标人员 / 评标委员会至少3人 |
|
|
|
| 商务评分权重 | required,0-100 | 请设置商务评分权重 |
|
|
|
| 技术评分权重 | required,0-100 | 请设置技术评分权重 |
|
|
|
| 价格评分权重 | required,0-100 | 请设置价格评分权重 |
|
|
|
| 权重总和 | =100% | 评分权重之和必须等于100% |
|
|
|
| 商务分/技术分/价格分 | required,0-100 | 请输入评分 / 评分范围为0-100 |
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px(桌面端) | 评标委员会与评分标准左右并排,评分录入表格全宽 |
|
|
|
| 1024-1279px(Pad横屏) | 评标委员会与评分标准上下排列,评分录入表格全宽,评分输入列宽缩小 |
|
|
|
| 768-1023px(Pad竖屏) | 全部区域纵向堆叠,评分录入表格横向滚动,弹窗全屏宽度 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面7:定标审批页
|
|
|
|
|
|
**页面编号**:HO-BD-07-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/bidding/award
|
|
|
|
|
|
### 操作按钮
|
|
|
|
|
|
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|
|
|
|------|----------|------|----------|------|
|
|
|
| 定标审批 | bidding:award:approve | 行操作 | 状态=待定标 | 通过/驳回 |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**:进入页面 → 调用待定标项目列表API → 渲染列表
|
|
|
2. **查询/筛选交互流程**:支持按标段名称、状态筛选
|
|
|
3. **表单填写与提交流程**:点击"定标审批" → 弹出审批弹窗(查看评标结果摘要,选择通过/驳回)→ 驳回需填写原因 → 确认后调用API → 刷新列表
|
|
|
4. **弹窗/抽屉交互流程**:定标审批弹窗(el-dialog,含评标结果摘要展示、通过/驳回选择、驳回原因输入)
|
|
|
5. **行内操作流程**:仅状态=待定标时显示"定标审批"按钮
|
|
|
6. **异常与错误处理**:审批操作失败显示el-message错误提示
|
|
|
7. **联动/级联交互**:审批结果与列表状态联动(通过→公示中,驳回→评标中)
|
|
|
8. **权限控制交互表现**:无审批权限隐藏"定标审批"按钮
|
|
|
|
|
|
### 前端硬性约束
|
|
|
|
|
|
- **H1 防重复提交(强制)**: "定标审批"行操作按钮点击后置 loading+disabled 状态;弹窗内确认按钮同样 loading+disabled
|
|
|
- **H2 超时控制(强制)**: 列表查询(GET)超时 15s;定标审批(POST)超时 30s;超过阈值提示"请求超时,请稍后重试"
|
|
|
- **H3 操作确认(强制)**: "定标审批-通过"前弹出 confirm("确定要通过该定标审批?通过后将进入公示阶段。", type='warning');"定标审批-驳回"前弹出 confirm + 驳回原因输入框(必填),含影响说明:"驳回后需重新评标"
|
|
|
- **H5 权限隔离(建议)**: 返回空列表展示"暂无待定标项目";code=403 时展示"无权限访问"
|
|
|
- **H8 反馈机制(建议)**: 操作成功 success(duration=2s)+ 静默刷新列表;失败 error(duration=0);网络异常显示重试按钮
|
|
|
- **弹窗表单(定标审批)额外约束**:
|
|
|
- **H1 防重复提交(强制)**: 弹窗内确认按钮 loading+disabled
|
|
|
- **H2 超时控制(强制)**: 提交(POST)超时 30s
|
|
|
- **H3 操作确认(强制)**: 已由外层 H3 覆盖
|
|
|
- **H4 脏数据检测(强制)**: 审批结果/驳回原因修改后尝试关闭弹窗时拦截确认
|
|
|
- **H8 反馈机制(建议)**: 成功关闭弹窗 + 刷新 + success(2s);失败 error(0)
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| 定标列表 | el-table | stripe,border |
|
|
|
| 状态列 | el-tag | :type根据状态配色(待定标=warning,公示中=success,评标中=info) |
|
|
|
| 定标审批按钮 | el-button | type="primary",size="small",link样式 |
|
|
|
| 定标审批弹窗 | el-dialog | title="定标审批",width="600px" |
|
|
|
| 评标结果摘要 | el-descriptions | :column=1,border,展示中标候选人、评分等 |
|
|
|
| 审批结果 | el-radio-group | 通过/驳回单选 |
|
|
|
| 驳回原因 | el-input | type="textarea",:rows=3,v-if="审批结果=驳回" |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| 审批结果 | required | 请选择审批结果 |
|
|
|
| 驳回原因 | required(审批驳回时) | 请输入驳回原因 |
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px(桌面端) | 列表全字段展示,审批弹窗600px宽度 |
|
|
|
| 1024-1279px(Pad横屏) | 列表隐藏次要字段,审批弹窗80%宽度 |
|
|
|
| 768-1023px(Pad竖屏) | 列表仅显示核心字段,审批弹窗全屏宽度 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 页面8:中标公示页
|
|
|
|
|
|
**页面编号**:HO-BD-08-P01
|
|
|
**端侧归属**:Web专属
|
|
|
**页面路径**:/bidding/publicity
|
|
|
|
|
|
### 列表字段
|
|
|
|
|
|
| 序号 | 字段名 | 列宽 | 支持排序 | 说明 |
|
|
|
|------|--------|------|----------|------|
|
|
|
| 1 | 标段名称 | 120px | 否 | — |
|
|
|
| 2 | 中标供应商 | 120px | 否 | — |
|
|
|
| 3 | 中标金额 | 100px | 是 | — |
|
|
|
| 4 | 公示开始日 | 100px | 否 | — |
|
|
|
| 5 | 公示结束日 | 100px | 否 | — |
|
|
|
| 6 | 状态 | 80px | 否 | 公示中/已生效 |
|
|
|
| 7 | 操作 | 100px | — | 生成合同 |
|
|
|
|
|
|
### 操作按钮
|
|
|
|
|
|
| 按钮 | 权限编码 | 位置 | 显示条件 | 说明 |
|
|
|
|------|----------|------|----------|------|
|
|
|
| 生成合同 | contract:list:create | 行操作 | 状态=已生效 | 跳转合同管理创建合同 |
|
|
|
|
|
|
### 交互流程要求
|
|
|
|
|
|
1. **页面加载流程**:进入页面 → 调用中标公示列表API → 渲染列表
|
|
|
2. **查询/筛选交互流程**:支持按标段名称、状态筛选
|
|
|
3. **表单填写与提交流程**:点击"生成合同"(状态=已生效)→ 二次确认后跳转合同录入页,自动填充标段信息和中标供应商
|
|
|
4. **弹窗/抽屉交互流程**:生成合同确认弹窗(el-message-box,提示"确认生成合同?将跳转合同管理创建合同")
|
|
|
5. **行内操作流程**:仅状态=已生效时显示"生成合同"按钮
|
|
|
6. **异常与错误处理**:生成合同跳转失败显示el-message错误提示;列表为空显示el-empty
|
|
|
7. **联动/级联交互**:公示状态与操作按钮联动(仅已生效显示生成合同按钮)
|
|
|
8. **权限控制交互表现**:无合同创建权限隐藏"生成合同"按钮
|
|
|
|
|
|
### 前端硬性约束
|
|
|
|
|
|
- **H1 防重复提交(强制)**: "生成合同"行操作按钮点击后置 loading+disabled 状态;操作期间禁用该行其他操作
|
|
|
- **H2 超时控制(强制)**: 列表查询(GET)超时 15s;超过阈值提示"请求超时,请稍后重试"
|
|
|
- **H3 操作确认(强制)**: "生成合同"前弹出 confirm("确认生成合同?将跳转至合同管理并自动填充中标信息。", type='info')
|
|
|
- **H5 权限隔离(建议)**: 返回空列表展示"暂无中标公示记录";code=403 时展示"无权限访问"
|
|
|
- **H8 反馈机制(建议)**: 跳转成功无需提示(已跳转);跳转失败显示 error(duration=0);网络异常显示重试按钮;列表加载静默刷新
|
|
|
|
|
|
### 组件规范
|
|
|
|
|
|
| 元素 | 组件 | 配置参数 |
|
|
|
|------|------|----------|
|
|
|
| 公示列表 | el-table | stripe,border |
|
|
|
| 状态列 | el-tag | :type根据状态配色(公示中=warning,已生效=success) |
|
|
|
| 生成合同按钮 | el-button | type="primary",size="small",link样式,icon="Document" |
|
|
|
| 生成合同确认弹窗 | el-message-box | title="确认生成合同",type="info",confirm-button-text="确认生成" |
|
|
|
|
|
|
### 校验规则
|
|
|
|
|
|
| 字段 | 规则 | 错误提示 |
|
|
|
|------|------|----------|
|
|
|
| (无表单校验) | — | — |
|
|
|
|
|
|
### 响应式布局
|
|
|
|
|
|
| 断点 | 布局调整 |
|
|
|
|------|----------|
|
|
|
| ≥1280px(桌面端) | 列表全字段展示,操作列右对齐 |
|
|
|
| 1024-1279px(Pad横屏) | 隐藏"公示开始日/公示结束日"列,操作列固定右侧 |
|
|
|
| 768-1023px(Pad竖屏) | 仅显示标段名称/中标供应商/状态/操作核心字段 |
|
|
|
|
|
|
---
|
|
|
|
|
|
## 需求追溯
|
|
|
|
|
|
| 功能点编号 | 功能名称 | 文档来源 | 后续服务 | 关联功能 |
|
|
|
|------------|----------|----------|----------|----------|
|
|
|
| HO-BD-01 | 招标计划 | 02-医院 §2 / 03-医院 §2.2 | 计划→标段拆分 | — |
|
|
|
| HO-BD-02 | 标段管理 | 02-医院 §2 / 03-医院 §2.2 | 标段→招标发布 | — |
|
|
|
| HO-BD-03 | 供应商管理 | 02-医院 §2 | 供应商→投标 | — |
|
|
|
| HO-BD-04 | 招标发布 | 02-医院 §2 / 03-医院 §2.2 | 发布→供应商投标 | — |
|
|
|
| HO-BD-05 | 投标管理 | 02-医院 §2 / 03-医院 §2.2 | 投标截止→评标 | — |
|
|
|
| HO-BD-06 | 评标管理 | 02-医院 §2 / 03-医院 §2.2 | 评标完成→定标 | — |
|
|
|
| HO-BD-07 | 定标审批 | 02-医院 §2 / 03-医院 §2.2 | 定标→公示 | 操作日志 |
|
|
|
| HO-BD-08 | 中标公示 | 02-医院 §2 / 03-医院 §2.2 | 公示期满→生成合同 | 合同管理 |
|
|
|
| HO-BD-09 | 招标导出 | 02-医院 §2 | — | 操作日志 |
|
|
|
|
|
|
## 业务规则
|
|
|
|
|
|
1. **仅医院账号可用**:物业公司不可操作此模块(来源:01 §4.2 / 02-医院 §2)
|
|
|
2. **供应商信息自管**:供应商信息由医院账号在本系统中录入和管理(来源:03-医院 §2.2)
|
|
|
3. **黑名单供应商**:黑名单供应商不可参与投标(来源:02-医院 HO-BD-03)
|
|
|
4. **投标截止**:截止时间到达后自动截止,不可再提交投标(来源:03-医院 §2.2)
|
|
|
5. **中标→生成合同**:公示期满后可一键生成合同,跳转合同管理创建(来源:03-医院 §2.2)
|
|
|
6. **所有操作记录日志**:招标各环节操作自动记录(来源:06 §4.5)
|
|
|
|
|
|
## 状态流转
|
|
|
|
|
|
```
|
|
|
招标计划 ──▶ 标段拆分 ──▶ 招标发布 ──▶ 投标中 ──▶ 评标中 ──▶ 待定标 ──▶ 公示中 ──▶ 已定标 ──▶ 生成合同
|
|
|
```
|
|
|
|
|
|
| 当前状态 | 操作 | 目标状态 | 执行角色 | 端侧 |
|
|
|
|----------|------|----------|----------|------|
|
|
|
| — | 创建招标计划 | 计划中 | 医院账号 | Web |
|
|
|
| 计划中 | 标段拆分 | 待发布 | 医院账号 | Web |
|
|
|
| 待发布 | 发布招标 | 投标中 | 医院账号 | Web |
|
|
|
| 投标中 | 投标截止 | 评标中 | 系统/医院 | Web |
|
|
|
| 评标中 | 评标完成 | 待定标 | 医院账号 | Web |
|
|
|
| 待定标 | 定标审批 | 公示中 | 医院账号 | Web |
|
|
|
| 公示中 | 公示期满 | 已定标 | 系统自动 | Web |
|
|
|
| 已定标 | 生成合同 | — | 医院账号 | Web |
|