施工进度计划工作台(Construction Schedule Workspace)
TL;DR
- 是什么:零依赖单文件 HTML 工作台(
assets/施工进度计划工作台.html),内置 CPM 引擎、斑马风格横道图、双代号时标网络图、智能分析、图片/PDF 导出。 - 何时用:用户要编制/调整施工进度计划、算关键线路、按招标文件调总工期、生成横道图或网络图并导出。
- 关键约束:网络图线型规范(红=关键、黑=一般、绿=浮时、灰=关系线)交付时不可改;节点唯一起点、唯一终点;日期口径「完成日 = 开始日 + 工期 − 1」。
标准交付流程(核心,每次任务按此执行)
Step 1 收集需求
输入:用户的话。输出:任务清单草稿(每项:名称、工期天数、前置任务、资源配置)。
- 缺开工日期 → 默认今天;缺工期 → 按工程类型经验值补;缺依赖 → 按施工逻辑推断。
- 用户只给总工期(如"450 天")→ 按施工顺序把总工期分解到关键线路各任务上。
Step 2 生成任务数据
按下方「数据格式」生成完整任务数组,并用「CPM 计算口径」自检:关键线路工期之和 = 用户要求的总工期。
> [检查点 1] 向用户展示任务清单表(标识号/名称/工期/前置/起止日期)+ 关键线路 + 总工期,确认后再进入 Step 3。
Step 3 注入工作台(两种方法,推荐 A)
方法 A(推荐,用户打开即见成品):编辑 assets/施工进度计划工作台.html,搜索 科创五路聚源路快速化一期工程 定位 defaultState() 函数,替换三处:
1. 项目名(makeProject 第一个参数);
2. 开始日期(第二个参数,格式 YYYY-MM-DD);
3. kcxcTasks() 调用 → 内联任务数组字面量(内部格式,见下),并把 p.checkDate 同步为新项目日期。
注意:只改 defaultState() 内的数据,不触碰工作台其他任何代码;文件必须保存为 UTF-8 编码(用 Write 工具写天然是 UTF-8,避免用 Windows 记事本)。
方法 B(备选):生成 项目名.json(导入格式,见下),让用户在工作台内点「导入」加载。
Step 4 验证
- 打开注入后的 HTML(有 puppeteer 则用 headless Chrome 实测,否则指导用户浏览器打开)确认:任务全部显示、关键线路红色、总工期正确、横道图/网络图无重叠。
- 若页面仍显示示例项目 → 用户浏览器 localStorage 有旧数据,让用户点「清空数据」重置。
- 按「CPM 计算口径」复核:总工期 = max(EF) = 关键线路工期之和;竣工日期 = 开工日 + 总工期 − 1。
Step 5 交付
- 把工作台 HTML 展示给用户(present_files 打开预览)。
- 按需导出:用户要图片/PDF 时,指导其用工作台右上角「导出」(默认建议:PNG、A3 横向、2x 高清,完整图含图注)。
CPM 计算口径(自检用,与工作台引擎一致)
- ES(最早开始):无前置任务 = 0;有前置 = max(各前置 EF)
- EF(最早完成)= ES + 工期;总工期 = max(所有 EF)
- LF(最晚完成):终点任务 = 总工期;其余 = min(各后继 LS);LS = LF − 工期
- 总浮时 TF = LF − EF;TF = 0 的任务构成关键线路
- 日期换算:完成日期 = 开始日期 + 工期 − 1(含首尾);关键线路上第 k 天 = 开工日 + k − 1
数据格式
内部格式(注入 HTML 用,defaultState() 内任务数组):
{"id":"1","name":"施工准备","dur":30,"preds":[],"progress":0,"workers":20,"material":"-","machine":"-"}
导入格式(JSON 文件导入用,assets/科创新城示例-480天进度计划.json 是范本):
{"projects":[{"id":"p1","name":"项目名称","startDate":"2025-09-01","tasks":[
{"id":"1","name":"施工准备","dur":30,"preds":[],"progress":100,"res":{"w":20,"m":"推土机2台","mat":"-"}}
]}]}
字段:id 字符串、dur 工期(天)、preds 前置任务 id 数组(FS 关系)、progress 完成百分比(网络图前锋线用)、res/workers 等资源配置。
网络图规范(交付时不可更改)
| 元素 | 规范 |
|---|---|
| 关键线路 | 红色粗实线箭头 |
| 一般工作 | 黑色实线箭头 |
| 自由时差 | 绿色波浪线,直接从一般工作黑实线末端接出、中间不绘节点圆圈;同泳道绿箭头指入紧后工作起点,跨泳道先绿波浪后黑色实线竖连到紧后工作;无紧后工作的非主导前置关系由波浪线末端灰色虚箭头连结束节点表达,不单独画虚箭线 |
| 节点 | 从 1(起点)到 N(终点)连续编号,唯一起点、唯一终点;终点任务直接汇入终节点 |
| 箭头与节点 | 箭头尖端停在节点编号圆圈边缘外,不得伸入圆圈;节点圆圈不得遮盖箭头 |
| 标注 | 工作名称在箭线上方、持续时间在箭线下方 |
双代号网络图绘图规则(通用规范,后续项目复用)
| # | 规则 | 工作台实现状态 |
|---|---|---|
| 1 | 逻辑关系正确:必须正确表达各项工作之间的逻辑关系 | ✅ 前置任务 preds(FS 关系)+ CPM 引擎自动重算 |
| 2 | 禁止循环回路:不能出现从某节点出发又回到原节点的回路 | ✅ 「智能分析」检测循环依赖并列出问题任务 |
| 3 | 箭头方向明确:严禁双向箭头或无箭头连线 | ✅ 所有连线渲染时强制 marker-end 箭头,方向恒为箭尾→箭头节点 |
| 4 | 节点完整:每条箭线必须有开始节点和结束节点 | ✅ 每条任务条/关系线均连到起、止节点;唯一起点(1)、唯一终点(N) |
| 5 | 母线法应用:节点有多条外向/内向箭线时,用母线法简化图形 | ⚠️ 约定项:当前用泳道布局 + 关系线错开近似表达,未单独实现母线法 |
| 6 | 避免交叉:尽量避免箭线交叉,必要时采用过桥法或指向法 | ⚠️ 约定项:泳道布局减少交叉、虚箭线错开;过桥法/指向法未实现 |
> 规则 1~4 由工作台引擎与渲染层自动保证;规则 5~6 为绘图约定,复用/交付项目时按此检查,必要时拖拽移动工作位置人工微调布局。
工作台功能速查
| 功能 | 关键点 |
|---|---|
| 横道图 | 三层时间刻度(工期天数→年.月→每月日)、逻辑关系连线(主导实线/非主导虚线)、改工期自动重算 |
| 网络图 | 泳道布局(关键链主线、分支泳道、悬空泳道)、缩放 30%~1000%、拖拽框选、拖拽工作条与虚箭线移动位置(双击复位/重置布局)、横向撑长/压缩、局部日历压缩(设置→时间刻度)、前锋线(检查日期竖线+进行中任务实际进度折线)、拉直前锋线 |
| 任务表格 | 任务增删改、工期/前置/进度编辑;上下移动(拖拽行首「⋮⋮」或点↑↓),移动后标识号自动重排并同步前置引用,横道图/网络图同步 |
| 智能分析 | 关键线路/总工期/竣工日期、循环依赖与悬空前置检测、资源配置、导出 .xlsx/.docx |
| AI 助手 | 解答工作台使用常见问题(关键线路、总工期、导出、前锋线、移动位置、横向图幅、任务编辑、导入导出等) |
| 导出 | JPG/PNG/PDF、A4/A3 横向、2x 高清、底部自动附图注(项目名/总工期/起止日期/图例) |
边界条件与异常处理
- 循环依赖 / 悬空前置 / 零工期:生成数据时即排查;工作台「智能分析」会检测,发现后列出问题任务 id 提示用户修正。
- 中文乱码:HTML/JSON 必须 UTF-8 保存;用 Write 工具写入,不要用 Windows 记事本另存。
- 注入后仍显示示例项目:浏览器 localStorage 有旧数据,点「清空数据」重置后刷新。
- 导入 JSON 失败:校验 JSON 语法、
startDate格式YYYY-MM-DD、preds中 id 必须存在。 - 总工期对不上:按「完成日 = 开始日 + 工期 − 1」口径复核,勿用「+工期」口径(会多算一天)。
- 用户要调整总工期:[检查点 2] 先列出关键线路上要改的任务与新旧工期对比,用户确认后再改;只改关键线路任务(非关键任务浮时会吸收变化)。
扩展修改指引(需改工作台功能时)
- 网络图布局常量(约行 937):
ppd=20(像素/天)、laneH=52(泳道间距)、leftPad=16 - 网络图箭头大小(约行 984):
netArrow=Math.max(7,11/netZoom)(11px 屏幕) - 横道图密度:
ppd=autoPpd(totalDays)自适应,无需手调 - 时间刻度分档:总工期 ≤60→步长10、≤200→20、≤500→50、更大→100
- SVG 箭头 marker 必须
markerUnits="userSpaceOnUse",否则箭头尺寸随线宽放大导致重叠 - 日期口径「完成日 = 开始日 + 工期 − 1」分散在计算逻辑中,改动时全局一致
Resources
assets/
assets/施工进度计划工作台.html— 工作台本体(约 130KB 单文件,无外部依赖,数据存 localStorage)assets/科创新城示例-480天进度计划.json— 示例项目(24 项任务、总工期 480 天、关键线路 12 项),导入格式范本
版本历史
- 1.9.0(2026-08-26):双代号网络图自由时差与节点绘制优化——自由时差绿色波浪线直接从一般工作黑实线末端接出、中间不再绘制节点圆圈(同泳道绿箭头指入紧后工作起点;跨泳道先绿波浪后黑色实线竖连到紧后工作;无紧后工作的非主导前置关系由波浪线末端灰色虚线连结束节点表达);波浪线末端垂直箭头线改为一般工作黑实线;起点节点 1 对齐到第一项工作所在泳道;路基土石方(任务 11)逻辑并入节点 6(工期 35→60 天、加入管网土方回填前置、末端事件节点指定为节点 6),使末端箭头指向节点 6。
- 1.8.0(2026-08-26):任务表格支持上下移动(拖拽行首「⋮⋮」把手或点↑↓按钮),移动后标识号按新顺序自动重排(1..N)并同步更新前置任务引用与虚箭线偏移,横道图/网络图/分析视图同步刷新。
- 1.7.0(2026-08-22):新增「双代号网络图绘图规则」通用规范(6 条:逻辑关系正确 / 禁止循环回路 / 箭头方向明确 / 节点完整 / 母线法应用 / 避免交叉),逐条标注工作台实现状态,供后续项目复用与交付验收对照。
- 1.6.0(2026-08-21):AI 计划助手从右下角抽屉迁移为「智能分析」后的独立页签,功能改为解答工作台使用中的常见问题(FAQ),移除模板生成计划与文件上传逻辑。
- 1.5.1(2026-08-21):按双代号网络图绘图规则修正——删除独立虚箭线,非主导前置关系改由自由时差波浪线末端灰色虚箭头表达(消除「虚工作+自由时差」重复导致的逻辑混乱)。
- 1.5.0(2026-08-20):双代号时标网络图新增「横向撑长/横向压缩」按钮(调整每天像素,使横纵比与纸张协调)与「设置→时间刻度」局部日历压缩(插入压缩时间段+压缩比例)。
- 1.4.0(2026-08-20):示例项目逻辑优化(24 项任务、总工期 480 天):①地下管网与路基「先埋管后做路基」(拆路基土石方为先期挖方+管沟回填后填筑,管道前置改为施工准备)②施工便道→桥梁桩基 FS 关系 ③跨铁路手续报批独立为前置工作 ④关键线路末端增加工期缓冲 ⑤照明预埋与桥面系穿插;虚箭线改为「主体水平走完 + 拐弯垂直箭头」形态。
- 1.3.1(2026-08-20):双代号时标网络图中虚箭线(非主导前置关系线)也支持拖拽移动位置,双击虚箭线复位;虚箭线箭头尖始终指向目标节点圆周(移动后不脱离节点圆圈);自由时差绿波浪线末端加箭头指向对应节点圆圈。
- 1.3.0(2026-08-20):双代号时标网络图支持拖拽移动工作位置(手动泳道 netLane),双击任务条复位、工具栏「重置布局」一键恢复自动泳道;箭头与节点编号圆圈几何分离(箭头尖端停在圆圈边缘外,圆圈不遮盖箭头)。
- 1.2.0(2026-08-20):前锋线功能从横道图迁移到双代号时标网络图,新增「拉直前锋线」按钮(按检查日期将进行中任务进度对齐到计划进度)。
- 1.1.0(2026-08-20):新增标准交付流程(数据注入工作台的方法 A/B)、CPM 计算口径、用户检查点、边界条件与异常处理、扩展修改指引;补充英文 description 与 test-prompts.json。工作台本体功能未变。
- 1.0.0(2026-08-19):首个发布版本,工作台本体 + 示例项目数据。