校招线下管理系统

用于校招线下面试现场的管理系统,覆盖候选人报名与签到、群面分组与评分、二面派单与叫号、数据归档等环节。本文档说明各页面的功能与具体操作步骤,供管理员、HR、面试官、审计员和候选人参考。

系统地址:https://bytedance.feishuapp.com/app/app_17fskgc0kmn

  • 候选人端匿名访问
  • 角色与作用域权限控制
  • 操作审计留痕

业务链路

  1. 01
    自助报名 / 现场签到扫码直达,自动发号
  2. 02
    群面分组自动分配面试官与面试间
  3. 03
    群面四维评分沟通 · 动机 · 抗压 · 销售
  4. 04
    二面派单与叫号四级匹配规则,大屏语音播报
  5. 05
    评价归档与台账同步转化漏斗回看,数据可导出
5类角色协同
9个业务页面
17张数据表
81个服务端接口
4级派单匹配规则
2s大屏静默刷新

业务流程

系统以「场次」为中心组织数据,候选人的状态变化按固定状态机流转,不符合条件的转换会被拦截并返回提示。

  1. 01

    自助预约报名

    候选人扫「预约报名码」匿名提交姓名、手机号与 3 个意向区域(1 个重点行政区 + 2 个非重点区),重复报名自动拦截。

  2. 02

    现场扫码签到

    到场扫「现场签到码」,有效预约即时分配递增签到号;无预约进入待复核队列,已签到幂等返回不重复发号。

  3. 03

    群面分组

    HR 按场次容量自动分组,同时分配面试官、配对面试间;支持手动调整成员、改派与删组。

  4. 04

    群面四维评分

    面试官逐人评沟通表达、求职动机、抗压韧性、销售潜力(各 1–5 分),给出高优通过 / 通过 / 淘汰结论。

  5. 05

    二面自动派单

    通过者进入待分配池,HR 触发派单:高优直派原面试官,再按重点区、非重点区、负载均衡四级规则匹配。

  6. 06

    叫号与大屏播报

    面试官叫号(最多重叫 3 次),候选人到场即开始面试;叫号大屏 2 秒刷新并语音播报房间号。

  7. 07

    评价归档复盘

    二面评级自动判定业务结论;场次归档后回看六节点转化漏斗,终面通过名单自动同步飞书台账。

角色与工作台

同一套数据按角色与城市 / 场次作用域呈现不同界面。切换标签查看各角色的可用功能。

候选人(匿名访问)

三个页面均为匿名访问,不暴露任何他人数据;页面只展示本人脱敏信息与所处环节。

面试前 · 预约报名

  • 扫预约报名码进入报名页,展示场次名称、城市、场地与时间
  • 填写姓名与 11 位手机号,选择 1 个重点 + 2 个非重点意向区域
  • 区域互异且须为本场启用行政区,校验不通过逐条提示原因
  • 同场次重复报名直接拦截,避免重复建档

到场当天 · 现场签到

  • 扫码选择进行中场次,提交姓名手机号完成签到
  • 成功发签到号、无预约转待复核、重复签到幂等返回
  • 本机当天留存信息,再次扫码免输入,跨天自动失效
  • 签到后可直接查看本人四节点进度时间线

全程 · 进度查询

  • 手机号标准化匹配,页面脱敏显示为 1**********
  • 四节点:面试预约 / 现场签到 / 群面评估 / 二面评估
  • 排队中提示前方人数与粗估等待时长,叫号后提示房间号
  • 隐藏评价结论,淘汰场景仅提示留意现场通知

操作指南

按时间线分为六个阶段,每个任务列出具体页面、按钮名称与操作顺序。其中「提示」为补充说明,「注意」为会导致操作被拦截的规则。

任务 1 · 成为首位管理员

  1. 用飞书账号打开应用,进入顶部导航「管理后台」(路由 /admin)。
  2. 系统内还没有任何启用管理员时,页面显示「成为管理员」引导卡,点击即写入一条全局 ADMIN 绑定。
  3. 之后在「人员与角色」Tab 添加 HR、面试官、审计员。

系统始终至少保留一个启用管理员:停用或删除最后一个管理员的操作会被拒绝(409),请先添加新管理员再操作。

任务 2 · 维护城市与行政区

  1. 进入「管理后台 → 基础数据 → 城市」,点新增并启用城市。
  2. 保存成功后系统自动带出该城市的标准市辖区(内置全国行政区划字典,仅市辖区),提示带出数量;未命中字典的城市带出数量为 0,可在行政区弹窗手动维护。
  3. 打开城市行的「行政区」弹窗,对本场候选人要选的区点星标设为重点行政区;星标与启停相互独立,停用的区自动退出报名选项。

候选人报名时必须选 1 个重点区 + 2 个非重点区。没有重点区或非重点区不足 2 个时,报名页会直接提示联系工作人员。

任务 3 · 创建面试场次

  1. 在「基础数据 → 场次」点新建,先选城市与日期,场次名按「YYYY年M月D日+城市名+场」自动生成,可手改。
  2. 填写场地与起止时间,并设置三个容量参数(见下表)。
  3. 保存。若日期区间命中该城市或全局「不可安排日期」,保存被拦截,表单日历中这些日期已置灰不可选。
参数取值范围 / 默认实际含义
群面容量 group_capacity1–20,默认 6每个群面组最多放几位候选人
群面时长5–240 分钟,默认 20进度查询页等待时长粗估的计算基数
同时在面上限 max_active_count1–6,默认 2每位面试官名下最多同时保留的活跃安排数 = 1 人在面 + 其余门外候场;创建后随时可改,调小只暂停新增派单,不影响已在队列的人

任务 4 · 配置房间并绑定面试官

  1. 在场次的「房间」区块新增房间,房间分两类:公共房(不绑面试官、不参与自动派单,仅作通用 / 备用场地)与面试间(必须绑定一位面试官)。
  2. 每位面试官在同一场次只能绑定一间面试间,重复绑定返回 409。
  3. 后续 HR 改派时只选面试官,房间由系统按绑定关系自动同步,无需手选房间。

房间的绑定、换绑、解绑只能在管理后台操作;面试官停用或删除最后一条角色绑定时,其名下房间会自动解绑,进行中的安排保留挂名不打断现场。

任务 5 · 添加人员与角色

  1. 进入「人员与角色」Tab,通过飞书通讯录选择器选人;也可以点识别入口,上传或 Ctrl+V 粘贴名单截图(OCR 提取姓名)、或上传 xlsx/csv 表格,逐人确认匹配后批量添加,单次最多 50 人。
  2. 新增成员一次保存同时写入角色绑定与面试官档案;角色为 ADMIN / HR / INTERVIEWER / AUDITOR,可带城市或场次作用域,留空表示全局。
  3. 面试官的「可面区域」为行政区多选:须至少有一个城市作用域绑定才能填写,且每个区必须属于其作用域城市的启用行政区。

HR 可以管理除管理员外的全部人员;管理员绑定只有 ADMIN 能增删改,HR 的操作弹窗里不会出现管理员选项。

任务 6 · 生成并张贴两张二维码

  1. 在场次行点「二维码」,弹窗并列两张码:预约报名码(指向 /register/:场次ID)与现场签到码(指向 /checkin?session=场次ID),用途不同不要贴混。
  2. 点「复制」保存链接或直接保存图片打印:报名码用于宣发 / 等候区,签到码张贴在签到处。
  3. 确认场次已切换为「进行中(open)」,非 open 状态候选人扫码也无法提交。

两张码固定指向正式发布应用地址,在预览 / 开发环境打开弹窗也是正式地址,可直接打印;测试扫码会写入正式环境数据。

页面一览

顶部导航按角色动态渲染:候选人只显示查询入口,HR 与管理员登录后默认进入排期日历。

/register/:sessionId

面试预约报名

匿名扫码自助报名,收集姓名、手机号与三个意向区域。

匿名
/checkin

现场签到

扫码签到发号、待复核分流,当天本机免重复输入。

匿名
/

面试进度查询

手机号查询本人四节点进度,脱敏展示与等待提示。

匿名
/calendar

排期日历

月历纵览场次与不可安排日期,归档场次展示转化漏斗。

HR / 管理员
/hr

HR 调度台

复核、分组、派单、改派、指标浮窗的现场主操作台。

HR / 管理员
/interviewer

面试官工作台

本人的群面组与二面安排,评分、叫号与评价修订。

面试官
/display

叫号大屏管理视图

按面试间分卡聚合,区块可折叠,含全屏投屏入口。

HR / 管理员
/board

独立投屏页

无导航 2 秒刷新,群面 / 二面分屏,二面分屏语音叫号。

HR / 管理员
/admin

管理后台

基础数据、人员角色、名单复核、表单预览、审计日志五 Tab。

按角色分权

关键能力说明

以下说明系统在多人同时调度、投屏设备后台运行、并发修改与事后追溯等场景下的处理方式。

四级派单规则

高优候选人直派原群面面试官,其次匹配重点意向区、非重点意向区,最后负载兜底;同档按最闲优先与确定性种子排序,预览与执行结果严格一致。

多人候场模型

每位面试官的在面上限 1–6 人可按场次配置:1 人在面加多人门外候场;排队中不占面试间,达到上限即暂停派单,腾出名额后自动恢复。

大屏抗节流刷新

投屏页 2 秒轮询,定时器跑在 Web Worker 中,设备息屏或切后台不被浏览器节流;请求超时 1 秒补拉、乱序旧帧丢弃、内容不变只刷新时钟不重绘。

语音叫号播报

仅二面投屏分屏播报,浏览器本地合成无需外接服务;只播新叫号不重复念,固定「美嘉」音色,三档语速可调,不支持语音的设备自动禁用不影响大屏。

群面分组与均分

按容量自动分组并配对面试间;派面试官时跳过已有活跃组者,按本场累计组次升序均分,先完成先释放的面试官不会反复接单。

多源名单导入

Excel 文件、粘贴文本、线上飞书电子表格 / 多维表格 / 知识库节点三种来源;按表头自动识别列,预览确认后才写库,非法行进 invalid 报告不阻断合法行。

截图 OCR 识别人名

人员管理支持上传或 Ctrl+V 粘贴名单截图,图片转 JSON 提取姓名后逐人匹配飞书通讯录;也支持表格文件批量识别,单次最多 50 人。

静默自动刷新

HR 调度台 15 秒、面试官工作台 8 秒静默拉取,页面隐藏时暂停、切回立即补刷;打开弹窗或正在填写的内容不会被刷新打断,失败保留上一帧并小字提示。

评价修订联动

群面评分修订为淘汰时,未开始的二面自动取消、在途安排打标不打断,完成后强制按淘汰归档;修订不回退状态、不释放房间,全部动作写入审计。

并发安全护栏

所有写操作带 data_version 乐观锁,后提交者收到版本冲突提示;排队写号在事务内对场次加行锁串行化,撞号转 409 可刷新重试,杜绝同号空号。

数据导出与台账

预约名单、未签到名单、评价数据三类 CSV 导出(BOM + RFC4180);场次归档后终面通过者自动同步飞书电子表格,重复归档不重复写人。

排期硬约束

全局与城市级不可安排日期双重标记,新建 / 改期 / 续期场次时区间命中即拦截;系统每 30 分钟自动结束到期场次,归档场次沉淀六节点转化漏斗。

权限、隐私与审计

系统采用角色层与作用域层两层鉴权,对手机号等个人信息做脱敏展示,并对状态变更、评分、改派等操作记录审计日志。

四角色 RBAC + 作用域

ADMIN / HR / INTERVIEWER / AUDITOR 角色绑定可带城市与场次作用域,取并集判定,任一全局绑定即全域;接口守卫在角色判定后追加场次越权校验,越权一律 403。

候选人隐私脱敏

进度查询页手机号显示为 1**********;大屏只展示完整姓名 + 手机号后四位;手机号仅在面试官主动查看简历时临时拼进 URL,不写库、不打印页面、不进审计正文。

全链路审计日志

状态变更、评分、改派、导出、删除均记录操作人、角色、前后摘要、结果、原因与请求 ID;评价修订原因在评价重新提交后清空,仅审计日志永久可追溯。

匿名端独立防线

报名、签到、进度查询走匿名接口与表级 RLS 策略,匿名调用任何管理接口返回 401;候选人页面隐藏评价结论,淘汰信息不以「未通过」字样暴露。

危险操作二次确认

候选人彻底删除前先返回九类关联计数预览,红色不可恢复提示 + 勾选确认才可提交;系统始终保底至少一个启用管理员,归零操作返回 409。

状态机与乐观锁

签到、群面、二面共十余种状态严格按状态机流转,非法转换抛 409;全部写请求携带 data_version,多人并发编辑同一记录时后提交者刷新重试即可。

主要能力角色矩阵(节选)
能力管理员HR面试官审计员匿名候选人
报名 / 签到 / 进度查询————允许
群面分组、二面派单与改派允许作用域内禁止禁止401
群面 / 二面评分与修订允许允许仅本人禁止401
城市 / 场次 / 房间写操作允许只读禁止只读401
人员与角色管理全部非管理员禁止只读401
审计日志查看允许不可见不可见只读401

技术架构

应用为妙搭托管的全栈应用,前后端使用 TypeScript;本介绍页为纯静态页面,不依赖外部运行资源。

前端

  • React 19 + TypeScript + Vite
  • Tailwind CSS v4 + Radix / shadcn 组件
  • TanStack Query 数据管理
  • react-hook-form + Zod 表单校验
  • ECharts 图表、dnd-kit 拖拽、xlsx 解析

后端与数据

  • NestJS 10 模块化服务端
  • Drizzle ORM + PostgreSQL,17 张业务表
  • 自定义 Guard + 装饰器声明式鉴权
  • 飞书 OpenAPI SDK 对接通讯录与表格
  • 自动化触发器定时关闭到期场次

工程与集成

  • 妙搭 full_stack 全栈应用托管
  • OCR 插件实现截图人名识别
  • 乐观锁 + 场次行锁并发控制
  • Web Worker 保障大屏定时器精度
  • 浏览器原生 SpeechSynthesis 语音播报

常见问题

候选人需要登录或安装应用吗?

不需要。报名、签到、进度查询三个页面均为匿名访问,候选人用手机扫码或点链接即可打开,数据写入正式环境,页面只展示本人的脱敏信息。

候选人到现场但系统里查不到预约怎么办?

签到会进入「待复核」队列,由现场 HR 或管理员人工核对,通过后补登签到号,或驳回并记录原因;系统不会在现场自动创建预约,避免脏数据流入后续分组。

二面候选人是怎么分配给面试官的?

按四级规则顺序匹配:高优候选人直派原群面面试官;否则优先匹配可面区域覆盖其重点意向区的面试官,再匹配非重点意向区,最后由负载最低的可用面试官兜底。每位面试官的活跃安排达到场次「同时在面上限」后不再收新单。

多位 HR 同时调度会冲突吗?

不会。所有记录带 data_version 乐观锁,过期版本提交返回 409;排队位次写入在事务内对场次加行锁串行化,撞号时提示「排队顺序已被他人更新,请刷新后重试」,不会产生同号或空号。

群面评分提交后还能修改吗?

可以,通过「申请修订」填写原因后解锁评分,保存后立即重新锁定。若修订为淘汰,系统会自动取消未开始的二面安排,对在途安排打标并在完成后强制按淘汰归档,所有联动均写入审计日志。

投屏页面切后台或息屏后还会刷新吗?

会。大屏定时器运行在 Web Worker 中,不受浏览器后台节流影响;切回前台立即补拉最新数据。语音播报在后台期间暂停且不会补念累积的叫号,避免回到前台后连续播报。

场次结束后数据还能回看吗?

场次归档后从日常选择器隐藏,但在排期日历中保留完整六节点转化漏斗(预约、签到、群面完成 / 通过、二面完成 / 通过)与通过率;评价数据还可按场次导出 CSV,终面通过名单会自动同步飞书台账。

审计员能修改数据吗?

不能。审计员登录后只有管理后台且全部 Tab 只读,没有任何写操作入口,直连写接口返回 403;其数据可见范围同样受城市 / 场次作用域限制。