Table
在线演练场
基于 ant-design-vue
Table 的二次封装,减少项目中的样板代码,对常用的逻辑进行封装。
基本使用
可参考项目内的使用示例
基本配置
配置表格的预设行为与逻辑
文件位置:src/components/core/dynamic-table/src/dynamic-table.config.ts
ts
/** 表格配置 */
export default {
fetchConfig: {
// The field name of the current page passed to the background
pageField: 'page',
// The number field name of each page displayed in the background
sizeField: 'pageSize',
// Field name of the form data returned by the interface
listField: 'items',
// Total number of tables returned by the interface field name
totalField: 'meta.totalItems'
},
// Number of pages that can be selected
pageSizeOptions: ['10', '50', '80', '100'],
// Default display quantity on one page
defaultPageSize: 10,
// Default layout of table cells
defaultAlign: 'center' as AlignType,
// Custom general sort function
defaultSortFn: (sortInfo: SorterResult) => {
const { field, order } = sortInfo
if (field && order) {
return {
// The sort field passed to the backend you
field,
// Sorting method passed to the background asc/desc
order
}
} else {
return {}
}
},
// Custom general filter function
defaultFilterFn: (data: Partial<Recordable<string[]>>) => {
return data
}
} as const
搜索表单
默认情况下,表格会根据 TableColumn
配置自动生成搜索表单。其配置方式与动态表单一致。
以下是搜索表单相关的基本使用方式:
- 关闭搜索表单
表格的 search
属性为 false
时,将不再生成和显示搜索表单。
vue
<DynamicTable :search="false" />
- 通过
TableColumn
配置生成
自定义搜索表单项,可通过formItemProps
属性配置,具体配置方式与动态表单一致
ts
const columns: TableColumn<ListItemType>[] = [
{
title: '状态',
dataIndex: 'status',
/** 搜索表单项配置 */
formItemProps: {
component: 'Select',
componentProps: {
options: [
{
label: '启用',
value: 1
},
{
label: '禁用',
value: 0
}
]
}
}
}
]
- 通过表格
formProps
属性配置生成
使用 formProps
相当于是直接对 动态表单组件 本身进行配置
ts
const searchFormSchemas: FormSchema[] = [
{
field: 'status',
label: '状态',
component: 'Select',
componentProps: {
options: [
{
label: '启用',
value: 1
},
{
label: '禁用',
value: 0
}
]
}
}
]
const [DynamicTable, dynamicTableInstance] = useTable({
formProps: {
/** 搜索表单 formSchemas 配置 */
schemas: searchFormSchemas,
/** 搜索表单初始值 */
initialValues: { typeId: typeId.value },
/** 表单重置事件 */
onReset(model) {
if (Number.isInteger(model?.typeId)) {
typeId.value = model.typeId
}
}
}
})