输入区域
输入区域是会话页面底部的内部模块,入口组件为 RCUIKit/pages/chat/message/messageInput/message-input.vue。它负责切换文本、表情、媒体工具栏和语音录制状态,并处理引用消息、草稿、正在输入状态及群聊 @。
效果预览


源码结构
| 源码 | 作用 |
|---|---|
messageInput/message-input.vue | 输 入区域入口,管理各面板状态,发送文本或引用消息,保存草稿和处理群聊 @ |
messageInput/message-input-face.vue | 内置 Emoji 表情列表 |
messageInput/message-input-toolbar.vue | 图片、视频、拍照和拍摄入口,以及媒体选择、权限检查和上传发送 |
messageInput/message-input-toolbar-item.vue | 工具栏单个操作项的图标与文字 |
messageInput/message-input-voice-recorder.vue | App、H5 以外小程序等平台的语音录制与发送 |
messageInput/message-input-voice-recorder-toutiao.vue | 抖音小程序的语音录制适配 |
messageInput/message-input-voice-recorder-base.vue | 录音按钮和手势状态的基础展示组件 |
message/mention-member-list.vue | 群聊成员选择面板,从 appData.groupMembersCache 读取成员 |
备注
源码目录名是 messageInput,其中 I 为大写。引用组件或修改路径时请保持大小写一致。
文本与引用消息
输入区域通过 conversationStore.openedConversation 确认当前会话,并调用 messageStore.sendMessage 发送消息:
- 普通文本构造
TextMessage。 - 回复消息时构造
ReferenceMessage,携带原消息 UID、发送者和内容。 - 文本为空时不发送;发送完成后清空输入内容和引用状态。
- 单聊输入过程中通过
typingStore.sendTyping发送文本正在输入状态,发送结束后解除限流。 - 输入区域卸载时,通过
conversationStore.updateCacheConversation保存当前会话草稿;再次进入时从openedConversation.draft恢复。
若要修改文本输入框高度、发送键行为、引用预览或草稿逻辑,编辑 message-input.vue 中的输入栏模板及对应方法。
表情面板
点击表情按钮后,message-input.vue 展示 message-input-face.vue。内置表情是 defaultFaces 数组中的 Unicode Emoji,点击后会插入到当前光标位置;面板同时提供删除和发送操作。
自定义表情列表时修改 message-input-face.vue 的 defaultFaces。如果要使用图片表情,还需要同步调整模板、数据结构和点击事件参数,不能只把数组元素替换为图片地址。