Skip to content
On this page

表格组件

基于arco-design封装的表格,增加了以下封装:

  • 顶部筛选框(基于 arco-form)
  • 左上侧 tabs
  • 右上侧操作按钮
  • 左下侧全选&操作按钮
  • 右下侧分页
  • 数据自动请求&分页配置,无需重复写请求、分页逻辑
  • 对外数据暴露,方便进行部分数据特殊处理

同时提供了以下方法,用于表单快速构建:

  • tableHelper方法,用于生成各类组件对象、校验表单等

如果以上方法不满足需求,可以自行定义符合arco-design表格项的对象。

基础用法

暂无数据
<template>
    <div>
        <arco-table
            v-model:filter-data="filterData"
            :table-config="getConfig"
            :filter-config="filterConfig"
            :req="getData"
        >
            <template #s1>
                <a-table-column title="这是slot">
                    <template #cell="{ rowIndex, record }"> {{ rowIndex }},{{ record.userId }}</template>
                </a-table-column>
            </template>
        </arco-table>
    </div>
</template>
<script setup lang="ts">
import { ArcoTable, tableHelper, formHelper } from "@easyfe/admin-component";
import { testList } from "@/apis/common";

const filterData = ref({
    test: "测试文案",
    tabsData: "1"
});

const filterConfig = computed(() => {
    return [
        formHelper.input("测试", "test", {
            span: 8
        }),
        formHelper.input("测试2", "test2", {
            span: 8
        }),
        formHelper.datePicker("日期", "key10", {
            type: "date",
            span: 8
        })
    ];
});

const getConfig = computed(() => {
    return tableHelper.create({
        pageKey: "_page",
        sizeKey: "_size",
        rowKey: "",
        disableSelectedRow: true,
        arcoProps: {
            rowKey: "id",
            bordered: false,
            rowSelection: {
                type: "checkbox",
                showCheckedAll: true
            }
        },
        trBtns: [
            {
                label: "编辑",
                type: "primary"
            },
            {
                label: "删除",
                status: "danger"
            }
        ],
        tlBtns: [
            {
                label: "全部",
                value: "0"
            },
            {
                label: "已发布",
                value: "1"
            },
            {
                label: "草稿箱",
                value: "2"
            }
        ],
        blBtns: [
            {
                label: "新增",
                type: "primary"
            },
            {
                label: "删除",
                status: "danger"
            }
        ],
        columns: [
            tableHelper.default("用户ID", "id", {
                width: 100
            }),
            tableHelper.slot("s1"),
            tableHelper.default("标题", "title"),
            tableHelper.default("内容", "body"),
            tableHelper.btns(
                "操作",
                [
                    {
                        label: "编辑"
                    },
                    {
                        label: "删除",
                        status: "danger"
                    },
                    {
                        label: "删除2",
                        status: "danger",
                        if: (row, index) => {
                            if (index === 1) {
                                return false;
                            }
                            return true;
                        },
                        collapse: true
                    },
                    {
                        label: "删除3",
                        status: "danger",
                        if: (row, index) => {
                            if (index === 1) {
                                return false;
                            }
                            return true;
                        },
                        collapse: true
                    },
                    {
                        label: "删除4",
                        status: "danger",
                        if: (row, index) => {
                            if (index === 1) {
                                return false;
                            }
                            return true;
                        },
                        collapse: true
                    }
                ],
                {
                    width: 200
                }
            )
        ]
    });
});

const getData = computed(() => {
    return {
        fn: testList,
        params: { ...filterData.value }
    };
});
</script>
<template>
    <div>
        <arco-table
            v-model:filter-data="filterData"
            :table-config="getConfig"
            :filter-config="filterConfig"
            :req="getData"
        >
            <template #s1>
                <a-table-column title="这是slot">
                    <template #cell="{ rowIndex, record }"> {{ rowIndex }},{{ record.userId }}</template>
                </a-table-column>
            </template>
        </arco-table>
    </div>
</template>
<script setup lang="ts">
import { ArcoTable, tableHelper, formHelper } from "@easyfe/admin-component";
import { testList } from "@/apis/common";

const filterData = ref({
    test: "测试文案",
    tabsData: "1"
});

const filterConfig = computed(() => {
    return [
        formHelper.input("测试", "test", {
            span: 8
        }),
        formHelper.input("测试2", "test2", {
            span: 8
        }),
        formHelper.datePicker("日期", "key10", {
            type: "date",
            span: 8
        })
    ];
});

const getConfig = computed(() => {
    return tableHelper.create({
        pageKey: "_page",
        sizeKey: "_size",
        rowKey: "",
        disableSelectedRow: true,
        arcoProps: {
            rowKey: "id",
            bordered: false,
            rowSelection: {
                type: "checkbox",
                showCheckedAll: true
            }
        },
        trBtns: [
            {
                label: "编辑",
                type: "primary"
            },
            {
                label: "删除",
                status: "danger"
            }
        ],
        tlBtns: [
            {
                label: "全部",
                value: "0"
            },
            {
                label: "已发布",
                value: "1"
            },
            {
                label: "草稿箱",
                value: "2"
            }
        ],
        blBtns: [
            {
                label: "新增",
                type: "primary"
            },
            {
                label: "删除",
                status: "danger"
            }
        ],
        columns: [
            tableHelper.default("用户ID", "id", {
                width: 100
            }),
            tableHelper.slot("s1"),
            tableHelper.default("标题", "title"),
            tableHelper.default("内容", "body"),
            tableHelper.btns(
                "操作",
                [
                    {
                        label: "编辑"
                    },
                    {
                        label: "删除",
                        status: "danger"
                    },
                    {
                        label: "删除2",
                        status: "danger",
                        if: (row, index) => {
                            if (index === 1) {
                                return false;
                            }
                            return true;
                        },
                        collapse: true
                    },
                    {
                        label: "删除3",
                        status: "danger",
                        if: (row, index) => {
                            if (index === 1) {
                                return false;
                            }
                            return true;
                        },
                        collapse: true
                    },
                    {
                        label: "删除4",
                        status: "danger",
                        if: (row, index) => {
                            if (index === 1) {
                                return false;
                            }
                            return true;
                        },
                        collapse: true
                    }
                ],
                {
                    width: 200
                }
            )
        ]
    });
});

const getData = computed(() => {
    return {
        fn: testList,
        params: { ...filterData.value }
    };
});
</script>

属性

参数说明类型可选值默认值是否必填
filterConfig筛选表单配置Record<string,any>[]-[]
filterData筛选值{ tabsData?: string ,number } &Record<string, any>-{}
defaultSelectionKeys复选框默认选中 key 集合number[]|string[]-[]
req构造请求TableReq-[]
tableConfig表格配置TableConfig-[]
list**(v-model)**双向绑定数据any[]-[]

TableConfig

参数说明类型默认值必填
maxHeight表格高度string|number|'auto'-
showRefresh显示刷新按钮booleantrue
refreshFn自定义刷新方法Function-
tlBtns左上角标签_Tabs-
trBtns右上角按钮_Btn[]-
blBtns左下角按钮_Btn[]-
disableSelectedRow是否禁用选中行boolean-
columns列表组_TableColumn[]-
rowKey数据存在的keystring-
totalKey总数keystring-
active焦点keystring | number-
sizeList分页数量number[]-
size当前分页number-
pageKey分页page变量string-
sizeKey分页size变量string-
selectLimit最大选择数量number-
allowFlatten是否允许平铺boolean-
arcoProps表格propsInstanceType<typeof Table>["$props"]-

TableReq

参数说明类型默认值必填
fn请求所调用的函数(params: any) => Promise<any>-
params请求的参数Record<string, any>-

Btn

参数说明类型默认值必填
label按钮的标签string-
type按钮的类型"primary" | "success" | "warning" | "danger" | "info" | "text" | "default""default"
icon按钮的图标string-
handler按钮的点击事件处理程序() => void-
disabled指定按钮是否禁用boolean-
hidden指定按钮是否隐藏boolean-

TableColumn

参数说明类型默认值必填
type列的类型"default" | "slot" | "btns" | "image" | "time" | "dictionary" | "date" | "status" | "link""default"
prop列的属性键string-
label列的标签string-
if指定列是否可见boolean-
width列的宽度number-
btns与列关联的按钮数组_Btn[]-
handler列的点击事件处理程序(row?: any, index?: number) => void-
align列的水平对齐方式"left" | "right" | "center"-
fixed指定列是否固定"left" | "right"-
labelKey字典标签的自定义键string-
valueKey字典值的自定义键string-
sortable指定列是否可排序TableSortable-
dictionary列的字典({ label?: string; value?: string | number } & Record<string | number, string | number>)[]-
leftExtra列的左侧扩展string-
rightExtra列的右侧扩展string-
format列的时间格式string-
tooltip列的工具提示配置Record<string, any>-
color列的颜色string-
rowKey列的默认键"id"-
split列的时间格式分隔符string-

外部调用 defineExpose

名称说明参数说明
refresh刷新表格外部通过 ref,调用该方法,可以主动刷新表格
baseTablearco-table实例可以通过该实例调用arco-table方法