README
MChat
简体中文 | English
如果觉得还行,请给一个👉 star,谢谢😎 ! 有疑问请加群。
简介
这是一款基于 vue.js 开发的聊天室组件库,在提供基础封装的同时,最大程度的增加扩展性。
下面是效果演示图:

MChat组件效果图:


IChat组件效果图:




🌰 加群获得群聊版本代码
项目来由
vue-mchat 是本人前端阶段性学习总结的项目,因为并非前端开发工程师所以还是有不少瑕疵。
如果有问题或者需求可以加群问,或者提 `Issues`!
如何安装
使用
npm安装npm install vue-mchat
使用
在main.js中引入
# npm 下载方式
// 进入css
import 'MChat/lib/MChat.css'
//引入组件
import MChat from 'MChat'
// 使用vue加载组件
Vue.use(MChat)
#
如何进行二次开发
方案一:
直接将 pacages 文件夹复制到你需要的项目,在 main.js 中引入 vue-mchat:
import App from './App.vue'
import MChat from '../packages/index'
Vue.use(MChat)
方案二:
在 vue-mchat 的基础上进行开发,通过打包成js库引入:
在 vue-mchat 目录下执行:
npm run lib
可获得 lib 文件其中包含 MChat 的编译文件库,将 lib 整个复制到项目里,在 main.js 中引入:
import '../lib/MChat.css'
import MChat from '../lib/MChat.umd'
Vue.use(MChat)
组件API
可以根据 src/test/ 下的 Test.vue 进行静态调试
MChat 与 IChat 的区别
MChat 只具备有基础的 WebIM 功能,它没有用户管理及群组模块,则意味着你需要自己掌控数据变化。适用场景:客服系统
IChat 是模仿 Mac 上的 QQ 进行设计的,它封装了用户群组管理的数据模块,你只需要对接API就能使用。适用场景:独立的 WebIM
MChat
Attributes
config MChat配置信息
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| rightBox | false | boolean | 是否有右侧抽屉,如果为true,则右侧面板显示,可以加入自定义组件 |
| brief | true | boolean | 是否开启简约模式,Chat可以被缩小 |
| notice | false | boolean | 是否开启桌面消息提醒,即在浏览器之外的提醒 |
| voice | false | boolean | 是否开启消息提醒 |
mine 我的信息
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
| id | 10001 | string/number | 我的id |
| username | july-meteor | string | 我的昵称 |
| sign | 与其感慨路难行,不如马上出发! | string | 签名 |
| avatar | '/avatar/avatar_meteor.png' | url | 头像 |
| data | 你需要的数据 | object | 扩展数据 |
chats 会话属性
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| id | 10002 | string/number | 会话id |
| name | 海喵突基队 | string | 会话名称 |
| type | group | string | 会话类型 group/friend 根据你的需要自行扩展 |
| avatar | /images/group_1.jpg | url | 会话头像 |
| online | true | boolean | type类型为friend |
Content talk content format
| 类型 | 格式 | 说明 | 参考值 |
|---|---|---|---|
| Text | ---- | 普通文字信息 | hello july meteor |
| emoji | emoji[url] | 表情 | emoji[汗] |
| Audio | audio[url] | 视频消息 | audio[https://www.w3school.com.cn/i/horse.mp3] |
| Video | video[url] | 音频 | video[https://www.w3school.com.cn/i/movie.mp4] |
| Image | img[url] | 图片类型 | img[/emoticon/emoticon_1.jpg] |
Methods
| 方法名 | 说明 | 参数 |
|---|---|---|
| chatEvent | 操作会话框触发,返回事件类型及窗口信息。具体事件看下表1 | event,data |
| talkEvent | 当你点击对话内容返回对话信息触发 (已经弃用) | user,message |
| sendMessage | 每当你发送一个消息,都可以通过该事件监听到。 回调参数接受一个object类型的值,携带发送的聊天信息 | message |
| loadHistory | 点击查看更多信息后触发,会返回一个回调方法 | callback() |
| getMessage | 监听接受的消息 | user,message |
| uploadEvent | 文件上传接口 | data,callback(回调函数) |
窗口级事件
| 事件名称 | 说明 | 参数 |
|---|---|---|
| chatTop | 会话置顶 | { id: 会话id, name: 会话名称 ,type: 会话类型 } |
| chatMin | 窗口最小化 | { id: 会话id, name: 会话名称 ,type: 会话类型 } |
| chatMax | 窗口最大化 | { id: 会话id, name: 会话名称 ,type: 会话类型 } |
| removeChat | 移除对话框 | { id: 会话id, name: 会话名称 ,type: 会话类型 } |
| clickUser | 当你点击聊天框内用户头像 | {id: 用户Id, mine: 是否是自己 , username:用户名称 } |
MChat Events
| 事件名称 | 说明 | 回调参数/使用方法 |
|---|---|---|
| getMessage | 监听接受的消息 | 参考下方示例1 |
| getCurrent | 获取当前会话 | Objectg |
示例1
let message = {
//消息来源用户名
username: '七月'
//消息来源用户头像
avatar: avatar,
//消息的来源ID(如果是私聊,则是用户id,如果是群聊,则是群组id)
id: 1001,
//聊天窗口来源类型,从发送消息传递的to里面获取
type: 'group',
//消息内容 请看 Attributes 中的content说明
content:'你好',
//消息id,可不传。除非你要对消息进行一些操作(如撤回)
cid: 0,
//是否我发送的消息,如果为true,则会显示在右方
mine: true,
//消息的发送者id(比如群组中的某个消息发送者),可用于自动解决浏览器多窗口时的一些问题
fromid: 10002,
//服务端时间戳毫秒数。注意:如果你返回的是标准的 unix 时间戳,记得要 *1000
timestamp: new date(),
};
// 方法一、 通过内置MChat的event 随时随地引用
this.$im.emit("getMessage", message);
// 方法二、
this.$refs[MChatname].getMessage(message)
IChat
Attributes
| 参数 | 类型 | 默认值 | 说明 |
|---|
mine 我的信息
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
| id | 10001 | string/number | 我的id |
| username | july-meteor | string | 我的昵称 |
| sign | 与其感慨路难行,不如马上出发! | string | 签名 |
| avatar | '/avatar/avatar_meteor.png' | url | 头像 |
| data | 你需要的数据 | object | 扩展数据 |
初始化
let data = {
// 好友列表
friends: this.friendList,
// 群组列表
groups: this.groupList,
// 系统消息列表
messages: this.systemMessage,
};
this.$nextTick(() => {
this.$refs.IChat.setData(data);
});
groups 群组列表数据格式
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
| id | 10001 | string/number | 群组Id |
| name | 小小甜心 | string | 群组名称 |
| mine | null | string | 当前人在群组里的昵称 |
| avatar | '/avatar/avatar_meteor.png' | url | 头像 |
| sign | 8月22日 17:44 | string | 最后发言时间 |
| introduce | 这里是共同进步 | string | 群介绍 |
| userList | [{
id: 1,
cid: 123401,
name: "怜",
remark: '剑圣',
online: false,
avatar: require("../public/avatar/lian.png"),
sign: "继续下去的话优衣会生气的。"
}] |
object | 成员数组,online 表示是否在线 |
friends 好友列表数据格式
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
| id | 10001 | string/number | 好友分组Id |
| name | 好友 | string | 分组名称 |
| userList | [ {
id: 1,
cid: 123401,
name: "怜",
remark: '剑圣',
online: true,
avatar: require("../public/avatar/lian.png"),
sign: "继续下去的话优衣会生气的。"
},] |
object | 分组成员,online 表示是否在线 |
messages 系统消息列表数据格式
| 参数 | 默认值 | 类型 | 说明 |
|---|---|---|---|
| id | null | string/number | 消息Id |
| message | null | string | 消息内容 |
| timestamp | null | string | 时间戳 |
| from |
{
id: 0,
name: '真琴',
avatar: require("../public/avatar/zhenqin.png"),
},
|
Object | 发送人 |
| to |
{
id: 0,
name: '真琴',
avatar: require("../public/avatar/zhenqin.png"),
},
|
Object | 发送目标人 |
| type | null | string | 消息类型包含以下几张类型{ 'applyFriend':'申请好友', 'acceptFriend':'接受好友申请', 'rejectFriend':'拒接好友申请', 'accept':'被拒接好友申请', 'reject':'被拒接好友申请', 'system':'系统消息'} |
[
{
id: 1,
from:
{
id: 0,
name: '草野优衣',
avatar: require("../public/avatar/ue.png"),
},
to:
{
id: 1,
name: '七月',
avatar: require("../public/avatar/avatar_meteor.png"),
},
type: 'acceptFriend',
message: '111',
timestamp: undefined
},
]
Methods
IChat 将全部事件集中到了 bindEvent(event, data) 上:
<IChat ref="IChat" :config="config" :mine="mine" @bindEvent="handleEvent">
</IChat>
bindEvent 包含以下事件
| 方法名 | 说明 | 参数 |
|---|---|---|
| chatEvent | 操作会话框触发,返回事件类型及窗口信息。具体事件看下表1 | event,data |
| talkEvent | 当你点击对话内容返回对话信息触发 (已经弃用) | user,message |
| sendMessage | 每当你发送一个消息,都可以通过该事件监听到。 回调参数接受一个object类型的值,携带发送的聊天信息 | message |
| loadHistory | 点击查看更多信息后触发,会返回一个回调方法 | callback() |
| getMessage | 监听接受的消息 | user,message |
| uploadEvent | 文件上传接口 | data,callback(回调函数) |
Event
初始化 IChat 数据:
this.$refs.IChat.setData();
更新群组列表 groups:
this.$refs.IChat.setGroups();
更新好友列表 friends:
this.$refs.IChat.setFriends();
更新系统消息列表 messages:
this.$refs.IChat.setSystemMessage();
新的系统消息:
this.$refs.IChat.newSystemMessage();
新消息:
this.$refs.IChat.getMessage();
** 如有问题请先看上述使用文档和文章,若不能满足,欢迎 issue 或者 发邮件给我,根据star和watch的人数进行下一步更新
MChat-right-box
** 通过 Scoped slot 可以获取到 chat (内部的状态管理)的数据,用法参考 demo。
MChat-group-list
Attributes
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| notices | array | id, type, title | 群公告栏 |
| userList | array | id, name,type, avatar | 成员信息 |
| filter-user-method | Function(value, data) | — | 对成员节点进行筛选时执行的方法,返回 true 表示这个节点可以显示,返回 false 则表示这个节点会被隐藏 |
Methods
| 方法名 | 说明 | 参数 |
|---|---|---|
| click | 点击群公告,或者成员触发 | event |
QQ交流群

Browsers support
Modern browsers and Internet Explorer 10+.
| IE10, IE11, Edge | last 2 versions | last 2 versions | last 2 versions |
License
Copyright (c) 2020-present july-meteor