Skip to content

基本用法

本节介绍 SunlightTable 组件的基本使用方法,包括基本表格、分页、选择、搜索和工具栏等功能。

基本表格

最简单的表格使用方式,只需要提供数据和列配置。

示例

配置说明

参数说明类型默认值
data表格数据RowData[]-
columns列配置TableItem[]-
showToolbar是否显示工具栏booleantrue
showPagination是否显示分页booleanfalse
showSelection是否显示多选框booleanfalse
currentPage当前页码number1
pageSize每页条数number10
total总条数numberundefined
selectedRowKeys选中行的 key 数组(string | number)[]undefined
hideColumns隐藏列(string | number)[][]
tableListeners表格事件监听器Objectundefined
tableProps表格属性配置Objectundefined
toolbarConfig工具栏配置Objectundefined
exportConfig导出配置Objectundefined
tableHeight表格高度number | stringundefined
onRowClick行点击回调Functionundefined
onRowDblclick行双击回调Functionundefined
searchColumns搜索表单列配置SearchColumn[]undefined
searchParam搜索参数Record<string, any>{}
searchThemeStyle搜索主题样式Objectundefined
visibleSearchColumns可见的搜索列string[][]
searchCollapsed搜索表单是否收起booleanfalse

列配置详解

columns 是表格的核心配置,每个列配置项支持以下属性:

属性名说明类型默认值
prop列的唯一标识string-
label列显示的标题string-
width列宽度number | string-
minWidth最小列宽number | string-
fixed是否固定列boolean | 'left' | 'right'-
align列对齐方式'left' | 'center' | 'right'-
headerAlign表头对齐方式'left' | 'center' | 'right'-
sortable是否可排序boolean | 'custom'-
sortMethod自定义排序方法(a: RowData, b: RowData) => number-
filterable是否可过滤boolean-
filters过滤条件数组Array<{ text: string; value: any }>-
filterMethod过滤方法(value: any, row: RowData) => boolean-
slotName自定义渲染插槽名称string-
hide是否隐藏该列booleanfalse
permission权限控制字段Permission-
children子列,用于复杂表头TableItem[]-
editable是否可编辑booleanfalse
editType编辑组件类型'input' | 'input-number' | 'select' | 'date-picker' | 'textarea'-
editProps编辑组件的属性配置Record<string, any>-
editOptions选择器选项Array<{ label: string; value: any; disabled?: boolean }>-

tableProps 配置项

tableProps 支持 Element Plus Table 组件的所有属性,以下是常用配置项:

配置项说明类型默认值
stripe是否显示斑马纹booleanfalse
border是否显示边框booleanfalse
size表格尺寸stringdefault
showHeader是否显示表头booleantrue
highlightCurrentRow是否高亮当前行booleanfalse
emptyText空数据时显示的文本string暂无数据
defaultSort默认排序规则Object{}
tooltipEffect提示框效果stringdark
spanMethod单元格合并方法Functionundefined
selectOnIndeterminate部分选中时的行为booleanfalse
indent树形表格的缩进number16
treeProps树形表格的属性配置Object{}
rowClassName行的 classNamestring | Function""
rowStyle行的 stylestring | Function""
cellClassName单元格的 classNamestring | Function""
cellStyle单元格的 stylestring | Function""
headerRowClassName表头行的 classNamestring | Function""
headerRowStyle表头行的 stylestring | Function""
headerCellClassName表头单元格的 classNamestring | Function""
headerCellStyle表头单元格的 stylestring | Function""
summaryMethod合计行计算方法Functionundefined
summaryRows合计行数量number1
lazy是否懒加载booleanfalse
load懒加载的加载函数Functionundefined
showSummary是否显示合计行booleanfalse
sortBy排序字段string""
sortOrders排序顺序数组Array[null, "ascending", "descending"]
defaultExpandAll是否默认展开所有行booleanfalse
expandRowKeys展开行的 key 数组Array[]
defaultExpandedKeys默认展开的行的 key 数组Array[]
filterMultiple是否多选过滤booleantrue
filteredValue过滤后的值Object{}
filters过滤条件Object{}
filterMethod过滤方法Functionundefined
filterPlacement过滤框的弹出位置stringbottom-end

toolbarConfig 配置项

配置项说明类型默认值
showDensity是否显示密度切换booleanfalse
showColumnConfig是否显示列配置booleanfalse
showRefresh是否显示刷新按钮booleanfalse
showSearchConfig是否显示搜索配置booleanfalse
customButtons自定义按钮配置Array[]

customButtons 配置项

配置项说明类型默认值
key按钮唯一标识string-
label按钮文本string-
type按钮类型stringdefault
size按钮尺寸stringsmall
icon按钮图标any-
disabled是否禁用booleanfalse
position按钮位置stringleft

固定列配置

固定列功能通过 fixed 属性配置,支持以下值:

说明
true固定在左侧
'left'固定在左侧
'right'固定在右侧
不设置不固定

示例:固定列配置

javascript
const columns = [
  // 固定在左侧的列
  {
    prop: "id",
    label: "ID",
    width: 80,
    fixed: "left",
    align: "center",
  },
  {
    prop: "name",
    label: "姓名",
    width: 120,
    fixed: "left",
  },
  // 普通列
  {
    prop: "age",
    label: "年龄",
    width: 80,
    align: "center",
  },
  {
    prop: "city",
    label: "城市",
    width: 120,
  },
  {
    prop: "department",
    label: "部门",
    width: 120,
  },
  {
    prop: "position",
    label: "职位",
    width: 120,
  },
  // 固定在右侧的列
  {
    prop: "salary",
    label: "薪资",
    width: 100,
    fixed: "right",
    align: "right",
  },
  {
    prop: "action",
    label: "操作",
    width: 120,
    fixed: "right",
    align: "center",
    slotName: "action",
  },
];

分页功能

添加分页功能,支持页码和每页条数的双向绑定。

示例

暂无数据
共 100 条
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 10
前往

配置说明

参数说明类型默认值
showPagination是否显示分页booleanfalse
currentPage当前页码number1
pageSize每页条数number10
total总条数number-
pagination分页变化事件(data: { page: number; limit: number }) => void-

选择功能

添加多选框功能,支持行选择和全选。

示例

选中的行: 1, 3

配置说明

参数说明类型默认值
showSelection是否显示多选框booleanfalse
selectedRowKeys选中行的 key 数组(string | number)[]-
selection-change选中行变化事件(selection: any[]) => void-

搜索功能

添加搜索表单功能,支持按条件筛选数据。

示例

姓名
状态
请选择状态
部门
请选择部门
城市
请选择城市(异步加载)
职位
请选择职位
账户状态
请选择账户状态
入职日期
未激活
暂无数据
共 100 条
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 10
前往

配置说明

参数说明类型默认值
searchColumns搜索表单列配置SearchColumn[]-
searchParam搜索参数Record<string, any>{}
search搜索事件(searchParam: Record<string, any>) => void-

工具栏功能

添加工具栏功能,支持导出、列配置、密度切换等操作。

示例

配置说明

参数说明类型默认值
data表格数据RowData[]-
columns列配置TableItem[]-

过滤功能

过滤功能支持多种过滤方式和配置选项。

示例

共 20 条
  • 1
  • 2
前往

核心配置

配置项说明类型默认值
filterMultiple是否多选过滤booleantrue
filteredValue过滤后的值Object{}
filters过滤条件Object{}
filterMethod过滤方法Functionundefined
filterPlacement过滤框的弹出位置stringbottom-end

实现说明

  1. 表格级别配置:通过 tableProps 配置全局过滤选项
  2. 列级别配置:在列配置中设置 filterablefiltersfilterMethod
  3. 自定义过滤方法:可以为不同列设置不同的过滤逻辑
  4. 过滤框位置:可以通过 filterPlacement 自定义过滤框的弹出位置

示例:过滤配置

javascript
// 表格级别过滤配置
const tableProps = {
  filterMultiple: true, // 启用多选过滤
  filteredValue: {}, // 过滤后的值
  filterPlacement: "bottom-end", // 过滤框弹出位置
};

// 列级别过滤配置
const columns = [
  {
    prop: "department",
    label: "部门",
    filterable: true, // 启用过滤
    filters: [
      // 过滤选项
      { text: "技术部", value: "技术部" },
      { text: "市场部", value: "市场部" },
      { text: "销售部", value: "销售部" },
    ],
    filterMethod: (value, row, column) => {
      // 自定义过滤逻辑
      return row[column.property] === value;
    },
  },
];

支持的过滤框弹出位置

位置值说明
top顶部居中
top-start顶部左侧
top-end顶部右侧
bottom底部居中
bottom-start底部左侧
bottom-end底部右侧
left左侧居中
left-start左侧顶部
left-end左侧底部
right右侧居中
right-start右侧顶部
right-end右侧底部

事件处理

SunlightTable 组件支持多种事件,用于响应表格的各种操作。

示例

事件处理示例

点击表格行或工具栏按钮,查看事件触发效果

事件列表

SunlightTable 组件支持多种事件,用于响应表格的各种操作:

事件名参数说明
update:currentPagepage: number当前页码变化
update:pageSizesize: number每页条数变化
update:hideColumnshideColumns: (string | number)[]隐藏列变化
update:searchParamsearchParam: Record<string, any>搜索参数更新
update:visibleSearchColumnsvisibleSearchColumns: string[]可见搜索列更新
selection-changeselection: any[]选中行变化
row-clickrow: any, column: any, event: Event行点击
row-dblclickrow: any, column: any, event: Event行双击
paginationdata: { page: number; limit: number }分页变化
exportcolumns?: string[]导出
density-changedensity: string密度变化
custom-button-clickkey: string自定义按钮点击
searchsearchParam: Record<string, any>搜索
open-settings-打开设置
open-dynamic-columns-打开动态列
refresh-刷新

方法调用

SunlightTable 组件暴露了一些方法,可以通过 ref 调用。

示例

方法调用示例

点击下面的按钮,演示 SunlightTable 组件的方法调用功能

方法列表

方法名参数返回值说明
tableRef--表格实例引用
clearSelection--清空选择
toggleRowSelectionrow: any, selected?: boolean-切换行选择状态
toggleAllSelection--切换全选状态
setCurrentRowrow: any-设置当前行
clearSort--清空排序
clearFiltercolumnKey?: string-清空过滤
doLayout--重新布局
sortprop: string, order: string-排序

表格单选

单选功能。

示例

共 10 条
  • 1
前往

核心代码

vue
<template>
  <SunlightTable :data="tableData" :columns="columns">
    <!-- 单选列插槽 -->
    <template #radio="{ row }">
      <el-radio :model-value="selectedId" :label="row.id" @change="handleSelect(row)">
        <span></span>
      </el-radio>
    </template>
  </SunlightTable>
</template>

<script setup>
const selectedId = ref();
const selectedRow = ref(null);

// 处理单选选择
function handleSelect(row) {
  selectedId.value = row.id;
  selectedRow.value = row;
}

const columns = [
  {
    prop: "radio",
    label: "选择",
    width: 60,
    slotName: "radio",
    align: "center",
  },
  // 其他列配置
];
</script>

分页多选与配置功能

分页、多选与配置功能的组合使用,包含工具栏配置、列配置、密度切换等功能。

示例

暂无数据
共 30 条
  • 1
  • 2
  • 3
前往

核心配置

参数说明类型默认值
showPagination是否显示分页booleanfalse
currentPage当前页码number1
pageSize每页条数number10
total总条数numberundefined
showSelection是否显示多选框booleanfalse
selectedRowKeys选中行的 key 数组(string | number)[]undefined
hideColumns隐藏列(string | number)[][]
toolbarConfig工具栏配置Objectundefined

开启分页多选的配置

要开启分页多选功能,需要同时设置以下两个属性:

属性配置值说明
showPaginationtrue开启分页功能
showSelectiontrue开启多选框功能

示例:开启分页多选的完整配置

vue
<template>
  <SunlightTable
    :data="tableData"
    :columns="columns"
    :toolbar-config="toolbarConfig"
    :show-pagination="true" <!-- 开启分页 -->
    :show-selection="true" <!-- 开启多选 -->
    v-model:current-page="currentPage"
    v-model:page-size="pageSize"
    :total="total"
    :selected-row-keys="selectedRowKeys"
    @selection-change="handleSelectionChange"
  />
</template>

<script setup>
import { ref, reactive } from "vue";
import { SunlightTable } from "sunlight-ui";

const tableData = ref([]);
const currentPage = ref(1);
const pageSize = ref(10);
const total = ref(30); // 总数据量
const selectedRowKeys = ref([]); // 选中行的ID数组

// 处理选择变化
const handleSelectionChange = (selection) => {
  selectedRowKeys.value = selection.map(row => row.id);
  console.log("选中的行:", selection);
};

// 列配置
const columns = [
  { prop: "id", label: "ID", width: 80 },
  { prop: "name", label: "姓名" },
  { prop: "age", label: "年龄", width: 80 },
  { prop: "city", label: "城市" },
  { prop: "department", label: "部门" },
  { prop: "position", label: "职位" },
  { prop: "salary", label: "薪资", width: 100 },
  { prop: "status", label: "状态", width: 100 },
  { prop: "phone", label: "手机号", width: 130 },
  { prop: "joinDate", label: "入职日期", width: 120 },
];

// 工具栏配置
const toolbarConfig = reactive({
  showDensity: true,     // 显示密度切换
  showColumnConfig: true, // 显示列配置
  showRefresh: true,      // 显示刷新按钮
  customButtons: [        // 自定义按钮
    {
      key: "edit",
      label: "编辑",
      icon: "Edit",
      type: "primary",
      position: "left"
    },
    {
      key: "delete",
      label: "删除",
      icon: "Delete",
      type: "danger",
      position: "right"
    },
    {
      key: "export",
      label: "导出",
      icon: "Download",
      type: "success",
      position: "right"
    }
  ]
});

// 加载数据的方法
const loadData = async () => {
  // 模拟异步加载数据
  const result = await fetchTableData(currentPage.value, pageSize.value);
  tableData.value = result.data;
  total.value = result.total;
};

// 初始化加载数据
loadData();
</script>

事件处理

事件名参数说明
selection-changeselection: any[]选中行变化
refresh-刷新
custom-button-clickkey: string自定义按钮点击

完整示例

以下是一个完整的 SunlightTable 使用示例,包含了所有基本功能:

示例

姓名
状态
请选择状态
部门
请选择部门
共 8 条
  • 1
前往

完整示例包含了 SunlightTable 组件的所有基本功能,你可以根据实际需求进行修改和扩展。