TinyRobot SuggestionPopover 智能建议弹出框组件

作者:技术拾光

时间:2026-06-12

浏览:298

TinyRobotSuggestionPopover组件用于AI对话界面,通过弹出框集中呈现建议选项,支持点击或手动触发、分组数据、自定义列表项渲染,内置加载和空状态,并自动适配移动端,实现引导式交互与上下文帮助。

文章目录

TinyRobot SuggestionPopover:智能建议弹出框组件

在AI对话界面中,用户真正需要的是更自然的引导方式。当AI助手准备提供一组可选建议时,一个恰到好处的弹出框既能承载足够的信息密度,又不会让操作变得繁琐。SuggestionPopover正是为这种场景量身打造——点击触发器,浮层展开,建议列表清晰呈现,用户一眼就能找到目标,一键即可选中。

TinyRobot SuggestionPopover 智能建议弹出框组件

该组件的核心价值体现在以下几个方面:

  • 引导式交互:将建议项集中在弹出框中,界面简洁不杂乱
  • 上下文帮助:在对话流程的恰当时机提供选项,不脱离上下文
  • 灵活的数据结构:既支持平铺列表,也支持分组列表,按需使用
  • 丰富的自定义:触发器、列表项、头部、内容区等插槽一应俱全
  • 状态管理:loading和empty状态默认内置,无需额外处理
  • 移动端适配:窗口宽度小于768px时自动切换为移动端样式,省心省力

基本用法:带数据的弹出框

通过data属性传入建议数据,再用trigger插槽自定义触发器。点击按钮即可弹出列表,操作直接明了。


触发方式:click vs manual

SuggestionPopover提供两种触发方式,通过trigger属性配置:

  • 'click'(默认):点击触发器时自动弹出或关闭,省心省力
  • 'manual':需配合show属性(支持v-model)手动控制显示和隐藏,适用于需要精确控制的场景

manual模式的应用场景很典型——例如当AI回复完成后,需按业务逻辑自动弹出建议,此时手动控制便派上用场。

分组建议数据

当建议项数量较多、类别明确时,分组数据格式能有效提升展示效果。在data数组中传入SuggestionGroup对象,通过group字段标识分组,items字段包含该分组下的建议项,用户一目了然。


注意:分组数据和普通数据不能混用——data数组中的项要么全是SuggestionItem,要么全是SuggestionGroup,二选一。

selectedGroup支持v-model,可设置默认选中分组,也能在用户切换时获取当前分组。groupShowMoreTrigger属性控制分组“显示更多”的触发方式,支持'click'和'hover',按需选用。

自定义列表项渲染

通过item插槽,每个建议项的渲染完全由你掌控。插槽参数为{ item },可在SuggestionItem中添加任意自定义字段,按需展开展示风格。


加载和空状态

SuggestionPopover内置了loading和empty两种状态。通过loading属性可显式开启加载状态;当data为空数组时,自动显示空状态。两种状态均提供对应插槽(loading和empty),可按需修改显示内容。


Header 和 Body 插槽

除item、loading、empty外,SuggestionPopover还提供header和body插槽,用于完全接管弹出框的头部和内容区。其内部结构如下:

+---------------------------+
|     SuggestionPopover     |
|  +---------------------+  |
|  |       header        |  |
|  +---------------------+  |
|  |                     |  |
|  |        body         |  |
|  |   +-------------+   |  |
|  |   |   item[]    |   |  |
|  |   +-------------+   |  |
|  |                     |  |
|  |  loading / empty    |  |
|  +---------------------+  |
+---------------------------+
  • 使用header插槽时,会替换默认的标题区域
  • 使用body插槽时,会替换整个列表区域(包括item列表、loading和empty状态)

移动端适配

SuggestionPopover自带移动端适配逻辑。当视窗宽度小于768px时,弹出框自动切换为移动端友好的展示样式——触控区域更大,布局更适合小屏幕。通常无需额外处理,只需确保页面配置正确的viewport即可:

<meta name="viewport" content="width=device-width, initial-scale=1.0" />

API 参考

Props

属性类型必填默认值说明
dataSuggestionData是-建议数据
titlestring否-弹出框标题
iconVNode | Component否-标题图标
showboolean否-控制弹出框显示/隐藏,仅在 trigger 为 'manual' 时有效
trigger'click' | 'manual'否'click'触发方式:点击或手动控制
selectedGroupstring否-当前选中分组,支持 v-model
groupShowMoreTrigger'click' | 'hover'否-分组"显示更多"的触发方式
loadingboolean否false是否显示加载状态
topOffsetnumber否-顶部偏移量

Slots

插槽名类型说明
trigger() => VNode | VNode[]自定义触发器
item({ item }: { item: SuggestionItem }) => VNode | VNode[]自定义渲染列表项
loading() => VNode | VNode[]自定义加载状态显示
empty() => VNode | VNode[]自定义空状态显示
header() => VNode | VNode[]自定义头部区域
body() => VNode | VNode[]自定义列表区域

Events

事件名参数说明
item-clickitem: SuggestionItem点击建议项时触发
group-clickgroup: SuggestionGroup点击分组时触发
open-弹窗打开时触发
close-弹窗关闭时触发
click-outsideevent: MouseEvent点击弹窗外部区域时触发

Types

interface SuggestionItem {
  id: string
  text: string
}interface SuggestionGroup {
  group: string
  label: string
  icon: VNode | Component
  items: SuggestionItem[]
}type SuggestionData = (SuggestionItem | SuggestionGroup)[]

OpenTiny NEXT是一套企业智能前端开发解决方案,以生成式UI和WebMCP两大核心技术为基础,对现有传统的TinyVue组件库、TinyEngine低代码引擎等产品进行智能化升级,构建出面向Agent应用的前端NEXT-SDKs、AI Extension、TinyRobot智能助手、GenUI等新产品,加速企业应用的智能化改造,实现AI理解用户意图自主完成任务。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章