跳到主要内容

BasicTable 表格

基于Ant Design Vue 封装的table 组件 BasicTable ,用于展示列表数据。为了使用方便,内部做了一定的hook封装,简化使用。如需扩展,请修改hook:/@/hooks/system/useListPage

使用场景

  • 表格是企业项目必用的功能,当有大量结构化的数据需要展现时;
  • 当需要对数据进行排序、搜索、分页、自定义操作等复杂行为时。

1.基本用法

本例演示:怎样快速渲染一个静态数据表格。指定表格的数据源 dataSource 为一个静态数组。

本表格采用静态dataSource,同时自定义了一个‘编辑’按钮,渲染出了用户列表信息。

点击查看在线演示

2.远程加载数据

本例演示:通过 ajax api请求的方式加载数据,从服务端读取并展现数据。并配置了列宽拖拽、排序等功能。开发者可以自行接入其他数据处理方式。

点击查看在线演示

  • API定义
  • 列字段拖拽
  • 列字段排序

3.带边框

本例演示:通过 useListPage的 tableProps 的参数 bordered 设置边框,添加表格边框线,此外还定义了自定义页脚。

点击查看在线演示

边框设置

页脚设置

4.单元格自动省略

本例演示 :单元格列 column 设置 ellipsis 属性,可以让单元格内容根据宽度自动省略。

5.表格行列合并

本例演示:如何使用 column 的 colSpan/rowSpan属性,实现表格的行/列合并。使用 render 里的单元格属性 colSpan 或者 rowSpan 设值为 0 时,设置的表格不会渲染

6.可编辑单元格

本例演示:怎样配置单元格可编辑功能的表格。

点击查看在线演示

可编辑配置,详细可参见文档下方api

编辑方法

7.可编辑行

本例演示:带行编辑功能的表格。切换行状态,可编辑该行的字段。

点击查看在线演示

编辑行配置

8.树形表格

本例演示:表格支持树形数据的展示

点击查看在线演示

树形表格属性设置

数据结构

9.可展开行

本例演示:当表格内容较多不能一次性完全展示时,可以使用展开行来解决。

点击查看在线演示

行点击配置

10.固定头和列

本例演示:怎样固定头和列,适合同时需要展示有大量数据和数据列。

点击查看在线演示

固定头设置

固定列设置

11.分组表头

本例演示:怎样自定义渲染多级分组表头。

点击查看在线演示

表头多级分组配置

12.嵌套子表格

本例演示:怎样嵌套子表数据,展示每行数据的子表的信息。

点击查看在线演示

通过 expandedRowRender插槽设置

13.自定义列

本例演示:表格怎样自定义渲染 列的内容 和 列内容的展示效果

点击查看在线演示

通过插槽 bodyCell 和 字段key 来设置列内容的渲染效果

14.筛选和排序

本例演示:对某一列数据进行筛选,使用列的 filters 属性来指定需要筛选菜单的列, 对某一列数据进行排序,通过指定列的 sorter 函数即可启动排序按钮

点击查看在线演示

排序设置

筛选设置

15.选择和操作

本例演示:如何配置选择列和操作列。并通过 selectedRows 或者 selectedRowKeys  来操作选中项。通过配置rowSelection.type 设置单选 或 多选

点击查看在线演示

设置选择列的操作方式,单选radio 或者 多选checkbox

设置操作列,TableAction为内置组件,具体用法参考下方 内置组件 内容

16.可伸缩列

本例演示:设置 列开启拖动 resizable 属性 ,鼠标 移到到 列后的分割线上拖动

点击查看在线演示

设置列拖拽

17.紧凑和斑马纹表格

本例演示:通过size来设置表格的大小,striped来设置是否显示为斑马纹

点击查看在线演示

表格大小

斑马纹

18.开启表单搜索

本例演示:怎样配置表格表单查询,可在表格上方显示表单搜索,具体表单配置参考Form 表单组件

点击查看在线演示

配置表单查询formConfig

设置查询条件默认值

设置查询条件自定义插槽

表格查询区域的插槽需以form-开头

获取表单的数据

19.权限列

可以通过配置 auth 或者 ifshow 控制列的显隐

点击查看在线演示

通过auth 或者ifShow来控制列 或者 操作按钮的显隐

20.导入导出

本例演示:怎样配置导入导出表格数据,需要结合后端接口实现。

点击查看在线演示

1.配置按钮显示

2.配置接口地址

21.表格合计

本例演示:怎样配置显示合计行以及合计列的计算。

点击查看在线演示

1.是否显示合计行 showSummary

2.计算合计行 summaryFunc

API

TableProps

温馨提醒

TableProps除了以下配置参数外,Ant Design Vue 官方文档内的 表格props 也都支持,具体可以参考 antv table

参数类型默认值说明
autoCreateKeybooleantrue是否自动生成 key
api(...arg: any) => Promise<any>-请求接口,可以直接将src/api内的函数直接传入,具体使用和返回数据参考 2.远程加载数据示例
afterFetch(T)=>T-请求之后对返回值进行处理
actionColumnany-表格右侧操作列配置 BasicColumn
borderedbooleanfalse是否显示表格边框
beforeFetch(T)=>T-请求之前对参数进行处理
beforeEditSubmit ({record: Recordable,index: number,key: string | number,value: any}) => Promise<any>-单元格编辑状态提交回调,返回false将阻止单元格提交数据到table。该回调在行编辑模式下无效。
columnsany-表单列信息 BasicColumn[]
canResizebooleantrue是否可以自适应高度(如果置于PageWrapper组件内,请勿启用PageWrapper的fixedHeight属性,二者不可同时使用)
clearSelectOnPageChangebooleanfalse切换页码是否重置勾选状态
clickToRowSelectbooleantrue点击行是否选中 checkbox 或者 radio。需要开启
dataSourceany[]-表格数据,非 api 加载情况
defSortRecordable-默认的排序参数
ellipsisbooleantrue文本超过宽度是否显示...
emptyDataIsShowTablebooleantrue在启用搜索表单的前提下,是否在表格没有数据时显示表格
fetchSettingFetchSetting-接口请求配置,可以配置请求的字段和响应字段名,见下方全局配置说明
filterFn (sortInfo: Partial<Recordable<string[]>>) => any-自定义过滤方法。见下方全局配置说明
formConfigany-表单配置,参考表单组件的 Props
handleSearchInfoFn(T)=>T-开启表单后,在请求之前处理搜索条件参数
insetbooleanfalse取消表格的默认 padding
isTreeTablebooleanfalse是否树表
immediatebooleantrue组件加载后是否立即请求接口,在 api 有传的情况下,如果为 false,需要自行使用 reload 加载表格数据
indexColumnPropsany-序号列配置 BasicColumn
loadingbooleanfalse表格 loading 状态
minHeightnumber-表格最小高度
maxHeightnumber-表格最大高度,超出会显示滚动条
maxColumnWidthnumber-统一设置列最大宽度
paginationany-分页信息配置,为 false 不显示分页
rowKeystring | ((record: Recordable) => string) -表格行 key 的取值,可以是字符串或一个函数
resizeHeightOffsetnumber0表格自适应高度计算结果会减去这个值
rowSelectionany -选择列配置
sortFn(sortInfo: SorterResult<any>) => any-自定义排序方法。见下方全局配置说明
showTableSettingbooleanfalse显示表格设置工具
stripedbooleantrue斑马纹
showSummarybooleanfalse是否显示合计行
summaryDataany[]-自定义合计数据。如果有则显示该数据
summaryFunc(...arg) => any[]-计算合计行的方法
searchInfoany-额外的请求参数
showIndexColumnbooleantrue是否显示序号列
showActionColumnboolean-是否显示操作列
scrollany-参考官方文档 scroll
tableSettingTableSetting-表格设置工具配置,见下方 TableSetting
titlestring -表格标题
titleHelpMessagestring | string[]-表格标题右侧温馨提醒
useSearchFormbooleanfalse使用搜索表单

TableSetting

{
// 是否显示刷新按钮
redo?: boolean;
// 是否显示尺寸调整按钮
size?: boolean;
// 是否显示字段调整按钮
setting?: boolean;
// 是否显示全屏按钮
fullScreen?: boolean;
}

事件

温馨提醒

除以下事件外,Ant Design Vue 官方文档内的 event 也都支持,具体可以参考 antv table,事件的绑定和使用请参考 示例6.可编辑单元格

事件回调参数说明
edit-endFunction({record, index, key, value})单元格编辑完成触发
edit-cancelFunction({record, index, key, value})单元格取消编辑触发
edit-row-endFunction()行编辑结束触发
edit-changeFunction({column,value,record})单元格编辑组件的 value 发生变化时触发
fetch-successFunction({items,total})接口请求成功后触发
fetch-errorFunction(error)错误信息
row-clickFunction(record, index, event)行点击触发
row-dbClickFunction(record, index, event)行双击触发
row-contextmenuFunction(record, index, event)行右键触发
row-mouseenterFunction(record, index, event)行移入触发
row-mouseleaveFunction(record, index, event)行移出触发
selection-changeFunction({keys,rows})勾选事件触发

BasicColumn

除 参考官方 Column 配置外,扩展以下参数

属性类型默认值可选值说明
authRoleEnumRoleEnum[]stringstring[]--根据权限编码来控制当前列是否显示
defaultHiddenbooleanfalse-默认隐藏,可在列配置显示
editboolean--是否开启单元格编辑
editRowboolean--是否开启行编辑
editablebooleanfalse-是否处于编辑状态
editComponentComponentTypeInput-编辑组件
editComponentPropsany--对应编辑组件的 props
editRule((text: string, record: Recordable) => Promise<string>)--对应编辑组件的表单校验
editValueMap(value: any) => string --对应单元格值枚举
formatCellFormat--单元格格式化
helpMessagestring|string[]--列头右侧帮助文本
ifShowboolean((action: ActionItem) => boolean)--根据业务状态来控制当前列是否显示
onEditRow()=>void--触发行编辑

参数 editComponent 的typescript类型是 EditComponentType

export type ComponentType =
| 'ApiSelect'
| 'Checkbox'
| 'DatePicker'
| 'Input'
| 'InputNumber'
| 'Select'
| 'Switch'
| 'TimePicker';

参数format 的typescript类型是 CellFormat

export type CellFormat =
| string
| ((text: string, record: Recordable, index: number) => string | number)
| Map<string | number, any>;

Slots

温馨提醒

除以下参数外,官方文档内的 slot 也都支持,具体可以参考 antv table

名称说明版本
expandedRowRender展开行区域
headerTop表格顶部区域(标题上方)2.6.1
tableTitle表格顶部左侧区域
toolbar表格顶部右侧区域

Form-Slots

当开启 form 表单后。以form-xxxx为前缀的 slot 会被视为 form 的 slot

xxxx 为 form 组件的 slot。具体参考 form 组件文档

e.g

form-submitBefore

内置组件(只能用于表格内部)

TableAction

用于表格右侧操作列渲染

Props

属性类型默认值说明版本
actionsActionItem[]-右侧操作列按钮列表
dropDownActionsActionItem[]-右侧操作列更多下拉按钮列表
stopButtonPropagationbooleanfalse是否阻止操作按钮的click事件冒泡2.5.0

ActionItem

export interface ActionItem {
// 按钮文本
label: string;
// 是否禁用
disabled?: boolean;
// 按钮颜色
color?: 'success' | 'error' | 'warning';
// 按钮类型
type?: string;
// button组件props
props?: any;
// 按钮图标
icon?: string;
// 气泡确认框
popConfirm?: PopConfirm;
// 是否显示分隔线,v2.0.0+
divider?: boolean;
// 根据权限编码来控制当前列是否显示,v2.4.0+
auth?: RoleEnum | RoleEnum[] | string | string[];
// 根据业务状态来控制当前列是否显示,v2.4.0+
ifShow?: boolean | ((action: ActionItem) => boolean);
// 点击回调
onClick?: Fn;
// Tooltip配置,2.5.3以上版本支持,可以配置为string,或者完整的tooltip属性
tooltip?: string | TooltipProps
}

有关TooltipProps的说明,请参考tooltip

PopConfirm

export interface PopConfirm {
title: string;
okText?: string;
cancelText?: string;
confirm: Fn;
cancel?: Fn;
icon?: string;
}

TableImg

用于渲染单元格图片,支持图片预览

Props

属性类型默认值可选值说明版本
imgListstring[]--图片地址列表
marginnumber4-常规模式下的图片间距2.5.0
sizenumber--图片大小
simpleShowbooleanfalsetrue/false简单显示模式(只显示第一张图片)2.5.0
showBadgebooleantruetrue/false简单模式下是否显示计数Badge2.5.0
srcPrefixstring--在每一个图片src前插入的内容2.5.0

Usage

用于调用 Table 内部方法及 table 参数配置

// 表格的props也可以直接注册到useTable内部
const [register, methods] = useTable(props);

或者

const { tableContext } = useListPage({
tableProps: props
});
//注册table数据
const [register,methods] = tableContext;

register

register 用于注册 useTable,如果需要使用useTable提供的 api,必须将 register 传入组件的 onRegister

<template>
<BasicTable @register="register" />
</template>
<script>
export default defineComponent({
components: { BasicForm },
setup() {
const { tableContext } = useListPage({
tableProps: {
title: '普通表格',
api: api ,//请求接口
columns: columns,//表格列
showActionColumn: false//隐藏操作列
...其他tableProps配置
},
});

//BasicTable绑定注册,methods包含的方法参考下方Methods的api
const [register,methods] = tableContext;
return { register };
},
});
</script>

Methods

方法名类型说明
setProps(props: Partial<BasicTableProps>) => void 用于设置表格参数
reload(opt?: FetchParams) => Promise<void>刷新表格
redoHeight() => void 重新计算表格高度
setLoading(loading: boolean) => void设置表格 loading 状态
getDataSource<T = Recordable>() => T[] 获取表格数据
getRawDataSource<T = Recordable>() => T[]获取后端接口原始数据
getColumns(opt?: GetColumnsParams) => BasicColumn[]获取表头数据
setColumns(columns: BasicColumn[]|string[]) => void 设置表头数据
setTableData<T = Recordable>(values: T[]) => vo设置表格数据
setPagination(info: Partial<PaginationProps>) => void设置分页信息
deleteSelectRowByKey(key: string) => void根据 key 删除取消选中行
getSelectRowKeys() => string[]获取选中的keys
getSelectRows<T = Recordable>() => T[]获取选中的rows
setSelectedRowKeys(rowKeys: string[]|number[]) => void设置选中行
getPaginationRef() =>PaginationProps|boolean 获取当前分页信息
getShowPagination() => boolean获取当前是否显示分页
setShowPagination(show: boolean) => Promise\<void>设置当前是否显示分页
getRowSelection() => TableRowSelection<Recordable>获取勾选框信息
updateTableData(index: number, key: string, value: any)=>void 更新表格数据
updateTableDataRecord(rowKey: string| number, record: Recordable) => Recordablevoid
deleteTableDataRecord(rowKey: string| number| string[] | number[]) => void根据唯一的rowKey 动态删除指定行的数据.可用于不刷新整个表格而局部更新数据
insertTableDataRecord(record: Recordable, index?: number) => Recordablevoid
getForm() => FormActionType如果开启了搜索区域。可以通过该函数获取表单对象函数进行操作
expandAll() => void 展开树形表格
collapseAll() => void折叠树形表格

全局配置

componentsSettings 可以配置全局参数。用于统一整个项目的风格。可以通过 props 传值覆盖