# EditorSender 编辑输入框
# 功能说明
EditorSender 是一个功能强大的富文本输入组件,基于 ChatArea 构建,提供了丰富的文本编辑和标签插入功能,特别适合需要复杂内容输入的场景,如 AI 对话、模板编辑等。主要特性包括:
- 富文本编辑能力,支持多种标签类型(选择标签、输入标签、用户标签、自定义标签)
- @ 提及功能,支持异步加载用户列表
- 自定义触发符功能(如 #、! 等)
- 灵活的弹窗系统,支持内置弹窗和自定义弹窗
- 多种布局变体(默认布局和上下布局)
- 可扩展的插槽系统
- 完善的 API 接口,支持程序化操作
- 更多功能请前往 ChatArea (opens new window)查看
# 使用示例
# 基础用法
最简单的使用方式,提供基本的富文本输入功能。
复制代码
# 标签功能
支持多种标签类型的插入和管理,包括选择标签、输入标签等。
复制代码
# @ 提及功能
支持 @ 用户功能,可以配置静态用户列表或异步加载。
静态用户列表
异步加载用户
复制代码
# 自定义触发符
可以配置自定义触发符,如 #话题、!工具 等。
复制代码
# 布局变体
提供两种布局模式:默认布局和上下布局。
默认布局
上下布局
复制代码
# 自定义弹窗
支持完全自定义弹窗,满足特殊交互需求。
复制代码
# 高级功能
展示编辑器的所有高级功能,包括文本操作、标签插入、混合内容等。
复制代码
# 属性
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| placeholder | 输入框占位文本 | String | '请输入内容' |
| device | 设备类型,影响弹窗交互方式,可选 'pc'、'h5' | String | 'pc' |
| autoFocus | 是否自动聚焦 | Boolean | false |
| variant | 布局变体,可选 'default'、'updown' | String | 'default' |
| selectList | 选择标签配置列表 | Array | [] |
| userList | 用户列表,用于 @ 功能 | Array | [] |
| customTrigger | 自定义触发符配置 | Array | [] |
| maxLength | 最大字符数限制 | Number | undefined |
| submitType | 提交快捷键,可选 'enter'、'shiftEnter' | String | 'enter' |
| customStyle | 自定义输入框样式 | Object | {} |
| loading | 加载状态 | Boolean | false |
| disabled | 是否禁用 | Boolean | false |
| clearable | 是否显示清空按钮 | Boolean | false |
| headerAnimationTimer | 头部动画时长(ms) | Number | 300 |
| asyncMatchFun | 异步匹配函数,用于 @ 功能 | Function | undefined |
| customDialog | 是否使用自定义弹窗 | Boolean | false |
# selectList 配置项
[
{
dialogTitle: '对话框标题',
key: '唯一标识',
options: [
{
id: '选项ID',
name: '选项名称',
preview: '预览图URL(可选)',
},
],
},
];
# userList 配置项
[
{
id: '用户ID',
name: '用户名',
avatar: '头像URL(可选)',
},
];
# customTrigger 配置项
[
{
dialogTitle: '对话框标题',
prefix: '触发符(如 #、!)',
tagList: [
{
id: '标签ID',
name: '标签名称',
},
],
},
];
# 方法
| 方法名 | 说明 | 参数 |
|---|---|---|
| getCurrentValue | 获取当前编辑器内容 | - |
| focusToStart | 将光标移到开头 | - |
| focusToEnd | 将光标移到末尾 | - |
| onBlur | 失去焦点 | - |
| selectAll | 全选内容 | - |
| onClear | 清空内容 | (text?: string) |
| setText | 插入文本 | (text: string) |
| setHtml | 插入 HTML | (html: string) |
| setSelectTag | 插入选择标签 | (key: string, tagId: string) |
| setInputTag | 插入输入标签 | (key: string, placeholder: string, defaultValue?: string) |
| setUserTag | 插入用户标签 | (userId: string) |
| setCustomTag | 插入自定义标签 | (prefix: string, id: string) |
| setMixTags | 设置混合内容 | (tags: Array) |
| openSelectDialog | 打开选择弹窗 | (option: { key, elm, beforeText?, afterText? }) |
| openTipTag | 显示提示标签 | (options: { tagLabel, popoverLabel }) |
| closeTipTag | 关闭提示标签 | - |
| customSetUser | 自定义弹窗设置用户 | (user: object) |
| customSetTag | 自定义弹窗设置标签 | (prefix: string, tag: object) |
| updateSelectTag | 更新选择标签 | (elm: Element, tag: object) |
# 事件
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| submit | 提交时触发 | { text, html, inputTags, userTags, selectTags, customTags } |
| change | 内容变化时触发 | - |
| cancel | 取消时触发 | - |
| show-at-dialog | 触发 @ 弹窗时 | - |
| show-select-dialog | 触发选择弹窗时 | (key: string, elm: Element) |
| show-tag-dialog | 触发自定义标签弹窗时 | (prefix: string) |
# 插槽
| 插槽名 | 说明 |
|---|---|
| header | 头部内容 |
| footer | 底部内容 |
| prefix | 前缀内容 |
| action-list | 操作按钮列表 |
# 注意事项
- 性能考虑:
maxLength配置会带来较大的性能开销,非必要情况下不建议设置 - 自定义弹窗:当
customDialog为 true 时,需要自行实现所有弹窗逻辑 - 异步加载:使用
asyncMatchFun时,函数需要返回符合用户列表格式的数组 - 设备适配:
device属性会影响弹窗的交互方式,移动端建议使用自定义弹窗 - HTML 插入:通过
setHtml插入的内容必须是行内或行内块元素