Mention 提及
该组件是低代码平台中用于在文本输入过程中提及用户、标签或其他实体的智能输入框,基于 Element Plus 的 <el-mention> 封装,支持自定义触发前缀、动态搜索建议、文本/文本域切换,并深度集成表单容器(<el-form>)的数据绑定与校验体系。
基础属性
| 属性 | 类型 | 说明 |
|---|---|---|
触发字段的前缀 prefix | string | 触发提及菜单的字符(如 @),必须且只能为 1 个字符(默认 @) |
拆分提及的字符 split | string | 用于结束提及输入并插入空格等分隔符的字符(如空格 ' '),必须且只能为 1 个字符(默认空格) |
输入类型 type | enum | 可选:text(单行文本)、textarea(多行文本域) |
文本域高度是否自适应 autosize | boolean | 仅当输入类型为“文本域”时生效 |
文本域行数 rows | number | 固定行数,仅当类型为“文本域”且未启用自适应高度时生效 |
文本域最小行数 minRows | number | 自适应模式下的最小显示行数(仅文本域 + 启用 autosize 时生效) |
文本域最大行数 maxRows | number | 自适应模式下的最大显示行数(仅文本域 + 启用 autosize 时生效) |
触发搜索函数 search | function | $args[0] 为用户输入的查询关键词,需返回 { value, label, disabled } 格式的选项数组(支持异步) |
是否显示统计字数 showWordLimit | boolean | 需配合最大长度使用 |
最小长度 minlength | number | 输入内容最小字符数(整数) |
最大长度 maxlength | number | 输入内容最大字符数(整数) |
是否自动获取焦点 autofocus | boolean | 页面加载时自动聚焦到输入框 |
输入提示文本 placeholder | string | 未输入时的占位提示文字 |
| 表单项基础配置 | — | 包含标签宽度、布局控制等通用表单项设置(来自 formItemBaseDefine) |
高级属性
| 属性 | 类型 | 说明 |
|---|---|---|
| 表单项高级配置 | — | 包含字段名(prop)、标签文本(label)等核心绑定配置(来自 formItemAdvDefine) |
🔧 数据转换说明(关键!)
Mention 组件内部使用 { text: string, mentions: any[] } 作为绑定值,其中:
text:用户看到的完整文本(如"请 @张三 处理");mentions:为所选项的value数组(如['101', '102'])。
若需在表单中分别存储文本和提及 ID,可通过写入和读取函数转换,如下:
✅ 写入函数(propWriteFun)
$args[0] 为表单绑定属性,{ text: string, mentions: any[] },返回转换后的写入结果。
js
/** 同步返回结果 */
return {
content: $args[0].text, // 纯文本 → 字段 content
mentioned_user_ids: $args[0].mentions // 提及的 value 数组 → 字段 mentioned_user_ids
}$args[1] 为表单数据,将 { content: string, mentioned_user_ids: any[] },返回转换后的读取结果。
✅ 读取函数(propReadFun)
js
/** 同步返回结果 */
return {
text: $args[1].content || '',
mentions: $args[1].mentioned_user_ids || []
}事件
| 事件 | 触发时机 | 说明 |
|---|---|---|
change | 输入内容(含提及项)发生变化时 | 返回最终的字符串值(提及项通常以 prefix + value 形式嵌入文本中) |
💡 典型应用场景:评论区 @ 用户、协作文档中提及相关任务、聊天输入框中快速插入联系人等。
