推荐一款基于Vue的前端IM聊天组件
基于 VUE 2.0 的 IM 聊天组件
特性
- 拥有丰富的自定义功能,任意搭配出不同风格的聊天界面
- 可以单独使用内部组件,比如编辑框/按钮/popover 等
- 不依赖任何第三方组件库
- 可任意扩展的聊天消息类型
安装
- npm install lemon-imui -S
界面:
使用
import LemonIMUI from 'lemon-imui'
Vue.use(LemonIMUI)
<lemon-imui ref="IMUI" />
示例
教程
Contents
• contact {
//用户唯一ID
id: "",
//昵称
displayName: "工作协作群",
//头像URL
avatar: "http://upload.qqbodys.com/img/weixin/20170804/ji5qxg1am5ztm.jpg",
//会话类型 single | many
type: "single",
//通讯录索引,默认根据字母排序,也可以手动排序“[1]最近联系人”
index: "A",
//未读消息
unread: 0,
//最近消息时间
lastSendTime: 1566047865417,
//最近消息内容
lastContent: "2"
}
• message {
//消息唯一ID
id: "",
status: "succeed",
//消息类型 voice | file | video | image | text
type: "text",
//消息发送时间
sendTime: 1572415923000,
//消息内容 | URL
content: generateRandWord(),
//文件大小
fileSize: 1231,
//文件名称
fileName: "asdasd.doc",
//当前会话ID
toContactId:"",
//发送消息的用户
fromUser:{
id: "system",
displayName: "系统测试",
avatar: "http://upload.qqbodys.com/allimg/1710/1035512943-0.jpg"
};
}
• menu {
//导航名称, 保留字段 lastMessages 和 contacts
name: "custom1",
//鼠标停留时显示文字
title: "自定义按钮1",
//未读角标
unread: 0,
//外观
render: menu => {
return <i class="lemon-icon-attah" />;
},
//打开内容
renderContainer: () => {
return <div>自定义</div>;
},
//强制显示在底部
isBottom: true
}
Props
• user {
id:'',
avatar:'',
displayName:'',
}
- currentContactId 当前会话联系人 ID
- currentContact 当前会话联系人信息
- messageTimeFormat 消息列表时间格式化函数
- contactTimeFormat 联系人时间格式化规则
- hideDrawer 是否隐藏抽屉
- hideMenuAvatar 是否隐藏导航头像
- hideMenuAvatar 是否隐藏导航
Methods
- initMenus([menu]);
初始化导航 - initContacts([contact]);
初始化联系人
• initEmoji() 初始化表情 IMUI.initEmoji([
{
label: '表情',
children: [
{
name: '1f600',
title: '微笑',
src: 'https://twemoji.maxcdn.com/2/72x72/1f600.png'
},
{
name: '1f62c',
title: '微笑',
src: 'https://twemoji.maxcdn.com/2/72x72/1f62c.png'
}
]
},
{
label: '收藏',
children: [
{
name: '1f62c',
title: '微笑',
src: 'https://twemoji.maxcdn.com/2/72x72/1f62c.png'
}
]
}
])
- appendMessage(message)
在当前聊天窗口插入新消息 - removeMessage(messageId, contactId)
删除聊天消息 - updateMessage(messageId, contactId, message)
修改聊天聊天消息 - updateContact(contactId,contact)
修改联系人 - getMessages(contactId)
返回所有本地消息,传入 contactId 只返回与该联系人的消息 - getContacts()
获取所有联系人 - openDrawer(vnode)
打开抽屉 - closeDrawer()
关闭抽屉 - changeDrawer(vnode)
切换抽屉显示 - changeMenu(menuName)
切换导航 - changeContact(contactId)
切换聊天对象 - messageViewToBottom()
将当前聊天窗口滚动到底部 - setLastContentRender(messageType, render)
配置联系人列表最新消息的渲染函数 IMUI.setLastContentRender('image', message => { return <span>[最新图片]</span> }) - lastContentRender(message) 根据 message 渲染联系人列表最新消息 DOM IMUI.updateContact(contact.id, { lastContent: IMUI.lastContentRender(message) })
Scoped Slot
- cover
自定义聊天封面 - contact-title 参数{ contact }
自定义联系人标题 - message-sidebar
插入到最新消息列顶部 - contact-sidebar
插入到联系人列顶部 - contact-info 参数{ contact }
自定义联系人信息
Events
- change-menu(menuName)
切换导航 - change-contact(contact)
切换导航会话 - pull-messages(contact,next)
拉取新消息
- next([message],isEnd) [isEnd 是否无更多数据]
- message-click(event, key, message)
- event 事件
- key 触发目标
- message 消息内容
- menu-avatar-click()
点击导航头像 - send(message, next, file)
- message 当前消息体
- next(message) 调用该函数完成消息发送
- file 上传的文件