Skip to content

MentionSender 提及输入框 🦥

介绍

MentionSender 是用于聊天的输入框组件。

📌 注意

他和 Sender 组件的功能基本一样,唯一的区别就是 指令的弹框 相关的属性和方法 不同。点击此处快速了解区别 👉 指令区别

我们暂时没有考虑将 MentionSenderSender 两个 指令功能 放到一起,仅仅通过组件进行区分。后续我们会在考虑将两个功能合并到另一个新的组件中: EditorSender 富文本输入框组件,去支持更多的输入框需求。

💡 提示

EditorSender 富文本框输入组件,将参考豆包的输入框,在未来和大家见面:

代码使用

这是一个MentionSender 输入框,最简答的使用例子,

可以通过 placeholder 设置输入框的提示语。

可以通过 v-model 绑定组件的 value 属性。

📌 注意

  • 在提交时,需要有内容,才会进行提交。
  • 内容为空时,提交按钮会被禁用,且使用组件实例提交会失效。

💌 消息

  • 通过 v-model 属性,可以自动绑定输入框的值。不用赋值数据到 v-model 中。
  • 通过 @submit 事件,可以触发输入框的提交事件,回传一个 value 参数,你可以在此处理提交的数据。
  • 通过 @cancel 事件,可以触发 loading 按钮的点击事件。在这里你可以中止提交的操作。

你也可以通过组件 ref 实例对象进行调用

  • senderRef.value.submit() 触发提交
  • senderRef.value.cancel() 触发取消
  • senderRef.value.clear() 重置输入框的值

可以通过 submit-btn-disabled 自定义 是否让发送按钮禁用。当禁用时,组件实例的 submit 方法将失效。

📌 注意

组件内置的 发送按钮,是更据 v-model 绑定的,所以,当 v-model 绑定的值为空时,发送按钮将处于禁用状态。

但是,有这么一个场景。用户通过上传了文件,但是没有输入内容,此时,发送按钮依然处于禁用状态。 所以,为了 禁用逻辑的解耦,组件提供了 submit-btn-disabled 属性,用于自主控制发送按钮的禁用状态。

自定义 #action-list 时,此属性对 submit 事件同样生效。

可以通过 autosize 设置输入框的最小展示行数和最大展示行数。 autosize 是一个对象 默认值为 { minRows: 1, maxRows: 6 }。超出最大行数时,输入框会自动出现滚动条。

可以通过简单属性是,实现组件的状态

💌 消息

  • 通过 loading 属性,可以控制输入框是否加载中。
  • 通过 readOnly 属性,可以控制输入框是否可编辑。
  • 通过 disabled 属性,可以控制输入框是否禁用。
  • 通过 clearable 属性,可以控制输入框是否出现删除按钮,实现清空。
  • 通过 inputWidth 属性,可以控制输入框的宽度。默认为 100%

通过 submitType 控制换行与提交模式。默认 'enter'。即 回车提交,'shift + Enter' 换行。

💌 消息

  • submitType='enter' 设置 回车提交,'shift + Enter' 换行。
  • submitType='shiftEnter' 设置 'shift + Enter' 提交,回车换行。

内置 语音识别 功能,通过 allowSpeech 属性开启即可。调用浏览器原生的语音识别 API,在 谷歌浏览器 中使用,需要在 🪄魔法环境 中才能正常使用。

💌 消息

如果你不想使用内置的 语音识别 功能,可以通过 @recording-change 事件来监听录音状态,自行实现语音识别功能。

你也可以通过组件 ref 实例对象进行调用

  • senderRef.value.startRecognition() 触发开始录音
  • senderRef.value.stopRecognition() 触发结束录音

📌 注意

1.0.81 版本前,在自定义插槽的时候,会牺牲内置的操作按钮。我们在 1.0.81 版本 推出了流式请求的 hooks,可以让用户更好的控制流式请求,从而更好的自己定义 #action-list 插槽。详情请查看 useXStream

此温馨提示更新时间:2025-04-06

通过 #action-list 插槽用于自定义输入框的操作列表内容。

💌 消息

当你使用 #action-list 插槽时,会隐藏内置的输入框的操作按钮。你可以通过和 组件实例方法 相结合,实现更丰富的操作。

通过 #prefix 插槽用于自定义输入框的前缀内容。

通过 #header 插槽用于自定义输入框的头部内容。

💌 消息

通过组件实例控制 头部容器 展开收起

  • senderRef.value.openHeader() 打开头部容器
  • senderRef.value.closeHeader() 关闭头部容器

通过 ref 选项控制聚焦。

💌 消息

通过组件实例控制

  • senderRef.value.focus('all') 聚焦到整个文本 (默认)
  • senderRef.value.focus('start') 聚焦到文本最前方
  • senderRef.value.focus('end') 聚焦到文本最后方
  • senderRef.value.blur() 失去焦点

通过 variant 属性设置输入框的变体。默认 'default' | 上下结构 'updown'

这个属性,将左右结构的 输入框,变成 上下结构的 输入框。上面为 输入框,下面为 内置的 前缀和操作列表栏

通过 input-style 方便对输入框的样式透传

📌 注意

下面展示和 Sender 组件 不一样 的指令相关 属性方法。使用时请注意 使用区别

此温馨提示更新时间:2025-04-16

  • 通过 options 属性,可以传入一个数组,用于定义提及选项列表。
  • 通过 triggerStrings 属性 触发字段的前缀。 这里和 Sender 组价不同,这里的字符串长度必须且只能为 1。
ts
// options 提及选项列表的 类型定义
interface MentionOption {
  value: string
  label?: string
  disabled?: boolean
  [key: string]: any
}

💌 消息

光设置 options 属性,不能开启提及功能。需要 triggerStrings 属性来开启提及功能。

通过 triggerStrings 属性 触发字段。这里和 Sender 组价不同,这里的字符串长度必须且只能为 1。类型是 Array<string>

如果需要通过 多个字符串触发,可以搭配 @search 事件控制显示浮层内容。

💌 消息

光设置 options 属性,不能开启提及功能。需要 triggerStrings 属性来开启提及功能。

用于拆分提及的字符。 字符串长度必须且只能为 1,默认为 ' '

通过 triggerLoading 属性设置 提及选项列表的加载状态。triggerLoading 属性默认为 false,即默认不显示加载状态。

通过 filter-option 定制筛选器选项逻辑,通过一个方法,返回为truefalse 来控制选项的过滤结果,你也可以理解为搜索的过滤逻辑。

类型是 (pattern: string, option: MentionOption) => boolean

  • whole 属性设置为 true,当您按下退格键时,此处的 mention 区域将作为一个整体被删除。

  • 设置 check-is-whole 属性来自定义检查逻辑。当你需要做多个条件时,你可以使用 check-is-whole 属性来自定义检查逻辑。

  • check-is-whole 属性不是事件,类型为 (pattern: string, prefix: string) => boolean 返回 true 表示匹配成功要被整体删除,返回 false 表示匹配失败不会被整体删除。 默认为 true

通过 trigger-popover-placement 设置 弹出方向。默认是 'top', 可以设置为 'bottom'。目前只支持 'top''bottom' 两种。

通过 triggerPopoverOffset 属性可以设置浮层距离窗口的偏移量。默认值 20,表示为 20px。

💌 消息

  • 支持 #trigger-label 自定义 标签内容,每条数据的展示
  • 支持 #trigger-loading 自定义 加载中状态,当 triggerLoading 为 true 时,会显示加载中状态
  • 支持 #trigger-header 自定义 下拉列表顶部的内容
  • 支持 #trigger-footer 自定义 下拉列表底部的内容

当用户选择选项时触发

属性

属性名类型是否必填默认值说明
v-modelString''输入框的绑定值,使用 v-model 进行双向绑定。
placeholderString''输入框的提示语文本。
auto-sizeObject{ minRows:1, maxRows:6 }设置输入框的最小展示行数和最大展示行数。
read-onlyBooleanfalse输入框是否为只读状态。
disabledBooleanfalse输入框是否为禁用状态。
submitBtnDisabled v1.1.6版本新增Boolean | undefinedundefined内置发送按钮禁用状态。(注意使用场景)
loadingBooleanfalse是否显示加载状态。为 true 时,输入框会显示加载动画。
clearableBooleanfalse输入框是否可清空内容。展示默认清空按钮
allowSpeechBooleanfalse是否允许语音输入。默认展示内置语音识别按钮,内置浏览器内置语音识别 API
submitTypeString'enter'提交方式,支持 'shiftEnter'(按 Shift + Enter 提交)。
headerAnimationTimerNumber300输入框的自定义头部显示时长,单位为 ms
inputWidthString'100%'输入框的宽度。
variant v1.1.6版本新增String'default'输入框的变体类型,支持 'default''updown'
showUpdown v1.1.6版本新增Booleantrue当变体为 updown 时,是否展示内置样式。
inputStyle v1.1.6版本新增Object{}输入框的样式。
triggerStrings v1.1.6版本新增string[][]触发指令的 字符串数组
triggerPopoverVisible v1.1.6版本新增Booleanfalse触发指令的 弹框 是否可见。需要使用 v-model:triggerPopoverVisible 进行控制。
triggerPopoverWidth v1.1.6版本新增String'fit-content'触发指令的 弹框 的宽度。可使用百分比等css单位。
triggerPopoverLeft v1.1.6版本新增String'0px'触发指令的 弹框 的左边距。可使用百分比等css单位。
triggerPopoverOffset v1.1.6版本新增Number8触发指令的 弹框 的左边距。只能是数字类型,单位px
triggerPopoverPlacement v1.1.6版本新增String'top-start'触发指令的 弹框 的位置。取值:'top' | 'top-start' | 'top-end' | 'bottom' | 'bottom-start' | 'bottom-end' | 'left' | 'left-start' | 'left-end' | 'right' | 'right-start' | 'right-end'

事件

事件名说明回调参数
submit内置 提交按钮 提交时触发的事件。
cancel内置 loading按钮 点击时触发的事件。
recordingChange内置语音识别状态变化时触发的事件。
trigger v1.1.6版本新增指令弹框发生变化时触发的事件。interface TriggerEvent{oldValue: string; newValue: string; isOpen: boolean; }

Ref 实例方法

属性名类型描述
openHeaderFunction打开输入框的自定义头部。
closeHeaderFunction关闭输入框的自定义头部。
clearFunction清空输入框的内容。
blurFunction移除输入框的焦点。
focusFunction聚焦输入框。 默认 focus('all') 聚焦整个文本,focus('start') 聚焦文本最前方,focus('end') 聚焦文本最后方。
submitFunction提交输入内容。
cancelFunction取消加载状态。
startRecognitionFunction开始语音识别。
stopRecognitionFunction停止语音识别。

插槽

插槽名参数类型描述
#header-Slot用于自定义输入框的头部内容。
#prefix-Slot用于自定义输入框的前缀内容。
#action-list-Slot用于自定义输入框的操作列表内容。
#footer v1.1.6版本新增-Slot用于自定义输入框的尾部内容。

功能特性

  1. 焦点控制:支持将焦点设置到文本最前方、最后方或选中整个文本,也可取消焦点。
  2. 自定义内容:提供头部、前缀、操作列表等插槽,允许用户自定义这些部分的内容。
  3. 提交功能:支持按 Shift + Enter 提交输入内容,提交后可执行自定义操作。
  4. 加载状态:可显示加载状态,模拟提交处理过程。
  5. 语音输入:支持语音输入功能,提升输入的便捷性。
  6. 清空功能:输入框可清空内容,方便用户重新输入。