ysj-plus-table
Version:
A Vue 3 table component based on Element Plus
214 lines (192 loc) • 7.17 kB
Markdown
# PlusTable
基于 Element Plus 的增强表格组件,提供了更强大的功能和更简单的使用方式。
## 特性
- 支持搜索栏配置
- 支持工具栏配置
- 支持表格列配置
- 支持分页配置
- 支持树形表格
- 支持自定义列渲染
- 支持表格事件处理
- 支持表格样式配置
## 安装
```bash
npm install @yunshuju/plus-table
```
## 使用
```vue
<template>
<plus-table
:columns="columns"
:search-columns="searchColumns"
:tool-bar-render="toolBarRender"
:data-source="tableData"
:loading="loading"
@query="handleQuery"
@selection-change="handleSelectionChange"
/>
</template>
<script setup>
import { ref } from 'vue'
import PlusTable from '@yunshuju/plus-table'
// 表格列配置
const columns = [
{
title: '姓名',
dataIndex: 'name',
width: 120
},
{
title: '年龄',
dataIndex: 'age',
width: 80
},
{
title: '地址',
dataIndex: 'address'
}
]
// 搜索列配置
const searchColumns = [
{
title: '姓名',
dataIndex: 'name',
showSearch: {
type: 'input',
placeholder: '请输入姓名',
width: 200
}
},
{
title: '年龄',
dataIndex: 'age',
showSearch: {
type: 'select',
placeholder: '请选择年龄',
width: 200,
valueEnum: [
{ label: '18', value: 18 },
{ label: '19', value: 19 },
{ label: '20', value: 20 }
]
}
}
]
// 工具栏配置
const toolBarRender = [
{
title: '新增',
icon: 'Plus',
onClick: () => {
console.log('新增')
}
},
{
title: '删除',
icon: 'Delete',
type: 'danger',
onClick: () => {
console.log('删除')
}
}
]
// 表格数据
const tableData = ref([
{
id: 1,
name: '张三',
age: 18,
address: '北京市朝阳区'
},
{
id: 2,
name: '李四',
age: 19,
address: '北京市海淀区'
}
])
// 加载状态
const loading = ref(false)
// 查询方法
const handleQuery = (params) => {
console.log('查询参数:', params)
}
// 选择变化
const handleSelectionChange = (selection) => {
console.log('选中数据:', selection)
}
</script>
```
## API
### Props
| 参数 | 说明 | 类型 | 默认值 |
| --- | --- | --- | --- |
| columns | 表格列配置 | array | [] |
| searchColumns | 搜索列配置 | array | [] |
| toolBarRender | 工具栏配置 | array | [] |
| showIndex | 是否显示序号 | boolean | true |
| selection | 是否显示选择框 | boolean | false |
| pagination | 分页配置 | boolean/object | true |
| dataSource | 表格数据 | array | [] |
| loading | 加载状态 | boolean | false |
| border | 是否显示边框 | boolean | true |
| stripe | 是否显示斑马纹 | boolean | true |
| height | 表格高度 | string/number | - |
| maxHeight | 表格最大高度 | string/number | - |
| rowKey | 行数据的 Key | string/function | 'id' |
| treeProps | 树形表格配置 | object | {} |
| defaultExpandAll | 是否默认展开所有行 | boolean | false |
| expandRowKeys | 展开行的 keys 数组 | array | [] |
| rowClassName | 行的 className | string/function | - |
| rowStyle | 行的 style | object/function | - |
| cellClassName | 单元格的 className | string/function | - |
| cellStyle | 单元格的 style | object/function | - |
| headerRowClassName | 表头行的 className | string/function | - |
| headerRowStyle | 表头行的 style | object/function | - |
| headerCellClassName | 表头单元格的 className | string/function | - |
| headerCellStyle | 表头单元格的 style | object/function | - |
| highlightCurrentRow | 是否高亮当前行 | boolean | false |
| currentRowKey | 当前行的 key | string/number | - |
| emptyText | 空数据时显示的文本 | string | '暂无数据' |
| defaultSort | 默认的排序列的 prop 和顺序 | object | - |
| tooltipEffect | tooltip effect 属性 | string | 'dark' |
| showSummary | 是否在表尾显示合计行 | boolean | false |
| sumText | 合计行第一列的文本 | string | '合计' |
| summaryMethod | 自定义的合计计算方法 | function | - |
| spanMethod | 合并行或列的计算方法 | function | - |
| selectOnIndeterminate | 在多选表格中,当仅有部分行被选中时,点击表头的多选框时的行为 | boolean | true |
| indent | 展示树形数据时,树节点的缩进 | number | 16 |
| lazy | 是否懒加载子节点数据 | boolean | false |
| load | 加载子节点数据的方法 | function | - |
| style | 表格的 style | string/object | - |
| class | 表格的 class | string/object | - |
| tableLayout | 表格的 table-layout 属性 | string | 'auto' |
| scrollbarAlwaysOn | 是否总是显示滚动条 | boolean | false |
| showOverflowTooltip | 当内容过长被隐藏时显示 tooltip | boolean | true |
| fit | 列的宽度是否自撑开 | boolean | true |
| size | 表格的尺寸 | string | 'default' |
| resizeObserver | 是否启用 resize 监听 | boolean | true |
| flex | 是否启用 flex 布局 | boolean | false |
### Events
| 事件名 | 说明 | 回调参数 |
| --- | --- | --- |
| update:dataSource | 表格数据更新时触发 | (dataSource: array) |
| update:loading | 加载状态更新时触发 | (loading: boolean) |
| update:pagination | 分页配置更新时触发 | (pagination: object) |
| select | 当用户手动勾选数据行的 Checkbox 时触发的事件 | (selection: array, row: object) |
| select-all | 当用户手动勾选全选 Checkbox 时触发的事件 | (selection: array) |
| selection-change | 当选择项发生变化时触发的事件 | (selection: array) |
| cell-click | 当某个单元格被点击时触发的事件 | (row: object, column: object, cell: HTMLElement, event: Event) |
| row-click | 当某一行被点击时触发的事件 | (row: object, column: object, event: Event) |
| row-contextmenu | 当某一行被鼠标右键点击时触发的事件 | (row: object, column: object, event: Event) |
| row-dblclick | 当某一行被双击时触发的事件 | (row: object, column: object, event: Event) |
| header-click | 当某一列的表头被点击时触发的事件 | (column: object, event: Event) |
| header-contextmenu | 当某一列的表头被鼠标右键点击时触发的事件 | (column: object, event: Event) |
| sort-change | 当表格的排序条件发生变化的时候触发的事件 | ({ column: object, prop: string, order: string }) |
| filter-change | 当表格的筛选条件发生变化的时候触发的事件 | (filters: object) |
| expand-change | 当用户对某一行展开或者关闭的时候触发的事件 | (row: object, expanded: boolean) |
| current-change | 当表格的当前行发生变化的时候触发的事件 | (currentRow: object) |
| size-change | 当每页条数改变时触发 | (size: number) |
| page-change | 当页码改变时触发 | ({ page: number, size: number }) |
## 许可证
[MIT](LICENSE)