TableView 表格

基于 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: [...]
});

自定义 CRUD 函数

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: [...]
});

DataModel 属性

属性描述类型
api查询、修改表格数据的 RESTful 风格 APIstring
fields表格的字段定义Array<Field>
route路由路径,用于生成默认详情页链接string
tableConfig表格配置TableConfig
formConfig表单配置FormConfig
pageConfig页面配置PageConfig

TableConfig 属性

属性描述类型默认值
selectMode选择模式,显示查看选中项的复选框booleanfalse
readOnly只读模式,隐藏创建、删除等操作按钮booleanfalse
creatable是否显示创建按钮booleantrue
updatable是否显示编辑按钮booleantrue
deletable是否显示删除按钮booleantrue
editPageRoutePath编辑页面路由路径string / ComputedRef
createPageRoutePath创建页面路由路径string
queryParams额外的查询参数IAnyObject
operations自定义操作按钮Array<IOperationItem>
labels自定义按钮标签ILabel
export是否显示导出功能boolean
tooltip工具栏提示文本string
functions自定义 CRUD 函数Functions
display显示选项配置DisplayOptions

DisplayOptions 属性

属性描述类型默认值
pane是否显示白色背景面板booleantrue
searchBox是否显示搜索框booleantrue
pagination是否显示分页booleantrue
advancedSearch是否显示高级搜索按钮booleanfalse
fileTaskButton是否显示导入导出按钮booleanfalse

Field 属性

属性描述类型默认值
prop字段对应的 JSON keystring
label表头显示名称,支持 i18n(key) 语法string
visible是否可见booleantrue
value字段值string
formItem表单配置FormItemConfig
tableColumn表格列配置TableColumnConfig

TableColumnConfig 属性

属性描述类型默认值
type显示类型'tag'
visible在表格列中是否可见booleantrue
link是否为默认链接跳转booleanfalse
routerLink自定义路由链接模板,{id} 会被替换string
width列宽度number
transformValueMappings值映射转换Array<{ value, label }>
functions自定义函数{ transformValue?: (value) => string }

FormItemConfig 属性

属性描述类型默认值
visible在表单中是否可见booleantrue
type表单项类型'input' \| 'select' \| 'checkbox' \| 'date' \| ...
placeholder占位符文本string
select下拉框配置SelectConfig
inputNumber数字输入框配置InputNumberConfig
required是否必填boolean
validationRule验证规则Array<any>
defaultValue默认值any
editable是否可编辑(创建时)boolean
updatable是否可更新(编辑时)boolean

SelectConfig 属性

属性描述类型默认值
options静态选项列表Array<{ label, value }>
api动态选项接口string
queryParamName查询参数名string
queryParamValueField查询参数值字段string
labelMappingFieldlabel 映射字段string
valueMappingFieldvalue 映射字段string
viewModeLabelField表格视图显示 label 的字段string
allowCreate是否允许创建新选项boolean
useDatableDict是否使用数据字典boolean
dictId数据字典 IDstring
multiple是否多选boolean

IOperationItem 属性

属性描述类型默认值
label按钮标签string / ComputedRef
icon按钮图标string
functions按钮函数{ transformLabel?, click? }

ILabel 属性

属性描述类型默认值
create创建按钮自定义标签string
delete删除按钮自定义标签string

组件暴露方法

方法描述
refresh()刷新表格数据
multipleSelection当前选中的行数据
updateConfigAndRefresh更新配置并刷新(已废弃)