vue-mchat

a vue chat components

Usage no npm install needed!

<script type="module">
  import vueMchat from 'https://cdn.skypack.dev/vue-mchat';
</script>

README

MChat

vue element-ui Build Status license

简体中文 | English

如果觉得还行,请给一个👉 star,谢谢😎 ! 有疑问请加群。

简介

这是一款基于 vue.js 开发的聊天室组件库,在提供基础封装的同时,最大程度的增加扩展性。

下面是效果演示图:

演示图

MChat组件效果图:

MChat群聊界面

MChat群聊界面1

IChat组件效果图:

IChat群聊界面

IChat群聊界面1

IChat群组信息

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+.

IE
IE / Edge
Firefox
Firefox
Chrome
Chrome

Safari
IE10, IE11, Edge last 2 versions last 2 versions last 2 versions

License

MIT

Copyright (c) 2020-present july-meteor