迎宾巡逻安防机器人机身屏交互系统详细设计开发文档(一期)

文档用途:作为机器人机身屏前端页面设计、交互流程、Mock 开发、后续接口联调和验收测试的统一开发基线。

文档原则:一期先完成屏幕端前端页面与交互流程,使用 Mock 数据,后续再逐步对接小主机后端、语音服务、身份识别、导航点位、访客登记等接口。

技术基线:Vue3 + Vite运行环境:Ubuntu + Chromium Kiosk屏幕基准:1024×768 横屏 8 寸交互方式:10 点触摸 + 语音指令

目录

1. 项目定位与建设目标

本系统为迎宾巡逻安防机器人机身屏交互系统,运行在机器人本体小主机盒子中,通过 8 寸触摸屏面向访客、现场用户、前台/物业/工作人员提供迎宾展示、访客登记、预约核验、路线引导、通知公告、呼叫工作人员等交互能力。

屏幕端不是运维后台,不承担素材上传、问答库维护、播放方案配置、日志查询、OTA 升级、账号管理、白名单批量维护等后台管理能力。

1.1 一期建设目标

展示可用
无人交互时播放广告素材、通知公告或欢迎页,形成机器人对外展示窗口。
交互清晰
通过大按钮、大字体和简洁流程完成访客登记、路线引导、通知查看等操作。
接口可替换
一期先用 Mock 数据完成前端,后续接口成熟后平滑替换为真实数据。

1.2 一期设计基准

2. 运行环境与技术选型

2.1 推荐技术路线

项目建议方案说明
产品形态HTML5 机器人机身屏应用对外可理解为 H5 屏幕端应用,运行于浏览器全屏环境。
开发框架Vue3 + Vite适合组件化开发、路由管理、状态管理和后续接口联调。
状态管理Pinia管理机器人状态、播放状态、语音指令、全局弹窗、用户输入等。
路由Vue Router管理待机页、主菜单、访客登记、路线引导、通知公告等页面。
运行方式Chromium KioskUbuntu 开机后自动全屏打开本地 screen 地址。
部署方式Nginx 托管静态文件Vue3 打包后生成 dist 静态文件,部署到小主机本地目录。

2.2 Vue3 与 HTML5 的关系

Vue3 并不是和 HTML5 二选一。Vue3 最终打包产物仍是 HTML、CSS、JavaScript 静态文件。推荐表述为:本系统采用 Vue3 开发 HTML5 机身屏应用。

2.3 更新部署方式

开发阶段: 编写 Vue3 源码 → npm run build → 生成 dist 静态文件 部署阶段: 上传 dist.zip → 解压覆盖 /usr/share/nginx/html/screen → 刷新或重启 Chromium → 完成更新 后续产品化: 可将 screen-ui-vX.X.X.zip 纳入运维端 OTA 升级模块,支持备份、覆盖、刷新和失败回滚。

3. 系统边界与职责划分

3.1 屏幕端负责内容

待机展示素材播放播报内容展示语音指令响应访客登记预约核验身份证读取交互人脸识别结果展示路线引导前端流程通知公告展示呼叫工作人员占位全局状态提示隐藏系统信息页

3.2 屏幕端不负责内容

3.3 与其他系统的关系

系统/服务负责内容屏幕端使用方式
运维端 Web 管理系统欢迎语、素材、播放方案、播报内容、播报任务、访客记录、预约记录、白名单、系统配置等管理。屏幕端读取或消费运维端配置结果,不重复建设后台管理页面。
小主机后端服务接口聚合、语音指令接收、播报任务调度、TTS 调用、身份证读卡接口、人脸识别结果转发、机器人状态接口等。屏幕前端通过 HTTP 轮询或接口调用与其通信。
语音服务语音识别、语音对话、TTS 播放或播报能力。语音识别结果先上报小主机后端,再由屏幕端获取并执行动作。
机器人主控/导航服务点位列表、导航任务、运动控制、状态采集、巡逻任务等。一期路线引导先 Mock,后续接入真实点位和导航状态接口。

3.4 典型运行状态与页面状态机

屏幕端应围绕“无人待机、用户交互、业务办理、插播播报、异常提示”几个状态进行设计,避免页面之间随意跳转导致流程混乱。

状态触发来源页面表现退出条件
待机播放系统启动、无操作超时、业务结束播放素材广告;无素材时显示欢迎页。触摸屏幕、语音唤醒、识别结果、播报任务、异常事件。
主菜单交互用户触摸或语音打开菜单展示访客登记、路线引导、通知公告、呼叫工作人员。选择功能、返回待机、无操作超时。
业务办理进入访客登记、预约核验、路线引导等流程展示表单、确认页、状态页、结果页。业务完成、用户取消、超时返回、异常中断。
播报插播播报任务到时暂停素材,显示播报内容文字,配合 TTS 语音播放。播报结束后恢复原待机播放状态。
异常提示低电量、故障、网络异常、服务不可用全局弹窗或全屏提示,文案应面向访客,避免技术化。异常解除、用户确认、系统自动恢复。

4. 总体功能架构

待机展示
  • 广告素材播放
  • 默认欢迎页
  • 通知/公告插播
  • 无操作自动返回
主菜单
  • 访客登记
  • 路线引导
  • 通知公告
  • 呼叫工作人员
访客登记
  • 预约到访
  • 现场登记
  • 身份证读取
  • 手机号查询
识别结果
  • 人脸识别结果
  • 预约用户展示
  • 白名单结果展示
  • 识别失败引导
路线引导
  • 目的地列表
  • 目的地确认
  • 模拟导航中
  • 到达提示
语音响应
  • 接收语音指令
  • 页面跳转
  • 识别文本展示
  • 状态切换
全局状态
  • 电量
  • 网络
  • 充电
  • 异常提示
系统信息
  • 隐藏入口
  • 设备编号
  • IP/版本
  • 刷新页面

5. 主菜单与页面结构

5.1 一期主菜单

菜单入口页面职责一期处理方式优先级
访客登记进入预约到访或现场登记流程,支持身份证读取、手机号查询、手动填写等。正式前端流程 + Mock 数据P0
路线引导选择目的地,展示引导流程和导航状态。正式前端流程 + Mock 数据P0
通知公告展示运维端播报内容中的通知/公告类内容。Mock 列表与详情,后续对接播报内容接口P0
呼叫工作人员为访客提供求助入口。保留按钮和占位交互,真实方式后续确认P1

5.1.1 当前主菜单页面设计收口说明

业务咨询模块取消,不作为主菜单入口。机器人介绍不作为一级菜单,可通过待机素材、欢迎页素材或后续主题内容体现。

5.2 页面结构建议

页面路由建议说明
待机展示页/idle无人交互时的默认页面,播放素材或显示欢迎页。
主菜单页/menu触摸或语音唤醒后展示四个主入口。
访客登记首页/visitor选择预约到访或现场登记。
预约核验页/visitor/appointment支持身份证读取和手机号查询。
预约确认页/visitor/appointment-confirm展示预约信息,用户确认后生成访客记录。
现场登记页/visitor/walk-in身份证读取填充或手动填写访客信息。
登记成功页/visitor/success显示登记成功、欢迎语和后续指引。
识别结果页/recognition/result根据人脸识别结果展示预约用户、白名单人员或未识别结果。
路线引导页/navigation展示目的地分类和地点列表。
导航状态页/navigation/status展示模拟导航中、到达、取消等状态。
通知公告页/notice展示通知公告列表和详情。
呼叫工作人员页/call-staff保留入口,显示占位提示。
隐藏系统信息页/system-info长按 Logo 或指定区域进入,优先级低。

6. 核心业务流程设计

6.1 待机展示流程

进入屏幕系统 ↓ 加载屏幕配置、主题配置、播放方案、机器人状态 ↓ 判断是否存在启用的播放方案 ├─ 有播放方案:播放素材广告 / 图片 / 视频 └─ 无播放方案:显示默认欢迎页 ↓ 用户触摸屏幕或语音唤醒 ↓ 进入主菜单页

6.2 播报内容插播流程

小主机后端判断播报任务到时 ↓ 后端读取播报内容文本 ↓ 后端判断是否已有可用 MP3 ├─ 已有且未失效:复用 MP3 └─ 没有或已失效:调用第三方 TTS 生成 MP3 ↓ current 接口返回 broadcasting=true、title、content、audioUrl、audioDuration ↓ 屏幕前端轮询获取当前播报状态 ↓ 暂停当前图片轮播或视频播放 ↓ 显示播报浮层 ↓ 屏幕端播放 audioUrl 对应 MP3 ↓ audio ended 或 audio error ↓ 隐藏播报浮层 ↓ 恢复原待机播放状态

6.3 预约到访流程

访客登记 ↓ 选择“预约到访” ↓ 选择核验方式:身份证读取 / 手机号查询 ↓ 查询预约记录 ├─ 查询成功:展示预约信息确认页 └─ 查询失败:提示未查询到预约,可转现场登记 ↓ 访客确认预约信息 ↓ 提交登记 ↓ 登记成功

6.4 现场登记流程

访客登记 ↓ 选择“现场登记” ↓ 选择身份证读取或手动填写 ↓ 填写/回填访客姓名、手机号、身份证号、被访人、来访事由等 ↓ 提交登记前确认 ↓ 提交成功 ↓ 显示登记成功页

6.5 人脸识别结果进入流程

机器人侧完成人脸识别 ↓ 识别结果上报小主机后端 ↓ 屏幕前端轮询获取识别结果 ↓ 根据结果展示页面 ├─ 预约访客:进入预约确认页 ├─ 白名单人员:展示欢迎/通行提示 └─ 未识别人员:引导进入访客登记

6.6 语音指令响应流程

语音服务识别用户指令 ↓ HTTP 小主机后端接收识别结果 ↓ 屏幕前端定时轮询最新指令 ↓ 执行动作 ├─ 打开访客登记 ├─ 打开路线引导 ├─ 打开通知公告 ├─ 打开主菜单 └─ 显示提示信息

7. 页面详细设计

7.1 待机展示页

详细设计
页面目标无人操作时作为机器人对外展示窗口,播放素材广告、公告内容或显示默认欢迎页。
主要内容图片素材、视频素材、欢迎标题、欢迎副标题、Logo、当前时间、机器人简要状态。
交互方式触摸任意区域或语音唤醒后进入主菜单。
兜底逻辑有启用播放方案且存在可播放素材时进入播放方案模式;无播放方案、播放方案禁用或素材为空时显示默认欢迎页。
无操作规则其他页面长时间无操作后自动返回待机页。

待机页当前实现收口说明

待机素材播放补充规则

7.2 主菜单页

详细设计
页面目标提供四个核心入口,方便访客快速选择服务。
菜单入口访客登记、路线引导、通知公告、呼叫工作人员。
布局建议1024×768 横屏下采用“上方欢迎引导 + 下方 2×2 大触摸入口”的布局,左下角保留轻量悬浮返回待机按钮。
状态展示顶部显示 Logo、时间、电量、网络、当前工作状态。
语音支持语音指令“我要登记”“我要去某地”“查看通知”等可直接跳转对应页面。

主菜单页当前实现收口说明

7.3 访客登记页面

模块详细设计
访客登记首页展示预约到访、现场登记两个入口。
预约到访支持身份证读取查询、手机号查询;人脸识别命中预约用户时可直接进入预约确认页。
现场登记支持身份证读取自动填充和手动填写。
登记字段访客姓名、手机号、身份证号、到访类型、登记方式、访客来源、来访事由、被访对象、预约单号、来访时间、访客照片。
输入方式手机号、身份证号使用前端内置数字键盘;姓名、被访人、事由使用输入框、预置选项或系统软键盘。
超时规则登记页面长时间无操作后清空敏感信息并返回待机。

7.4 路线引导页面

模块详细设计
页面目标让访客选择目的地,展示机器人带路或路线引导流程。
一期处理正式前端版,数据使用 Mock,后续替换真实点位和导航接口。
页面内容目的地分类、目的地列表、常用地点、目的地确认、导航中状态、到达提示。
操作按钮开始引导、取消引导、返回首页。
异常提示接口未接入或导航不可用时,提示“路线引导功能正在接入中”。

7.5 通知公告页面

模块详细设计
数据来源复用运维端播报内容管理中的通知、公告、提示类内容。
页面形式公告列表 + 公告详情,支持大字体展示。
播放关系定时播报任务触发时,可暂停素材广告并插播公告文字和语音。
一期处理先使用 Mock 数据展示公告列表和详情。

7.6 呼叫工作人员页面

模块详细设计
页面目标为访客提供求助入口。
一期处理保留入口和占位交互,真实呼叫方式后续确认。
提示文案可显示“已为您通知工作人员,请稍候”或“呼叫功能正在接入中”。
后续扩展可接入运维端通知、主控平台事件、语音通话或视频通话。

7.7 隐藏系统信息页

模块详细设计
入口方式长按 Logo 或指定区域 5 秒进入。
页面内容设备编号、机器人编号、本地 IP、前端版本、后端服务状态、网络状态、当前时间。
操作按钮刷新页面、返回待机。重启类操作暂不开放。
优先级P2,非一期核心功能。

8. 播放、播报与声音控制规则

8.1 内容优先级

优先级内容类型处理规则
最高紧急异常 / 告警提示立即打断当前页面,展示全局异常提示。
播报内容暂停素材广告,展示播报文字,后端生成 MP3,屏幕端播放。
普通素材广告作为待机主内容播放图片或视频。
最低欢迎页无播放方案时的兜底页面。

8.2 声音来源与职责

声音来源归属说明
视频素材声音屏幕端视频播放时可通过喇叭输出,屏幕端需要支持静音和音量控制。
播报内容语音屏幕端播放后端 MP3数据库播报内容以文字为主;一期由后端调用第三方 TTS 生成并缓存 MP3 文件,屏幕端通过当前播报状态接口获取 audioUrl 后进行播放,同时展示播报文字和状态。
登记成功/导航到达/异常提示音屏幕端或本地服务可根据后续实现选择前端音频文件播放或后端统一播放。
语音对话声音语音服务不归屏幕系统控制,屏幕端只展示识别结果或跳转页面。

8.3 音量与静音控制

8.4 播报插播运行规则

9. 语音指令与事件通信设计

9.1 一期通信链路

语音服务识别指令 ↓ HTTP 小主机后端接收并保存最新指令 ↓ 屏幕前端每 0.5 秒或 1 秒轮询 /screen/command/latest ↓ 屏幕前端执行跳转或状态切换 ↓ 屏幕前端回执 /screen/command/ack

9.2 指令类型建议

指令类型示例屏幕动作
OPEN_PAGE打开访客登记跳转 /visitor
OPEN_MENU打开菜单跳转 /menu
SHOW_RECOGNITION_RESULT人脸识别结果跳转识别结果页或预约确认页
START_BROADCAST开始播报通知暂停素材,展示播报内容
END_BROADCAST播报结束恢复待机播放
SHOW_ALERT低电量/故障显示全局提示
一期采用 HTTP 轮询,后续可升级为 WebSocket 或 SSE,以减少延迟并提升实时性。

10. 输入方式与触摸交互规范

10.1 输入策略

输入内容推荐方式说明
手机号前端内置数字键盘11 位手机号输入,支持清空、删除、确认。
身份证号前端内置数字键盘 + X支持 18 位身份证号和末位 X。
预约查询前端内置数字键盘优先支持手机号或身份证号查询。
访客姓名系统软键盘/普通输入框一期可依赖 Ubuntu 软键盘,后续优化中文输入。
被访对象搜索选择/手动输入后续如有被访人列表接口,优先做搜索选择。
来访事由预置选项 + 其他输入减少中文自由输入,提高触摸屏体验。

10.2 防误触与超时规则

10.3 触摸尺寸建议

元素建议尺寸
主菜单卡片不小于 220×150px
主按钮高度72px - 96px
普通按钮高度56px - 72px
图标按钮不小于 64×64px
输入框高度不小于 56px

11. UI 视觉与屏幕适配规范

11.1 视觉风格

屏幕端采用“温和迎宾风 + 轻科技感”,适配大厅、展厅、营业厅、酒店等公共接待场景。
设计项建议
主色青蓝、湖蓝、柔和科技蓝。
背景浅色背景、柔和渐变、低噪点纹理。
组件大按钮、圆角卡片、柔和阴影、清晰图标。
文字大字号、低密度、短文案、强引导。
避免后台表格风、深色监控大屏风、强安防压迫感、密集小字。

11.2 1024×768 横屏布局建议

顶部状态栏:Logo / 时间 / 电量 / 网络 / 状态 中部主内容:待机素材、主菜单、登记表单或路线引导内容 底部操作区:返回、确认、取消、帮助等大按钮
实机调试补充:当系统截图比例正常但肉眼观察屏幕画面存在压缩或拉伸时,应优先检查 Mac/Ubuntu 外接屏分辨率、镜像模式、浏览器缩放比例、屏幕控制板缩放方式和设备像素比。前端 CSS 中的正方形图标容器不应为适配异常显示链路而改成非标准比例。

11.3 字号建议

文本类型建议字号
页面主标题32px - 40px
模块标题24px - 30px
正文/说明18px - 22px
按钮文字20px - 26px
状态文字16px - 20px

11.4 竖屏适配说明

一期不以未知竖屏为验收目标。代码实现时避免大量写死像素和绝对定位,优先使用 flex/grid、百分比、clamp 等方式,为后续竖屏适配保留空间。

12. Mock 数据与前端开发建议

12.1 一期前端开发方式

12.2 组件拆分建议

组件职责
ScreenLayout.vue统一页面布局、顶部状态栏、底部操作区。
StatusBar.vue展示 Logo、时间、电量、网络、机器人状态。
IdlePlayer.vue待机素材播放,支持图片、视频、欢迎页兜底。
BroadcastOverlay.vue播报内容插播展示。
MainMenu.vue四个主菜单入口。
NumericKeyboard.vue手机号、身份证号输入键盘。
VisitorForm.vue访客登记表单。
CameraPreview.vue摄像头预览窗口。
DestinationList.vue路线引导目的地列表。
GlobalAlert.vue全局异常、低电量、网络异常等提示。

12.3 推荐前端目录结构

src/ ├─ api/ 接口封装与 Mock 入口 ├─ assets/ 图片、图标、默认素材 ├─ components/ 通用组件 ├─ layouts/ 屏幕基础布局 ├─ mock/ Mock 数据 ├─ router/ 页面路由 ├─ stores/ Pinia 状态管理 ├─ utils/ 工具函数、时间、格式化、设备判断 ├─ views/ 页面视图 │ ├─ idle/ 待机展示 │ ├─ menu/ 主菜单 │ ├─ visitor/ 访客登记 │ ├─ navigation/ 路线引导 │ ├─ notice/ 通知公告 │ └─ system/ 系统信息 └─ App.vue

12.4 Mock 数据范围

机器人状态播放方案素材列表播报内容语音指令预约记录身份证读取结果人脸识别结果目的地列表通知公告

本地播放素材 Mock 约定

13. 后续接口设计建议

本章为后续接口对接建议,一期前端可先使用 Mock 数据实现。
接口方法说明主要字段
/screen/configGET获取屏幕配置robotName、logoUrl、idleTimeout、theme、volume、mute
/screen/statusGET获取机器人简要状态batteryLevel、networkStatus、workStatus、chargeStatus、faultFlag
/robot-ops/screen/play-plan/currentGET获取当前播放方案enabled、planId、planName、loopMode、defaultFitMode、version、items
/robot-ops/screen/broadcast/currentGET获取当前播报状态broadcasting、taskId、contentId、title、content、contentType、audioUrl、audioDuration、playMode、startTime、estimatedEndTime、version
/robot-ops/screen/broadcast/ackPOST播报播放完成回执taskId、contentId、resultStatus、resultMsg、playTime
/screen/command/latestGET获取最新语音/系统指令commandId、type、action、payload、timestamp
/screen/command/ackPOST指令处理回执commandId、resultStatus、resultMsg
/screen/id-card/readPOST读取身份证name、idCardNo、gender、nation、address、photoUrl
/screen/appointment/queryGET预约查询mobile、idCardNo;返回 appointmentNo、visitorName、visitedPerson、appointmentTime
/screen/visitor/registerPOST提交访客登记visitorName、mobile、idCardNo、visitType、registerType、visitorSource、visitReason、visitedPerson、appointmentNo
/screen/recognition/latestGET获取最新识别结果personType、matchStatus、visitorName、appointmentNo、confidence
/screen/destination/listGET目的地列表destinationId、name、category、floor、description
/screen/navigation/startPOST发起导航destinationId
/screen/navigation/statusGET导航状态taskId、status、currentPoint、targetName、progress
/screen/notice/listGET通知公告列表title、content、publishTime、contentType
/screen/call-staffPOST呼叫工作人员callType、pagePath、remark
/screen/camera/preview-urlGET获取摄像头预览地址streamUrl、streamType、expireTime
/screen/audio/controlPOST音量与静音控制volume、mute、sourceType
/screen/event/reportPOST屏幕事件上报eventType、pagePath、eventData、timestamp

13.1 当前播放方案接口详细设计

本接口为机身屏待机页播放方案模式的一期核心接口。运维 Web 前端、机身屏前端和后端服务共用同一套数据库与同一个后端服务;运维端负责素材上传和播放方案配置,机身屏前端只读取当前播放方案并播放素材。

13.1.1 接口基本信息

设计内容
接口地址GET /robot-ops/screen/play-plan/current
接口用途供机身屏 /idle 待机页读取当前启用播放方案。前端根据返回结果决定进入播放方案模式或回退默认欢迎页。
部署关系运维 Web 前端、机身屏前端和后端服务部署在同一台小主机,共用同一套数据库和同一个后端服务。
素材访问地址屏幕端访问素材统一使用完整 URL,例如 http://192.168.0.30/profile/upload/xxx.mp4
是否允许多个当前方案不允许。播放方案主表中同一时间只允许一个方案为当前播放方案。

13.1.2 数据来源与字段映射

数据表主要字段接口字段说明
robot_ops_play_planidplanId播放方案 ID。
robot_ops_play_planplan_nameplanName播放方案名称。
robot_ops_play_planloop_modeloopMode循环方式,建议支持 loop、once;一期默认 loop。
robot_ops_play_planstatusenabled 判断依据status=1 表示当前播放方案。
robot_ops_play_planupdate_timeversion可使用更新时间生成版本号,用于前端判断播放方案是否变化。
robot_ops_play_plan_itemiditemId / id播放方案明细 ID。
robot_ops_play_plan_itemasset_idassetId关联素材 ID。
robot_ops_play_plan_itemplay_ordersort播放顺序,按升序返回。
robot_ops_play_plan_itemstay_secondsstaySeconds / duration图片停留秒数;duration = staySeconds × 1000。
robot_ops_media_assetasset_nametitle素材名称。
robot_ops_media_assetasset_typetype素材类型,转换为 image 或 video。
robot_ops_media_assetfile_urlurl素材文件地址,后端需补全为屏幕端可直接访问的完整 URL。
robot_ops_media_assetthumbnail_urlthumbnailUrl缩略图地址,可为空。
robot_ops_media_assetstatus过滤依据只有启用状态素材可被屏幕端播放。

13.1.3 后端取数规则

  1. 查询 robot_ops_play_planstatus=1 的当前播放方案。
  2. 如果不存在当前播放方案,返回 enabled=false 和空 items
  3. 如果存在当前播放方案,查询该方案下的 robot_ops_play_plan_item 明细,并按 play_order 升序排序。
  4. 关联 robot_ops_media_asset 素材表,获取素材名称、类型、文件地址、缩略图、视频时长、启用状态等。
  5. 过滤不可播放素材:素材不存在、素材停用、file_url 为空、asset_type 不是 image/video。
  6. 如果过滤后素材列表为空,也返回 enabled=false 和空 items
  7. 如果存在可播放素材,返回 enabled=true 和已排序的素材列表。

13.1.4 素材 URL 补全规则

后端返回给屏幕端的 urlthumbnailUrl 必须是浏览器可直接访问的地址。屏幕端当前约定素材访问前缀为 http://192.168.0.30

数据库 file_url 示例接口返回 url 示例处理规则
http://192.168.0.30/profile/upload/a.mp4http://192.168.0.30/profile/upload/a.mp4已是完整 URL,原样返回。
/profile/upload/a.mp4http://192.168.0.30/profile/upload/a.mp4使用资源访问前缀拼接。
profile/upload/a.mp4http://192.168.0.30/profile/upload/a.mp4补充斜杠后再拼接。
建议后端将资源访问前缀配置化,例如 screen.resource-base-url=http://192.168.0.30,避免硬编码到业务代码中。

13.1.5 返回示例

{ "code": 200, "msg": "查询成功", "data": { "enabled": true, "planId": 1, "planName": "默认播放方案", "loopMode": "loop", "defaultFitMode": "cover", "version": "20260513153000", "items": [ { "id": 1001, "itemId": 1001, "assetId": 501, "type": "image", "title": "欢迎宣传图", "url": "http://192.168.0.30/profile/upload/2026/05/welcome.png", "thumbnailUrl": "http://192.168.0.30/profile/upload/2026/05/welcome.png", "duration": 8000, "staySeconds": 8, "fitMode": "cover", "showTitle": false, "sort": 1 }, { "id": 1002, "itemId": 1002, "assetId": 502, "type": "video", "title": "机器人介绍视频", "url": "http://192.168.0.30/profile/upload/2026/05/robot-intro.mp4", "thumbnailUrl": "http://192.168.0.30/profile/upload/2026/05/robot-intro-cover.jpg", "duration": null, "staySeconds": null, "fitMode": "cover", "muted": false, "showTitle": false, "sort": 2 } ] }, "timestamp": "2026-05-13 15:30:00" }

13.1.6 无播放方案或无可播放素材返回示例

{ "code": 200, "msg": "暂无当前播放方案", "data": { "enabled": false, "planId": null, "planName": "", "loopMode": "loop", "defaultFitMode": "cover", "version": "", "items": [] }, "timestamp": "2026-05-13 15:30:00" }

13.1.7 前端播放规则

13.1.8 播放方案更新检查策略

场景处理策略说明
进入待机页立即请求当前播放方案接口确保屏幕端启动或从业务页面返回待机时读取最新播放配置。
待机播放中每 60 秒请求一次 /robot-ops/screen/play-plan/current一期不单独增加 version 接口,直接轮询 current 接口即可。
version 未变化不重置播放进度避免图片/视频被无意义重播或闪烁。
version 变化当前素材结束后切换新方案图片在本次 duration 结束后切换;视频在 ended 后切换。
方案被取消或素材为空当前素材结束后回退默认欢迎页避免播放过程中突兀黑屏或直接中断。
后续如需降低接口数据量,可扩展轻量版本检查接口 GET /robot-ops/screen/play-plan/version。屏幕端每 30-60 秒请求 version,只有版本变化时再请求 current 完整播放方案。一期建议先使用 current 接口轮询,降低前后端联调复杂度。

13.2 当前播报状态接口详细设计

本接口供机身屏 /idle 待机页获取当前播报状态。前端根据 broadcasting 判断是否显示播报浮层,并暂停或恢复当前素材播放。

13.2.1 接口基本信息

设计内容
接口地址GET /robot-ops/screen/broadcast/current
接口用途供机身屏 /idle 待机页获取当前播报状态。前端根据 broadcasting 判断是否显示播报浮层、播放 MP3,并暂停或恢复当前素材播放。
数据来源运维端播报内容管理与播报任务管理。后端关联播报任务和播报内容后,生成 MP3 并返回当前播报文本和音频地址。
轮询频率一期建议待机页每 2 秒轮询一次。
TTS 职责后端负责播报文本转 MP3、音频缓存、任务命中判断和音频地址返回;屏幕端负责根据 audioUrl 播放 MP3、展示播报浮层、暂停和恢复当前素材播放。
生效范围一期优先只在 /idle 待机页执行播报插播;访客登记、路线引导等业务办理页面暂不强制打断。

13.2.2 数据来源与字段映射

来源表来源字段接口字段说明
robot_ops_broadcast_taskidtaskId播报任务 ID。
robot_ops_broadcast_tasktask_nametaskName播报任务名称。
robot_ops_broadcast_taskcontent_idcontentId关联播报内容 ID。
robot_ops_broadcast_taskstart_timestartTime本次播报开始时间。
robot_ops_broadcast_taskend_time、frequency_minutes、cycle_type、cycle_value、status后端判断依据由后端根据任务规则判断是否命中当前播报,前端不参与计算。
robot_ops_broadcast_contentcontent_nametitle播报标题。
robot_ops_broadcast_contentcontent_typecontentType播报分类,例如通知、宣传、提示、安防提醒、自定义。
robot_ops_broadcast_contentbroadcast_textcontent播报文本,用于屏幕展示,并由后端调用第三方 TTS 生成 MP3。
robot_ops_broadcast_contentstatus过滤依据只有启用状态的播报内容可被任务触发。

13.2.3 有播报返回示例

{ "code": 200, "msg": "查询成功", "data": { "broadcasting": true, "taskId": 12, "contentId": 35, "taskName": "大厅整点提醒", "title": "参观提醒", "content": "欢迎各位来宾参观,请按照现场工作人员引导有序通行。", "contentType": "notice", "level": "normal", "audioUrl": "http://192.168.0.30/profile/audio/broadcast/35_abc123.mp3", "audioDuration": 20.5, "playMode": "once", "startTime": "2026-05-18 16:30:00", "estimatedEndTime": "2026-05-18 16:30:20", "version": "20260518163000" }, "timestamp": "2026-05-18 16:30:01" }

13.2.4 无播报返回示例

{ "code": 200, "msg": "当前无播报", "data": { "broadcasting": false, "taskId": null, "contentId": null, "taskName": "", "title": "", "content": "", "contentType": "", "level": "normal", "audioUrl": "", "audioDuration": null, "playMode": "once", "startTime": null, "estimatedEndTime": null, "version": "20260518163100" }, "timestamp": "2026-05-18 16:31:00" }

13.2.5 屏幕端处理规则

13.2.6 后端与 TTS 处理建议

13.2.7 MP3 文件生成与复用规则

场景处理规则说明
首次播报调用第三方 TTS 生成 MP3生成完成后保存本地文件,并记录音频路径、访问 URL、时长、Hash 和生成状态。
重复播报相同内容复用已生成 MP3避免每次播报都请求第三方 TTS,降低成本和延迟。
播报文本修改重新生成 MP3文本变化后 Hash 变化,旧音频失效。
音色/语速/音量/供应商参数修改重新生成 MP3同一文本在不同语音参数下应视为不同音频。
本地音频文件丢失重新生成 MP3数据库有记录但文件不存在时应自动补偿生成。
MP3 播放失败屏幕端记录失败并恢复素材播放不应阻塞待机素材播放,后续可通过事件上报或运行日志记录。
TTS 生成失败后端记录失败状态和错误信息不返回可播放 audioUrl,屏幕端不进入播报播放状态。

建议 Hash 计算口径为:md5(播报文本 + 音色 + 语速 + 音量 + TTS供应商 + 模型版本)

后端应封装统一 TtsService。屏幕端应封装统一音频播放逻辑,用于播放播报 MP3、监听 ended/error 事件,并在播放完成或失败后恢复素材播放。

一期如后端需要确认屏幕端实际播放完成,可提供 POST /robot-ops/screen/broadcast/ack。屏幕端在 audio ended 后上报 success,在 audio error 后上报 failed。若一期暂不做 ack,后端可根据播报窗口或 estimatedEndTime 结束播报状态。

14. 开发优先级与实施顺序

阶段开发内容目标
第一阶段Vue3 工程、路由、布局、状态栏、全局样式、Mock 数据框架建立屏幕端前端基础工程。
第二阶段待机展示页、默认欢迎模式、播放方案模式、本地素材 Mock、图片/视频播放器、当前播放方案接口、欢迎页兜底、无操作返回待机前端已收口;下一步由后端提供 /robot-ops/screen/play-plan/current 接口,跑通运维端素材与播放方案到机身屏播放链路。
第三阶段主菜单页、上方欢迎引导、2×2 大触摸入口、返回待机按钮、图标与文案优化已完成前端收口,后续重点进入访客登记流程开发。
第四阶段访客登记、预约核验、身份证读取 Mock、数字键盘完成核心登记流程。
第五阶段路线引导正式前端流程、目的地 Mock、导航状态 Mock完成路线引导演示闭环。
第六阶段当前播报状态接口、播报浮层、素材暂停/恢复、通知公告列表、声音/静音控制优先跑通运维端播报内容与播报任务到机身屏插播展示链路。
第七阶段语音指令轮询 Mock、人脸识别结果 Mock、全局异常提示完成事件驱动页面跳转能力。
第八阶段隐藏系统信息页、屏幕刷新、版本展示补充现场维护辅助能力。

15. 测试验收要点

15.1 页面与交互验收

15.2 播放与声音验收

15.3 Mock 与接口替换验收

16. 安全、隐私与异常兜底

16.1 隐私与敏感信息处理

16.2 异常兜底文案

异常类型面向访客文案处理建议
网络异常当前网络连接异常,部分功能暂不可用,请稍后再试。保留返回待机与重试按钮。
后端服务异常服务暂时不可用,请联系现场工作人员。隐藏技术错误码,可在系统信息页展示。
身份证读取失败身份证读取失败,请重新放置证件或选择手动登记。提供重试与手动填写入口。
预约查询为空未查询到预约信息,您可以选择现场登记。提供转现场登记按钮。
导航不可用路线引导功能暂不可用,请联系工作人员。返回主菜单或呼叫工作人员。
素材加载失败不向访客展示技术提示。自动跳过素材,全部失败时显示欢迎页。

16.3 操作安全边界

普通访客可见页面不开放重启、关机、开始巡逻、停止巡逻、地图编辑、参数配置等高风险操作。现场维护能力应放入隐藏系统信息页或运维端。

17. 运行部署与现场维护建议

17.1 Chromium Kiosk 启动建议

chromium-browser \ --kiosk \ --noerrdialogs \ --disable-infobars \ --disable-session-crashed-bubble \ http://127.0.0.1/screen

实际命令需根据 Ubuntu 版本、Chromium 安装路径、是否启用硬件加速等情况调整。

17.2 开机自启建议

17.3 前端包更新建议

上传 screen-ui-vX.X.X.zip ↓ 备份旧版本目录 ↓ 解压覆盖新版本 dist ↓ 刷新 Chromium 页面或重启 Chromium ↓ 异常时回滚旧版本

17.4 现场维护信息建议

18. 待确认与后续扩展事项

事项当前处理后续方向
呼叫工作人员真实方式一期保留按钮和占位交互。可接入运维端消息、主控平台通知、语音/视频通话。
真实导航接口一期使用 Mock 数据。对接点位列表、导航开始、导航状态、取消导航接口。
Ubuntu 中文输入体验一期数字输入内置键盘,中文输入暂依赖系统软键盘或预置选项。结合现场系统环境优化软键盘或减少自由文本输入。
WebSocket/SSE 推送一期 HTTP 轮询。后续升级为 WebSocket 或 SSE。
竖屏适配一期按 1024×768 横屏开发。屏幕选型确定后专项适配。
屏幕端 OTA一期可手动部署 dist 包。后续纳入运维端 OTA 升级模块。
播报 TTS 实现方式文档建议由小主机后端调用 TTS/语音服务。后续确认 TTS 服务地址、播放完成回调、音频抢占规则。
摄像头预览流格式文档建议仅在识别相关页面展示。后续确认 RTSP、HTTP-FLV、WebRTC 或 MJPEG 等实现方式。
呼叫工作人员闭环一期占位。后续确认是通知运维端、现场终端、语音通话还是视频通话。

12.5 Cursor 实现提示(前端:播报插播/Idle 播放器)

Cursor 实现提示:
实现目标: 实现播报插播浮层组件(BroadcastOverlay.vue),并集成到 Idle 播放器页面,确保播报流程、暂停/恢复、异常兜底、动画效果等完整体验。