Skip to content

Table 表格

基于 Element Plus 的表格组件,提供更便捷的配置方式和丰富的功能,支持分页、多选、排序、操作列、标签页、导出等。

基本用法

vue
<template>
  <g-table
    ref="tableRef"
    :current-page="currentPage"
    :page-size="pageSize"
    :source="tableData"
    :loading="loading"
    :total="total"
    :columns="columns"
    :show-index="true"
    :show-selection="true"
    :get-operations="getOperations"
    @page-change="handlePageChange"
    @size-change="handleSizeChange"
  >
    <template #actions>
      <el-button type="primary" @click="handleAdd">新增</el-button>
    </template>
    <template #status="{ row }">
      <el-tag :type="row.status === 1 ? 'success' : 'danger'">
        {{ row.status === 1 ? '启用' : '禁用' }}
      </el-tag>
    </template>
  </g-table>
</template>

<script setup>
const tableData = ref([{ id: 1, name: '张三', age: 18, status: 1 }])
const columns = [
  { label: '姓名', prop: 'name' },
  { label: '年龄', prop: 'age' },
  { label: '状态', prop: 'status', slot: 'status' },
]
const loading = ref(false)
const total = ref(100)
const currentPage = ref(1)
const pageSize = ref(10)
const handlePageChange = (page) => {
  currentPage.value = page
}
const handleSizeChange = (size, newPage) => {
  pageSize.value = size
  currentPage.value = newPage
}
const handleAdd = () => {}
</script>

属性说明

属性说明类型默认值
source表格数据源array[]
columns表格列配置array[]
rowKey行数据唯一标识string/number'id'
loading加载状态booleanfalse
total数据总数number0
currentPage当前页码number1
pageSize每页条数number10
pageSizes每页条数选项array[10, 20, 30, 40]
showPagination是否显示分页booleantrue
paginationLayout分页组件布局string'total, sizes, prev, pager, next, jumper'
showSelection是否显示选择列booleanfalse
reserveSelection是否保留选择项booleantrue
showIndex是否显示序号列booleanfalse
border是否显示边框booleanfalse
stripe是否斑马纹booleanfalse
maxHeight表格最大高度string/number'auto'
getOperations获取操作列按钮的方法(row) => array() => []
operationsLabel操作列标题string'操作'
localPagination是否本地分页booleanfalse
tabs标签页配置array[]
activeTab当前激活标签页string/number''
fixedPagination滚动时固定底部分页booleantrue
tableCustomStyle表格自定义样式object{}
tableWrapperStyle表格外层自定义样式object{}
height表格高度string/number'auto'
selectable行是否可选function() => true
exportConfig导出配置object见下方说明
containerPadding外层容器 paddingstring/number''
paginationStyle分页器自定义样式object{}
accordion是否启用手风琴模式booleanfalse

exportConfig 配置

属性说明类型默认值
showExportButton是否显示导出按钮booleanfalse
exportText导出按钮文本string'导出'
fetchData导出时获取数据方法function() => {}
columns导出列配置array[]
fileName导出文件名stringexport_时间戳
beforeExport导出前钩子function() => {}
afterExport导出后钩子function() => {}
formatData格式化导出数据function(_) => _
getListData获取导出数据列表function(_) => _.data
query导出查询参数object{}
showExportColumnSetting是否显示列设置按钮booleanfalse

列配置(columns)

属性说明类型
label列标题string
prop列字段名string
width列宽度string/number
minWidth最小列宽string/number
align对齐方式'left'/'center'/'right'
slot自定义列插槽名string
sortable是否可排序boolean
format格式化函数(row: object) => any
cellStyle单元格样式object / (row, column) => object
fixed列是否固定'left'/'right'/boolean
children多级表头的子列配置array
className单元格自定义类名string
props额外传递给 el-table-column 的属性object
spanWidth额外自定义宽度number

事件

事件名说明回调参数
selectionChange选择项变化时触发(selection: array)
pageChange页码改变时触发(page: number)
sizeChange每页条数改变时触发(size: number, newPage: number)
tabChange标签页改变时触发(tab: string/number)
sortChange排序变化时触发(sortInfo: object)

插槽

插槽名说明作用域参数
actions表格顶部操作按钮区域-
[prop]列数据的自定义插槽,名称为列的 prop 值{ row, column, $index }
empty空数据自定义插槽-

方法

方法名说明参数
clearSelection清空表格选择项-

组件实例属性

属性名说明类型
tableRefEl-Table 组件实例引用TableInstance
selectedRows当前选中的行数据array

注意事项:

表格中使用cell-image-preview时, 定义slot后, 需要给一个className: 'cell-image'; 宽度一般是100, 如果表头的文案>4, 就需要自定义宽度了

样式定制

组件提供了丰富的自定义样式,详见源码 style 部分。


如需更详细的用法和进阶示例,请参考源码和实际业务场景。