Skip to content

招投标监管 · 需求分析文档 ​

文档版本:1.00 | 最近核对日期:2026-09-30

进展说明:本次需求已实现并完成主链路验收;扩展场景待补测。2026-09-18 补充线路选择器默认隐藏运营线路的页面回归结论(有限范围,未覆盖项见 8.4)。2026-09-24 收敛招投标组织与人员选择项(见 8.5)、调整招标文件管理台账的时间与是否类显示(见 8.6)、线路名称改为非必填并取全量线路(见 8.7)、归属单位收敛到单位层级(见 8.8);四项页面回归均并入本轮集中测试。

本文是招投标监管模块六类交付文档中的需求分析文件;概要设计、详细设计、数据库设计、测试与验收、操作手册见本目录其余文件。

1. 建设背景与目标 ​

招投标监管需要对工程建设项目招标、非依法必招标和下属单位招标三类业务进行全过程资料归集、过程留痕和集中查询。系统以独立项目作为统一关联对象;项目与线路独立登记,不从项目解析线路,也可在没有线路、标段或单位工程时直接开展招标,并保留登记时的项目名称快照。

建设目标:

  • 统一登记招标文件、挂网轮次、答疑补遗、开标、公示和中标事实;
  • 将立项、文件审查、评审分别纳入独立审批流程;
  • 支持下属单位招标台账的手工登记、模板导入、导出和阶段查询;
  • 在页面权限范围内提供全量业务查看,并通过按钮权限控制写操作;
  • 保留附件、关键更正和轮次变化的可追溯证据。

2. 建设范围 ​

2.1 本期包含 ​

  1. 工程建设项目招标:招标文件、挂网、答疑补遗、开标、公示、中标;
  2. 非依法必招标:立项、文件审查、评审及其 Warm-Flow 审批关联;
  3. 下属单位招标:台账、导入、导出、阶段和重复性校验;
  4. 独立项目选择、可选工程范围、名称快照、附件管理和操作留痕。
  5. 招标文件与招标挂网台账的统一展示、线路回显/选择、业主单位筛选和阶段进展展示。

2.2 明确不做 ​

  • 不在本模块编排或替代平台“我的任务”的通用审批、委托、转办、加签、减签能力;
  • 工程建设项目招标只登记已发生事实,不推演未中标、废标等未登记事实;
  • 答疑补遗不逐题录入供应商问题;
  • 不通过新增“修改挂网”版本表达普通资料更正;
  • 不把工程节点递归汇总成一个招标项目,选择的节点本身即为独立招标项目。

3. 角色与场景 ​

角色使用目的主要权限/结果
招投标经办人登记工程招标事实、维护非依法招标单据、维护下属单位台账在具备按钮权限时新增、编辑、提交、导入、导出
审批人审核立项、文件审查、评审通过 Warm-Flow 任务入口办理,不能绕过流程修改单据
业务查看人员查询项目树及招投标记录有页面权限即可查看全部业务数据,不按个人创建人或工程范围裁剪
系统/平台绑定轮次、快照、流程和审计信息服务端校验、自动回写状态、保存操作留痕

4. 核心业务场景 ​

4.1 工程建设项目招标 ​

  1. 经办人从项目信息配置选择独立项目并登记一份招标文件;具备招投标相应菜单、按钮和接口权限即可使用已建立的项目,不要求项目成员关联;项目可以没有工程范围;
  2. 线路为独立、非必填信息,经办人可从工程信息配置的全部线路中手选一条或留空;切换项目不自动填充、锁定或覆盖线路。选择标段时仍校验线路与标段关系,后续阶段继承招标文件已登记的线路;
  3. 首次挂网形成 V1,后续答疑、开标和中标绑定该轮次;
  4. 废标重招从主数据发起,旧轮次置为废标并归档,新轮次成为唯一当前轮次;
  5. 招标挂网台账将主数据与挂网版本放在同一张树形表中,主数据下展示 N 条版本,默认全部展开;
  6. 开标固定登记三名候选人及报价,公示绑定开标记录,中标只能登记为符合资格条件的候选人;
  7. 公示保存后、开标已有公示后均进入事实锁定状态。

4.2 非依法必招标 ​

立项、文件审查、评审是三张独立单据,分别对应 zhaotoubiao_lixiang、zhaotoubiao_wenjian_shencha、zhaotoubiao_pingshen 流程。退回申请人或撤销状态可修改并沿用原流程实例重新提交;待审批、完成、无效、终止状态不可编辑。

4.3 下属单位招标 ​

手工登记必须选择独立项目;导入必须使用平台模板,按独立项目匹配。整批解析、必填、重复和匹配校验任一失败时整体回滚,不覆盖已有记录。当前进展按中标价、开标时间、挂网时间依次推导为“已中标、已开标、已挂网、未挂网”。

5. 业务规则与验收口径 ​

编号规则来源/状态
R-BID-001一个独立项目仅允许一份招标文件;项目名称保存快照;项目可无工程范围设计确认,代码/库待逐项核对
R-BID-002一个招标文件最多一个当前挂网版本;挂标状态由「编辑状态」人工维护(正常↔废标可撤销),重新挂网只对已废标的当前轮次开放,重挂新增版本且旧版本置废标2026-09-26 按用户确认调整;原口径为重挂时旧版本自动置废标、无人工改状态入口
R-BID-003答疑、开标、中标绑定挂网版本,公示绑定开标记录设计确认
R-BID-004每轮至多一条开标、一条公示、一条中标;事实锁定后不得修改/删除。开标在已有公示后锁定、公示在已保存或已中标后锁定、中标记录保存即锁定设计确认;2026-09-26 补上中标记录锁定(页面按钮灰显、服务端同样拒绝),见 8.10
R-BID-005开标三名候选人及报价完整;综合评估法第一候选人得分必填当前事实源,三名得分范围待核对
R-BID-006文件审查按来源冻结项目;评审只能选择已完成文件审查设计确认
R-BID-007导入错误整批失败,不部分入库、不覆盖旧记录设计确认
R-BID-008具备相应页面/接口权限的用户可使用全部项目与招投标数据,不按项目成员或工程树范围裁剪;按钮和接口权限控制写操作需求确认,2026-09-14 按用户确认修正并完成代码回归
R-BID-009招标文件台账的查询条件、表格列、新增/编辑字段按已确认文案和顺序展示;线路名称纳入查询、表格和表单2026-09-02 确认并实现
R-BID-010线路可独立单选或留空,不从项目主数据或项目下标段派生;线路与标段仍须一致。默认隐藏运营线路、提供显示运营开关;全量候选不按工程授权裁剪,服务端校验线路主数据2026-10-17 用户纠正旧设计,现行口径见本次独立线路规则
R-BID-011归属单位仅允许业主单位的集团/公司/分公司/合资公司:选择范围只到单位层级,不下探到部门;单位层级按 orgType ∈ {group, company, branch, joint_venture} 判定,服务端校验业主体系与组织类型,参建单位和部门均不接受2026-09-02 确认并实现;2026-09-24 单位层级改按组织业务类型判定并收敛到单位层级(见 8.8)
R-BID-012招标方案上报稿为必填,招标领导小组会审稿、招标文件上报稿为非必填;进展顺序为招标文件完成、招标挂网完成、答疑补遗完成、开标完成、公示完成、全部完成2026-09-02 确认并实现;2026-09-26 招标方案上报稿改为必填(见 8.9)
R-BID-013项目主数据与工程树解耦;招投标只依赖项目主数据,项目工程范围可为空,项目成员关联不构成访问权限;招投标业务和线路候选均不按经办人工程授权过滤用户确认,2026-09-14 修复读链路并补充回归
R-BID-014招投标的组织与人员选择项只取自业主单位:经办部门、下属单位和归属单位不展示参建单位(deptType=2),选人(信息填报人、经办人、审批人链、印章管理人员)排除参建单位人员;组织树与人员选项接口按组织类型过滤,不靠前端裁剪掩盖参建单位2026-09-24 确认并实现(由招标文件管理搜索栏发起);页面回归见 8.5

| R-BID-015 | 招标文件管理台账的时间列(挂网时间、答疑补遗时间、开标时间、中标公示时间、中标通知书发放时间)只显示年月日,不显示时分秒;是否类列(挂网文件是否有实质性修改、答疑补遗稿是否有实质性修改、公示是否有异议)统一显示“是/否”,历史 1/0 数据同样按是/否显示,空值显示占位符 | 2026-09-24 确认并实现;页面回归见 8.6 | | R-BID-016 | 招投标独立登记入口的线路名称非必填:招标文件、立项、独立来源文件审查、下属单位招标均手选线路或留空;切换项目不影响线路。来源文件审查、评审与工程招标后续阶段继承来源单据线路 | 2026-10-17 用户确认,替代此前项目关联线路自动带出并锁定规则 | | R-BID-017 | 新增挂网的项目名称取招标文件台账数据,且只列出尚未形成挂网记录的招标文件;挂网记录删除后该项目重新回到可选范围 | 2026-09-26 确认并实现,见 8.9 | | R-BID-018 | 招标挂网台账操作列提供「编辑状态」与「重新挂网」:当前轮次正常时重新挂网灰显、编辑状态/修改/删除可用;当前轮次置为废标后重新挂网与编辑状态可用、修改与删除灰显;仅当前有效轮次且未登记中标的轮次可改挂标状态,废标可撤销回正常 | 2026-09-26 确认并实现,见 8.9 | | R-BID-019 | 招投标监管模块的金额、报价、限价不限制小数位:申请页填写的位数原样保存与原样显示,不再补零、不按固定位数四舍五入;评审得分仍按两位小数 | 2026-09-26 确认并实现,见 8.9 | | R-BID-020 | 招标挂网的招标挂网时间在发起表单与台账列都只到年月日,不显示时分秒 | 2026-09-26 确认并实现,见 8.9 | | R-BID-021 | 招投标各台账的时间列统一只显示年月日:招标文件、挂网、答疑补遗、开标、公示、中标、下属单位招标的时间列都不显示时分秒;查询条件与编辑表单保持原样(既有轮次/单据的时间点仍按原值存储) | 2026-09-26 端到端巡检发现答疑补遗、开标、公示、中标、下属单位招标列表仍显示时分秒后统一,见 8.10 | | R-BID-034 | 下属单位招标的「项目名称」必须选择 BIZ_PROJECT 独立建设项目;不得用标段或单位工程 ID 充当 PROJECT_ID。项目名称快照来自项目主数据,线路由招标登记独立选择,同一“下属单位 + 项目”唯一;工程范围缺失时仍允许登记 | R-BID-013 与本轮契约复核;按原有数据库 PROJECT_ID 语义恢复 | | R-BID-035 | 非依法必招标(立项、文件审查、评审)办理弹窗的「下一步审批人」按当前节点直接读取本单新增时指定的对应审批人(副部长/负责人/分管领导/总经理/董事长/印章管理员/领导小组会签)自动带出,无需重复选择即可提交;支持修改:弹窗内点「选择」放开候选并可按最终确认人员覆盖默认值,下一节点办理人以提交值指派 | 2026-10-15 用户反馈(立项审签办理提交页),实现见 8.14 |

验收至少覆盖正常旅程、轮次重挂、事实锁定、权限越权、重复提交、导入回滚、审批退回和真实数据库一致性。

6. 非功能要求 ​

  • 附件格式为 doc/docx/xls/xlsx/ppt/pptx/pdf/txt,单文件不超过 50MB;
  • 列表使用数据库分页,不能因装配阶段信息而全量扫描;
  • 关键更正记录业务线、单据、动作、前后值、更正原因、操作人和时间;
  • 逻辑类型不得绑定 DM8 方言,需记录人大金仓、openGauss 等迁移影响;
  • 所有服务端业务校验不能由前端隐藏或提示替代。

7. 待核对事项 ​

  1. 候选人资格判定字段及“符合资格”的精确规则;
  2. 综合评估法三名候选人得分的最终必填范围;
  3. 下属单位导入的稳定匹配键(工程节点 ID 或完整项目名称);
  4. 工程线路识别规则、附件清单和平台审计机制的实际覆盖;
  5. 物理字段空值、索引和交付数据库与当前数据库的逐项差异。

8. 历史依据与变更 ​

8.1 2026-09-02 页面与规则调整 ​

  • 招标文件台账按用户确认的业务口径调整查询条件、表格和新增/编辑字段的文案,并补充线路名称;字段与控件排列按平台页面规范设计;
  • 招标挂网由上下双表调整为主数据与挂网版本同表树形展示,默认全部展开;
  • 项目线路支持单线路自动回显,无线路时仅可人工选择一条线路级节点;线路选择器仅隐藏“运营”;(该隐藏口径已于 2026-09-17 取消、2026-09-18 调整为默认隐藏并提供“显示运营”开关,见 8.4。)
  • 归属单位收敛为业主单位公司/分公司,三个招标文件附件改为选填,进展字典统一为六个阶段。
  • 已通过真实浏览器完成项目配置→工程招标六阶段主链路;非依法招标完成立项及文件审查审批链路,测试数据保留。

8.2 2026-09-14 项目主数据权限口径修正 ​

  • 确认项目主数据已与工程树解耦:项目可以不关联工程范围,具备相应菜单、按钮和接口权限的用户均可使用已建立项目及其招投标数据;不再要求项目成员关联作为访问前置。
  • 修复项目分页、详情、选项、线路解析和招标文件列表/详情读取链路,移除 biz_project_user_scope 对项目及招标数据的过滤/拒绝;项目成员接口和历史关联数据保留,但仅表示关联信息。(项目成员接口已于 2026-09-17 下线,改为由工程数据权限派生的只读视图,见工程基础需求分析。)
  • 工程树范围用于工程业务;招投标业务及招标文件手工线路选择不受工程范围裁剪,按 R-BID-016 校验线路主数据与节点层级。

8.3 2026-09-17 工程数据权限优化联动 ​

  • 取消运营公开后,招标不再按节点运营状态拒绝:服务端手工线路校验(validateManualLine)只校验线路级别和有效线路主数据,不校验运营状态或工程授权可见性。
  • R-BID-010 按当时口径改写;项目关联工程范围仍可包含运营线路,尾工、收尾类项目照常发起招标。
  • 本条中“线路选择器不隐藏‘运营’节点”的展示口径已于 2026-09-18 调整(改为默认隐藏并提供“显示运营”开关),运营拒绝逻辑仍保持取消状态,差异见 8.4。

8.4 2026-09-18 线路选择器默认隐藏运营线路 ​

  • 招标与工程变更共用的节点选择器(ProjectNodePicker)默认隐藏 biz_status='2'(运营)的节点,并提供“显示运营”开关(默认关闭)供临时查看与选择;开关只切换显示层,打开后运营线路可正常选择、提交。
  • 与 2026-09-17 口径的差异:由“不再按运营过滤(不隐藏、不拒绝)”调整为“默认隐藏、可切换显示,仍不拒绝”。后端不做运营状态判定与拒绝,2026-09-17 取消的“运营线路不可选择”等拒绝逻辑保持删除状态,本次不恢复。
  • 过滤语义:隐藏运营节点的同时把其非运营下级提升到最近可见层级,运营线路下仍在建设(前期/在建/大修改造)的支线不会被一并隐藏,而是出现在原运营父节点的位置。
  • 适用范围:招标与工程变更共用的节点选择器(招标 4 页 + 变更 4 页);工程手续「单位工程」选择器、BIM 工程范围选择器、建渣/渣土台账线路下拉、工点库挂载弹窗的目标节点树同口径。数据权限工作台、工程信息配置页和首页与工点库左侧根节点列表不适用本规则(详见各模块资料)。
  • 页面回归(2026-09-18,开发库 + 真实页面,超级管理员):共用该选择器的工程变更·新增页核对通过——默认状态下根级不出现运营根节点,运营根下仍在建的支线(4号线西延、5号线北延、江跳线二期、6号线东延、9号线一期新桥段、18号线北延)提升到可见层级,与轨道交通7/15/17/19/24/26/27/28号线、市城铁路璧铜线、重庆东站并列;打开“显示运营”后出现轨道交通环线、轨道交通1号线~18号线等运营根。这 6 条上提线路在 BIZ_PROJECT_NODE 中当前无下级,按既有节点类型规则在本选择器内仍作为容器不可直接点选,与运营无关。
  • 未覆盖项(不纳入“已通过”结论):招标文件管理页「线路」(LINE)选择器的逐项点选未执行;非超级管理员角色视角未验证;深色模式下开关观感未单独核对。
  • 页面回归结论为“验证通过(有限范围)”;覆盖项、未覆盖项和命令结果见测试与验收。

8.5 2026-09-24 组织选择项不展示参建单位 ​

  • 问题:招标文件管理搜索栏「经办部门」下拉出现「测试参建单位」及其下属施工单位、总包单位、监理单位、造价咨询单位和设计单位;招投标的组织选择项不应包含参建单位。
  • 根因:组织树选项接口 GET /system/option/deptTree 未接收前端已在传的 deptType 参数,返回全部组织;归属单位改为按层级裁剪后仍会保留「测试参建单位」根节点及其子节点。
  • 实现:组织树选项接口 GET /system/option/deptTree 新增可选参数 deptType(1 业主单位、2 参建单位),服务层按组织类型过滤;人员选项接口 GET /system/option/users 新增可选参数 excludeDeptType,按组织类型排除人员。招投标加载选项时组织树传 deptType=1、人员传 excludeDeptType=2,经办部门、下属单位、归属单位和选人共用一次加载,取消原先仅为裁剪归属单位而重复请求组织树的写法。
  • 范围:招标文件管理、立项、文件审查、评审、下属单位招标 5 个页面的搜索栏、表单选择项和选人(信息填报人、经办人、经办部门副部长/负责人/分管领导、总经理、董事长、印章管理人员),以及下属单位招标表单的「下属单位」。其他调用这两个接口的模块不传新参数,行为不变;归属单位当时按层级裁剪的单位选项保持该范围,其下拉中此前的参建单位根节点被消除,回到 R-BID-011 的展示口径(该裁剪口径已于同日改为按组织业务类型收敛到单位层级,见 8.8)。
  • 边界:排除按账号所属的在册部门是否为参建单位判定,无部门归属或原部门已逻辑删除的账号不属于在册参建单位组织,保留在选项中;本规则只收敛选项范围,不新增服务端对经办部门、经办人组织类型的拒绝,写操作仍按既有校验。
  • 验证:后端模块编译、前端 vue-tsc 和招标相关单测(5 个文件 18 项)通过;开发库核对组织类型为业主单位时选项集不含参建单位,且现有招投标记录没有以参建单位作为经办部门。人员侧受限于开发库现状——参建单位部门下当前没有账号,排除参建单位与不排除结果相同(均为 27 个账号),因此该项为预防性收敛;以排除业主单位作对照查询时仅剩 1 个无部门账号,证明排除条件生效且无部门账号不被误排。页面回归并入本轮集中测试,结论记于测试与验收。

8.6 2026-09-24 招标文件管理台账时间与是否类显示 ​

  • 问题:招标文件管理台账的时间列显示到时分秒(如 2026-09-17 09:00:00);「挂网文件是否有实质性修改」「答疑补遗稿是否有实质性修改」「公示是否有异议」显示 0,不是“是/否”。
  • 根因:时间列直接输出后端 LocalDateTime;是否类列已用 sys_yes_no 字典标签渲染,但字典值是 Y/N,而该记录(2026-09-13 端到端验收数据)存的是 0,字典匹配失败后标签回退显示原始值。
  • 实现:新增两个展示转换——formatDateOnly(只取到年月日)和 toYesNoFlag(把 1/Y/YES/TRUE 归一为字典值 Y,其余非空值归一为 N,空值返回空串);时间列用前者渲染,是否类列用后者归一后再交给 sys_yes_no 字典标签,显示文案仍由字典维护。
  • 范围:仅招标文件管理台账的上述 5 个时间列和 3 个是否类是列;查询条件、编辑表单和接口出参不变,数据库存储值不变(历史 0/1 不迁移)。招标挂网、答疑补遗、公示管理等列表存在同类显示口径,未在本次改动范围内。
  • 验证:新增单测覆盖年月日截取(含 ISO 与空格两种格式、空值)与是/否归一(含历史 1/0、空值不当作“否”);前端 vue-tsc 通过,招标单测 5 个文件 18 项通过。页面回归并入本轮集中测试。

8.7 2026-09-24 招标文件线路名称改为非必填并取全量线路 ​

  • 问题:新增招标文件时「线路名称」为必填;线路选择弹窗提示“没有可选的工程节点,请联系管理员检查工程范围授权”,看不到任何线路,导致无工程范围授权的经办人无法登记招标文件。
  • 根因:选择器使用 GET /business/projectNode/myTree(按当前用户工程范围授权裁剪),经办人未获授权时树为空;服务端 validateManualLine 还按可见范围拒绝选择,resolveLineName 在项目未关联线路且未人工选择时直接拒绝保存。
  • 实现:招标文件表单使用 GET /business/engineering-tree/all-line-options 读取全部有效线路,不继承工程树授权过滤,权限限于招标文件 list/add/edit;工程业务继续使用授权线路候选端点。validateManualLine 只校验线路级别与有效线路主数据;resolveLineName 在无线路且未人工选择时留空保存;表单取消线路必填校验。
  • 范围与边界:线路仍只允许 LINE 级节点;项目单线路仍自动带出并锁定;项目工程范围最多关联一个工程节点(前端单选、后端 ProjectEngineeringScopeNormalizer 校验),当前库内项目最多一条工程范围,因此不会出现多线路项目;ProjectServiceImpl.resolveLine 的多线路拒绝分支保留为防御性校验(正常接口路径不可达,仅防直连库写入等异常数据)。工程变更等共用同一选择器的页面继续按工程范围授权裁剪,不受本次改动影响;编辑既有单据时若项目已无法解析线路,仍保留原线路名称快照,不因留空而丢失。
  • 验证:后端 digital-construction-business 模块 173 项测试通过,新增 2 项——线路选项树只保留线路与容器且不读取工程范围授权、项目无线路时按空线路名称保存;前端 vue-tsc 与招标相关单测通过。页面回归并入本轮集中测试。

8.8 2026-09-24 归属单位收敛到单位层级 ​

  • 问题:招标文件新增弹窗的「归属单位」下拉在选中单位后继续展开部门(如「技术管理部(测试)」「计划合约部(测试)」),选择范围下探到了部门层级。
  • 根因:组织树选项按祖级路径深度裁剪(保留前两级),而部门与分公司在树里同处第二级,无法区分;服务端的归属单位校验同样按深度判断,因此部门也被接受。
  • 实现:组织树选项接口在节点上补充组织业务类型 deptCategory;前端归属单位选项改为只保留 deptCategory=10(公司/分公司),部门不下探,挂在部门下的分公司上浮到最近可见层级;服务端 validateOwnerUnit 改为校验 deptType=1 且 deptCategory=10,不再按祖级深度推断,与前端选项范围一致。
  • 范围与边界:只有归属单位收敛到单位层级;经办部门和下属单位仍使用完整的业主单位组织树(部门可选)。效力范围是招投标 5 个页面的归属单位搜索与表单(招标文件、立项、文件审查、评审、下属单位招标),组织树接口的其他调用方不传该参数、行为不变。
  • 数据核对:开发库现有招投标单据的归属单位全部是公司/分公司(dept_category=10),没有以部门作为归属单位的历史记录,本次收紧不会造成既有记录无法编辑。
  • 验证:后端新增/更新单测覆盖「公司、分公司、深层分公司可接受;参建单位、部门被拒绝」,digital-construction-business 模块 173 项测试通过;前端新增 2 项单测覆盖部门被过滤、部门下分公司上浮,招标相关单测 20 项通过,vue-tsc 通过。页面回归并入本轮集中测试。

8.9 2026-09-26 招标文件必填项、挂网状态与金额小数位调整 ​

用户一次性提出 7 项调整,其中 2 项核对为历史已实现(见本节末「复用与未变更」)。逐项记录如下。

一、招标挂网项目名称只取未挂网项目(R-BID-017)

  • 口径:新增挂网弹窗的「项目名称」仍取招标文件台账数据(标签为项目名称快照),但只列出尚未形成挂网记录的招标文件;某招标文件的挂网记录被删除后,该项目重新回到可选范围。
  • 实现:前端选项按招标文件台账返回的 listingCount(该招标文件的挂网轮次数)过滤,只保留 listingCount=0 的项目;新增弹窗打开时、挂网保存后、挂网记录删除后都重新拉取台账数据,当前表单已选中的项目保留在选项中以便重新挂网回显名称。台账主数据行不受影响,仍是全量招标文件(无挂网记录的项目显示挂网次数 0)。
  • 边界:排除只作用于新增挂网的项目名称下拉;台账行内「重新挂网」入口不受影响(其项目本就有挂网记录)。

二、台账操作列新增编辑状态与重新挂网并按废标联动(R-BID-018、R-BID-002)

  • 口径:操作列提供「编辑状态」与「重新挂网」。默认(当前轮次正常)重新挂网灰显,编辑状态、修改、删除可用;把当前轮次改成废标后,重新挂网与编辑状态可用,修改与删除灰显。废标可撤销回正常。仅当前有效轮次可改挂标状态,已登记中标的轮次不可改。
  • 实现:新增接口 PUT /business/bidding/listingVersion/status(权限码 bidding:listingVersion:status),服务端校验状态取值(normal/failed)、必须是当前轮次(历史轮次已被新轮次取代,改回正常会出现两个正常轮次)、不得是已中标轮次,并写业务留痕;「编辑状态」弹窗按挂网轮次列出该招标文件的全部轮次(挂网次数、挂网时间、挂网网址、挂网金额、是否有实质性修改、招标挂网稿、挂标状态、操作),每行按该轮状态灰显/亮显重新挂网、编辑状态、修改、删除;「重新挂网」按废标轮次数据预填表单,保存后生成新轮次,旧轮次仍由服务端置废标并翻当前标记。
  • 与 R-BID-002 原口径的差异:原先是「点重新挂网 → 系统自动把旧轮次置废标」;现在改为「人工先置废标 → 才可重新挂网」,自动置废标的保护分支保留(重挂保存时仍会置旧轮次废标并翻当前标记)。
  • 边界:废标轮次原有的只读约束(不可修改、不可删除、不可更换关联项目)保持不变;重新挂网仍受「已有中标轮次不可重挂」限制。新增轮次一律从正常开始,挂标状态只由状态变更接口写入,不沿用请求入参里的状态。当前轮次为废标时,台账主数据行的挂网信息与当前进展按「无有效轮次」展示(后端以 current_flag=1 且状态为正常判定当前版本,为既有口径),重新挂网保存后恢复。

三、金额小数位不限制(R-BID-019)

  • 口径:招投标监管模块的金额、报价、限价不限制小数位,申请页填写的位数原样保存、原样显示,不再补零、不按固定位数四舍五入;评审得分仍按两位小数。
  • 实现:前端金额输入去掉 :precision="2"(评审得分保留),台账金额列改用 formatAmount(只去掉小数末尾无效零,不补零、不截断);服务端删除「最多保留两位小数」的 5 处 scale()>2 校验;开发库把 16 个金额/报价/限价列的 scale 限定取消(NUMBER(18,2)/NUMBER(18,4) → 无 scale 的 NUMBER),取消 scale 限定可保留任意小数位且不会因超出列精度被数据库静默四舍五入。
  • 边界:金额的整数位与总体精度仍受 DM8 NUMBER 的 38 位有效数字限制;前端展示遵循 JavaScript 数字精度(约 15 位有效数字),超出该范围的极端位数可能无法在页面上逐位显示,属平台级限制,未做额外处理。已有数据未迁移、未改写。

四、招标挂网时间只到年月日(R-BID-020)

  • 口径:挂网发起表单与台账「挂网时间」列都只到年月日。
  • 实现:表单由 type="datetime" 改为 type="date"(value-format="YYYY-MM-DD"),编辑回显时把接口返回的时分秒截断到日期;台账列用 formatDateOnly 渲染。服务端字段仍是 LocalDateTime,日期字符串按当天 00:00:00 保存,无需改接口。
  • 边界:台账的挂网时间筛选本来就是 daterange,未调整;导出 Excel 的挂网时间列沿用原有格式,未在本次范围内。

五、招标文件管理台账答疑补遗取值复核(无代码变更)

  • 用户口径:台账的「答疑补遗时间」「答疑补遗稿是否有实质性修改」要取答疑补遗模块中该项目最新的一条。
  • 核对结果:现有实现已按此口径——台账取当前挂网版本下的答疑补遗记录中 答疑补遗时间 最大的一条,答疑补遗列表本身按 clarify_time desc 排序,两者一致。开发库抽查:招投标测试项目1 的两条答疑补遗(2026-01-31、2026-01-12)都挂在当前轮次 V3 上,台账取 2026-01-31,与答疑补遗模块列表该项目首行一致。
  • 范围:不改变「只取当前有效轮次」的口径;挂网轮次被废标后,废标轮次的答疑补遗不参与比较。

复用与未变更(第 1、7 项核对为历史已实现)

  • 用户提出的「归属单位选择范围不要显示到部门层级」在 2026-09-24 已实现(见 8.8),本次未重复修改。
  • 用户提出的「答疑补遗时间、答疑补遗是否实质性修改取最新」且截图显示时间带时分秒、是否列显示原始 0,对应 2026-09-24 已实现的台账时间与是否类显示口径(见 8.6)。上述两处差异判定为前端构建未更新,本次仅做真实页面复核,不做代码变更。

验证:后端 digital-construction-business 模块 183 项测试通过(新增 6 项:挂标状态置废标、恢复正常、历史轮次拒绝、已中标拒绝、非法状态值拒绝、新增轮次忽略入参状态并以正常开始);前端 vue-tsc 在本次改动范围内 0 error(全量检查的报错全部位于并行开发的 operationDock/costUnit 模块文件,非本次改动),招标相关单测 27 项通过(新增金额原样显示、方案上报稿必填、挂网时间只到日期、操作列按钮灰显矩阵、编辑状态弹窗、项目名称只列未挂网项目);开发库 16 个金额列放宽后回读 DATA_SCALE 为空且抽样求和、最大值与改动前一致。真实页面回归覆盖方案上报稿必填拦截、归属单位下拉只到单位层级、答疑补遗取值与年月日显示、新增挂网只列未挂网项目、挂网时间日期化、金额原样显示与四位小数输入、操作列灰显矩阵、挂标状态子弹窗、挂标状态保存落库、废标后重新挂网预填与生成正常新轮次,并在回归中修复弹窗取未加工数据导致按钮全灰、操作列溢出、重新挂网新轮次沿用废标状态、主数据行重新挂网误灰显四处实现问题;未覆盖项(废标回退为正常的页面路径、非超级管理员角色视角、深色模式观感)见测试与验收。

8.10 2026-09-26 招投标模块端到端巡检 ​

目的与范围:按用户要求在内置浏览器中对招投标模块做端到端巡检,覆盖集团审核项目招标(招标文件管理、招标挂网、答疑补遗、开标管理、公示管理、中标管理)、本部非依法必招标(立项管理、文件审查、评审管理)和下属单位招标共 10 个台账页面,以及台账与表单之间的读写链路。

发现并修复的问题:答疑补遗、开标管理、公示管理、中标管理、下属单位招标 5 个列表的时间列(答疑补遗时间、开标时间、中标公示时间、中标通知书发放时间、上报时间、挂网时间)仍按 LocalDateTime 原样输出到时分秒,与 2026-09-24(招标文件台账)和本次(挂网)已确认的“台账时间列只显示年月日”口径不一致。已按同一口径统一为 formatDateOnly 展示,查询条件与编辑表单不变,数据存储不变,并记为 R-BID-021。

巡检后按用户裁决补充的实现(R-BID-004):巡检发现中标记录的编辑、删除在页面可用且后端未拒绝,与「事实锁定后不得修改/删除」的记录口径有差距;用户裁决「中标之后编辑删除也灰显」。据此把中标记录改为保存即锁定:列表行内与工具栏的编辑/删除按钮灰显,服务端 update/delete 统一返回「中标记录已锁定,不可修改或删除」(保留主键与记录存在性校验),新增 3 项单测覆盖;开发库页面回读确认按钮禁用生效。

巡检确认的行为(详见测试与验收):招标文件台账金额按填写原样显示(含 4 位小数)、时间列只到年月日、答疑补遗取当前轮次最新一条、当前进展随轮次变化重算;挂网台账轮次、状态、按钮灰显矩阵;招标文件与答疑补遗的修改保存(含必填附件服务端校验通过);立项与下属单位招标的新增必填拦截;开标、公示、中标在“已中标/已公示”状态下编辑与删除按锁定规则灰显。

未覆盖项:中标记录锁定的服务端拒绝以单测与代码为证据(页面按钮已灰显,无法从界面触发直连请求);文件审查与评审两个台账当前开发库无数据,只核对了列表结构、筛选条件和空态;非依法必招标的审批办理链路(flowForm 页面)未在本次巡检范围;附件上传受浏览器工具限制无法在页面完成,需要新增附件的写入路径(答疑补遗新增、开标新增、公示新增、中标新增、首次挂网)未做页面级验证,相关必填规则以服务端代码与单测为证据。

来源用途
2183ce382初始招投标设计
27749d587、7ce955294设计对齐与文档补全
feaa1b620、633ccd5c5、8d65027aa前后端实现和交互/查询修复
7477c0061、8e96433f9、50a7cc445、b5dd1d2轮次、字段校验、页面调整和端到端问题修复
数据库设计本模块字段矩阵、历史核验日期及后续结构差异

8.11 2026-09-29 立项与文件审查口径调整(项目主数据、审批人可选项、会签人员) ​

一、项目来源改为项目主数据(R-BID-022)

  • 口径:立项管理、文件审查的「项目名称」由工程节点树改为取项目信息配置中的独立项目(BIZ_PROJECT),单据保存 project_id 并沿用名称/路径/线路快照;同一项目的唯一性校验由「工程节点」改为「项目」(提示语同步改为「该项目已存在立项记录/文件审查记录」)。
  • 实现:后端改用 ProjectMasterSnapshotHelper 生成快照;新增 PROJECT_ID 列(PROJECT_NODE_ID 保留为历史兼容列,新记录不再写入);前端下拉改取 GET /business/project/options。
  • 边界:历史记录仍按原工程节点展示名称快照;编辑历史记录时项目名称需重新选择(原值为空)。

二、决策依据改为字典选项(R-BID-023)

  • 口径:文件审查「决策依据」由自由文本改为字典 bidding_decision_basis(经请示同意 / 经总经理办公会审议同意),仅在「前期已经完成立项」时展示且必填;选「经总经理办公会审议同意」时「总经理办公会审议情况」必填(前后端一致)。
  • 边界:流程表单以字典标签展示决策依据;历史文本值不做迁移,展示为原值。

三、是否用印与印章管理人员(R-BID-024)

  • 口径:文件审查新增「是否用印」(必填,默认否);仅选「是」时展示并必填「印章管理人员」。未用印时流程按 skipSeal 跳过印章管理节点。
  • 实现:流程新增 seal_gateway 排他网关(需要用印 → 印章管理 → 结束;不需要用印 → 结束)。

四、会签主体由部门改为人员(R-BID-025)

  • 口径:文件审查「招标领导小组成员部门」改为选择人员(即招标领导小组成员),保存人员 ID 串与姓名串,会签节点按所选人员建立办理人(会签比例 100%)。
  • 实现:列更名为 COUNTERSIGN_USER_IDS/COUNTERSIGN_USER_NAMES;流程变量 countersignUserIds 传裸用户 ID(平台 TaskAssigneeEnum.USER 前缀为空串,写成 user: 会导致办理人解析失败、候选为 0 人,见测试与验收)。
  • 边界:历史部门数据不迁移,旧单据会签人展示为空。

五、审批人可选项与流程跳过闸门(R-BID-026)

  • 口径:文件审查的「经办部门副部长」「董事长」非必填;「经办部门负责人」「经办部门分管领导」、总经理及会签人员必填;选择用印时印章管理人员必填。立项管理的「经办部门副部长」「董事长」沿用非必填规则。
  • 实现:文件审查未选择副部长或董事长时由 skipDeputy、skipChairman 对应网关跳过;skipLeader 网关保留在流程定义中,但新提交仍要求选择经办部门分管领导。印章管理员按 skipSeal 条件进入或跳过。文件审查流程已发布 v4。
  • 边界:审批顺序不变;既有在途实例按其启动时的流程定义继续办理。评审管理的审批人规则见 R-BID-033。

六、立项申请文件必填(R-BID-027)

  • 口径:文件审查「立项申请文件」为必填;「本平台立项」时按来源立项记录自动带出,无需重复上传。

七、台账与表单细节调整

  • 立项管理、文件审查、评审台账新增「审核状态」查询条件与列表列(字典 wf_business_status)。
  • 立项管理经办时间、开标时间、中标公示时间、中标通知书发放时间改为只到年月日(表单 type="date",台账列统一 formatDateOnly)。
  • 中标单位改为按基础数据的参建单位下拉选择(可输入新增,存名称快照),并提供跳转组织架构新增参建单位的入口。
  • 公示管理的开标记录候选按项目去重(同一项目只保留最新一条),编辑时保留原关联记录以便回显。
  • 文件审查移除「已自动带出立项模块附件,可修改」提示;「招标领导小组成员部门」标签、占位与后端提示语统一(不再混用「组成部门/组成人员」)。

八、中标管理附件改为选填(R-BID-028)

  • 口径:中标记录仍必填「上传中标通知书」;「上传全部中标候选人投标文件」「上传招投标情况报告」为非必填(有则一并归档留存)。台账列与页面文案不变。
  • 实现:服务端 AwardServiceImpl.validate 取消这两项的空值校验,前端必填规则同步移除(本次已一致)。

8.12 2026-09-29 评审管理发起页与明细调整 ​

一、决策依据与总经理办公会审议情况改为按来源带出(R-BID-029)

  • 口径:发起评审表单默认不显示「决策依据」与「总经理办公会审议情况」;当所选项目(来源文件审查记录)在文件审查中存有决策依据时,才显示这两个字段并带出文件审查时的值,评审不单独录入(只读展示);来源没有决策依据则继续隐藏。
  • 实现:选中来源记录时从文件审查候选项取 decisionBasis/gmMeetingSituation 写入表单,决策依据按字典 bidding_decision_basis 标签展示;两字段取消必填。编辑既有记录同口径(有值才显示)。

二、评审新增「是否用印」并按条件显示印章管理人员(R-BID-030)

  • 口径:新增「是否用印」(是/否,必填,默认否);「印章管理人员」移到「选择审批人」区块末行,仅「是否用印=是」时显示且必填,为「否」时隐藏且不校验。
  • 边界:历史记录没有 use_seal 时按已填写的印章管理人员回推为「是」,避免既有用印信息被隐藏。

三、评审台账与发起页时间只到年月日(R-BID-031)

  • 口径:评审台账「开标时间」列与发起表单的「开标时间」都只到年月日;服务端字段仍为 LocalDateTime,按当天 00:00:00 保存。

四、投标人明细支持模板下载与批量上传(R-BID-032)

  • 口径:投标人明细在表格上方提供「新增」「删除」「下载模板」「批量上传」;明细字段按用户确认的原型业务要求确定为序号、投标(竞选)人名称、是否符合资格条件、被否决原因(不符合资格条件的填写)、报价(万元)、得分(综合评估法项目填写)、联系人、联系人电话、法定代表人、法定代表联系方式、名次、是否中标;列展示顺序按平台表格规范设计。
  • 实现:模板下载与批量上传(Excel 导入)按「下属单位招标」既有分层实现。接口为 GET/POST /business/bidding/evaluation/bidder/template(权限码 bidding:evaluation:template)与 POST /business/bidding/evaluation/bidder/import(权限码 bidding:evaluation:import,multipart 字段 file),导入返回明细行供表格填充(此时尚无评审单,不落库);SYS_MENU 已配置「评审管理」下的模板下载、导入权限,并关联既有三个角色。
  • 边界:模板列=用户确认的 10 个业务字段(序号、投标(竞选)人名称、是否符合资格条件、被否决原因、报价、得分、联系人、联系人电话、法定代表人、法定代表联系方式);「名次」「是否中标」不在模板列内,导入后由用户在表格补填(前端按行序预填名次);导入「是否符合资格条件」只接受是/否(兼容 Y/N、1/0);填「否」必须填写被否决原因;逐行中文行号报错。

五、按最新确认口径校准明细及审批必填(R-BID-033,2026-09-30 补充)

  • 口径:「上传评审记录表」必填;投标人名称、资格条件、报价、联系人、联系人电话、法定代表人、法定代表联系方式、名次、是否中标必填;得分与被否决原因默认非必填,但资格条件为「否」时被否决原因必填。
  • 审批人:按用户最后更正的审批人规则,评审管理「经办部门副部长」「董事长」非必填;「经办部门负责人」「经办部门分管领导」和总经理必填。未选择副部长或董事长时,分别由评审流程 V4 的 skipDeputy、skipChairman 网关跳过;选择后仍按原顺序办理。
  • 文件审查用印:「是否用印」只提供「是/否」;选「是」时印章管理员显示且必填,选「否」时隐藏、清空已选管理员并跳过印章节点,服务端按同一规则规范化保存值。
  • 边界:评审管理的可选审批人规则与文件审查分别适用;文件审查已按 R-BID-026 落地的规则保持不变。

8.13 2026-10-01 组织架构重构对接(org_type 体系) ​

  • 背景:平台组织架构引入节点类型 sys_dept.org_type(group 集团/company 公司/branch 分公司/joint_venture 合资公司/dept 部门/project_dept 项目部),作为单位/部门的唯一权威判定;deptCategory 退为业务标签,不再承担结构判定。口径见 单位管理。
  • 对 8.8 的修订:
    • 归属单位:可选范围不变(业主集团/公司/分公司/合资公司),但判定依据从 deptCategory=10 改为 org_type ∈ {group, company, branch, joint_venture}(BiddingBusinessRules.validateOwnerUnit 已切换,含 org_type 为空的历史数据兼容分支);
    • 经办部门口径变更:8.8 中「经办部门使用完整业主组织树(部门可选)」的边界作废。自本轮起经办部门只能是部门(org_type=dept)且必须属于所选归属单位子树,服务端新增 validateHandleDept 强校验,5 个业务表(招标文件、立项、文件审查、评审、下属单位招标)的保存路径全部接入;无下设部门的单位不能再作为经办部门(如需由分公司直接经办,先在单位管理为其建部门)。
  • 前端:归属单位统一使用 OrgUnitSelect(dept-type="1"),经办部门统一使用 OrgDeptSelect(按归属单位联动,只出部门),招投标自建的 filterOwnerUnits 前端裁剪逻辑删除。
  • 存量数据:历史单据不做回改;org_type 为空的兜底分支仅用于过渡,存量数据已于 2026-10-01 全量回填。

8.13 2026-10-13 文件审查附件校验、表单外框统一与下属单位招标台账对齐原型 ​

  • 文件审查表单校验与文案修正:
    • 合同法律审查附件(contractLegalAttachment)由必填改为非必填,前后端移除强校验逻辑;
    • 修正表单与表格列错别字,将「上传招标(必选)文件」校正为「上传招标(比选)文件」。
  • 流程表单只读数据风格统一:
    • 流程工作台(BiddingFlowWorkspace)对招标方式、项目类型、评审方式等字典/枚举字段统一包裹标准只读框(el-input readonly),彻底消除纯文本无边框造成的风格割裂。
  • 下属单位招标台账列名与顺序严格对齐原型:
    • 表格列及导出字段将三位候选人的名称、报价(万元)、得分(综合评估法填写)拆分为独立列展示;
    • 列头严格按照原型规范命名与排列:参与投标单位数量、第一中标候选人名称、第一中标候选人报价(万元)、第一中标候选人得分(综合评估法填写)、第二/第三候选人对应列。

2026-10-14 业主合资公司归属单位兼容 ​

归属单位候选、后端保存校验和当前用户最近单位解析统一接受业主 joint_venture,与集团、公司、分公司使用同一规则;经办部门仍必须为所选单位子树内的部门。合资公司不因类型纠正而新建组织或改变历史单据关联。验收例子:合资公司及其部门用户默认归属该合资公司;单位可选择并保存;部门、参建单位仍不能作为归属单位。

2026-10-17 线路标段与单位部门联动修正 ​

  • 适用范围:招标文件新增/编辑,以及招标文件、立项、文件审查、评审、下属单位招标的归属单位/经办部门查询与表单;不改变数据访问权限。
  • 线路与标段:招标文件表单交换线路名称与所属标段的位置,先展示线路。已有线路时只展示该线路下的标段;优先按线路 ID 匹配,历史仅有线路名称时按完整名称匹配。未选线路时保留原标段候选,选择标段后带出线路 ID 与名称。人工改选线路时清空原标段,切换项目不改动独立登记的线路与标段,防止跨线路残留;编辑保留已存线路标识。
  • 单位与部门:选定归属单位后,经办部门候选仅显示该单位子树;经办部门树默认展开全部层级,仍可手动折叠;公司、分公司、合资公司等中间组织保留为置灰层级,不可当作经办部门。清空单位恢复业主部门候选;更换或清空单位时清空原部门,表单同时清空原经办人。返回空候选或原部门不再可选时清空失效值,加载失败不以旧单位候选替代。
  • 验收例子:手选 15 号线时不得选择其他线路标段;人工改选线路后原标段清空。归属交开投时可展开置灰的交建公司查看部门;归属交建公司时不出现其范围外部门。上述五页查询与表单均遵循同一单位子树规则,参建单位仍不进入候选。

8.15 2026-10-15 下属单位招标恢复独立项目关联 ​

  • 问题:页面误用工程标段树选择器,并把选中的标段/单位工程标识写入 PROJECT_ID;服务端也将标段设为必填,与 R-BID-013 和物理字段 PROJECT_ID(建设项目 ID)不一致。
  • 修正口径:新增、编辑与 Excel 模板统一按项目信息配置的独立项目 BIZ_PROJECT.PROJECT_ID 选择/导入;PROJECT_NAME_SNAPSHOT、PROJECT_PATH_SNAPSHOT 与可解析的线路快照由后端项目主数据派生。项目没有工程范围时可以登记,线路快照为空。唯一性按 (SUBORDINATE_UNIT_ID, PROJECT_ID) 校验。
  • 兼容边界:BID_ID 物理列保留历史兼容,新建或编辑保存时置空;不在本次改写存量记录。历史行的 ID 语义需通过数据回读确认后再安排专项映射,不依据名称或数值猜测迁移。
  • 验收例子:在项目选择器中选择一个无工程范围的既有项目,应能完成项目选择且线路留空;选择有唯一线路关联的项目,应回显线路;同一单位重复选择同一项目时服务端拒绝;选择工程树标段 ID 作为 projectId 时项目主数据校验拒绝。

8.14 2026-10-15 办理弹窗「下一步审批人」默认带出表单审批人并支持改选(R-BID-035) ​

  • 需求来源:用户反馈立项审签流程审批提交页——「下一步审批人」为空且不选无法提交;要求直接读取页面中的人员信息带出,并支持修改。
  • 规则:办理弹窗打开时,按当前节点读取本单新增时指定的对应审批人字段并预填(deputy→经办部门副部长、dept_head→负责人、leader→分管领导、general_manager→总经理、chairman→董事长;文件审查/评审另含 seal_manager→印章管理员、countersign→领导小组会签);预填值可直接提交,点「选择」可放开候选改选他人,最终以弹窗确认值为准指派下一节点办理人。
  • 实现边界:预填仅在节点尚未手动选择时写入(不覆盖用户操作);改选仅在存在业务默认值的节点放开候选(服务端的单人解析不阻断换人),其他节点保持原候选规则。
  • 验收例子:新增立项(负责人=严浩)→ 副部长办理弹窗应显示「经办部门负责人:严浩」;点「选择」候选应包含其他人员;改选杨单丹并提交后,dept_head 待办应出现在杨单丹名下;不点「选择」直接提交时,下一节点办理人应为严浩。

2026-10-17 项目与线路独立登记 ​

  • 项目仅提供项目身份、名称和路径快照;招投标不再请求项目线路解析,也不因项目关联的标段跨线路而拒绝登记。本节替代历史 8.7、8.15 中从项目自动解析线路的口径。
  • 招标文件、立项、独立来源文件审查、下属单位招标的线路均可手选一条或留空。切换项目不填充、锁定、清空或覆盖独立线路;招标文件改选线路清空原标段,所选标段必须属于当前线路。
  • 本平台立项的文件审查由服务端继承来源立项线路;评审继承文件审查线路;挂网、答疑、开标、公示、中标继承招标文件线路。这些继承与项目主数据无关。
  • 新选线路按有效线路主数据 ID 校验并生成名称快照;编辑未改线路时保留已有快照,清空后不得残留旧线路 ID。拒绝伪造或不存在的线路,保持现有权限与审批状态限制。
  • 验收:选择“中梁山大修基地”等项目后线路保持独立可选;手选线路后切换项目,线路不变;保存后回读与手选一致。选择来源立项后继承其线路,客户端篡改不能覆盖来源;无线路的新记录可保存,已有记录编辑不丢失线路。