feat: add party-size queueing and call modes

This commit is contained in:
wangxuming
2026-07-16 11:40:34 +08:00
parent 7f751bebae
commit 66951b4dc3
53 changed files with 3348 additions and 533 deletions

View File

@@ -1,7 +1,7 @@
# 景区排队叫号系统 UI/UX 设计范式
> 文档版本v1.0
> 日期2026-07-10
> 文档版本v1.1
> 日期2026-07-10人数与双叫号模式修订2026-07-15
> 状态:已确认开发基线;景区 VI、设备尺寸和现场阅读距离作为后续校准输入不阻塞开发
> 关联规划:[景区项目排队叫号系统:案例调研与完整规划](./scenic-queue-system-plan.md)
@@ -27,11 +27,11 @@
已冻结的产品与实现约束:
-人一号,不建立同行组或 `party_size`;手机号必填,姓氏/称谓选填,称谓默认“游客”,不采集法定性别。
-个号码保存创建后不可修改的 `party_size`;手机号和同行人数必填,姓氏/称谓选填,称谓默认“游客”,不采集法定性别。
- 同一手机号可有多个活动号码;取号时先显示脱敏重复提示,员工确认后可继续并记录审计。
- 每项目配置固定 `N`,员工只执行“叫下一批”;系统严格 FIFO 呼叫队首连续 `N` 个有效等待号码,不足时呼叫全部剩余号码
- 每项目配置按号码、按人数或两种叫号方式;号码模式取队首 N 张,人数模式取不超过目标的最长连续队首,不拆号、不跳号
- 过号后原号失效;仍需排队时创建新号进入队尾,并保留新旧号码关联。
- 预计等待时间首期同时提供固定批次和连续放行模板,每个项目二选一
- 预计等待时间按本号前方实际人数与项目单人间隔计算,不包含本号自身人数
- 中心服务是唯一写入权威,断网时停止数字化取号/叫号并切换人工预案。
- 员工和管理员首期使用内置账号密码;前端 React后端 Go + GORM数据库 PostgreSQL。
- 首期硬件只提供统一接口、成功/失败模拟器和测试日志,不接真实设备。
@@ -68,8 +68,8 @@
本文约束以下界面:
- 员工 H5员工账号登录后只保留“叫号、取号”。叫号页展示当前批次、队首预览和固定主操作;每次叫下一批自动结束上一批;取号页核对等待队列;
- 游客 H5[MVP] 个人排队状态、预计等待区间、提醒、过号和服务异常;[P1] 游客自助取号;
- 员工 H5员工账号登录后只保留“叫号、取号”。叫号页按项目显示号码栏、人数栏或两栏,并在每个队列号码旁显示人数;每次叫自动结束上一批;
- 游客 H5[MVP] 游客自助取号、个人排队状态、本号人数、前方人数、预计等待、提醒和服务异常;
- 大屏 Web实体公示屏展示当前叫号、最近批次、队列概况、服务公告、数据新鲜度和播报状态
- 管理 Web管理员账号登录后的运营概览、项目与预计时间设置及大屏中心。大屏中心呈现全项目公开运行状态并支持全屏监控设备、账号权限、日志和审计按后续范围扩展。
@@ -103,13 +103,13 @@
|---|---|---|
| Visitor Status Ticket | Qmatic Mobile Ticket 和 Waitwhile 状态页都把当前状态、票号、预计等待时间、队列进度和下一步作为个人页主层级 | 游客端采用单一主状态卡;叫到后由“等待信息”切换为“入口行动” |
| Operational Call Card | Qmatic Serve 以当前服务对象/下一位和主叫号操作为中心Waitwhile 采用状态列 + 详情抽屉 + 固定操作 | 员工 H5 把叫号、取号和核验拆为三个场景;叫号页使用当前批次、下批候选和固定底部主操作,不做缩小版后台表格 |
| Batch Action Bar | Waitwhile 公开支持多选后批量 Serve、Alert、No Show 等 | 借鉴批量汇总,但本项目由服务端按固定 `N` 选择队首连续号码,并增加原子批次和模拟硬件结果语义 |
| Batch Action Bar | Waitwhile 公开支持多选后批量 Serve、Alert、No Show 等 | 借鉴批量汇总,但本项目由服务端按号码数或人数目标选择队首连续前缀,并增加原子批次和模拟硬件结果语义 |
| Call Takeover | Qmatic/Waitwhile 公示屏均让最新叫号成为主区域,并保留最近历史 | 大屏最新批次持续占主视觉,最近 35 批作为防漏读历史,不用瞬时 toast |
| Live Ops Strip | Waitwhile Analytics 与 Qmatic Operations/BI 区分实时运营和历史分析 | 管理端实时页只放可驱动当下动作的队列/设备异常,历史趋势另页分析 |
| Offline Trust Banner | Wavetec 的低连接指导强调显式离线、待同步/失败和设备健康 | 中心服务是唯一写入权威;所有端显示数据新鲜度,离线时停写且禁止伪实时 |
| Hardware Receipt Tray | Qmatic/Wavetec 可核验多硬件闭环,但未公开完整局部失败 UI | 本项目自定义“业务结果 + 各通道 ACK + 单通道重试”模式 |
公开资料边界同样重要Waitwhile 可核验批量操作,但不能证明固定 `N` 队首选号、事务原子性、并发冲突或硬件 ACKQmatic 可核验单票叫号、转移、过号和多硬件但未公开多人原子批量叫号Wavetec 可核验硬件/低连接能力,未公开本项目所需的完整部分失败界面。因此这些能力必须按本文自有模式设计和 POC不能用厂商营销图替代验收。
公开资料边界同样重要Waitwhile 可核验批量操作,但不能证明本项目的连续 FIFO 人数选择、事务原子性、并发冲突或硬件 ACKQmatic 可核验单票叫号、转移、过号和多硬件但未公开多人原子批量叫号Wavetec 可核验硬件/低连接能力,未公开本项目所需的完整部分失败界面。因此这些能力必须按本文自有模式设计和 POC不能用厂商营销图替代验收。
设计类本机 skill 的采用边界:
@@ -493,8 +493,8 @@ MVP 只设计以上四种状态。[P1] 确有现场需求时,再拆分“仅
### 12.1 核心原则
- `CallBatch` 是一个原子业务对象,不是前端循环调用单号按钮;
- 一人一号,每张有效等待票计为一人;同时显示项目固定 `N` 与本批实际号码数量
- MVP 严格 FIFO、不跳号、不手选;队列不足 `N` 时叫出全部剩余号码
- 每张有效等待票同时显示号码与 `party_size`;批次汇总分别显示实际号码数和实际人数
- MVP 严格 FIFO、不跳号、不手选、不拆号;人数模式允许因下一个号码放不下而低于目标值
- 批次内所有票号同时出现禁止逐号揭示、stagger、翻牌或滚动数字
- UI 不使用乐观成功;按钮立即响应,但只能在服务端事务成功后写“已生效”。
@@ -503,10 +503,10 @@ MVP 只设计以上四种状态。[P1] 确有现场需求时,再拆分“仅
稳定结构:
1. 顶部:项目状态、资源/入口、数据更新时间;
2. 中部:下一批候选号码,显示票号、等待时长和特殊标记;
3. 批量条:项目固定 `N`、本批实际号码数和队列剩余数,但不只靠颜色
2. 中部:下一批候选号码,显示票号、同行人数、等待时长和特殊标记;
3. 操作区:按项目显示号码栏、人数栏或两栏,各栏展示默认值和防误触上限
4. 批次预览:系统自动选出的队首连续号码;员工不能在日常流程修改成员;
5. 底部固定操作区唯一主按钮“叫下一批5 个号码)”
5. 提交结果明确显示“X 个号码 · Y 人”,不把目标值冒充实际人数
6. 提交后:业务结果和各设备回执在原位置持续展示。
### 12.3 确认策略
@@ -519,7 +519,7 @@ MVP 只设计以上四种状态。[P1] 确有现场需求时,再拆分“仅
风险批次 [P1]
- 临时修改 `N`越过 FIFO、手工选人、撤回/重排时弹确认;
- 越过 FIFO、手工选人、撤回/重排时弹确认;正常输入由各模式的防误触上限保护;
- 弹层必须说明影响对象、人数、原因字段和审计后果;
- 危险确认按钮使用具体动词,如“确认跳过并叫号”,不用“确定”。
@@ -543,19 +543,19 @@ MVP 结果卡只显示“第 18 批已生效5 个号码”和模拟适配器
游客状态页按以下顺序组织:
1. **项目与当前状态**:明确项目名称,以及排队中、请留意、已叫到、已过号等;
2. **我的号码与下一步**:票号、入口/通道、行动指令;
2. **我的号码与下一步**:票号、本号人数、入口/通道、行动指令;
3. **预计时间**:区间、可信度、更新时间;
4. **队列进展**:前方约多少个号码、当前叫号;
4. **队列进展**:前方号码数、前方实际人数、当前叫号;
5. **帮助与规则**:迟到、取消、暂停、隐私和联系方式。
页面不先展示全局统计,不把“景区介绍”放在个人状态之前。
### 13.2 游客自助取号 [P1]
### 13.2 游客自助取号 [MVP]
MVP 由员工代取号游客端先交付私密状态页。P1 启用自助取号时,表单使用单列、渐进披露:
游客自助取号表单使用单列、渐进披露,并与员工取号共用服务端规则
- 先选项目/资源,再填写一人一号所需字段;
- 手机号必填;姓氏和称谓选填,称谓未选择时默认“游客”;不展示或采集法定性别字段
- 先选项目/资源,再填写同行人数与联系人字段;
- 手机号和同行人数必填;人数预填项目最小值并受项目范围约束;姓氏和称谓选填,不采集法定性别;
- 每个字段旁说明用途,隐私说明在提交前可见;
- 不用 placeholder 代替 label
- 表单错误在提交后集中摘要,并在字段旁给出相同的具体修正方式;
@@ -570,7 +570,7 @@ MVP 由员工代取号游客端先交付私密状态页。P1 启用自助取
- 大号票号“A123”
- 主预测:“预计 2535 分钟叫到”;
- 可信度/异常:“参考性中 · 14:32 更新”;
- 队列位置:“前方 8 个号码”;
- 队列位置:“前方 8 个号码 · 共 21 人”;
- 下一步:“可暂时离开,建议在叫号前 X 分钟返回”X 为项目配置,不在界面写死)。
预计等待时间:
@@ -618,7 +618,7 @@ MVP 由员工代取号游客端先交付私密状态页。P1 启用自助取
- 支持紧凑列表,但每行仍保证 48px 触控目标;
- 票号、等待时长、特殊标记位置稳定;
- 当前操作对象用边框、背景、勾选和文字同时标识;
- 日常叫号由系统按当前项目固定 `N` 自动选择队首连续号码,员工只核对“本批几个号码”;手工多选仅在后续授权异常处理中出现;
- 日常叫号由系统按员工选择的号码/人数模式自动选择队首连续前缀;员工同时核对每号人数及本批实际号码数/人数,手工多选仅在后续授权异常处理中出现;
- 列表发生实时变化时,保留员工当前选择并显示冲突条,不静默重排;
- 高密度不等于小字,正文以 1718px 为现场起点。
@@ -765,7 +765,7 @@ MVP 由员工代取号游客端先交付私密状态页。P1 启用自助取
### 16.3 项目与预计时间设置
每个项目使用一张简单表单:项目名称、票号前缀、营业状态、固定批量人数 `N`、宽限时间,以及“连续放行/固定批次”二选一的预计时间模板和对应参数。两种模板都属于首期能力
每个项目使用一张简单表单:项目名称、票号前缀、营业状态、单号最少/最多人数、支持的叫号方式、号码/人数两种方式各自的默认值和防误触上限、宽限时间,以及单人预计间隔时间。单次上限只防误输入,不作为项目总容量上限
- 保存后直接生效,并记录修改人、时间和前后值;
- 页面显示上一版值,可由有权限的管理员恢复;
@@ -1081,7 +1081,7 @@ flowchart LR
- 同一手机号可以关联多个活动号码;重复提示只用于防误操作,员工确认后继续并留审计;
- 大屏、广播只使用每日可读票号;该票号不能单独查询个人状态;
- 姓氏/称谓不公开,首期不提供项目级公开例外;
- 未成年人仍使用独立的一人一号排队单,可复用监护人手机号;不在大屏建立儿童身份特征
- 同行人数可包含未成年人,不额外采集组内未成年人的手机号或身份特征;大屏仍只展示票号和聚合人数
### 22.3 建议术语
@@ -1141,8 +1141,9 @@ flowchart LR
### 24.3 批量叫号
- [ ] 主按钮显示本批实际号码数量,批次预览同时显示项目固定 `N`
- [ ] 批次预览显示队首连续成员、固定 `N` 和规则来源
- [ ] 操作区只显示项目支持的模式;`BOTH` 项目必须同时显示号码栏与人数栏
- [ ] 批次预览逐号显示 `party_size`,结果同时显示实际号码数和实际人数
- [ ] 人数模式不超过目标、不拆号、不跳号,队首单号超过目标时给出明确错误;
- [ ] 并发冲突不静默覆盖;
- [ ] 所有批次成员原子出现,无逐号动效;
- [ ] MVP 业务成功与模拟适配器成功/失败相互独立;