Skip to content

招投标监管 · 测试与验收文档 ​

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

进展说明:工程招标六阶段已完成真实闭环;本轮完成评审管理真实提交与 V4 审批闭环、来源字段回填及用印条件验证。评审批量导入的有效数据文件尚未完成页面验证;其他未覆盖范围见各批次记录。2026-09-18 补充运营显示口径页面回归记录(见 §8)。

最终结论必须来自真实接口、数据库、流程定义、浏览器和等价角色,不以 Mock 或构建成功替代。

1. 测试范围与环境 ​

项目内容
范围独立项目关联、可选工程范围、工程招标六阶段、非依法招标三流程、下属单位台账、权限、附件、导入、异常和数据一致性
前端digital-construction-ui/src/views/business/bidding/**
后端digital-construction-modules/digital-construction-business/**
数据库DM8 DIGITAL_CONSTRUCTION;迁移目标差异另行核对
角色工程招标经办人、非依法招标发起人、审批人、下属单位维护人、仅查看用户
测试数据15 号线一期土建一标、机电工程供电系统、城市轨道快线东段车站 A;运营线路用于默认隐藏验证(该隐藏已于 2026-09-17 取消、2026-09-18 恢复为默认隐藏并提供“显示运营”开关,见需求分析)

2. 需求追踪矩阵 ​

需求编号设计落点测试用例组状态
R-BID-001 项目和快照概要设计、数据库设计PC-01~PC-12、EC-01~EC-02主链路已真实回归
R-BID-002 轮次与重挂详细设计EC-03~EC-10、EC-15待并发实测
R-BID-003 下游关联与事实锁定详细设计EC-11~EC-37工程招标主链路及当前批次锁定边界已真实回归
R-BID-004 非依法流程概要设计NW-01~NW-23立项/文件审查历史链路有真实证据;当前批次仍未完成全部扩展分支正式流转
R-BID-005 导入原子性需求分析SU-01~SU-12待真实导入回归
R-BID-006 全量查看和按钮权限需求分析PM-01~PM-05需等价角色实测
R-BID-009 台账文案/顺序和树形展示详细设计TD-01~TD-04浏览器回归通过
R-BID-010 线路自动回显与单线路选择概要设计TD-05~TD-08、PC-13浏览器回归通过
R-BID-011 业主单位范围详细设计TD-09~TD-10、PM-06页面选项及服务端规则已验证
R-BID-012 附件选填与六阶段进展数据库设计TD-11~TD-12页面与开发库字典已验证
R-BID-013 项目主数据全局可用与工程范围可选详细设计PM-07、TD-13读链路修复、定向后端回归及测试员有效登录页面复测通过

3. 关键测试用例 ​

3.1 工程节点与工程招标 ​

用例组覆盖内容预期结论
PC-01~PC-12节点层级、类型校验、重复工点、删除/移动保护、项目名称快照非法结构被拒绝,历史快照不随项目或工程结构变更
EC-01~EC-10招标文件唯一、V1/V2、重挂并发、金额查询、分页当前版本唯一,重挂原子切换,列表分页真实有效
EC-11~EC-15主数据/挂网版本同表树形展示、当前轮次自动绑定、多批次答疑、旧轮次不迁移轮次边界清晰,默认展开,禁止逐题答疑
EC-16~EC-21、EC-31~EC-35三候选人、报价精度、附件、综合评估法得分、中标前置缺失或不合规数据由服务端拒绝
EC-22~EC-30、EC-36~EC-38一轮一条、异议条件、事实锁定、文件大小和格式锁定事实不可改,附件限制统一

3.2 非依法必招标 ​

用例组覆盖内容预期结论
NW-01~NW-03立项、文件审查来源和完成前置来源选择符合规则
NW-04~NW-11三种立项情况、文件审查唯一、评审继承来源字段冻结,不重复登记
NW-12~NW-16我的任务、平台通用办理、终止和完成只读不复制平台流程能力
NW-17~NW-23五级审批人、会签、印章环节、退回/撤销再提交只允许明确的状态动作

3.3 下属单位招标与权限 ​

用例组覆盖内容预期结论
SU-01~SU-08独立项目必选、匹配、缺列、重复和整批回滚任一错误不部分入库、不覆盖旧数据
SU-09~SU-12进展推导、字典筛选、模板、超过 500 条选择查询和选择器不静默截断
PM-01~PM-05页面可见、按钮权限、组织用户、附件、范围参数页面权限决定入口,接口仍执行按钮授权;项目数据不按成员关系裁剪
PM-07、TD-13无项目成员关联时读取项目/招标数据,项目无工程范围仍可解析快照不读取 biz_project_user_scope 作为访问门槛;工程范围为空时项目仍有效

3.4 本次招标文件台账调整 ​

用例覆盖内容预期结论
TD-01~TD-04查询条件、表格列、新增/编辑字段的文案和顺序;主数据与挂网版本同表页面顺序与确认原型一致,挂网台账默认全部展开,当前进展固定右侧
TD-05~TD-08项目单线路自动回显、无线路人工选择、多线路拒绝、线路级节点限制不丢失项目线路事实,不静默选择错误线路,人工选择最多一条线路级节点
TD-09~TD-10归属单位公司/分公司筛选、参建单位和越级单位入参页面不展示参建单位,服务端拒绝非业主或超层级单位
TD-11~TD-12三个招标文件附件选填、六阶段字典和进展展示不上传附件也可通过对应校验,进展按六阶段展示

4. 自动化与实测记录 ​

验证项命令/入口最近结果证据
前端组件与工具测试pnpm exec vitest run src/views/business/bidding/components/biddingUiHelpers.spec.ts src/views/business/bidding/biddingPrototypeConsistency.spec.ts src/views/business/bidding/tenderDocument/index.spec.ts src/views/business/bidding/listingVersion/index.spec.ts4 个文件、14 项通过(2026-09-02)Vitest 输出
后端定向单测.agents/tools/dev.ps1 maven -pl digital-construction-modules/digital-construction-business -am "-Dmaven.test.skip=false" "-Dtest=BiddingBusinessRulesTest" "-Dsurefire.failIfNoSpecifiedTests=false" test6/6 通过(2026-09-02)Surefire 输出
API 真实调用浏览器真实登录链路:项目配置→工程招标六阶段;非依法立项→文件审查审批关键接口提交成功,流程节点办理完成本次浏览器回归记录
DM8 结构与数据.agents/mcp/dm8-mcp结构已集中参考,开发库业务数据已完成本次主链路实测本次测试记录及进展字典回读
浏览器端到端内置浏览器真实账号回归主链路通过(2026-09-02)项目主数据、六阶段过程记录和流程实例

| 本批次工程招标 API/E2E | 测试员真实登录;/business/bidding/tenderDocument、listingVersion、clarification、bidOpening、publicNotice、award | 2026-09-14;六阶段按顺序新增并回读,重复中标被拒绝;重启当前代码后项目选择器含 E2E招投标全链路-1788238657427(无成员、无工程关联),选中后线路为空 | 项目 E2E全模块验收项目-20260913;招标文件 2099054136034697218;既有台账和附件链接正常展示;测试数据保留 |

4.1 2026-09-02 本次调整与端到端验证记录 ​

验证项命令/入口最近结果证据
前端类型检查pnpm exec vue-tsc --noEmit通过命令退出码 0
前端定向代码检查pnpm exec oxlint src/views/business/bidding通过命令退出码 0
后端业务模块编译maven -pl digital-construction-modules/digital-construction-business -am compile -Dmaven.test.skip=false通过Maven Reactor 输出
浏览器端到端主链路项目配置创建主数据、关联一条线路级节点、登记招标文件,依次完成首次挂网、答疑补遗、开标、公示、中标通过;当前进展为“全部完成”测试项目 E2E招投标监管全链路-1788346630870,数据保留
非依法招标流程立项创建→经办人→经办部门副部长→经办部门负责人→分管领导→总经理→董事长;文件审查追加印章管理节点通过;文件审查审批完成浏览器流程办理记录,数据保留
页面联动回归项目名称选择、线路自动回显、线路选择器隐藏“运营”、业主单位下拉范围、挂网台账默认展开、评审选择文件审查后线路回显通过(“隐藏运营”一项已于 2026-09-17 取消、2026-09-18 恢复为默认隐藏并提供“显示运营”开关,见需求分析)内置浏览器页面快照
测试数据保留未执行删除或清理符合要求开发库及 tmp/ 测试产物保留
DM8 当前进展字典项目 DM8 MCP 查询 bidding_current_progress6 条按确认顺序回读招标文件完成→招标挂网完成→答疑补遗完成→开标完成→公示完成→全部完成

5. 缺陷与遗留问题 ​

编号问题影响处理状态
B-TEST-001候选人资格判定字段未形成完整契约中标前置校验无法证明闭环已修复(2026-08-30,见 5.1)
B-TEST-002综合评估法三名得分必填范围存在历史差异开标提交边界待确认
B-TEST-003下属单位导入匹配键和模板最终版本需实测导入可靠性待确认
B-TEST-004物理索引、空值和审计覆盖需 MCP/代码逐项核对数据一致性待核对
B-TEST-005项目/招投标读取链路错误使用项目成员范围,导致无成员关联时合法项目详情被拒绝阻断项目选择、招标详情和主链路继续办理已修复(2026-09-14,见 FIX-E2E-010)

5.2 2026-09-02 页面与业务规则调整记录 ​

调整验证状态
招标挂网主数据与挂网版本改为同表树形展示,默认全部展开;当前进展固定右侧浏览器页面回归通过
招标文件项目选择后解析线路,单线路自动回显,多线路拒绝;无线路时仅可选单个线路级节点浏览器和后端规则回归通过
归属单位限定业主公司/分公司,三个招标文件附件改为选填页面选项、服务端校验和真实提交回归通过
进展字典统一六阶段DM8 开发库已回读,工程招标主链路已按六阶段完成
项目主数据与工程树解耦口径修正项目分页、详情、选项、线路解析和招标文件列表/详情移除项目成员范围过滤;成员接口和历史关联保留为非授权信息

5.1 2026-08-30 缺陷修复与回归记录 ​

以下缺陷已修复并通过内置浏览器真实链路回归(立项→五级审批→文件审查→评审),验证环境为私有测试库:

缺陷修复方式
表头 7/8 字标签换行逐列加宽(评审明细表、招标文件、公示、下属单位招标等)
“是否”选项无默认值绑定 sys_yes_no 的字段默认取字典“否”项(noFlagValue),硬编码 yes/no 字段默认 no
挂网上表只能显示 1 条主数据主数据面板 286px→380px 并压缩行距;筛选与上下表间距统一 12px,底边框不再被视口裁切
评审中标判定与字典值不匹配(B-TEST-001)前端 isBiddingYes、后端 isYesFlag 判定,兼容 Y/N、yes/no、1/0
流程实例无业务标题发起流程写入 bizExt.businessTitle=项目名称(新实例生效,历史实例维持为空)
流程页来源立项/文件审查记录显示数据库 ID详情接口带出 sourceApprovalName/fileReviewName,前端名称优先、ID 兜底
公示记录落库即永久锁定locked 改为仅废标轮次或已登记中标后锁定,其余允许更正
下属单位招标 35 项无条件必填仅基本信息必填,过程信息选填+配对校验(前后端同规则)
评审编辑可换文件审查记录编辑态禁用,与开标页对齐
流程页“是否”与“项目立项情况”显示原始值统一映射“是/否”与字典标签
弹窗标签换行业务弹窗统一 960px/label-width 160px,超长标签短文案+小字补充说明
经办人默认显示原始 ID新增弹窗按当前登录人自动带出归属单位/经办部门/经办人,切到非本人部门时留空

6. 验收结论 ​

2026-09-02 主链路批次已完成:工程招标主链路从项目配置创建主数据开始,连续完成招标文件、首次挂网、答疑补遗、开标、公示和中标;非依法招标完成立项审批及文件审查审批;下属单位招标页面的查询、表格和三页签表单完成浏览器核对。2026-09-14 进一步确认项目主数据与工程树解耦:招投标读取不再要求项目成员关联,项目工程范围可为空;菜单、按钮和接口权限仍按各资源单独校验,手工选择线路时仍校验工程树线路节点规则。评审正式保存、下属单位整批导入回滚、等价角色权限越权和交付库差异仍属于扩展验收项,未在主链路中冒充已完成。

证据来源包括历史修复记录、本次实际测试日志、页面快照、接口响应、流程实例和数据库查询结果;本次代码提交为 b5dd1d2,已推送至 Gitee main。

7. 2026-09-13~2026-09-14 全模块 E2E 批次同步 ​

本批次纳入招投标监管的全部已开发非 BIM/GIS 菜单入口、工程招标六阶段和非依法招标扩展表单边界。内置浏览器使用管理员真实登录逐项打开实际菜单地址,未发现 404 或“页面不存在”;历史回归曾因错误的项目成员范围门槛补配测试员关系,本次已按用户确认修复该读链路,测试数据和历史关联均保留。招投标数据现在按各资源菜单/按钮/接口权限使用,项目不要求项目成员关联;非依法招标入口、文件审查和评审表单继续保留页面/边界证据,正式扩展流程另列为待专项。

权限和数据准备沿用全模块测试批次:测试业主单位、测试角色、E2E 测试人员、E2E全模块验收项目-20260913 及测试工点均保留。当前测试角色为覆盖性角色,拥有较宽菜单和数据范围,已证明“可访问”路径,但不代表最小权限或越权负向结论。本轮按方案 B 接受该测试夹具设计风险,不再扩展招投标等价角色和跨项目接口专项;项目成员关联及工程树范围不再作为项目/招投标数据访问前置,工程树范围只在工程业务和手工选择线路时按既有规则生效。

验证项结果证据与边界
页面入口通过招投标监管实际菜单入口逐项打开,无 404;BIM/GIS 未纳入结论
非依法立项表单通过(页面/历史链路)必填字段、五级审批人和申请文件约束可见;历史立项审批有真实证据,当前批次未新增扩展样本
非依法文件审查表单通过(页面/边界)新增弹窗可见三种立项来源、项目节点选择器、经办信息、招标方式、项目类型、评审方式、印章管理人员、会签部门及五级办理人;合同法律审查附件和招标(必选)文件为当前表单必填;空表未执行正式提交
非依法评审表单通过(页面/边界)新增弹窗可见已完成文件审查来源选择、开标时间、评审方式、投标人明细(默认 1 行)、资格/报价/名次/中标字段、通知书附件和五级办理人;当前批次未执行正式保存
招标文件草稿通过空表暂存提示“必填项未完成”;有效草稿保存后列表显示 1000000.00、自主公开招标、招标文件完成,编辑态附件仍回显
工程招标六阶段通过招标文件 2099054136034697218:挂网版本 2099214945289330689 → 答疑 2099216590475714561 → 开标 2099216635912609794 → 公示 2099216672705044481 → 中标 2099216719681249282;主表 currentProgress=awarded,5 类下游记录均可查询
项目与工程数据边界通过(代码/定向回归/页面)项目主数据和招投标数据不按项目成员或工程树范围过滤;测试员历史“无权访问该项目”现象已定位为错误门槛并移除。项目工程范围可为空;只有未关联线路时手工选择线路才按工程树节点规则校验。重启当前代码后测试员项目配置显示 3 项,招标项目选择器含 E2E招投标全链路-1788238657427(无成员、无工程关联)且线路为空;历史项目成员关联保留但不再决定可见性
顺序/锁定/重复边界通过开标前置依赖挂网版本,公示依赖开标,中标依赖公示;中标后当前挂网、答疑、开标、公示均显示 locked=true;重复中标返回“该挂网轮次已登记中标,前置事实不可修改或删除”,未产生第二条记录
组织与线路边界通过测试业主单位下的测试部门没有可选责任人时,改选业主公司/数智科技部后可选择责任人;项目单线路自动回显 15号线一期
招标/非招标自动化通过全仓 Maven 成功;业务模块 94 个、工作流模块 12 个测试无失败;既有招标规则与流程单测通过
前端质量闸门通过Vitest 36 个文件/191 项通过,类型检查、lint、生产构建通过
设计影响问题待确认下属单位批量导入、等价角色越权、非依法评审正式保存和重挂并发仍需专项数据与角色;项目主数据全局可用和工程范围可选的口径已同步,测试员有效登录页面复测通过

本批次工程招标主链路已完成真实六阶段闭环并完成锁定、重复和菜单/按钮权限边界回读;项目主数据读取已移除错误的项目成员范围门槛,并通过定向后端回归和测试员有效登录页面复测覆盖无成员关联和无工程范围场景。非依法招标正式审批、评审正式保存、下属单位导入原子性、重挂并发和等价角色越权仍未完成,不纳入“全部招投标分支通过”的结论。

8. 2026-09-18 运营显示口径页面回归记录 ​

2026-09-18 口径调整:业务侧节点选择器默认隐藏 biz_status='2'(运营)节点并提供“显示运营”开关(默认关闭),打开后运营节点可正常选择与提交,服务端仍不做运营状态判定与拒绝(见需求分析)。本记录只覆盖该显示口径,不改写上述历史结论。

验证项入口/命令最近结果证据与边界
节点选择器默认隐藏运营(显示层)超级管理员真实登录;工程变更·新增页使用与招标共用的 ProjectNodePicker通过:默认状态下根级不出现运营根节点,运营根下仍在建的支线(4号线西延、5号线北延、江跳线二期、6号线东延、9号线一期新桥段、18号线北延)提升到可见层级;打开“显示运营”后出现轨道交通环线、轨道交通1号线~18号线等运营根真实页面记录;上述 6 条上提线路在 BIZ_PROJECT_NODE 中当前无下级,按既有节点类型规则在本选择器内仍为不可直接点选的容器,与运营无关
前端类型检查pnpm exec vue-tsc --noEmit通过(0 error)命令输出
前端全量测试pnpm exec vitest run212 项通过、1 项失败失败项为 src/components/Process/FlowTimeline.spec.ts,属仓库存量问题,与本次显示层改动无关
文档检查.agents/tools/verify.ps1(Docs)0 issuedocs:check 输出

覆盖项:招标与工程变更共用节点选择器的默认隐藏与「显示运营」切换(在工程变更·新增页核对);线路/节点类型和数据权限校验沿用既有服务端行为,未随本次显示层改动调整。

未覆盖项(不纳入“已通过”结论):招标文件管理页「线路」(LINE)选择器的逐项点选未执行;非超级管理员角色视角未验证;深色模式下开关观感未单独核对;变更与手续等其余入口页未逐页重复核对。

结论:验证通过(有限范围)——“默认隐藏运营、可切换显示、服务端不拒绝”的显示层口径已按上述命令和页面入口验证;未覆盖项不作已通过表述。

9. 2026-09-26 必填项、挂网状态与金额精度回归记录 ​

本轮按需求分析 8.9的 7 项口径实施并回归。后端、前端和开发库三类证据分别列出,页面证据取自超级管理员真实登录后的开发环境页面。

验证项入口/命令最近结果证据与边界
后端模块测试mvn -pl digital-construction-modules/digital-construction-business -am -Dmaven.test.skip=false test通过:182 项,0 失败新增 5 项挂标状态变更用例(置废标、恢复正常、历史轮次拒绝、已中标拒绝、非法状态值拒绝)
前端类型检查pnpm exec vue-tsc --noEmit通过(0 error)命令输出
招标前端单测pnpm exec vitest run src/views/business/bidding通过:5 个文件 27 项新增金额原样显示、方案上报稿必填、挂网时间只到日期、操作列灰显矩阵、编辑状态弹窗、项目名称只列未挂网项目等断言
库表金额列放宽项目 MCP 回读 ALL_TAB_COLUMNS通过:16 列 DATA_PRECISION/DATA_SCALE 为空,EVALUATION_BIDDER.SCORE 仍为 NUMBER(10,2)放宽前后按列统计条数、求和、最大值一致(招标金额 7 条/2290000.22、挂网金额 9 条/2920004.1、中标价 1 条/980000、开标三候选人合计 1 条/2970000)
招标文件「上传招标方案上报稿」必填招标文件管理 → 新增;空表单点确定通过:表单标题带必填标记,空表单提交被拦截并提示“请上传招标方案上报稿”,弹窗保持打开真实页面记录;另两个上报稿附件无必填标记
归属单位只到单位层级(历史口径复核)同上,展开「归属单位」通过:下拉只出现「重庆城市交通开发投资(集团)有限公司」「测试业主单位」两个单位节点,无任何部门项架构侧核对:技术管理部(测试)、工程管理部(测试)、招投标测试单位 的 DEPT_CATEGORY 均为 12,项目分公司(测试) 为 10;2026-09-24 起按 deptCategory=10 收敛
招标文件台账答疑补遗取值与显示(历史口径复核)招标文件管理台账首行通过:答疑补遗时间显示 2026-01-31(只到年月日),与开发库中该项目两条答疑补遗(2026-01-31、2026-01-12)的最新一条一致真实页面记录;该行挂网时间、挂网金额同样为 2026-09-03、130000.33
新增挂网项目名称排除已挂网项目招标挂网 → 新增 → 项目名称下拉通过:下拉只列出 招投标测试项目6(台账挂网次数 0);其余 6 个项目均有挂网记录被排除真实页面记录;台账主数据行仍是全量招标文件
挂网时间只到年月日招标挂网发起弹窗与台账列通过:弹窗为日期控件(无时分秒),台账列显示 2026-09-09、2026-10-02、2026-09-03真实页面记录
操作列编辑状态/重新挂网与废标联动招标挂网台账与「编辑状态」弹窗通过:当前轮次正常时「重新挂网」灰显、「编辑状态」「修改」「删除」可用;历史轮次四项全部灰显;把当前轮次改为废标后同一行变为「重新挂网」「编辑状态」可用、「修改」「删除」灰显;弹窗按轮次列出挂网次数/挂网时间/挂网网址/挂网金额/是否有实质性修改/招标挂网稿/挂标状态/操作真实页面记录;招投标测试项目1 当前轮次由正常改为废标后按钮组合即时翻转
金额按填写原样显示招标文件台账、招标挂网台账、编辑状态弹窗通过:100000、110000、120002.22、130000.33、12345.6789 等均不再补零为两位小数真实页面记录
挂标状态子弹窗与金额小数位输入招标挂网 →「编辑状态」→ 当前轮次「编辑状态」;新增挂网 → 挂网金额通过:「编辑状态」子弹窗正常弹出,显示挂标状态「正常/废标」单选与随选择切换的状态说明文案;挂网金额输入框接受并保留 4 位小数(输入 12345.6789 后原样显示)真实页面记录
挂标状态变更保存招标挂网 →「编辑状态」→ 当前轮次改废标 → 确定通过:提示“已置为废标”,弹窗与台账按钮组合即时翻转,开发库回读该轮次 BID_STATUS=failed真实页面记录 + 开发库回读;后端需已加载本次接口(重启后验证)
废标后可重新挂网并生成新轮次招标挂网台账 →「重新挂网」→ 确定通过:弹窗标题“重新挂网”,按废标轮次预填项目名称、挂网时间(2026-09-03)、挂网网址、挂网金额、是否有实质性修改与两份附件;提交提示“重新挂网成功,旧版本已自动标记为废标”;开发库回读新轮次 VERSION_NO=5、CURRENT_FLAG=1、BID_STATUS=normal,旧轮次全部 failed 且 CURRENT_FLAG=0真实页面记录 + 开发库回读;同一流程覆盖主数据行与轮次行两个入口
超过两位小数的金额入库重新挂网弹窗 → 挂网金额填 12345.6789 → 确定通过:开发库回读该轮次 LISTING_AMOUNT=12345.6789,未按两位小数四舍五入;台账与弹窗列原样显示真实页面记录 + 开发库回读;金额列已取消 scale 限定

回归中发现并修复的实现问题

  1. 「编辑状态」弹窗内四个操作按钮全部灰显:弹窗数据取自台账主数据行的原始 listingVersions,缺少台账加工行才有的 rowType 标记,导致可用性判断恒为假。改为使用台账已加工的轮次行(children,带 currentFlag、locked、hasAward),并让轮次可用性判断只依赖 currentFlag。修复后当前轮次的「编辑状态」恢复可用。
  2. 「编辑状态」弹窗操作列超出弹窗宽度,需要横向滚动才能看到按钮:弹窗加宽到 1200px,操作列固定右侧,并压缩其余列宽。
  3. 重新挂网生成的新轮次被写成废标:重新挂网表单按废标轮次整行预填,把源轮次的 bidStatus 一并带入新增请求,而服务端 insert 只在入参状态为空时才默认 normal,于是新轮次沿用了废标状态。前端在预填后清空 bidStatus,服务端 insert 改为一律置 normal(与“挂标状态只由状态变更接口写入”的既定口径一致),并新增单测 insert_starts_new_version_as_normal_ignoring_client_status 覆盖。
  4. 主数据行「重新挂网」在当前轮次废标时仍灰显:后端把 current_flag=1 且状态为废标的轮次排除在“当前版本”之外,主数据行的 bidStatus 因此为空,前端按该字段判断重新挂网可用性得到假。改为取主数据行自带的轮次数据(children/listingVersions)中 current_flag=1 的轮次状态判断。

未覆盖项(不纳入“已通过”结论)

  • 废标回退为正常的页面路径未取得证据:本轮在真实页面上验证了「正常→废标」(按钮组合翻转、落库 failed),反方向只有单测 changeStatus_allows_restore_to_normal 与同一接口覆盖,页面点击多次未生效(浏览器工具点击该行内小按钮不稳定),未判定为页面缺陷;
  • 当前轮次为废标时,台账主数据行的挂网信息与当前进展按“无有效轮次”展示(后端 current_flag=1 且状态为 normal 才算当前版本);重新挂网保存后恢复。这是既有后端口径,本次未改动,属预期内边界;
  • 非超级管理员角色视角、深色模式观感未单独核对;
  • 招标挂网台账「挂网文件是否有实质性修改」列对历史 0 值仍显示原始值(与 8.6 记录的同类显示口径一致,本次未在范围内)。

环境观察(非本次改动引入)

首次进入招标文件管理与招标挂网台账时偶发显示“共 0 条”,重新点「搜索」后正常显示 7 条;未改动的招标文件管理页同样复现,判定为环境或前端会话现象,未定位根因,也未计入本轮改动结论。

结论:本轮 7 项口径全部实施完成并取得证据——后端 digital-construction-business 模块 183 项测试通过(含新增 5 项状态变更与 1 项新轮次状态用例)、招标前端单测 27 项通过、库表放宽回读一致;方案上报稿必填、归属单位层级、答疑补遗取值与显示、挂网项目名称排除、挂网时间只到日期、金额原样显示与四位小数入库、操作列灰显矩阵与废标联动、挂标状态子弹窗与保存、废标后重新挂网生成正常新轮次均已在真实页面确认,关键结果同时用开发库回读复核。回归中发现并修复 4 处实现问题(弹窗按钮全灰、操作列溢出、新轮次状态沿用废标、主数据行重新挂网误灰显),其中第 3、4 条是本轮后端重启后才暴露的。未覆盖项见上,不纳入已通过表述。

验证边界说明:本次后端验证依赖重启开发后端加载新接口与校验(原进程非本任务启动,已按用户“接着做”的指令重启)。类型检查在本次改动范围内通过;全量 vue-tsc 的报错全部位于并行开发的 operationDock/costUnit 模块文件(非本任务改动),招标相关文件 0 错误。

10. 2026-09-26 招投标模块端到端巡检记录 ​

按用户要求在内置浏览器里对招投标模块做端到端巡检,用超级管理员真实登录,逐页读取台账列与按钮状态、打开维护表单、提交空表单验证必填规则,关键结论用开发库回读复核。后端已重启加载本次代码(见第 9 节)。

页面/链路结果证据
招标文件管理台账通过:7 条记录;招标金额 100000/600000/1000000 等按填写原样显示(含 12345.6789);挂网时间、答疑补遗时间、开标时间、中标公示时间、中标通知书发放时间只到年月日;答疑补遗取当前轮次最新一条;当前进展随轮次变化重算(招投标测试项目1 重新挂网后由“答疑补遗完成”回到“招标挂网完成”)页面记录;开发库回读轮次与答疑补遗归属
招标文件管理:新增通过:上传招标方案上报稿带必填标记,空表单提交被拦截并提示“请上传招标方案上报稿”,弹窗保持打开;另两个上报稿无必填标记页面记录
招标文件管理:修改保存通过:编辑弹窗按记录预填(项目名称、线路、归属单位、经办、招标方式、招标金额、三份附件),保存提示“修改成功”;开发库回读该记录额度与附件未变、更新时间已刷新页面记录 + 开发库回读
招标挂网台账通过:招投标测试项目1 五轮挂网(1.1–1.4 废标、1.5 正常当前);挂网时间只到年月日;金额 110000、120002.22、130000.33、12345.6789 原样显示;主数据行 重新挂网 灰显/可用随当前轮次状态变化页面记录
答疑补遗台账:列表通过:4 条记录,招投标状态随挂网轮次变化(原挂网轮次废标后该两条显示废标);时间列改为只到年月日页面记录
答疑补遗:修改保存通过:编辑弹窗预填项目、线路、时间、网址、实质性修改、信息填报人与答疑补遗稿附件,保存提示“修改成功”页面记录
开标管理台账通过:1 条记录,开标时间只到年月日,三名候选人报价 980000/990000/1000000 原样显示;该轮次已中标,编辑与删除按锁定规则灰显页面记录
公示管理台账通过:1 条记录,中标公示时间只到年月日;已锁定记录编辑/删除灰显页面记录
中标管理台账通过:1 条记录,中标通知书发放时间只到年月日,中标价 980000 原样显示;中标记录编辑/删除灰显页面记录
立项管理通过:列表结构、筛选条件与空态正常;「立项审批」弹窗必填项完整(项目名称、归属单位、经办部门/人/时间、招标方式、最高限价、项目类型、评审方式、上传立项申请文件、四名审批人),空表单提交被拦截并逐项标红页面记录;当前开发库无立项数据,未做写入
文件审查、评审管理结构核对通过:列表表头、筛选条件与空态正常(含项目立项情况、是否挂集团官网、投标单位数量、评审记录表等列);当前开发库无数据,未做写入页面记录
下属单位招标通过:列表 30 列结构正常、空态正常;「新增下属单位招标记录」弹窗三个页签(基本信息、中标候选人、开标与中标)必填项完整,空表单提交被拦截并逐项标红页面记录;当前开发库无数据,未做写入
后端与前端检查通过:后端 digital-construction-business 186 项测试(含中标锁定 3 项)、招标前端单测 27 项;招标相关文件 vue-tsc 0 error(全量检查的报错全部位于并行开发的 operationDock 与 costUnit 文件,非本次改动)命令输出

本次巡检发现并修复的问题:答疑补遗、开标管理、公示管理、中标管理、下属单位招标 5 个列表的时间列显示到时分秒(与 R-BID-015、R-BID-020 已确认的“台账时间列只显示年月日”不一致),已统一改为 formatDateOnly 展示;查询条件、编辑表单与数据存储不变,记为 R-BID-021,见需求分析 8.10。

未覆盖项(不纳入“已通过”结论):

  • 需要新增附件的写入路径未做页面级验证:首次挂网、答疑补遗新增、开标新增、公示新增、中标新增。内置浏览器不支持文件选择,这些表单的必填附件规则只能以服务端代码与单测为证据;
  • 非依法必招标的审批办理页面(立项/文件审查/评审 flowForm)与审批流转未纳入本次巡检;
  • 文件审查与评审两个台账因开发库无数据,只覆盖到结构与空态;
  • 非超级管理员角色视角、深色模式观感仍未单独核对。

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

结论:本轮巡检覆盖 10 个台账页面与可执行的读写链路,除上述未覆盖项外均通过;发现的时间列口径问题已修复并在页面复核,中标记录锁定按用户裁决实现并在页面复核,需求、设计、数据库、操作手册与测试文档同步更新。

11. 2026-09-29 立项与文件审查端到端验证记录 ​

按用户要求在内置浏览器用超级管理员真实登录,对招投标模块本轮(项目主数据、审批人可选项、会签人员、是否用印等)改动做端到端验证,关键结论用开发库回读复核。前端 vue-tsc 0 错误、招投标单测 27 项通过;后端 digital-construction-business 模块 234 项单测(含 workflow 14、bim 18,共 266 项)通过。

11.1 本次发现并修复的问题 ​

序号问题现象与根因修复
1会签人员办理人解析失败(阻断级)文件审查会签节点的流程变量写成 user:<id>,而平台 TaskAssigneeEnum.USER 的前缀是空串(只有角色/部门/岗位有前缀),parseStorageId 解析 user: 前缀时抛错被丢弃,导致会签节点办理人为空(页面「选择下一步审批人」显示共 0 人,流程将无办理人)BiddingFlowVariableUtils.toUserPermissions 改为输出裸用户 ID;同步修正单测断言。修复后页面显示「共 2 人」,会签节点按所选人员建立 2 条办理人记录
2文件审查缺跳过闸门副部长/分管领导/董事长改为非必填后,v3 流程无对应网关,空缺节点无人办理开发库发布文件审查 v4:新增 deputy_gateway/leader_gateway/chairman_gateway/seal_gateway 四个排他网关(条件 `eq@@skipXxx
3必填项与原型不一致「立项申请文件」「总经理办公会审议情况」未标必填;「经办部门副部长/董事长」仍为必填前端必填星标与后端校验按原型对齐:立项申请文件必填(本平台立项时服务端自动带出,校验放行)、总经理办公会审议情况必填、副部长与董事长放开必填(2026-09-29 用户确认「经办部门分管领导」保持必填)
4字段名称与原型不一致表单标签「招标领导小组组成部门」与实际选择对象(人员)及原型表述混用标签、占位与后端提示统一为原型用词「招标领导小组成员部门」,流程表单同步
5冗余提示文件审查「立项申请文件」下「已自动带出立项模块附件,可修改」为多余说明移除该提示
6审计留痕不一致文件审查修改时审计日志仍记录 projectNodeId(新记录为空),与新增/删除记录的 projectId 不一致统一改为 projectId
7台账时间列立项管理经办时间表单改为只选日期后,台账列仍输出到时分秒(新记录显示 00:00:00)台账「经办时间」列改用 formatDateOnly
8会签人员回显类型多选选项值沿用后端 Long(安全整数范围内为数字),回显值恒为字符串,按严格相等匹配时小 ID 用户显示原始 ID 而非姓名选项值统一 String(user.id)

11.2 页面验证覆盖(真实页面 + 开发库回读) ​

  • 立项管理:台账「审核状态」筛选与列可用;新增表单项目名称取自项目主数据(12 个可选项目)、经办时间为只选日期(落库 00:00:00)、副部长与董事长留空提交成功;送审后流程实例直接落在「经办部门负责人」(skipDeputy=Y 生效);依次办理负责人、分管领导、总经理后流程到达「结束」,实例变量含 skipChairman=Y,董事长节点被跳过;业务记录 project_id 已写入、project_node_id 为空、审核状态为已完成。
  • 文件审查:台账「审核状态」筛选与列可用;新增表单「项目立项情况=本平台立项」时项目名称/来源取已完成的立项记录并带出项目、线路与附件;标签与必填星标与原型一致(副部长/分管领导/董事长无星标);「是否用印=是」时出现印章管理人员字段;会签人员多选同时选中普通 ID 与雪花 ID 人员(countersign_user_ids 与姓名串落库正确);提交后实例落在「经办部门负责人」(skipDeputy=Y)。办理负责人节点时「选择下一步审批人」列出 2 名会签人员,完成后会签节点按 2 人建立办理人(flow_user 回读 2 条),员工号与流程变量一致;第二条记录以「是否用印=否」提交,实例变量 skipSeal=Y。
  • 附件上传:通过页面上传控件完成合同法律审查附件、招标(必选)文件上传,附件随单据保存;本平台立项的立项申请文件按来源立项记录自动带出。

11.3 未覆盖项(不纳入“已通过”结论) ​

  • 会签节点需两名办理人分别审批后才能流转,本次只验证到会签节点按 2 人建立办理人(后续节点:分管领导/董事长跳过、总经理、未用印跳过印章、结束),未以第二账号切换登录完成会签通过与后续节点办理;
  • 「前期已经完成立项」「立项与文件一并审批」两条新增路径未做页面级验证(决策依据字典与总经理办公会审议情况联动仅静态核对与后端校验覆盖);
  • 评审管理、开标/公示/中标的时间精度与中标单位下拉改动未做本轮新增页面验证(沿用 2026-09-26 巡检结论);
  • 非超级管理员角色视角未核对。

11.4 按用户裁决补充的修复(R-BID-028) ​

  • 中标管理必填附件:前端本次移除了「上传全部中标候选人投标文件」「上传招投标情况报告」的必填规则,而后端 AwardServiceImpl 仍要求两项附件非空,表现为前端不拦截、提交后由服务端报「…附件不能为空」。用户裁决放开后端校验,已删除这两项空值校验并记为 R-BID-028。
  • 回归:真实页面「中标管理 → 新增」选择未登记中标的公示项目(招投标测试项目2)提交,只上传中标通知书、两个附件留空,保存成功(页面提示「新增成功」);开发库回读该记录 CANDIDATE_BID_ATTACHMENT、BIDDING_REPORT_ATTACHMENT 为空、AWARD_NOTICE_ATTACHMENT 有值,中标单位取自参建单位下拉(「参建单位1」)、中标价与发放时间落库正确。后端 digital-construction-business 模块单测 234 项通过。

12. 2026-09-29 评审管理与文件审查必填复核记录 ​

12.1 文件审查必填按用户确认修正 ​

用户按原型确认必填口径:「经办部门分管领导」保持必填(前端星标 + 后端校验恢复),其余与原型一致——必填为项目立项情况、项目名称/来源、经办时间、归属单位、经办部门、经办人、最高限价、招标方式、项目类型、评审方式、是否用印、是否挂集团官网、合同法律审查附件、立项申请文件、上传招标(必选)文件、经办部门负责人、经办部门分管领导、招标领导小组成员人员、总经理,以及「是否用印=是」时的印章管理人员;非必填为线路名称、经办部门副部长、董事长。流程 v4 的分管领导跳过闸门保留(新提交恒走「选了分管领导」分支)。

12.2 评审管理发起页与明细调整 ​

项口径页面验证
决策依据与总经理办公会审议情况默认隐藏;所选项目在文件审查存有决策依据时显示并带出(只读,决策依据按字典标签展示)前序检查确认默认隐藏;来源带出分支已在本轮真实端到端页面中验证,见 §12.5
是否用印与印章管理人员新增「是否用印」(是/否,必填,默认否);印章管理人员移至「选择审批人」区块末行,仅「是否用印=是」时显示且必填页面核对:默认不显示;选「是」后出现在审批人区块最后一项(必填星标)
时间精度台账「开标时间」列与发起页「开标时间」只到年月日页面核对:列为 formatDateOnly 展示,表单为 type="date"
投标人明细表格上方新增/删除/下载模板/批量上传;列名与顺序按原型(序号、投标(竞选)人名称、是否符合资格条件、被否决原因(不符合资格条件的填写)、报价(万元)、得分(综合评估法项目填写)、联系人、联系人电话、法定代表人、法定代表联系方式、名次、是否中标)页面核对:四个按钮齐备,表头顺序与原型一致;模板下载与批量上传的后端接口见 12.3

12.3 模板下载与批量上传验证 ​

  • 模板下载:从评审发起页点击「下载模板」后,浏览器保存了 xlsx 模板文件,页面未出现错误提示;接口为 GET/POST /business/bidding/evaluation/bidder/template,权限码 bidding:evaluation:template。
  • 空模板提示:通过页面「批量上传」选择空模板后,页面提示「文件中没有可导入的投标人明细」,没有向明细表添加行。
  • 有效数据导入:本轮准备了含两行合成投标人数据的模板文件。内置浏览器无法打开或操作本机文件选择器,未能将工作簿交给页面;有效数据解析、导入后字段映射与行级错误提示的页面验证受阻。导入接口为 POST /business/bidding/evaluation/bidder/import,权限码 bidding:evaluation:import。

12.4 前序批次未覆盖项 ​

2026-09-29 批次尚未做评审整单提交、来源字段回填及实际日期行展示。本轮结果见 §12.5。文件审查双人会签的两名办理人分别审批流程不在本轮评审管理验收范围内。

12.5 2026-09-30 评审管理与文件审查实施及端到端验证 ​

规则调整:评审来源中的决策依据与总经理办公会审议情况有值时从文件审查记录带出,只读显示;来源无决策依据时字段隐藏。评审发起页与台账时间仅显示年月日。投标人明细按原型调整字段顺序并提供新增、删除、模板下载和批量上传。评审记录表必填;不符合资格的投标人必须填写被否决原因。评审「是否用印=否」时隐藏并清除印章管理员。评审经办部门副部长和董事长为选填,经办部门负责人、分管领导、总经理仍必填。文件审查「是否用印」统一为是/否,印章管理员移至审批人区块末尾,仅选择「是」时显示且必填;选择「否」时服务端清除管理员并跳过印章节点。文件审查既有审批人必填规则保持不变。

页面/链路结果证据
评审来源与决策字段使用已有已完成文件审查来源发起评审;决策依据按字典标签显示为「经请示同意」,总经理办公会审议情况字段只读显示且值与来源一致(本次来源值为空)。真实发起表单与开发库回读
发起页及台账日期发起页日期控件选择 2026-09-30;提交后台账开标时间显示 2026-09-30,数据库时间为当日零点。真实表单、评审台账及开发库回读
用印条件评审与文件审查表单默认「否」时隐藏管理员;切换「是」后管理员字段显示并标必填,切回「否」后隐藏。评审记录保存为「否」且印章管理员为空。两个真实表单的条件交互与评审记录回读
原型字段与明细发起页无“其他方式/其他类型”时不保留空字段行;投标人表头字段名称和顺序与原型一致,新增、删除、下载模板、批量上传操作位于表格上方。提交的投标人明细和评审记录表附件已保存。真实发起页、完成记录台账、附件预览与数据库行数回读
可选审批人及流程评审流程 V4 已发布。经办部门副部长、董事长未选择;评审经负责人、分管领导、总经理审批后到达结束,台账显示「已完成」。流程历史中无副部长、董事长及印章管理员办理节点。真实办理页面、流程历史及开发库回读
文件审查用印服务端规则「是」保留管理员并进入印章节点;「否」规范化为 N、清除管理员 ID/姓名并设置跳过标记;非法值拒绝。FileReviewServiceImplTest 4 项通过
模板与导入模板文件下载成功;空模板显示无可导入明细提示。有效数据工作簿已准备,但文件选择器不可由当前内置浏览器操作,页面导入验证受阻。真实页面下载与空模板交互;有效导入受浏览器文件选择器限制

流程定义检查:评审 zhaotoubiao_pingshen V4 包含副部长、董事长和印章管理条件网关,开发环境发布状态与审批历史已核对。仓库 V4 JSON 有 12 个节点和 14 条连线;check_layout.py 检查锚点异常、穿节点、交叉、长共段及标签问题均为 0。

自动化检查:前端 vue-tsc --noEmit 通过;评审相关 Vitest 5 个文件、27 项通过。最新后端兼容性修复后执行 EvaluationServiceImplTest、FileReviewServiceImplTest 定向 Maven 回归,10 项通过。后端已重启并加载修复代码。

剩余验证范围:评审投标人批量导入的有效数据工作簿页面验证受阻,当前仅有模板下载与空模板校验的页面证据;文件审查双人会签由两名办理人分别登录审批的完整路径未在本轮验证。上述范围不纳入通过结论。

13. 2026-10-15 下属单位招标工程对象契约复核 ​

检查结果证据与范围
项目对象契约已修复:下属单位招标以独立 BIZ_PROJECT.PROJECT_ID 为关联对象;不再将工程标段或单位工程 ID 写入项目字段。新增/编辑按项目主数据派生名称快照和可解析线路,历史 BID_ID 列仅保留兼容;同一下属单位同一项目唯一。后端 SubordinateTenderServiceImpl、导入 DTO 与需求/设计/数据库/手册同步
任民页面选择通过:新增表单显示“项目名称”独立项目列表;选择“重庆轨道交通27号线(城轨快线)”后项目值正常回显。线路栏为空,表示当前项目未解析出唯一关联线路;工程树测试标段与独立项目关系不在本次测试记录写入中补造。任民真实页面,表单未保存
自动化通过:ProjectMasterSnapshotHelperTest 1 项、下属单位招标契约 Vitest 3 项;business 模块全量 341 项测试通过;全量 vue-tsc 通过,受影响文件 oxlint 通过。Maven 显式使用 -Dmaven.test.skip=false;结果不涵盖历史未覆盖的有效 Excel 导入页面路径

本轮只打开并选择项目,没有新增下属单位招标业务记录。线路快照仅在项目可由已关联标段解析到唯一线路时生成;独立项目没有关联标段或无法唯一解析时线路留空。

14. 2026-10-15 招投标监管端到端测试与文件审查流程董事长分支修复 ​

本轮以开发环境真实账户执行招投标监管全模块端到端测试,测试数据保留。覆盖范围与结论:

范围结论证据与范围
招标文件→首次挂网→答疑补遗→开标→公示→中标 主链通过(状态推进到「全部完成」)15 号线一期自动售检票标真实接口逐环节创建(附件为生成的 TXT 经 OSS 上传植入),招标文件页面台账回读显示挂网时间、开标 5 家、中标单位与金额、「全部完成」
立项管理流程(最复杂分支:副部长+董事长均选)通过真实账户链路 deputy(任民)→ dept_head(严浩)→ leader(谢伟)→ general_manager(张兴健)→ chairman(程波) 到达结束;15 号线一期与 27 号线两次全链复跑一致
文件审查流程(最复杂分支:副部长+领导小组会签+分管领导+董事长+用印)修复后通过修复前链路缺 chairman(缺陷见下);修复后链路 deputy → dept_head → countersign → leader → general_manager → chairman(程波)→ seal_manager(王小波),终态完成
评审管理流程(最复杂分支:副部长+董事长+用印)通过真实账户链路 deputy → dept_head → leader → general_manager → chairman → seal_manager,投标人明细 2 条、终态完成
下属单位招标台账通过(新增登记)真实接口创建(含招标代理机构、是否开投审查报备、评标方法字段),列表回读 1 条
文件审查流程缺陷修复已修复并回归chairman_gateway 两条分支连接修正(详见详细设计 6.5;修复前「选了董事长」跳过董事长审批、「未选董事长」连带跳过用印)

修复前后对比:修复前文件审查复跑的办理轨迹为 deputy → dept_head → countersign(2 人)→ leader → general_manager → seal_manager,董事长审批节点不可达;修正开发库 FLOW_SKIP 两条记录后,同构流程复跑轨迹包含 chairman,审批链完整。

本轮遗留与未覆盖项:招标文件的「废标重招/重新挂网」分支、答疑实质性变更分支、评审投标人明细批量导入的文件选择器路径(同前轮限制)、退回重办分支未在本轮全量覆盖;上述范围不纳入通过结论。