Skip to content

Repository files navigation

Bid-Pro AI · 智能化标书制作系统

把「读招标文件 → 沉淀知识库 → 装配投标内容 → 排版 → 编页码索引 → 导出成稿」这条原本靠人肉 Word/Excel 的流水线,做成一个可离线运行的桌面软件。 目标:一份上百页的投标文件从几天压缩到几小时,页码索引与符合性检查不再靠人眼。

License Version Platform PRs

界面预览

主控面板:工作台 / 知识库 / 历史标书 / 草稿标书 四入口,归档与草稿计数实时展示

主控面板

Step 1 文件解析:五个子模块上传即真实解析;右侧项目核对预览可直接修改提取结果

Step 1 文件解析

为什么做这个

做标书的人都知道这四件事有多耗人:

  • 招标文件读不完:动辄几百页,格式五花八门(.doc / .wps / .xls、合并单元格、正文没有标题样式只有目录),人工摘录慢且必漏。
  • 历史标书用不上:最值钱的资产躺在网盘里,每次都从空白文档重写。
  • 页码索引靠手翻:正文改一段,目录页码、评分索引页码全得重编。
  • 符合性检查靠人眼:漏响应一条评分项就可能废标。

本项目把这四步全部工具化:解析 → 拆块入知识库 → 装配 → 排版测算页码 → 导出 docx + 检查报告

功能特性

一、标书生产工作台(五步递进,带路由门禁)

步骤 能力
1 文件解析 项目清单 / 技术规范书 / 物料报价清单 / 评分标准 / 招标文件框架,五个子模块上传即真实解析(Excel 走 SheetJS,Word 走 mammoth);表头模糊匹配兼容各异列名;合并单元格整区覆盖;评分表按标题语境自动分商务/技术双表
2 内容装配 三栏协作:左目录树(右键菜单:知识库匹配候选 / 引用知识库 / 上方插入新小节 / 重命名 / 删除)|中知识库检索|右成品区(技术·商务·价格三分类);拖拽排序、引用内容块、插入分页符,右列编辑不污染知识库
3 排版定义 字体字号 / 行距 / 页边距 / 页眉页脚 / 双页码体系样式控制器 + 技术·商务·价格三标签 WYSIWYG 实时预览
4 评分索引 A4 离屏排版引擎真实测算每个内容块的物理起始页码并回填索引表;AI / 启发式章节定位 + 比对报告 + 人工修正 + 豁免按钮
5 终稿输出 合稿 / 分册(技术标·商务标·价格标)导出为真实 .docx;含页码全文的符合性检查报告

顶部五步进度条常驻,未完成当前步进入下一步会二次确认拦截。另有「历史标书」(Step 5 归档,可再打开修改)与「草稿标书」(保存草稿继续编辑)两个入口。

二、知识库管理中心

  • 智能拆解:历史标书(含 .doc / .wps)按标题拆成内容块入库,四步显式向导(选择文件 → 分析文件 → 选择内容 → 完成),不再静默后台跑
  • 标题三通道识别:Word 标题样式 / 整段加粗编号段落 / 目录条目——真实文档常三者混用、甚至正文缺样式只有目录
  • 拆解粒度收敛:按大节(level ≤ 2)归档,子节标题与正文并入父节,避免碎块
  • 双库分类 + 在线编辑:技术/商务分类、拼音序、版本管理;TipTap 3 富文本编辑(加粗/斜体/下划线/删除线、二三级标题、有序无序列表、文字颜色、本地图片内联、撤销重做)
  • 内容块落盘:每块可导出为独立 .docx 再编辑
  • 专业编辑:可调起本机 Word/WPS 原生编辑器,窗口内嵌进本程序(SetParent 子窗内嵌,不是浮窗贴附),支持从目录树直接定位到对应节

三、AI 能力(可选,未配置自动降级 Mock)

能力 用途
响应值预填 技术规范书参数表的「投标人响应值」缺失时给建议值,浅黄标注待人工复核
评分章节定位 把评分项定位到成品文档章节,生成索引与比对报告
符合性检查 逐条核对评分项是否被响应,输出缺漏清单

职责边界:AI 只做语义理解,物理页码一律由前端排版引擎测算,不让模型编页码。 支持任意 OpenAI 兼容服务,Key / BaseURL / 模型都可在界面里改,并可「测试连接」「重新拉取模型列表」。

四、桌面版增强(Electron)

  • 图片原图直载:图片字节落盘 + 自定义协议加载,不走 base64 内联——数百 MB、上千张图的历史标书不失真也不崩
  • 本机 Office / WPS COM.doc / .wps.docx、全真预览(Word/Excel 1:1 渲染成 PDF)、原生编辑器内嵌
  • 在线表格编辑:Univer sheets 内核,直接在程序里改 Excel(插入/删除行列、合并拆分单元格、复制粘贴整表)

快速开始

环境要求

  • Node.js ≥ 18(建议 20 LTS)
  • Windows。桌面版的格式转换 / 全真预览 / 内嵌编辑需要本机装有 Word 或 WPS
  • 纯浏览器模式不依赖 Office,可跑通全部主流程(旧格式转换除外)

安装与运行

npm install
场景 命令
浏览器开发模式 npm run devhttp://localhost:5173
桌面版(连开发服务器,带热更新) npm run dev;另开终端 $env:VITE_DEV_SERVER_URL='http://localhost:5173'; npm run electron
桌面版(跑构建产物) npm run build 然后 npm run electron
生产构建 npm run builddist/
打包 Windows 安装包 npm run distrelease/(NSIS,可选安装目录,自动建桌面快捷方式)

dist/release/ 都已在 .gitignore 中,不入库。Electron 二进制默认走 npmmirror 国内镜像下载(见 package.jsonbuild.electronDownload),国内网络不用额外配代理。

AI 配置(可选)

二选一:

  1. 页面右上角「AI 配置」弹窗填入 API Key(可同时改 BaseURL 与模型;仅存本机 localStorage,推荐);
  2. 或复制 .env.example.env,填入 VITE_QWEN_API_KEY / VITE_QWEN_BASE_URL

本仓库不内置任何密钥。 未配置时所有 AI 能力自动降级为 Mock 模式,主流程不受影响。

旧格式 .doc / .wps 支持

浏览器端解析不了旧版二进制格式,两条路:

# 方式一:本地转换桥(推荐)——保持这个窗口开着,所有上传入口会自动调用
node scripts/doc-bridge.mjs      # 起 127.0.0.1:8787,调用本机 Word COM;用 WPS 就把 COM 名改成 KWPS.Application

# 方式二:批量转换整个资料目录(同名 .docx 生成在原文件旁,不改动原文件)
powershell -ExecutionPolicy Bypass -File scripts\convert-to-docx.ps1 -Root "C:\path\to\招标资料"

转换桥的临时文件必须落在纯 ASCII 路径(脚本内固定 C:\bidpro-tmp):非 ASCII 用户名机器的 os.tmpdir() 会落成 8.3 短路径(形如 XXX~1),Word COM 的 Documents.Open 会直接失败,表现为"转档失败"。

目录结构

├── electron/                   # 桌面端主进程
│   ├── main.cjs                # 主进程:窗口/IPC/知识库节落盘/Office COM/内嵌编辑/自定义图片协议
│   ├── preload.cjs             # 预加载桥(window.bidpro.*)
│   └── confirmPreload.cjs      # 确认弹窗专用预加载
├── scripts/
│   ├── doc-bridge.mjs          # 本地 .doc/.wps → .docx 转换桥(127.0.0.1:8787)
│   └── convert-to-docx.ps1     # 批量转换脚本(无 Word 自动尝试 WPS)
├── tools/
│   ├── editorhost.Program.cs   # 原生编辑器宿主源码
│   └── editorhost.exe          # 编译产物(打包时作为 extraResources 随包分发)
├── docs/database-design.md     # 后端持久化设计(尚未实现,路线图中)
└── src/
    ├── main.jsx / App.jsx          # 入口与路由
    ├── layouts/
    │   ├── MainLayout.jsx          # 全局壳层(含 AI 配置入口)
    │   └── WorkflowLayout.jsx      # 工作流壳层(进度条 + 路由级门禁)
    ├── components/
    │   ├── StepProgress.jsx        # 顶部常驻五步进度条(点击回退/前进拦截)
    │   ├── AISettingsModal.jsx     # AI 配置弹窗(Key/BaseURL/模型 + 连接测试)
    │   ├── TenderExtractWizard.jsx # 招标件抽节向导(四步显式流程)
    │   ├── ExcelEditorModal.jsx    # Univer 在线表格编辑
    │   ├── WpsEditorModal.jsx      # 本机 Word/WPS 原生编辑器内嵌
    │   └── NativePreviewButton.jsx # 全真预览(Office COM → PDF 1:1 渲染)
    ├── pages/
    │   ├── Dashboard.jsx           # 主控面板(工作台 / 知识库 / 历史标书 / 草稿标书)
    │   ├── FillPopup.jsx           # 独立填入浮窗
    │   ├── workflow/
    │   │   ├── Step1Parsing.jsx    # 1.1~1.5 多源文件解析(Tabs)
    │   │   ├── step1/              # 项目清单/技术规范/物料/评分/框架 五个面板
    │   │   ├── Step2Assembly.jsx   # 三栏装配:目录树 | 知识库 | 成品合成
    │   │   ├── Step3Layout.jsx     # 样式控制器 + 三分类实时预览
    │   │   ├── Step4Index.jsx      # 页码引擎测算 + AI/启发式章节定位 + 豁免
    │   │   └── Step5Output.jsx     # docx 导出 + 含页码全文符合性检查
    │   └── knowledge/
    │       └── KnowledgeCenter.jsx # 智能拆解 + 双库管理 + 在线编辑 + 归档向导
    ├── stores/                     # Zustand:工作流状态机 / 标书数据 / 知识库 / AI 配置(persist)
    ├── services/
    │   ├── listParser.js           # 项目清单/技术规范/物料/评分 真实解析(Word + Excel)
    │   ├── docxParser.js           # mammoth 解析 + 标题三通道识别 + 内容块拆分
    │   ├── tableExtractor.js       # 响应列检测与优先级规则
    │   ├── fillMatch.js            # 填入字段定义 / 日期样式 / 自动匹配算法
    │   ├── docxExporter.js         # docx 生成导出
    │   ├── pageEngine.js           # 页码计算引擎(A4 离屏排版测算)
    │   ├── docBridge.js            # 前端侧转换桥调用
    │   └── aiService.js            # AI 对接(预填/章节定位/符合性检查,未配置自动 Mock)
    ├── mocks/sampleData.js         # 演示数据(上传真实文件后即被替换)
    ├── utils/tree.js               # 扁平块 → 树结构(含坏数据兜底)
    └── styles/global.css

功能实现对照

需求条目 实现位置 状态
五步进度条 + 未完成确认禁止进入下一步 StepProgress + WorkflowLayout 路由门禁
1.1 项目清单勾选 → 预览卡片 → 锁定当前项目 step1/ProjectListPane ✅ 真实解析 Excel/Word
1.2 响应列优先级(复用 / 新增 / AI 预填浅黄标注) step1/TechSpecPane + tableExtractor + aiService ✅ 真实解析 + AI 预填
1.4 商务/技术双表 + 自动生成"索引页码"空列 step1/ScoringPane ✅ 真实解析(按标题语境分表)
1.5 目录拆分为内容块 + 树勾选 + 预览修订 step1/FrameworkPane ✅ 真实解析(标题三通道)
2 三栏装配:拖拽排序 / 引用此块 / 右列可编辑不污染知识库 / 分页符 Step2Assembly
3 标题映射 / 页眉页脚 / 双页码体系 + WYSIWYG 三标签预览 Step3Layout
4 AI 索引回填 + 比对报告 + 人工修正 + 豁免按钮 Step4Index + pageEngine ✅ 页码真实测算
5 合稿/分册 docx 导出 + 符合性检查报告 Step5Output + docxExporter ✅ 导出为真实 docx
知识库智能拆解 + 双容器分类 + 拼音序 + 版本管理 KnowledgeCenter
富文本编辑(加粗/标题/列表/颜色/图片) TipTap 3

演进记录

v0.2 ~ v0.6 各版本做了什么(点击展开)

v0.2 从脚手架到真实解析

  1. Step 1 真实文件解析:五个子模块上传即真实解析。表头模糊匹配兼容各异列名;评分表按"表格前最近标题语境"分离商务/技术;Excel 走 SheetJS,Word 走 mammoth。
  2. AI 能力对接:Key 在页面右上角配置(localStorage 持久化),三个 AI 能力即时切换真实调用,未配置自动 Mock 降级。职责边界:AI 只做语义理解,物理页码一律由前端排版引擎计算,杜绝模型幻觉。
  3. TipTap 富文本:编辑预览浮窗升级为 TipTap 3。
  4. 页码计算引擎:按 A4 页面几何 + Step 3 锁定样式在离屏容器真实排版,处理三级小节强制分页与超高块跨页,输出每个内容块的物理起始页码。

v0.3 真实招标文件适配(某批次物资框架招标项目实测校准)

  1. 项目清单(需求一览表 xlsx):适配"首行大标题(合并单元格)+ 次行表头"排版;字段映射按真实列名校准(分标编号/分标名称/包号/项目名称/采购内容);招标编号自动从分标编号前缀推导批次编号。实测 33 行全部正确识别。
  2. 物料清单(报价清单 xlsx):适配"前 4 行标题区 + 第 5 行表头"排版;物料名兼容"采购内容"列;备注列中的"单价最高限价:X 万元"自动提取为 priceCeiling。实测 84 行物料全部正确识别。
  3. 评分标准(招标文件 docx):评分细则分散在"项目/评审要素/评审细则"多列,按行拼接为完整细则;分值从【N分】文字模式提取(取最大值);自动过滤"见评标办法前附表""分值构成""无"等索引引用噪声行;按最近标题语境分离商务/技术双表。实测商务 20 条、技术 107 条。
  4. 技术规范书响应列:兼容"投标人保证值/应答值/偏离"等多种列名,不再误判为无响应列而重复新增。
  5. .doc / .wps 旧格式转换:浏览器端无法解析二进制旧格式,上传时自动拦截并给出指引;随包提供批量转换脚本(调用本机 Word,无 Word 自动尝试 WPS)。实测某技术规范书(.doc)转换后 11 张表格(含主要电气参数表)完整解析。

v0.4 真实导入问题修正(另一批次项目实测)

  1. 合并单元格整区覆盖:真实 xls 的合并区底层单元格常残留旧值(如分标编号列第 2-11 行残留公司名),改为用左上角值覆盖整个合并区,多包归属全部正确(实测异常行 0)。
  2. 技术规范书复选框:每张参数表带复选框,"确认技术规范"时仅保留勾选表格。
  3. 物料基准价/折扣率:报价清单新增 单价/合价/基准价/折扣率 列;项目清单新增 报价方式/预估金额/最高限价折扣率/交货期 字段并在核对卡片展示。
  4. 评分标准 Word + Excel 双兼容parseScoring 支持 xlsx/xls;商务/技术归类改为"文件名 > 工作表名 > 标题语境"优先级,商务评分表不再被并入技术标。
  5. 整本框架完整识别htmlToBlocks 标题三通道(Word 标题样式 / 整段加粗编号段落 / 目录"第X章"纯段落)+ 标题去重 + 运行栈父子判定,实测生成 122 个内容块,末章"投标文件格式"及其商务/技术偏差表子块全部入树。

v0.5 交互重构 + 本地转换桥

  1. 本地转换桥node scripts/doc-bridge.mjs 起 127.0.0.1:8787 服务,调用本机 Word COM 把 .doc/.wps.docx 返回;所有上传入口自动调用。
  2. Step 2 重构:去掉中间"匹配候选"列,改为左目录树右键菜单 + 右成品区技术/商务/价格三分类。
  3. Step 3/5 三分类联动:预览与分册导出均按技术/商务/价格过滤,新增价格标导出。
  4. 主界面四入口:新增"历史标书"与"草稿标书",工作流顶部加"保存草稿",localStorage 持久化。
  5. 知识库拆解粒度:收敛到大节(level ≤ 2),子节标题+正文并入父节,不再过碎;.doc 历史标书可拆解。
  6. 技术规范书右键表格编辑:插入/删除行列、合并/拆分单元格、复制/粘贴整表、整表删除。
  7. 物料联动:单价 ↔ 折扣率合价自动换算(折扣率 = 单价 / 基准价),"统一折扣率"批量重算。
  8. 项目核对预览可编辑:固定六字段(招标编号/项目名称/分标编号/分标名称/包号/包名)可直接改。

v0.6 桌面版(Electron)

  1. 图片原图直载:图片落盘 + 自定义协议加载,替代 base64 内联,大文档不失真不崩溃。
  2. 知识库内容块落盘:每块存为独立 docx(含标题层级与图片),可再编辑、可被原生编辑器打开。
  3. 本机 Office/WPS COM:全真预览(1:1 渲染 PDF)、原生编辑器窗口内嵌(SetParent 子窗内嵌 + 关硬件加速)、目录树定位到文档对应节。
  4. 在线表格编辑:接入 Univer sheets 内核。
  5. 显式抽节向导:招标件/知识库归档统一为四步向导,带进度与失败原因,不再静默后台。
  6. 标题拆解健壮性:修复"相邻同名标题(正式标题 + 居中题注行)合并时把 parentId 填成自己 → 整节点从树里消失"的问题,并在建树与载入两侧对历史坏数据自愈。

已知限制

  • 导出的 docx 为文本级,图片与复杂表格尚未完整写入
  • 页码按内容高度离屏测算,不是真实分页渲染,极端排版下可能与 Word 实际页码有偏差
  • 数据存 localStorage(Electron 下另落盘知识库节文件),未接后端docs/database-design.md 是待实施的设计稿
  • 跨页表格 / 合并单元格的复杂表格,mammoth 输出可能错乱(路线图里的 OCR + 表格重建待接入)

后续开发路线

  1. 解析增强:跨页/合并单元格表格接入服务端 OCR 与表格重建算法
  2. 后端持久化:按 docs/database-design.md 建库,Zustand 替换为 API 请求层
  3. 知识库检索:标题匹配升级为向量相似度召回(DashVector / Milvus)
  4. 导出增强:图片/表格完整写入 docx;分册导出按块类别过滤
  5. 分页精度:接入真实分页渲染(服务端 PDF)替代高度测算

参与贡献

  • 提 issue 请带上:文件格式(.docx/.xls/.doc)、出问题的步骤(Step 几 / 哪个面板)、期望结果与实际结果。请勿上传真实招标文件,能复现的最小脱敏样本即可。
  • 提交代码请保持现有风格:解析类改动尽量在 src/services/ 内完成,并说明依据的真实文档排版特征。
  • 涉及页码、父子层级、标题识别的改动请格外谨慎——这三处的启发式规则彼此耦合,改一条容易连带影响其他(详见 src/services/docxParser.jssrc/utils/tree.js 注释)。

许可证

Apache License 2.0

本仓库不内置任何 AI 服务密钥,克隆后需自行配置(见「AI 配置」)。

About

AI 驱动的标书制作系统:招标文件解析 → 知识库沉淀 → 内容装配 → 排版页码测算 → docx 导出与符合性检查(React + Electron 桌面版)

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages