基于 ElementUI Card 封装的列表渲染组件,一个卡片代表一条数据,支持分组、虚拟滚动、搜索筛选、排序等功能。
# 基本用法
复制代码
# 分组展示
复制代码
# 手风琴模式
复制代码
# 自定义卡片配置
通过 cardConfig 配置字段映射,自动渲染卡片内容。
复制代码
# 自定义渲染(插槽)
复制代码
# 虚拟滚动
大数据量场景下启用虚拟滚动,仅渲染可见区域的卡片。组件内部使用 XtScroll(原生滚动容器)作为滚动容器,提供流畅的滚动体验。
复制代码
# 搜索筛选
复制代码
# 排序
复制代码
# 多列布局
复制代码
# 加载更多
复制代码
# 属性说明
# 基础属性
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
data | Array | [] | 列表数据 |
title | String | '' | 列表标题 |
columns | Number | 1 | 列数(1/2/3) |
shadow | String | 'hover' | 卡片阴影('always' / 'hover' / 'never') |
cardBodyStyle | Object | {} | 卡片 body 样式 |
loading | Boolean | false | 是否加载中 |
emptyText | String | '暂无数据' | 空数据提示 |
# 分组配置
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
groupBy | String | '' | 分组字段名 |
groupLabel | String / Function | '' | 分组标题(空字符串显示分组值,字符串为字段名,函数返回自定义内容) |
expandAll | Boolean | true | 是否默认展开所有分组 |
accordion | Boolean | false | 手风琴模式(同时只展开一个分组) |
# 卡片配置
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
cardConfig | Object | { title: 'title', ... } | 卡片字段映射配置 |
cardConfig 子属性:
| 属性 | 类型 | 说明 |
|---|---|---|
title | String / Function | 卡片标题字段 |
subtitle | String / Function | 卡片副标题字段 |
content | String / Function | 卡片内容字段 |
image | String / Function | 卡片图片字段 |
tag | String / Function | 卡片标签字段 |
tagType | String / Function | 标签类型 |
footer | String / Function | 卡片底部字段 |
# 虚拟滚动
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
virtualScroll | Boolean | false | 是否启用虚拟滚动 |
height | Number / String | - | 容器高度 |
maxHeight | Number / String | - | 容器最大高度 |
itemHeight | Number | 160 | 每行卡片预估高度 |
bufferSize | Number | 3 | 缓冲区行数 |
# 搜索筛选
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
filterable | Boolean | false | 是否启用搜索 |
filterPlaceholder | String | '请输入搜索内容' | 搜索框占位文本 |
filterMethod | Function | - | 自定义筛选方法 (item, searchText) => boolean |
# 排序
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
sortable | Boolean | false | 是否启用排序 |
sortBy | String | '' | 排序字段 |
sortOrder | String | '' | 默认排序方向('ascending' / 'descending') |
sortMethod | Function | - | 自定义排序方法 (a, b) => number |
# 加载更多
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
loadMore | Boolean | false | 是否启用加载更多 |
hasMore | Boolean | false | 是否有更多数据 |
loadMoreText | String | '加载更多' | 加载更多按钮文本 |
loadMoreLoading | Boolean | false | 加载更多按钮加载状态 |
# 分页
| 属性 | 类型 | 默认值 | 说明 |
|---|---|---|---|
pagination | Object | null | 分页配置 { pageNum, pageSize, pageSizes } |
total | Number | 0 | 数据总数 |
# 事件
| 事件名 | 说明 | 参数 |
|---|---|---|
click-item | 点击卡片 | { item, groupKey } |
group-toggle | 分组展开/折叠 | { key, expanded } |
search | 搜索输入变化 | searchText |
sort-change | 排序变化 | { prop, order } |
load-more | 点击加载更多 | - |
size-change | 每页条数变化 | size |
page-change | 当前页变化 | page |
# 方法
| 方法名 | 说明 | 参数 |
|---|---|---|
scrollToTop() | 滚动到顶部 | - |
expandGroup(key) | 展开指定分组 | key |
collapseGroup(key) | 折叠指定分组 | key |
collapseAll() | 折叠所有分组 | - |
expandAllGroups() | 展开所有分组 | - |
# 插槽
| 插槽名 | 作用域 | 说明 |
|---|---|---|
default | { item, index, group } | 自定义卡片内容 |
group-title | { group, items, expanded } | 自定义分组标题 |
card-footer | { item, index } | 自定义卡片底部 |
toolbar | - | 工具栏区域(搜索和排序按钮右侧) |
empty | - | 自定义空状态 |
loading | - | 自定义加载状态 |