基本用法
本节介绍 SunlightTable 组件的基本使用方法,包括基本表格、分页、选择、搜索和工具栏等功能。
基本表格
最简单的表格使用方式,只需要提供数据和列配置。
示例
配置说明
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| data | 表格数据 | RowData[] | - |
| columns | 列配置 | TableItem[] | - |
| showToolbar | 是否显示工具栏 | boolean | true |
| showPagination | 是否显示分页 | boolean | false |
| showSelection | 是否显示多选框 | boolean | false |
| currentPage | 当前页码 | number | 1 |
| pageSize | 每页条数 | number | 10 |
| total | 总条数 | number | undefined |
| selectedRowKeys | 选中行的 key 数组 | (string | number)[] | undefined |
| hideColumns | 隐藏列 | (string | number)[] | [] |
| tableListeners | 表格事件监听器 | Object | undefined |
| tableProps | 表格属性配置 | Object | undefined |
| toolbarConfig | 工具栏配置 | Object | undefined |
| exportConfig | 导出配置 | Object | undefined |
| tableHeight | 表格高度 | number | string | undefined |
| onRowClick | 行点击回调 | Function | undefined |
| onRowDblclick | 行双击回调 | Function | undefined |
| searchColumns | 搜索表单列配置 | SearchColumn[] | undefined |
| searchParam | 搜索参数 | Record<string, any> | {} |
| searchThemeStyle | 搜索主题样式 | Object | undefined |
| visibleSearchColumns | 可见的搜索列 | string[] | [] |
| searchCollapsed | 搜索表单是否收起 | boolean | false |
列配置详解
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 | 是否隐藏该列 | boolean | false |
| permission | 权限控制字段 | Permission | - |
| children | 子列,用于复杂表头 | TableItem[] | - |
| editable | 是否可编辑 | boolean | false |
| 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 | 是否显示斑马纹 | boolean | false |
| border | 是否显示边框 | boolean | false |
| size | 表格尺寸 | string | default |
| showHeader | 是否显示表头 | boolean | true |
| highlightCurrentRow | 是否高亮当前行 | boolean | false |
| emptyText | 空数据时显示的文本 | string | 暂无数据 |
| defaultSort | 默认排序规则 | Object | {} |
| tooltipEffect | 提示框效果 | string | dark |
| spanMethod | 单元格合并方法 | Function | undefined |
| selectOnIndeterminate | 部分选中时的行为 | boolean | false |
| indent | 树形表格的缩进 | number | 16 |
| treeProps | 树形表格的属性配置 | Object | {} |
| rowClassName | 行的 className | string | Function | "" |
| rowStyle | 行的 style | string | Function | "" |
| cellClassName | 单元格的 className | string | Function | "" |
| cellStyle | 单元格的 style | string | Function | "" |
| headerRowClassName | 表头行的 className | string | Function | "" |
| headerRowStyle | 表头行的 style | string | Function | "" |
| headerCellClassName | 表头单元格的 className | string | Function | "" |
| headerCellStyle | 表头单元格的 style | string | Function | "" |
| summaryMethod | 合计行计算方法 | Function | undefined |
| summaryRows | 合计行数量 | number | 1 |
| lazy | 是否懒加载 | boolean | false |
| load | 懒加载的加载函数 | Function | undefined |
| showSummary | 是否显示合计行 | boolean | false |
| sortBy | 排序字段 | string | "" |
| sortOrders | 排序顺序数组 | Array | [null, "ascending", "descending"] |
| defaultExpandAll | 是否默认展开所有行 | boolean | false |
| expandRowKeys | 展开行的 key 数组 | Array | [] |
| defaultExpandedKeys | 默认展开的行的 key 数组 | Array | [] |
| filterMultiple | 是否多选过滤 | boolean | true |
| filteredValue | 过滤后的值 | Object | {} |
| filters | 过滤条件 | Object | {} |
| filterMethod | 过滤方法 | Function | undefined |
| filterPlacement | 过滤框的弹出位置 | string | bottom-end |
toolbarConfig 配置项
| 配置项 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| showDensity | 是否显示密度切换 | boolean | false |
| showColumnConfig | 是否显示列配置 | boolean | false |
| showRefresh | 是否显示刷新按钮 | boolean | false |
| showSearchConfig | 是否显示搜索配置 | boolean | false |
| customButtons | 自定义按钮配置 | Array | [] |
customButtons 配置项
| 配置项 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| key | 按钮唯一标识 | string | - |
| label | 按钮文本 | string | - |
| type | 按钮类型 | string | default |
| size | 按钮尺寸 | string | small |
| icon | 按钮图标 | any | - |
| disabled | 是否禁用 | boolean | false |
| position | 按钮位置 | string | left |
固定列配置
固定列功能通过 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 | 是否显示分页 | boolean | false |
| currentPage | 当前页码 | number | 1 |
| pageSize | 每页条数 | number | 10 |
| total | 总条数 | number | - |
| pagination | 分页变化事件 | (data: { page: number; limit: number }) => void | - |
选择功能
添加多选框功能,支持行选择和全选。
示例
选中的行: 1, 3
配置说明
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| showSelection | 是否显示多选框 | boolean | false |
| 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 | 是否多选过滤 | boolean | true |
| filteredValue | 过滤后的值 | Object | {} |
| filters | 过滤条件 | Object | {} |
| filterMethod | 过滤方法 | Function | undefined |
| filterPlacement | 过滤框的弹出位置 | string | bottom-end |
实现说明
- 表格级别配置:通过
tableProps配置全局过滤选项 - 列级别配置:在列配置中设置
filterable、filters和filterMethod - 自定义过滤方法:可以为不同列设置不同的过滤逻辑
- 过滤框位置:可以通过
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:currentPage | page: number | 当前页码变化 |
| update:pageSize | size: number | 每页条数变化 |
| update:hideColumns | hideColumns: (string | number)[] | 隐藏列变化 |
| update:searchParam | searchParam: Record<string, any> | 搜索参数更新 |
| update:visibleSearchColumns | visibleSearchColumns: string[] | 可见搜索列更新 |
| selection-change | selection: any[] | 选中行变化 |
| row-click | row: any, column: any, event: Event | 行点击 |
| row-dblclick | row: any, column: any, event: Event | 行双击 |
| pagination | data: { page: number; limit: number } | 分页变化 |
| export | columns?: string[] | 导出 |
| density-change | density: string | 密度变化 |
| custom-button-click | key: string | 自定义按钮点击 |
| search | searchParam: Record<string, any> | 搜索 |
| open-settings | - | 打开设置 |
| open-dynamic-columns | - | 打开动态列 |
| refresh | - | 刷新 |
方法调用
SunlightTable 组件暴露了一些方法,可以通过 ref 调用。
示例
方法调用示例
点击下面的按钮,演示 SunlightTable 组件的方法调用功能
方法列表
| 方法名 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| tableRef | - | - | 表格实例引用 |
| clearSelection | - | - | 清空选择 |
| toggleRowSelection | row: any, selected?: boolean | - | 切换行选择状态 |
| toggleAllSelection | - | - | 切换全选状态 |
| setCurrentRow | row: any | - | 设置当前行 |
| clearSort | - | - | 清空排序 |
| clearFilter | columnKey?: string | - | 清空过滤 |
| doLayout | - | - | 重新布局 |
| sort | prop: 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 | 是否显示分页 | boolean | false |
| currentPage | 当前页码 | number | 1 |
| pageSize | 每页条数 | number | 10 |
| total | 总条数 | number | undefined |
| showSelection | 是否显示多选框 | boolean | false |
| selectedRowKeys | 选中行的 key 数组 | (string | number)[] | undefined |
| hideColumns | 隐藏列 | (string | number)[] | [] |
| toolbarConfig | 工具栏配置 | Object | undefined |
开启分页多选的配置
要开启分页多选功能,需要同时设置以下两个属性:
| 属性 | 配置值 | 说明 |
|---|---|---|
| showPagination | true | 开启分页功能 |
| showSelection | true | 开启多选框功能 |
示例:开启分页多选的完整配置
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-change | selection: any[] | 选中行变化 |
| refresh | - | 刷新 |
| custom-button-click | key: string | 自定义按钮点击 |
完整示例
以下是一个完整的 SunlightTable 使用示例,包含了所有基本功能:
示例
共 8 条
- 1
页
完整示例包含了 SunlightTable 组件的所有基本功能,你可以根据实际需求进行修改和扩展。