Skip to content

Vxe 数据表格组件

Vxe 数据表格组件是一个基于 vxe-table 的 Vue 数据表格组件,支持灵活的列配置、多种数据来源、分页、排序、筛选、可编辑单元格等专业级表格能力。组件提供丰富的配置选项和事件支持,可以轻松集成到表单设计器中,实现复杂的数据管理和展示场景。

vxe-data-table.png

了解 vxe-table

Vxe 数据表格基于强大的开源表格组件 vxe-table 构建。如需了解更多高级用法,可参考:

安装与挂载

Vxe 数据表格依赖 vxe-table 组件,设计器打包时不会将其打包进去,需要您在自己的项目中安装并在 Vue 中全局挂载。

安装依赖

Vue 3 项目

bash
npm install vxe-table@4.17.48 vxe-pc-ui@4.12.31

Vue 2 项目

bash
npm install vxe-table@3.19.49 vxe-pc-ui@3.12.31

全局挂载

Vue 3

js
import VxeUIBase from 'vxe-pc-ui';
import 'vxe-pc-ui/es/style.css';
import { VxeGrid } from 'vxe-table';
import 'vxe-table/es/style.css';

app.use(VxeUIBase);
app.use(VxeGrid);

Vue 2

js
import VxeUIBase from 'vxe-pc-ui';
import 'vxe-pc-ui/es/style.css';
import { VxeGrid } from 'vxe-table';
import 'vxe-table/es/style.css';

Vue.use(VxeUIBase);
Vue.use(VxeGrid);

更多安装方式、按需引入等说明请参阅 vxe-table 官方安装文档

基础使用

获取表格数据

通过注入的 api.el 方法可以获取数据表格组件实例,访问表格数据:

js
function onChange($inject) {
    const dataTableInstance = $inject.api.el('ref_F2vulxvqc841dac');
    const list = dataTableInstance.list;
    const total = dataTableInstance.total;
    const currentPage = dataTableInstance.currentPage;
    console.log('当前表格数据:', list);
}

获取表格实例与选中行

通过 getEl 方法可以获取底层 VxeGrid 实例,进行更高级的操作。选中行的获取需根据 selection 类型调用对应方法:

js
function getSelectedRows($inject) {
    const dataTableInstance = $inject.api.el('ref_F2vulxvqc841dac');
    const tableEl = dataTableInstance.getEl();
    if (!tableEl || !dataTableInstance.selection) return;

    if (dataTableInstance.selection === 'checkbox') {
        const selectedRows = tableEl.getCheckboxRecords();
        console.log('多选中的行:', selectedRows);
    } else if (dataTableInstance.selection === 'radio') {
        const selectedRow = tableEl.getRadioRecord();
        console.log('单选中的行:', selectedRow);
    }
}

刷新表格数据

使用 initPage 方法可以重新初始化表格并刷新数据:

js
function refreshTable($inject) {
    const dataTableInstance = $inject.api.el('ref_F2vulxvqc841dac');
    dataTableInstance.initPage();
}

修改列配置

通过 api.getRule 方法可以动态修改表格列配置:

js
function onChange($inject) {
    const rule = $inject.api.getRule('ref_F2vulxvqc841dac');
    rule.props.column = [
        { prop: 'name', label: '姓名', width: 120, format: 'default' },
        { prop: 'age', label: '年龄', width: 80, format: 'default' },
    ];
}

配置项

Vxe 数据表格提供了丰富的配置选项,您可以通过在设计器中配置属性来自定义表格的行为和外观。

表格属性

属性名类型默认值必需说明
columnArray[]表格列配置,包括字段、标题、宽度、对齐方式、排序、可编辑等
dataArray[]静态数据,当不使用 fetch 或 globalDataKey 时使用
globalDataKeyString, Object-全局数据键名,使用预定义的全局数据源
fetchObject-远程数据获取配置,支持 POST/GET 请求
pageObject-分页配置,包含 openpositionpageSizestotalFielddataField
buttonObject-操作列配置,包含 opencolumnlabelfixedwidth
indexBoolean-是否显示序号列
selectionBoolean, String-是否显示选择列,可选 checkboxradio
showHeaderBooleantrue是否显示表头
headerAlignString-表头对齐方式,可选 leftcenterright
alignString-单元格对齐方式,可选 leftcenterright
showFooterBooleanfalse是否显示表尾
footerDataArray-表尾数据
mergeCellsArray-合并单元格配置
showOverflowBoolean, String-单元格内容溢出时显示方式,可选 titleellipsistooltip
showHeaderOverflowBoolean, String-表头内容溢出时显示方式
showFooterOverflowBoolean, String-表尾内容溢出时显示方式
allowCurrentBoolean, String-是否高亮当前行/列,可选 colrow
treeNodeBooleanfalse是否启用树形结构
rowDragBooleanfalse是否开启行拖拽排序
columnDragBooleanfalse是否开启列拖拽排序
autoInitBooleantrue是否自动初始化加载数据

分页配置 (page)

属性名类型默认值说明
openBoolean-是否开启分页
positionString'right'分页组件位置,可选 leftcenterright
pageFieldString'page'请求参数字段名(页码)
pageSizeFieldString'limit'请求参数字段名(每页条数)
orderFieldString'order'排序字段参数字段名
orderByFieldString'orderBy'排序方式参数字段名
totalFieldString'count'响应数据中总数的字段路径
dataFieldString'list'响应数据中列表的字段路径
pageSizesString, Array'10, 20, 50, 100'每页条数选项
propsObject-传递给 el-pagination 的额外属性

列配置 (column)

每列支持以下配置:

属性名类型说明
propString列绑定的字段名
labelString列标题(必填)
widthNumber, String列宽度
minWidthNumber, String列最小宽度
alignString列对齐方式
headerAlignString表头对齐方式
fixedString固定列,可选 leftright
sortableBoolean, String是否可排序,custom 表示服务端排序
resizableBoolean是否可调整列宽
hiddenBoolean是否隐藏列
classNameString列单元格的 class 名
titlePrefixString, Object列标题前缀
formatString单元格渲染格式,可选 defaulttagimagecustom
renderFunction当 format 为 custom 时的自定义渲染函数
editRenderString可编辑渲染器,可选 inputtextareanumberselect
editRenderOptionsArray当 editRender 为 select 时的选项,格式 [{label, value}]
filterArray列筛选值数组,用于前端过滤
childrenArray子列配置,用于多级表头

操作按钮配置 (button)

属性名类型说明
openBoolean是否显示操作列
labelString操作列标题
fixedString固定位置,leftright
widthNumber, String操作列宽度
columnArray按钮配置列表

按钮项配置:

属性名类型说明
nameString按钮文本
keyString按钮唯一标识
typeString按钮类型,如 primarydanger
sizeString按钮尺寸
propArray按钮属性,如 ['round']['plain']['disabled']
clickString点击时执行的函数,参数 (scope, api)
handleString返回按钮 props 的函数,可动态控制 disabled
hideString返回布尔值的函数,控制按钮显隐
hiddenBoolean是否隐藏

事件

Vxe 数据表格提供了事件,方便您监听表格状态变化并执行相应的处理。

事件名说明
ready表格就绪事件,渲染完成后触发
handleClick操作按钮点击事件,参数 {name, key, scope, column}
radioChange单选变化事件,单选列选中/取消时触发
checkboxChange多选变化事件,多选列选中/取消时触发
checkboxAll全选/取消全选事件
cellClick单元格点击事件
headerCellClick表头单元格点击事件
footerCellClick表尾单元格点击事件
sortChange排序变化事件,点击列标题排序时触发
clearSort清除排序事件
editActivated单元格编辑激活事件
editClosed单元格编辑关闭事件
currentRowChange当前行变化事件
currentChange页码变化事件
currentColumnChange当前列变化事件
pageSizeChange每页条数变化事件
rowDragstart行拖拽开始事件
rowDragend行拖拽结束事件
columnDragstart列拖拽开始事件
columnDragend列拖拽结束事件

事件使用示例

监听操作按钮点击

js
function handleClick({ name, key, scope, column }) {
    console.log('按钮名称:', name);
    console.log('当前行数据:', scope.row);
    if (name === '编辑') {
        // 编辑逻辑
    } else if (name === '删除') {
        // 删除逻辑
    }
}

监听页码变化

js
function handleCurrentChange(pageNum) {
    console.log('切换到的页码:', pageNum);
}

方法

Vxe 数据表格提供了方法,方便您进行程序化控制。

方法名参数说明返回值
getEl-获取底层 VxeGrid 实例VxeGrid
initPage-重新初始化并刷新数据-
changePagen切换到指定页码-
changePageSizesize切换每页条数-
getLimit-获取当前每页条数Number

方法使用示例

切换页码

js
function goToPage($inject, pageNum) {
    const dataTableInstance = $inject.api.el('ref_F2vulxvqc841dac');
    dataTableInstance.changePage(pageNum);
}

切换每页条数

js
function changePageSize($inject, size) {
    const dataTableInstance = $inject.api.el('ref_F2vulxvqc841dac');
    dataTableInstance.changePageSize(size);
}

VxeGrid 实例方法

getEl() 返回 vxe-table 的 VxeGrid 实例,可直接调用 vxe-table 提供的 API:

方法名说明适用场景
getCheckboxRecords()获取多选选中的行数据数组selection 为 checkbox
getRadioRecord()获取单选选中的行数据selection 为 radio
getCurrentRecord()获取当前聚焦的行数据通用
clearCheckboxRow()清空多选选中状态-
clearRadioRow()清空单选选中状态-

更多 API 请参考 vxe-table 官方文档

单元格格式

列支持多种单元格渲染格式:

格式值说明
default默认文本显示
tag使用 el-tag 组件渲染
image图片列表,支持单图或多图预览
custom自定义渲染,需配置 render 函数

自定义渲染示例

formatcustom 时,需配置 render 函数:

js
{
    prop: 'status',
    label: '状态',
    format: 'custom',
    render: (scope, h, resolveComponent, api) => {
        const status = scope.row.status;
        return h(resolveComponent('el-tag'), {
            type: status === 1 ? 'success' : 'info'
        }, () => [status === 1 ? '启用' : '禁用']);
    }
}

可编辑列

配置 editRender 可启用单元格双击编辑,支持以下类型:

类型说明
input输入框
textarea多行文本
number数字输入框
select下拉选择,需配置 editRenderOptions

编辑时触发方式为双击单元格。

内部数据

数据名初始值说明
total0总数据量
loadingfalse加载状态
list[]当前页数据
currentPage1当前页码
order''排序字段
orderBy''排序方式
currentSizeundefined当前每页条数
filterListArray列过滤后的数据列表

更多 vxe-table 安装方式、按需引入等说明请参阅 vxe-table 官方安装文档