Skip to content

PenTable 表格组件

代码示例

vue
<template>
    <!-- 表格 -->
    <pen-table :data="list" :columns="columns"></pen-table>
</template>

<script setup lang="ts">
// 表格字段配置
const columns = defineTable([
    { prop: 'id', label: 'ID' },
    { prop: 'name', label: 'Name' },
    { prop: 'age', label: 'Age' },
    { prop: 'address', label: 'Address' },
])

const list = ref([
    { id: 1, name: 'Tom', age: 18, address: 'Beijing' },
    { id: 2, name: 'Jerry', age: 20, address: 'Shanghai' },
])
</script>

插槽

插槽名说明
expand展开行插槽,当 columns 中有 typeexpand 的字段时可用
[field]-header表格头自定义,[field]为具体字段名,如:name-label
[field]单元格数据自定义,[field]为具体字段名,如:name
vue
<template>
    <pen-table v-model="search" :options="searchOptions">
        <template #name-header>
            <span>自定义表头</span>
        </template>
        <template #name>
            <span>自定义单元格内容</span>
        </template>
    </pen-table>
</template>

属性类型

ts
import type { TableProps } from 'element-plus';

export interface Props<T> extends TableProps<T> {
    columns: TableColumnsProps<T>[]
}

TableColumnsProps定义

ts
import type { TableColumnCtx } from 'element-plus';
import type { CSSProperties } from 'vue';

// 列属性配置
type Props<T> = Omit<Partial<TableColumnCtx<T>>, 'prop' | 'label'> & {
    style?: string|CSSProperties;
};

// 普通字段
export type DefaultColumnProps<T> = {
    prop: string;
    label: string;
    props?: Props<T>,
}

// 展开行
export type ExpandColumnsProps<T> = {
    type: 'expand';
    label: string;
    props?: Props<T>,
}

// 序号列
export type IndexColumnsProps<T> = {
    type: 'index';
    label: string;
    props?: Props<T>,
}

// 多选列
export type SelectionColumnsProps<T> = {
    type: 'selection';
    label: string;
    props?: Props<T>,
}

export type TableColumnsProps<T> = DefaultColumnProps<T> | ExpandColumnsProps<T> | IndexColumnsProps<T> | SelectionColumnsProps<T>;

Expose属性

属性名说明
instance表格实例