Skip to content

Conversations 会话管理组件 📱

介绍

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

代码演示

基础使用

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

时间分组与吸顶效果

  • today
    yesterday
    未分组

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

自定义分组排序

  • 📚 学习
    📊 工作
    🏠 个人
    📁 未分组

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

内置下拉菜单

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

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

内置下拉菜单按钮展示风格

使用 showBuiltInMenuType 属性,可以设置是否总是显示内置菜单按钮。

showBuiltInMenuType 属性的可选值有:

  • hover:鼠标悬停时显示内置菜单按钮(默认)
  • always:总是显示内置菜单按钮

自定义菜单交互

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

懒加载功能

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

自定义样式与分组标题

  • 📚 学习
  • 菜单测试项目 4
  • 菜单测试项目 5
  • 菜单测试项目 6
  • 菜单测试项目 7
📊 工作
  • 菜单测试项目 1 - 长文本效果演示文本长度溢出效果测试菜单测试项目 1 - 长文本效果演示文本长度溢出效果测试
  • 菜单测试项目 2
  • 菜单测试项目 3
  • 🏠 个人
  • 菜单测试项目 8
  • 菜单测试项目 9
  • 菜单测试项目 10
  • 菜单测试项目 11
  • 📁 未分组
  • 菜单测试项目 12
  • 菜单测试项目 13
  • 菜单测试项目 14
  • 通过插槽和样式属性自定义会话项外观及分组标题图标,支持悬停、激活、菜单打开状态的样式定制。

    属性

    属性名类型是否必填默认值描述
    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 系列属性自定义会话项外观
    • 深度插槽扩展:标签、分组标题、菜单内容均可通过插槽完全自定义
    • 响应式设计:支持自适应宽度和滚动条隐藏,适配不同容器尺寸