麻辣烫兼职拼班工具——两个高峰夹一段死谷,把学生工的零散时段拼成不养闲人的周班表
你是资深前端工程师。请为我(麻辣烫店的排班主管)做一个单文件
HTML 拼班工具,无外部依赖、无构建步骤,保存为 .html 双击就用,
手机浏览器也能用,所有计算在本地完成。
工具名:兼职拼班表
一、人员库(可增删改,存 localStorage)
- 每个兼职一条记录:姓名、可用时段(按「星期 × 起止时间」多条
添加,如 周一 16:00—21:30)、每周工时上限(小时)、单班最短
时长(小时,默认 3)、备注(学生课表变动等)
- 支持标记「暂停排班」(请假月中不排,人不删)
二、需求表(按星期 × 时段块设置)
- 时段块由我定义,默认三块:午市 10:30—14:00、谷段
14:00—17:00、晚市 17:00—21:30
- 每块每天需要的人数分别设(工作日和周末通常不同)
- 谷段需求默认 1—2 人,可以按天改
三、一键拼班(核心按钮)
- 规则按顺序执行:
1. 只给「可用时段完全覆盖该块」的人排该块;跨块的可用时段
(如 16:00—21:30 横跨谷段后半和晚市)允许切成连续两块
排给同一人,中间不中断
2. 每人每周累计工时不超过其上限,到达上限后不再参与拼班
3. 单班时长不足该人「单班最短时长」的不排(跑一趟不值)
4. 同一人同一天两班之间间隔不足 1 小时的,合并成一个班或
只保其一
5. 在以上硬规则内,尽量把班均摊给每个人(避免一个人连排
六天另一个人只排一天),可用人数多于需求时优先给
「本周已排工时最少」的人
- 拼不出来的格子(需求有、无人可排)标红空着,并在表下方
列成清单:星期 / 时段块 / 缺几人
四、班表输出
- 周视图:行 = 人,列 = 星期,格子里写班次起止和所属时段块
- 每人自动汇总本周工时,与上限并列显示
- 两类提醒:黄色 = 本周工时低于其历史均值或我标记过「承诺
最低工时」的差额;红色 = 覆盖缺口
- 「导出文本」按钮:生成一段纯文本周班表(按人分行),复制后
直接粘进员工微信群
五、验收标准(做完自测这四条)
1. 录入一人「仅周二周四 17:00 后可用」,周工时上限 8,需求表
晚市每天 2 人——该人应只出现在周二周四晚市,且第四天
因超上限自动不再排
2. 需求午市每天 3 人但可用仅 2 人——对应格子标红,缺口清单
显示每天午市缺 1 人
3. 一人可用 16:00—21:30 且谷段需求 1 人、晚市需求 2 人——
应排成连续的谷段+晚市一个班,中间无缝
4. 清空 localStorage 后刷新,显示空态引导而不是报错
界面要求:单屏为主,手机上竖排;按钮和文字偏大——排班场景
常在店里跑动的间隙操作,不是坐在电脑前。
限制:
- 不引入任何 CDN、字体、图标库——完全离线可用
- 不做用户系统、不做云端同步——localStorage 是唯一存储
- 不预填任何「行业需求人数」——所有需求由我按本店实际录
- 不内置任何工时法规数字——上限、最短时长全部由我录入,
工具只执行我给的规则,不做合规判断
为什么这样写
麻辣烫的兼职拼班和便利店、奶茶店的排班不是一回事:需求集中在两个不到四小时的高峰块,中间一段死谷,而学生兼职的可用时间几乎从不和这两块整齐对齐——「四点以后」横跨谷段和晚市,「周末全天」又能覆盖三块。用通用的周排班表一格一格手填,等于每周做一次带约束的填字游戏。这个工具的核心就是把「可用时段完全覆盖才可排、跨块连续可切」这条规则交给代码执行,人只处理它排不出来的红格。
红格是整个工具最重要的输出,比排出来的班更重要:拼班失败的时段清单,就是主管接下来要去解决的招人 / 调时间 / 自己顶的问题清单。工具如果悄悄把覆盖不了的格子用「勉强可用的次优人选」填掉,主管反而看不见缺口——所以设计上宁可空着标红,也不悄悄降级。
「单班最短时长」作为每人一个的字段而不是全局值,是因为它实际上是双方谈好的条件:有的学生住得近 3 小时也愿意来,有人跑一趟要 40 分钟公交、排 4 小时以下就等于白干。这个参数留错,人就会慢慢不来了——兼职流失的原因很少是钱,多半是「跑一趟不值」。
工时均摊规则(优先给本周已排最少的人)写进拼班逻辑,是因为兼职群里最伤士气的不是班少,是「凭什么她连排六天我一班没有」。均摊不总是最优解(熟练度有差异),所以它排在硬规则之后、作为默认倾向而不是铁律,主管生成后仍可手动微调再导出。
「不内置任何工时法规数字」是刻意的:各地对兼职工时的规定不一样,工具替用户记法规既是越权也是隐患。上限由主管录入、工具只负责执行——合规判断留给人,计算留给代码。
变量
| 变量 | 说明 |
|---|---|
| 时段块 | 本店的班块划分,默认午市 / 谷段 / 晚市三块,外卖占比高的店可加「夜宵块」 |
| 单班最短时长 | 每人单独谈的底线【小时】,默认 3,通勤远的人建议 4 |
| 周工时上限 | 每人每周封顶【小时】,学生兼职按其本人意愿和当地规定填 |
| 承诺最低工时 | 谈好的保底班量,用于黄色提醒,没谈过就不填 |