@tripmini/tchat

0.1.9 • Public • Published

tchat 微信小程序聊天对话交互组件

安装

tchat是一个微信小程序组件,使用前需要下载及在开发工具构建npm包

npm

npm install @tripmini/tchat -S

使用

引入组件

{
  "usingComponents": {
    "tchat": "@tripmini/tchat/index"
  }
}

页面中使用(id是后续建议使用的参数,不是组件内部需要的值)

<tchat id="tchat" />

参数

属性 类型 默认值 必填 说明
load-config-funtion string - 必填 获取自定义配置的方法名,此方法需要在page.js中定义,示例参考下方
bind:layoutInitialized eventhandle - tchat布局需要计算,等待计算完成会触发此事件,需要在此事件发生之后再往容器里面添加内容,否则会有一些体验不好的问题
bind:sendTextMessage eventhandle - 输入完成一条文字消息(带表情)
bind:failIconTap eventhandle - 消息发送错误时,点击消息左测红色叹号图标时触发

注意

  1. 页面在使用自定义头部导航时,navbarHeight一定需要提供,否则会出现各种UI错位的问题

一些默认的配置信息

const config = {
  /**
   * 顶部导航栏占用的高度,单位px
   * 如使用自定义导航栏,则需要填入自定义导航栏高度,否则 0
   */
  navbarHeight: 0,
  /**
   * 最小录制语音时间
   * 单位毫秒,默认 1 * 1000
   */
  minVoiceDuration: 1 * 1000,
  /**
   * 最大录制语音时间
   * 单位毫秒,默认 60 * 1000
   */
  maxVoiceDuration: 60 * 1000,
  /**
   * 最小取消发送语音的移动距离
   * 单位px,默认 40
   */
  minCancelVoiceDistance: 40,
  /**
   * 日志工具,如提供,至少包含以下方法且需要支持任意参数个数及类型
   * 
   * + info
   * + error
   */
  logger: null,
  /**
   * 点击更多时,允许选择图片的数量,默认9
   */
  chooseImageCount: 9
}

示例

wxml

<tchat 
  id="tchat"
  load-config-funtion="getTchatCustomConfig" 
  bind:layoutInitialized="initConversation"
  bind:sendTextMessage="sendTextMessage"
  bind:failIconTap="resendMessage"
/>

js

// 使用tchat组件的js文件
Page({
    // 提供tchat配置
    getTchatCustomConfig() {
        return {
            navbarHeight: N, // 实际值,单位px
            chooseImageCount: N, // 实际值,1-9
            // ...
        }
    },
    // tchat布局初始化完成
    onLayoutInitialized() {
        // todo: 渲染历史消息
    },
    // 发送文字消息事件
    onSendTextMessage(event) {
        const { data } = event.detail
        console.log(data) // 文字消息内容
    },
    // 重发消息
    resendMessage(event) {
        const { id } = event.detail
        console.log(id) // 消息id,可以通过下文中方法获取消息实体
    }
})

API

Conversation

操作会话相关

参数(按顺序展示)

名称 类型 默认值 必填 说明
tchatComponent - 必填 tchat组件的实例
tim - 必填 已登录的IM实例

API

名称 说明
push(message) 向会话容器中添加一条状态为success的IM消息
bulkPush(messages) 向会话容器中添加多条状态为success的IM消息
delete(id) 根据消息id移除一条消息记录(仅在显示容器内移除,不涉及IM逻辑)
getMessageById(id) 根据IM消息id或者IM消息实体,搜索范围仅在使用Conversation操作的消息
场景:消息发送错误时,点击错误图标会给id信息,通过此方法获取IMMessage
sendTextMessage(toUserId, text) 向指定userId发送一条文字消息,返回Promise对象,可捕获错误进行后续处理(如遇到了屏蔽关键字)
// 在引入npm包时,注意不要使用vscode的智能提示
// 小程序的包构建在miniprogram_npm中,使用提示会导致找不到模块

import Conversation from '@tripmini/tchat/helper/Conversation'
// 已登录的IM实例
import tim from '...'

Page({
    onLoad() {
        this.tchat = this.selectComponent('#tchat')
    },
    // 提供tchat配置
    getTchatCustomConfig() {
        return {
            navbarHeight: N, // 实际值,单位px
            chooseImageCount: N, // 实际值,1-9
            // ...
        }
    },
    // tchat布局初始化完成
    onLayoutInitialized() {
        this.conversation = new Conversation(this.tchat, tim)
        this.loadMessages()
    },
    // 加载历史消息
    async loadMessages() {
        const list = await tim.getMessageList()
        // list 注意过滤系统消息,类似上次portal端问题
        this.conversation.bulkPush(list)
    },
    // 发送文字消息事件
    onSendTextMessage(event) {
        const { data } = event.detail
        this.conversation.sendTextMessage(fromUserId, data)
    },
    // 重发消息
    resendMessage(event) {
        const { id } = event.detail
        const message = this.conversation.getMessageById(id)
        console.log(message)
        // TODO: conversation将实现的功能
    }
})

Readme

Keywords

none

Package Sidebar

Install

npm i @tripmini/tchat

Weekly Downloads

3

Version

0.1.9

License

ISC

Unpacked Size

99.7 kB

Total Files

30

Last publish

Collaborators

  • wzqhaha
  • wanpan_11
  • channingliu
  • chimyeon
  • gaoneng1850
  • fennghuang