表格业务组件
基础用法
基础用法
根据配置生成表格
<template>
<su-table class="vp-raw" :api="getTableList" :columns="columns" />
</template>
<script setup lang="ts">
const getTableList = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
code: 200,
data: {
total: 5,
currentPage: 1,
list: [
{
id: 1,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 2,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 3,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 4,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 5,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
],
},
});
}, 500);
});
};
const columns = [
{
key: 'id',
dataIndex: 'id',
title: '事件ID',
},
{
key: 'username',
dataIndex: 'username',
title: '用户名',
},
{
key: 'department',
dataIndex: 'department',
title: '部门',
},
{
key: 'createTime',
dataIndex: 'createTime',
title: '创建时间',
},
];
</script>
添加搜索框查找
添加搜索
根据配置生成表格和搜索项, 搜索项具体配置请查看搜索框组件说明
<template>
<su-table class="vp-raw" search-show :api="getTableList" :columns="columns" />
</template>
<script setup lang="ts">
const getTableList = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
code: 200,
data: {
total: 5,
currentPage: 1,
list: [
{
id: 1,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 2,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 3,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 4,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 5,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
],
},
});
}, 500);
});
};
const columns = [
{
key: 'id',
dataIndex: 'id',
title: '事件ID',
search: 'input',
},
{
key: 'username',
dataIndex: 'username',
title: '用户名',
search: 'input',
},
{
key: 'department',
dataIndex: 'department',
title: '部门',
search: 'select',
enum: [
{
lable: '前端',
value: '前端',
},
{
lable: '后端',
value: '后端',
}
]
},
{
key: 'createTime',
dataIndex: 'createTime',
title: '创建时间',
},
];
</script>
取消分页显示
取消分页显示
表格默认开启分页,可以通过设置 isPageable 属性为 false 关闭, 设置后的数据格式与分页不同
<template>
<su-table class="vp-raw" :isPageable="false" :api="getTableList" :columns="columns" />
</template>
<script setup lang="ts">
const getTableList = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
code: 200,
data: [
{
id: 1,
username: "张三",
department: "前端",
createTime: "2023-4-10",
},
{
id: 2,
username: "张三",
department: "前端",
createTime: "2023-4-10",
},
{
id: 3,
username: "张三",
department: "前端",
createTime: "2023-4-10",
},
{
id: 4,
username: "张三",
department: "前端",
createTime: "2023-4-10",
},
{
id: 5,
username: "张三",
department: "前端",
createTime: "2023-4-10",
},
],
});
}, 500);
});
};
const columns = [
{
key: "id",
dataIndex: "id",
title: "事件ID",
},
{
key: "username",
dataIndex: "username",
title: "用户名",
},
{
key: "department",
dataIndex: "department",
title: "部门",
},
{
key: "createTime",
dataIndex: "createTime",
title: "创建时间",
},
];
</script>
显示表格工具栏
刷新按钮/表格列显隐
设置 showTools 属性为 true 可以显示,默认不显示。1. 刷新按钮用于手动刷新表格 2.表格列显隐通过将数据存储在浏览器localStorage中持久化保存表格显示隐藏
<template>
<su-table class="vp-raw" :api="getTableList" :columns="columns" showTools />
</template>
<script setup lang="ts">
const getTableList = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
code: 200,
data: {
total: 5,
currentPage: 1,
list: [
{
id: 1,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 2,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 3,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 4,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 5,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
],
},
});
}, 500);
});
};
const columns = [
{
key: 'id',
dataIndex: 'id',
title: '事件ID',
},
{
key: 'username',
dataIndex: 'username',
title: '用户名',
},
{
key: 'department',
dataIndex: 'department',
title: '部门',
},
{
key: 'createTime',
dataIndex: 'createTime',
title: '创建时间',
},
];
</script>
添加一行自定义按钮
自定义插槽
自定义设置位于表格上方的组件,并修改传参
<template>
<su-table class="vp-raw" ref="slotTable" :api="getTableList" :columns="columns" :initParam="initParam">
<template #extra>
<a-button style="margin-bottom: 24px" @click="reSearch">刷新</a-button>
</template>
</su-table>
</template>
<script setup lang="ts">
import { ref, reactive } from 'vue'
const getTableList = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
code: 200,
data: {
total: 5,
currentPage: 1,
list: [
{
id: 1,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 2,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 3,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 4,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 5,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
],
},
});
}, 500);
});
};
const columns = [
{
key: 'id',
dataIndex: 'id',
title: '事件ID',
},
{
key: 'username',
dataIndex: 'username',
title: '用户名',
},
{
key: 'department',
dataIndex: 'department',
title: '部门',
},
{
key: 'createTime',
dataIndex: 'createTime',
title: '创建时间',
},
];
let initParam = reactive({})
const slotTable = ref()
const reSearch = () => {
initParam = {time: new Date().getTime()}
console.log(initParam)
slotTable.value.reset()
}
</script>
获取选中的数据
选中的项:
获取选中的数据
<template>
<div>
<div style="margin-bottom: 24px">选中的项:{{ chooseItem }}</div>
<su-table class="vp-raw" ref="tableGetChoose" hasSelect :api="getTableList" :columns="columns" />
</div>
</template>
<script setup lang="ts">
import { ref, computed } from 'vue'
const tableGetChoose = ref()
const chooseItem = computed(() => tableGetChoose.value?.selectedKeys)
const getTableList = () => {
return new Promise((resolve) => {
setTimeout(() => {
resolve({
code: 200,
data: {
total: 5,
currentPage: 1,
list: [
{
id: 1,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 2,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 3,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 4,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
{
id: 5,
username: '张三',
department: '前端',
createTime: '2023-4-10',
},
],
},
});
}, 500);
});
};
const columns = [
{
key: 'id',
dataIndex: 'id',
title: '事件ID',
},
{
key: 'username',
dataIndex: 'username',
title: '用户名',
},
{
key: 'department',
dataIndex: 'department',
title: '部门',
},
{
key: 'createTime',
dataIndex: 'createTime',
title: '创建时间',
},
];
</script>
组件参数配置
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
name | 表格名称 | string | 单页面存在有多个table并都开启showTools时需要配置 |
columns | 表格配置 | itemType[] | 配置请查看下方Columns表格配置 |
slot | 支持在表格上方添加 | slot="extra" | -- |
searchShow | 是否显示搜索项 | boolean | false |
pageSizeOptions | 分页器 | string[] | ['10', '30', '50', '100'] |
isPageable | 是否需要分页 | boolean | false |
initParam | 默认传参 | object | {} |
hasSelect | 是否打开多选框 | boolean | false |
isScroll | 是否允许滚动,建议列表宽度大于800以上开启 | boolean | false |
scrollHeight | 滚动高度 | number | 800 |
showBorder | 是否显示边框 | boolean | false |
resetBtn | 是否显示重置按钮 | boolean | true |
showOtherBtn | 是否显示搜索按钮旁边的按钮 | boolean | false |
btnText | 搜索按钮旁边的按钮 | string | -- |
showTools | 是否显示列显隐按钮 | boolean | false |
showJumper | 是否显示快捷跳转 | boolean | false |
bordered | 是否显示表格边框 | boolean | false |
showEmpty | 是否显示自定义空数据的表格图片 | boolean | false |
mountSearch | 初始化组件是否搜索 | boolean | false |
colspan | 搜索项宽度 | number | 6 |
expandSpan | 按钮宽度 | number | - |
回调方法
参数 | 说明 | 类型 | 示例 |
---|---|---|---|
add | 点击新增的按钮 | function | -- |
searchDone | 搜索完成后的回调 | function | -- |
组件内暴露的值或方法
参数 | 说明 | 类型 | 示例 |
---|---|---|---|
selectedKeys | 开启多选时可用,获取当前选中的id | string[] | -- |
pageOpt | 获取表格当前的分页数据 | object | -- |
tableData | 获取表格当前的数据 | object | -- |
reset | 用于重置分页,重新获取表格数据 | function | -- |
resetCol | 用于重置表格列内容 | function | -- |
Columns表格配置
参数 | 说明 | 类型 | 示例 |
---|---|---|---|
key | 表格列及搜索组件键值 | string | 唯一的key值 |
search | 搜索组件类别 | string | input 、InputNumber 、select 、timePicker 、 timeRangePicker 、datePicker 、dateRangePicker 、cascader |
title | 表格列名称及组件左侧名称 | string | -- |
titleWidth | 组件左侧宽度 | number | -- |
value | 搜索组件初始值 | -- | string、number、string[]、number[]、boolean |
enum | select组件搜索项 | array | 下拉列表数据,默认取value、label |
labelName | 自定义枚举文字 | string | 更改下拉数据取值 |
valueName | 自定义枚举值 | string | 更改下拉数据取值 |
api | 动态枚举 | function | 获取接口返回的下拉数据 |
params | 动态获取枚举的参数 | object | {} |
style | 组件左侧文字样式 | string | 设置文字行内样式 |
format | 时间类选项输出的格式 | string | 使用dayjs格式化时间格式:'YYYY MM DD hh:mm:ss' |
dataIndex | table自定义列输出 | string | 沿用自antd |
width | 表格列宽度 | number | 沿用自antd |
min | inputNumber组件最小值 | number | 沿用自antd |
max | inputNumber组件最大值 | number | 沿用自antd |
placeholder | 组件无值时显示的文字 | string | 沿用自antd |
labelCol | 组件左侧文件宽度 | string | 沿用自antd |
labelAlign | 组件左侧文件定位 | string | 沿用自antd |
wrapperCol | 组件宽度 | string | 沿用自antd |
picker | 日期选项样式 | string | 沿用自antd |