基于 Element Plus 的低代码表格组件,支持数据展示、增删改查、导出、打印等功能。
<script setup lang="ts">
import { reactive } from 'vue';
import TableView from 'vancone-console-web-component';
const model = reactive<DataModel>({
api: '/api/data-sources',
route: 'data-sources',
tableConfig: {
editPageRoutePath: '/data-sources/detail',
},
fields: [
{
prop: 'name',
label: '数据源名称',
tableColumn: { link: true }
},
{
prop: 'type',
label: '类型',
},
{
prop: 'status',
label: '状态',
}
]
});
</script>
<template>
<TableView :model="model" />
</template>
表格支持显示下拉字段的 label 值,使用 formItem.select 配置:
const model = reactive<DataModel>({
api: '/api/data-sources',
fields: [
{
prop: 'type',
label: '数据源类型',
formItem: {
type: 'select',
select: {
options: [
{ label: 'MySQL', value: 'mysql' },
{ label: 'PostgreSQL', value: 'postgresql' },
{ label: 'MongoDB', value: 'mongodb' }
]
}
}
}
]
});
支持两种路由跳转方式:
{
prop: 'name',
label: '名称',
tableColumn: { link: true } // 跳转到 /{route}/detail?id={id}
}
{
prop: 'name',
label: '名称',
tableColumn: {
routerLink: '/custom/path/{id}' // {id} 会被替换为实际 ID
}
}
const model = reactive<DataModel>({
api: '/api/users',
tableConfig: {
operations: [
{
label: 'common.table.view',
functions: {
click: (index, row) => {
console.log('查看', row.id);
}
}
},
{
label: '启用',
functions: {
click: (index, row) => {
// 启用操作
}
}
}
]
},
fields: [...]
});
{
prop: 'status',
label: '状态',
tableColumn: {
functions: {
transformValue: (value) => {
return value === 'active' ? '启用' : '禁用';
}
}
}
}
{
prop: 'status',
label: '状态',
tableColumn: {
transformValueMappings: [
{ value: 'active', label: '启用' },
{ value: 'inactive', label: '禁用' }
]
}
}
通过 tableConfig.display 控制表格显示元素:
const model = reactive<DataModel>({
api: '/api/data',
tableConfig: {
display: {
pane: false, // 是否显示白色背景面板
searchBox: false, // 是否显示搜索框
pagination: false, // 是否显示分页
advancedSearch: false, // 是否显示高级搜索按钮
fileTaskButton: false // 是否显示导入导出按钮
}
},
fields: [...]
});
点击工具栏的"打印"按钮,打印选中的行数据:
// 打印时表格会自动生成包含选中数据的 iframe
点击导入导出下拉菜单中的"导出查询结果":
const model = reactive<DataModel>({
api: '/api/data',
// 导出请求将发送到 {api}/export
});
const model = reactive<DataModel>({
api: '/api/data',
tableConfig: {
readOnly: true // 隐藏创建、删除、编辑等操作按钮
},
fields: [...]
});
const model = reactive<DataModel>({
api: '/api/data',
tableConfig: {
selectMode: true // 显示查看选中项的复选框
},
fields: [...]
});
const model = reactive<DataModel>({
api: '/api/data',
tableConfig: {
functions: {
create: () => {
// 自定义创建逻辑
dialogVisible.value = true;
},
delete: (index, row) => {
// 自定义删除逻辑
},
batchDelete: (selectedItems) => {
// 自定义批量删除逻辑
}
}
},
fields: [...]
});
{
prop: 'category',
label: '分类',
tableColumn: { type: 'tag' } // 使用 el-tag 显示
}
支持 [10, 20, 50, 100] 四种分页大小选择。
const model = reactive<DataModel>({
api: '/api/data',
tableConfig: {
queryParams: {
status: 'active',
type: 'mysql'
}
},
fields: [...]
});
const model = reactive<DataModel>({
api: '/api/data',
tableConfig: {
tooltip: 'common.table.dataSourceTooltip' // 在工具栏显示提示图标
},
fields: [...]
});
| 属性 | 描述 | 类型 |
| api | 查询、修改表格数据的 RESTful 风格 API | string |
| fields | 表格的字段定义 | Array<Field> |
| route | 路由路径,用于生成默认详情页链接 | string |
| tableConfig | 表格配置 | TableConfig |
| formConfig | 表单配置 | FormConfig |
| pageConfig | 页面配置 | PageConfig |
| 属性 | 描述 | 类型 | 默认值 |
| selectMode | 选择模式,显示查看选中项的复选框 | boolean | false |
| readOnly | 只读模式,隐藏创建、删除等操作按钮 | boolean | false |
| creatable | 是否显示创建按钮 | boolean | true |
| updatable | 是否显示编辑按钮 | boolean | true |
| deletable | 是否显示删除按钮 | boolean | true |
| editPageRoutePath | 编辑页面路由路径 | string / ComputedRef | |
| createPageRoutePath | 创建页面路由路径 | string | |
| queryParams | 额外的查询参数 | IAnyObject | |
| operations | 自定义操作按钮 | Array<IOperationItem> | |
| labels | 自定义按钮标签 | ILabel | |
| export | 是否显示导出功能 | boolean | |
| tooltip | 工具栏提示文本 | string | |
| functions | 自定义 CRUD 函数 | Functions | |
| display | 显示选项配置 | DisplayOptions | |
| 属性 | 描述 | 类型 | 默认值 |
| pane | 是否显示白色背景面板 | boolean | true |
| searchBox | 是否显示搜索框 | boolean | true |
| pagination | 是否显示分页 | boolean | true |
| advancedSearch | 是否显示高级搜索按钮 | boolean | false |
| fileTaskButton | 是否显示导入导出按钮 | boolean | false |
| 属性 | 描述 | 类型 | 默认值 |
| prop | 字段对应的 JSON key | string | |
| label | 表头显示名称,支持 i18n(key) 语法 | string | |
| visible | 是否可见 | boolean | true |
| value | 字段值 | string | |
| formItem | 表单配置 | FormItemConfig | |
| tableColumn | 表格列配置 | TableColumnConfig | |
| 属性 | 描述 | 类型 | 默认值 |
| type | 显示类型 | 'tag' | |
| visible | 在表格列中是否可见 | boolean | true |
| link | 是否为默认链接跳转 | boolean | false |
| routerLink | 自定义路由链接模板,{id} 会被替换 | string | |
| width | 列宽度 | number | |
| transformValueMappings | 值映射转换 | Array<{ value, label }> | |
| functions | 自定义函数 | { transformValue?: (value) => string } | |
| 属性 | 描述 | 类型 | 默认值 |
| visible | 在表单中是否可见 | boolean | true |
| type | 表单项类型 | 'input' \| 'select' \| 'checkbox' \| 'date' \| ... | |
| placeholder | 占位符文本 | string | |
| select | 下拉框配置 | SelectConfig | |
| inputNumber | 数字输入框配置 | InputNumberConfig | |
| required | 是否必填 | boolean | |
| validationRule | 验证规则 | Array<any> | |
| defaultValue | 默认值 | any | |
| editable | 是否可编辑(创建时) | boolean | |
| updatable | 是否可更新(编辑时) | boolean | |
| 属性 | 描述 | 类型 | 默认值 |
| options | 静态选项列表 | Array<{ label, value }> | |
| api | 动态选项接口 | string | |
| queryParamName | 查询参数名 | string | |
| queryParamValueField | 查询参数值字段 | string | |
| labelMappingField | label 映射字段 | string | |
| valueMappingField | value 映射字段 | string | |
| viewModeLabelField | 表格视图显示 label 的字段 | string | |
| allowCreate | 是否允许创建新选项 | boolean | |
| useDatableDict | 是否使用数据字典 | boolean | |
| dictId | 数据字典 ID | string | |
| multiple | 是否多选 | boolean | |
| 属性 | 描述 | 类型 | 默认值 |
| label | 按钮标签 | string / ComputedRef | |
| icon | 按钮图标 | string | |
| functions | 按钮函数 | { transformLabel?, click? } | |
| 属性 | 描述 | 类型 | 默认值 |
| create | 创建按钮自定义标签 | string | |
| delete | 删除按钮自定义标签 | string | |
| 方法 | 描述 |
| refresh() | 刷新表格数据 |
| multipleSelection | 当前选中的行数据 |
| updateConfigAndRefresh | 更新配置并刷新(已废弃) |