Skip to content

CpChat 聊天面板

完整聊天模板:消息列表 + 逐条翻译 + 可自定义功能栏 + 输入发送。功能栏内置目标语言选择成员多选/全选actions 插槽放业务自定义按钮;可配置 single-peer 切到「只显示当前聊天人」模式。

基础用法

基础用法
点每条消息下的「翻译」按钮,按功能栏当前目标语言翻译并展示在原文下方;切语言或重复点会取消上一次在途翻译。功能栏「成员」内置多选/全选,「@提及」是 actions 插槽自定义按钮。顶部开关切换群聊 / 单人模式。
显示代码 ▼

翻译契约

组件不绑翻译服务,通过 translate 透传给业务侧接入自己的翻译接口。功能栏的目标语言选择器决定翻译目标:

ts
async function translate(
  text: string,
  targetLang: string,
  ctx: { signal: AbortSignal }, // 切语言/重复点时取消上一次
): Promise<string> {
  const { data } = await http.post("/api/translate", { text, to: targetLang }, { signal: ctx.signal });
  return data.result;
}
  • 不传 translate 时不显示翻译入口
  • 每条消息独立的并发守卫:切换目标语言或连点,只采纳最后一次结果
  • languages 自定义目标语言选项(默认 英/中/日)

功能栏与单人模式

能力说明
目标语言选择translate 存在时内置,切换即 @language-change
成员多选/全选非单人模式且 members 非空时内置,变化 @members-change
#actions 插槽自定义按钮,作用域参数拿到 selectedIds
single-peer + peer「只显示当前聊天人」:隐藏成员多选,顶栏显示对方

消息靠左/右由 current-user-idmessage.senderId 是否相等决定。发送不落地——@send 抛出文本,消息追加由父级控制(受控 messages)。

API

属性 Props

属性说明类型默认值
messages消息列表(受控)ChatMessage[]() => []
members成员列表(功能栏多选用)ChatMember[]() => []
current-user-id当前用户 id,用于判定消息左右string | number
translate翻译实现;不传则不显示翻译入口Function
languages目标语言选项ChatLanguage[]() => [ { label: "英语", value: "en" }, { label: "中文…
default-lang默认目标语言string
single-peer只显示当前聊天人:隐藏成员多选,顶栏显示 peerboolean
peer单人模式的聊天对象ChatMember
titlestring"群聊"
placeholderstring"输入消息,Enter 发送…"
disabledboolean
heightnumber | string460

事件 Events

事件说明回调参数
@send发送消息(父级负责追加到 messages)(string)
@members-change功能栏成员勾选变化(Array)
@language-change功能栏目标语言变化(string)
@translate-error翻译失败(ChatMessage)

方法 Expose

方法(ref 调用)说明
scrollToBottom
getSelectedIds当前功能栏勾选的成员 id
clearTranslations清空所有译文

插槽 Slots

插槽说明作用域参数
messagemessage
actionsselected-ids