# vue-mchat **Repository Path**: tanh-coding/vue-mchat ## Basic Information - **Project Name**: vue-mchat - **Description**: 这是一款基于vue与elementu-ui开发的聊天室组件库,在UI上模仿了TIM及微信。在提供基础封装的同时,最大程度的增加扩展性。 - **Primary Language**: JavaScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 215 - **Created**: 2021-02-22 - **Last Updated**: 2021-02-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README

MChat

vue element-ui Build Status license

简体中文 | [English](README.en.md) # 如果觉得还行,请给一个👉 star,谢谢😎 ! 有疑问请加群。 ## 简介 ### 这是一款基于 vue.js 开发的聊天室组件库,在提供基础封装的同时,最大程度的增加扩展性。 下面是效果演示图: ![演示图](/doc/img/vue_mchat_demo.gif) MChat组件效果图: ![MChat群聊界面](/doc/img/MChat-group.png) ![MChat群聊界面1](/doc/img/MChat-say.png) IChat组件效果图: ![IChat群聊界面](/doc/img/IChat-group.png) ![IChat群聊界面1](/doc/img/IChat-Say.png) ![IChat群组信息](/doc/img/IChat-group_info.png) ![IChat系统消息信息](/doc/img/IChat-system.png) ## 🌰 加群获得群聊版本代码 [群聊演示地址](http://www.julymeteor.com/im/) [静态效果演示](http://www.julymeteor.com/chat/) - [Github](https://github.com/july-meteor/vue-mchat) - [Gitee](https://gitee.com/july-meteor/vue-mchat) ## 项目来由 ``` vue-mchat 是本人前端阶段性学习总结的项目,因为并非前端开发工程师所以还是有不少瑕疵。 如果有问题或者需求可以加群问,或者提 `Issues`! ``` *** #### 如何安装 * 使用 `npm` 安装 ``` bash npm install vue-mchat ``` ##### 使用 在`main.js`中引入 ``` bash # npm 下载方式 // 进入css import 'MChat/lib/MChat.css' //引入组件 import MChat from 'MChat' // 使用vue加载组件 Vue.use(MChat) # ``` #### 如何进行二次开发 ##### 方案一: 直接将 `pacages` 文件夹复制到你需要的项目,在 `main.js` 中引入 `vue-mchat`: ```JavaScript import App from './App.vue' import MChat from '../packages/index' Vue.use(MChat) ``` ##### 方案二: 在 `vue-mchat` 的基础上进行开发,通过打包成js库引入: 在 `vue-mchat` 目录下执行: ```bash npm run lib ``` 可获得 `lib` 文件其中包含 `MChat` 的编译文件库,将 `lib` 整个复制到项目里,在 `main.js` 中引入: ```JavaScript 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 扩展数据
### 初始化 ```JavaScript 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':'系统消息'}
```JavaScript [ { 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)` 上: ```html ``` bindEvent 包含以下事件
方法名 说明 参数
chatEvent 操作会话框触发,返回事件类型及窗口信息。具体事件看下表1 event,data
talkEvent 当你点击对话内容返回对话信息触发 (已经弃用) user,message
sendMessage 每当你发送一个消息,都可以通过该事件监听到。
回调参数接受一个object类型的值,携带发送的聊天信息
message
loadHistory 点击查看更多信息后触发,会返回一个回调方法 callback()
getMessage 监听接受的消息 user,message
uploadEvent 文件上传接口 data,callback(回调函数)
#### Event 初始化 `IChat` 数据: ```JavaScript this.$refs.IChat.setData(); ``` 更新群组列表 `groups`: ```JavaScript this.$refs.IChat.setGroups(); ``` 更新好友列表 `friends`: ```JavaScript this.$refs.IChat.setFriends(); ``` 更新系统消息列表 `messages`: ```JavaScript this.$refs.IChat.setSystemMessage(); ``` 新的系统消息: ```JavaScript this.$refs.IChat.newSystemMessage(); ``` 新消息: ```JavaScript 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交流群 ![共同进步](/doc/img/qq_group.png) ## Browsers support Modern browsers and Internet Explorer 10+. | ![IE](/doc/img/icon/ie10.png)
IE / Edge | ![Firefox](/doc/img/icon/Firefox.png)
Firefox | ![Chrome](/doc/img/icon/Chrome.png)
Chrome | ![](/doc/img/icon/Safari.png)
Safari | | --------- | --------- | --------- | --------- | | IE10, IE11, Edge| last 2 versions| last 2 versions| last 2 versions ## License [MIT](/LICENSE) Copyright (c) 2020-present july-meteor