生产订单排程工具

入口：index.html。全部脚本、样例和样式已内嵌，最终用户不需要安装、命令行或项目。

先做一件有价值的事
1. 打开后看到的是明确标记的示例：4 单、620 件、21 道工序、7 台设备。时间轴和交期风险是真实计算结果。
2. 点“导入订单”，下载当前订单 CSV / 字段模板，将模板改为自己的订单。每行一道工序，机器及前置 ID 用 | 分隔。也能粘贴 CSV / JSON，或选择文件。
3. 点击“重新排程”；可选择交期优先、优先级优先、短工时优先。
4. 选中工序，精确改开始时间、设备、并行位置；或拖动条块。手动应用后会锁定，依赖、投产和资源冲突立即定位。重新排程保留锁定；解除锁定后可自动调整。
5. 导出“设备 / 班次派工明细 CSV”执行派工；每个有效工作时段一行，准备工时只计一次。另有订单交付 CSV。未排或有约束问题的项仍保留并标明，导出文件名包含“草稿”。

保留规则，迅速做下一批
在“设备与班次”编辑设备容量、允许班次、停机、工作日、停工日期和范围。保存规则会检查现有计划。点击“新一批 · 保留规则”清空订单和方案，保留规则，再导入下一批。更换日期范围时保存规则后重排。
“保存计划”生成 JSON，包含订单、工艺、设备、日历、锁定、排程和最多 6 个对照方案；由同一个导入入口恢复。浏览器暂存只作便利，重要计划请下载 JSON。撤销 / 重做覆盖 40 个整体编辑步骤。
“方案比较”保存当前结果后，再改交期或排程条件；逐单对照完成时间、逾期和约束问题。应用方案会恢复其整个输入及结果。

CSV 字段
order_id,product,quantity,release,due,priority,operation_id,operation,machines,setup_min,cycle_min,batch_size,predecessors,transfer_min
时间：2026-10-12T08:00；quantity 为订单整批整数；priority 为 1–5（5 最高）；setup_min 为准备分钟；cycle_min 为每批分钟；batch_size 为每批件数。工时 = 准备 + ceil(数量 / 每批数量) × 每批分钟，最终向上取整到分钟。
支持对应中文表头。拒绝重复、缺少或未知列，不悄悄丢额外字段；请先按模板整理。导入失败不覆盖现有数据。单批最多 300 单 / 1200 工序；文件最大 5 MB。

实际模型与范围
按本地工厂墙上时钟处理时间，不作时区或夏令时转换。整批工序完成再转运到后序，支持多前置；不拆订单为流转小批。跨班暂停，夹具保留，不重复收准备时间；停机则另找完整无停机的位置。设备容量为独立的并行位置。自动排程是确定性串行生成启发式，不保证全局最优。
没有人员排班、物料库存、良率、外协和实际完工反馈；这些未输入的现实条件不能由本工具判断。交期逾期与约束冲突分别报告。

验证条件
已验证最终 HTML 在 HTTP 本地预览下的实际浏览器导入、改计划、冲突、拖动、方案比较、备份恢复、规则复用和第二批任务。模型 / 控制器脚本另有逐分钟及导出回读验证。
本会话禁止 file:// 导航，因此没有尝试或绕过；双击本地文件的离线冷启动没有实际测试。代码无 CDN、远程字体、fetch、模块加载或网络请求，按单文件本地使用设计。浏览器下载请求与下载目录落盘分开：验收读取了页面展示的完整导出载荷，并回导该载荷；没有声称检查下载目录。

附带 fixtures 是可导入验收材料。planner-model.cjs、planner-regression.cjs、browser-output-regression.cjs 可移入项目继续回归；最终用户仅需 index.html。
代码为原创 MIT 许可，见 LICENSE.txt。无需第三方运行依赖。
