# Sender 消息发送组件
# 功能说明
消息发送组件,用于用户输入和发送消息,支持以下特性:
- 自适应高度的文本输入区域
- 支持两种布局变体(默认和上下布局)
- 内置语音识别功能(使用浏览器 Web Speech API)
- 可自定义的头部和底部内容
- 触发字符弹出框功能
- 多种提交方式(Enter/Shift+Enter)
- 内置操作按钮(发送、取消、清除、语音)
- 禁用和只读状态支持
# 使用示例
# 基础用法
基本消息发送组件使用,包含默认布局和基本功能。
复制代码
# 组件实例方法
使用组件实例调用方法示例。
复制代码
# 不同布局变体
通过 variant 属性配置不同布局样式。
复制代码
# 语音识别功能
内置语音识别功能,通过 allowSpeech 属性开启即可。调用浏览器原生的语音识别 API,在谷歌浏览器中使用,需要在魔法环境中才能正常使用。
注意
如果你不想使用内置的语音识别功能,可以通过 @recording-change 事件来监听录音状态,自行实现语音识别功能。
你也可以通过组件 ref 实例对象进行调用:
senderRef.value.startRecognition()触发开始录音senderRef.value.stopRecognition()触发结束录音
内置语音识别: 自定义语音识别:
复制代码
# 触发字符弹出框
通过 triggerStrings 配置触发字符,当输入这些字符时显示弹出框。可以通过 triggerPopoverWidth 和 triggerPopoverLeft 属性自定义弹出框的宽度和左偏移量。
复制代码
# 自定义操作按钮
通过 action-list 插槽自定义操作按钮。
复制代码
# 自定义头部和底部
注意
显示头部需要在挂载的时候手动调用组件的 openHeader方法
通过 header 和 footer 插槽自定义头部和底部内容。
复制代码
# 自定义输入框样式
通过 input-style 方便对输入框的样式透传
复制代码
# 属性
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| value / v-model | 绑定值 | String | '' |
| placeholder | 输入框占位文本 | String | '请输入内容' |
| autoSize | 输入框自适应配置 | Object | { minRows: 1, maxRows: 6 } |
| readOnly | 是否只读 | Boolean | false |
| disabled | 是否禁用 | Boolean | false |
| loading | 是否显示加载状态 | Boolean | false |
| clearable | 是否显示清除按钮 | Boolean | false |
| allowSpeech | 是否启用语音输入 | Boolean | false |
| submitType | 提交方式,可选 'enter' 或 'shiftEnter' | String | 'enter' |
| headerAnimationTimer | 头部动画持续时间(ms) | Number | 300 |
| inputWidth | 输入框宽度 | String | '100%' |
| variant | 布局变体,可选 'default' 或 'updown' | String | 'default' |
| showUpdown | 在 updown 变体下是否显示操作栏 | Boolean | true |
| submitBtnDisabled | 手动控制提交按钮禁用状态 | Boolean | - |
| inputStyle | 输入框样式透传 | Object | {} |
| triggerStrings | 触发弹出框的字符数组 | Array | [] |
| triggerPopoverVisible | 弹出框显示状态 | Boolean | false |
| triggerPopoverWidth | 弹出框宽度 | String | 'fit-content' |
| triggerPopoverLeft | 弹出框左侧偏移 | String | '0px' |
| triggerPopoverOffset | 弹出框偏移量 | Number | 8 |
| triggerPopoverPlacement | 弹出框位置 | String | 'top-start' |
# 方法
| 方法名 | 说明 | 参数 | 返回值 |
|---|---|---|---|
| blur | 移除焦点 | - | - |
| focus | 获取焦点 | type: 'all'/'start'/'end' | - |
| focusToStart | 聚焦到文本开头 | - | - |
| focusToEnd | 聚焦到文本末尾 | - | - |
| startRecognition | 开始语音识别 | - | - |
| stopRecognition | 停止语音识别 | - | - |
| submit | 触发提交 | - | - |
| cancel | 触发取消 | - | - |
| clear | 清除内容 | - | - |
# 事件
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| input | 输入值变化时触发 | (value: string) |
| submit | 点击提交按钮或按下提交快捷键时触发 | (value: string) |
| cancel | 点击取消按钮时触发 | (value: string) |
| recording-change | 语音识别状态变化时触发 | (isRecording: boolean) |
| trigger | 触发字符状态变化时触发 | { oldValue: string, newValue: string, triggerString: string, isOpen: boolean, cursorPosition?: number } |
| update:triggerPopoverVisible | 弹出框显示状态变化时触发 | (visible: boolean) |
# 插槽
| 插槽名 | 说明 | 作用域参数 |
|---|---|---|
| header | 自定义头部内容 | - |
| footer | 自定义底部内容 | - |
| prefix | 输入框前缀内容 | - |
| action-list | 自定义操作按钮列表 | - |
| trigger-popover | 触发字符弹出框内容 | { triggerString: string, readonly: boolean } |