Skip to content

Conversations 会话管理组件 📱

介绍

Conversations 是一个基于 Vue 3 和 Element Plus 开发的会话管理组件,支持分组展示、菜单交互、滚动加载、自定义样式等功能。适用于消息列表、文件管理、任务分组等场景,通过灵活的配置和插槽扩展,满足多样化的业务需求。

代码演示

基础使用

通过 @change 事件 获取选中的会话信息。 v-model:active 绑定当前选中的会话。

时间分组与吸顶效果

自动根据会话项的 group 字段分组,滚动时分组标题吸顶显示,提升导航体验。

自定义分组排序

通过 groupable 属性传入排序函数,自定义分组顺序(如:学习 > 工作 > 个人 > 未分组)。

内置下拉菜单

内置基础菜单功能(重命名、删除),支持菜单命令回调,轻松实现会话项的快捷操作。

@menu-command 触发内置的菜单点击事件。

自定义菜单交互

通过插槽扩展菜单内容,支持图标、文本及自定义命令,满足复杂业务逻辑。

懒加载功能

滚动至底部时自动触发加载更多数据,支持加载状态显示,优化大数据量场景性能。

自定义样式与分组标题

通过插槽和样式属性自定义会话项外观及分组标题图标,支持悬停、激活、菜单打开状态的样式定制。

属性

属性名类型是否必填默认值描述
itemsConversationItem<T>[][]会话项数据列表,包含 labelgroupdisabled 等字段
groupableboolean | GroupableOptionsfalse是否启用分组功能,传入对象可自定义分组排序(sort 函数)
showBuiltInMenubooleanfalse是否显示内置菜单(重命名、删除)
loadMore() => void-懒加载回调函数,滚动至底部时触发
loadMoreLoadingbooleanfalse加载更多状态,控制加载动画显示
showToTopBtnbooleanfalse是否显示返回顶部按钮
labelKeystring'label'会话项标签字段名
rowKeystring'id'会话项唯一标识字段名
itemsStyleCSSProperties{}会话项默认样式
itemsHoverStyleCSSProperties{}会话项悬停样式
itemsActiveStyleCSSProperties{}会话项激活样式
itemsMenuOpenedStyleCSSProperties{}会话项菜单打开时样式

插槽

插槽名参数描述
#groupTitle{ group: GroupItem }自定义分组标题,支持添加图标或特殊样式
#label{ item: ConversationItem<T> }自定义会话项标签内容,支持文本溢出处理或富文本
#more-filled{ item, isHovered, isActive, isMenuOpened, isDisabled }会话项右侧附加内容,显示状态标识(如:禁用标记、操作图标)
#menu{ item: ConversationItem<T> }自定义菜单内容,支持按钮、图标或复杂交互组件
#header-容器头部插槽,用于添加搜索栏、筛选按钮等自定义内容
#footer-容器底部插槽,用于添加分页、统计信息等自定义内容

事件

事件参数描述
@menuCommand(command: ConversationMenuCommand, item: ConversationItem): void菜单命令回调,支持重命名、删除等操作。如果你选择自定义菜单,这个方法失效,需要自行处点击菜单的逻辑。
:loadMore--绑定懒加载回调,滚动至底部时触发

功能特性

  1. 灵活分组管理
  • 自动根据 group 字段分组,未分组项统一归至“未分组”标题下
  • 支持自定义分组排序(通过 groupable.sort 函数),实现业务逻辑定制
  • 分组标题吸顶显示,滚动时保持导航可见性
  1. 丰富的交互支持
  • 内置基础菜单(重命名、删除),支持通过 @menu-command 监听命令回调
  • 自定义菜单插槽,轻松扩展分享、编辑等复杂操作
  • 会话项状态样式独立配置(默认、悬停、激活、菜单打开),视觉反馈清晰
  1. 性能优化
  • 懒加载功能:滚动至底部自动加载更多数据,减少初始渲染压力
  • 虚拟滚动(规划中):支持超大列表场景,提升内存使用效率
  1. 高度可定制
  • 全量样式属性:通过 itemsStyle 系列属性自定义会话项外观
  • 深度插槽扩展:标签、分组标题、菜单内容均可通过插槽完全自定义
  • 响应式设计:支持自适应宽度和滚动条隐藏,适配不同容器尺寸