ProList 高级列表
在 uniboot-ui 的基础组件之上提供的 高级列表:支持 request 分页加载、网格布局、关键字段映射(metas)、行勾选(rowSelection)、展开(expandable),并提供一组可覆盖的插槽以快速搭建「卡片列表 / 商品列表 / 任务列表」等页面。
基础用法
最推荐的用法是通过 metas 把数据映射到列表的 title / subTitle / description / content / actions / extra 等区域;需要更复杂的内容时,再使用同名插槽覆盖。
高级列表
request 与分页
当提供 request 时,ProList 会在以下场景触发请求:
- 初次渲染(
manualRequest !== true) - 分页页码/每页条数变化
- 关键词搜索回车或点击查询
- 调用实例方法
reload()/run(true|false)
request 入参为:
current:当前页(从 1 开始)pageSize:每页条数keyword:关键词(仅在showSearch下由内置搜索框维护)query:保留字段(目前用于扩展,默认空对象)
返回值为 { data, total, success? }:
data:当前页列表total:总条数(用于分页)success: false时不更新列表(仍会结束 loading)
metas(字段映射)
metas 用于把 record 的字段映射到各个区域:
- 对象形式:
{ dataIndex, render? } - 函数形式:
(record, index) => VNodeChild
ts
const metas = {
title: { dataIndex: 'name' },
subTitle: (r) => `负责人:${r.owner}`,
actions: (r) => [
/* ... */
],
}当同时提供 metas.xxx 与 #xxx 插槽时,插槽优先。
行选择 rowSelection
配置 rowSelection 可展示每项左侧勾选框,并通过 v-model:selected-row-keys 或 rowSelection.onChange 获取选择结果。
vue
<pro-list
row-key="id"
v-model:selected-row-keys="selectedKeys"
:row-selection="{
selectedRowKeys: selectedKeys,
onChange: (keys, rows) => console.log(keys, rows),
}"
/>展开 expandable
当提供 expandable 且存在 #expandedRowRender 插槽时,会显示「展开/收起」按钮。
vue
<pro-list
row-key="id"
v-model:expanded-row-keys="expandedKeys"
:expandable="{ expandedRowKeys: expandedKeys }"
>
<template #expandedRowRender="{ item }">
<div>展开内容:{{ item }}</div>
</template>
</pro-list>网格 grid
传入 grid 后,列表将使用 CSS Grid 布局:
vue
<pro-list :grid="{ column: 2, gutter: 12, minItemWidth: '320px' }" />插槽
| 名称 | 说明 | 作用域参数 |
|---|---|---|
| headerTitle | 头部标题区 | — |
| headerActions | 头部操作区 | — |
| title | 列表项主标题 | { item, index } |
| subTitle | 列表项副标题 | { item, index } |
| description | 列表项描述 | { item, index } |
| avatar | 列表项头像/缩略图 | { item, index } |
| content | 列表项主内容 | { item, index } |
| actions | 列表项操作区 | { item, index } |
| extra | 列表项右侧额外区 | { item, index } |
| expandedRowRender | 展开内容 | { item, index } |
ProList API
ProList 属性
| 名称 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| request | 远程请求(可选;不传则使用 dataSource) | Function | — |
| dataSource | 静态数据(无 request 时本地分页) | array | — |
| rowKey | 行主键字段名或函数 | string / Function | 'id' |
| headerTitle | 头部标题文案 | string | — |
| headerActions | 头部操作区(简单场景直接传 VNode) | any | — |
| metas | 字段映射 | object | — |
| showActions | actions 显示时机 | enum | 'always' |
| split | 是否显示分割线(边框效果) | boolean | true |
| bordered | 容器是否带边框 | boolean | false |
| grid | 网格布局配置 | object | — |
| rowSelection | 行选择配置;false 关闭 | object / boolean | — |
| expandable | 展开配置;false 关闭 | object / boolean | — |
| pagination | 分页配置;false 隐藏分页条 | boolean / object | true |
| defaultPageSize | 默认每页条数(pagination.defaultPageSize 优先) | number | 10 |
| manualRequest | 为 true 时首屏不自动请求 | boolean | false |
| showSearch | 是否显示关键词搜索条 | boolean | false |
| searchPlaceholder | 关键词输入框占位符 | string | 请输入关键词 |
| beforeSearchSubmit | 提交前转换 query(预留扩展) | Function | — |
| postData | 请求完成后映射列表 | Function | — |
ProList 事件
| 事件名 | 说明 | 类型 |
|---|---|---|
| reload | 点击内置刷新并完成 reload 后触发 | Function |
| update:selectedRowKeys | 选中 key 变更(v-model) | Function |
| update:expandedRowKeys | 展开 key 变更(v-model) | Function |
request 入参 ProListRequestParams
| 名称 | 说明 | 类型 |
|---|---|---|
| current | 当前页,从 1 开始 | number |
| pageSize | 每页条数 | number |
| keyword | 关键词(可选) | string |
| query | 扩展查询对象(预留) | object |
request 返回值 ProListRequestResult
| 名称 | 说明 | 类型 |
|---|---|---|
| data | 当前页数据 | array |
| total | 总条数 | number |
| success | 为 false 时不更新列表 | boolean |
metas ProListMetas
metas 支持以下字段:title、subTitle、description、avatar、content、actions、extra。
网格配置 ProListGridConfig
| 名称 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| gutter | 网格间距(px) | number | 16 |
| column | 列数 | number | 1 |
| minItemWidth | 单项最小宽度 | string | 260px |