跳转到内容

大屏功能概览 ​

适用范围:本文档基于前端代码梳理,聚焦大屏端对话组件 src/components/vis-assistant,并涉及数字人形象 components/Avatar、移动端遥控器 src/views/mobile 等协同模块。

后端(ruoyi-aihuman-backend)能力仅在「接口概览」一节以接口维度列出,不做后端实现展开。

以下子页按模块拆分详细说明:


一、整体定位与架构 ​

数字人「小慧」是一套大屏播报 + 双向对话 + 手机遥控的综合交互系统,由三部分组成:

端位置职责
大屏端src/components/vis-assistant/对话面板
三种问答模式
TTS 播报
数字人口型驱动
配对码生成
移动端 H5src/views/mobile/扫码/输码配对
仿微信遥控面板
语音提问
模式切换
数字人形象src/components/Avatar/Core/Avatar.vueiframe 内嵌 React + Three.js 3D 数字人,postMessage 双向通信(或 UE PixelStreaming 自集成)

数据流总览 ​

手机 ──WS COMMAND{text, mode, knowledgeCategory}──▶ 后端 WS 服务 ──▶ 大屏
大屏 ──WS RESPONSE{text | {text, subtype, searchResult} | {error}}──▶ 后端 ──▶ 手机
大屏 ──HTTP SSE──▶ /ai/chat/stream 或 /ai/orchestrate/chat/stream
大屏 ──HTTP POST──▶ /digital-human/nlu/recognize(语义识别)
大屏 ──HTTP POST──▶ /digital-human/tts/aliyun(文本转语音,即将弃用)
大屏 ──WS 双工──▶ /digital-human/tts/aliyunStream/ws(文本转语音,统一采用)
大屏/手机 ──HTTP POST──▶ /digital-human/asr/recognize(语音转文本)
大屏 ──postMessage / UE 音频流──▶ 数字人(口型 + 音频)

二、对话面板(大屏端) ​

面板组件 VisAssistant.vue,挂载在 /home 路由下,由右下角 FAB 控制显隐(v-show 保留聊天记录、拖拽位置与模式状态)。

2.1 界面构成 ​

数字人形象概览及面板
区域组件能力
头部VaPanelHeader.vue在线状态指示灯【绿色:后端连接正常,红色:后端连接失败】
标题「智慧助手」
"移动端已配对"标识
踢出按钮【已配对的,大屏可手动踢出】
展开/还原【窗口大小变化】
关闭
消息区VaMessageItem.vueAI(Markdown)气泡
用户(纯文本)气泡
系统(居中提示)气泡
「思考中」指示器
自动滚底【回答时自动滚动到底部,内容保持可见、体验更好】
快捷栏VaQuickActionBar.vue生成配对码
新建对话
停止播报(说话中出现)
设置弹框
输入区VaGlowInput.vue多行输入
模式切换下拉
左下角场景下拉
语音输入按钮
发送按钮 / 停止生成
配对弹框VaPairingModal.vue二维码【一次只能连接一个移动端】
配对码【用于刷新后重连】
倒计时
复制链接
刷新
数字人Avatar.vue3D 形象 iframe(180×480)
回答中头顶气泡

2.2 拖拽与自由拉伸 ​

  • 拖拽:仅标题栏可拖,mousedown 后位移超过 5px(DRAG_THRESHOLD)才进入拖拽态,避免误触发头部按钮。
  • 自由拉伸:面板外沿铺 8 个手柄(上/下/左/右/四角),实时重算 left/top/width/height。 自由拉伸
常量值含义
PANEL_DEFAULT_WIDTH / HEIGHT400 / 680默认尺寸
PANEL_EXPANDED_WIDTH585点击展开按钮时的宽度(高度铺满视口)
MIN_PANEL_WIDTH / HEIGHT350 / 420拉伸下限
LEFT_DRAG_LIMIT180左侧预留数字人显示区,面板不会被拖出该区域
FAB_MARGIN24与视口边缘间距
RESIZE_LEAVE_MARGIN40鼠标偏离边缘超过 40px 自动结束拉伸,防止手柄脱节

拉伸结束后统一走 clampPanelPosition() 做边缘检测;窗口 resize / 全屏切换时重算边界。手动拉伸会自动退出"展开态";退出展开态时还原进入前的尺寸快照。

2.3 系统导览下的自动折叠 ​

系统导览回答中(isDemoAnswering = 思考中 | 流式输出 | 音频播报中):

  1. 聊天面板自动折叠,只保留 数字人 + 头顶气泡 + 「打断播报」浮层按钮;
  2. 父组件收到 panel-collapsed-change 事件,显示右下角 FAB;
  3. 用户点击 FAB 或 expandPanel() 可强制展开(userForceExpand),一轮回答结束后自动重置。

数字人「小慧」项目文档