Skip to content

c7JsonTableColumn 组件文档

概述

[c7JsonTableColumn] 是一个基于 Vue 3 和 Element Plus 封装的动态表格列组件,支持通过 JSON 配置动态渲染表格列,包含文本、标签、图片、插槽等多种展示形式。适用于需要动态配置表格列的场景。

简单使用

不同类型列配置

展示各种列类型的使用:

表格高级功能

展示表格的高级功能:

动态列配置

展示动态列配置的使用:

Props

属性名类型默认值说明
columnsTableColumnProps[]-列配置数组(必填)
modelValueRecord<string, any>{}表格数据对象

TableColumnProps 配置项

属性类型默认值说明
columnTypeColumnEnumType-列类型(text/image/tag/slot)
label[string]-列标题
prop[string]-字段名(对应数据属性)
visible[boolean]true是否可见
order[number]-排序权重

ColumnEnumType 枚举

import {IObject} from "../../c7-search/src/search";

export enum ColumnEnumType {

    // 文本
    TEXT = 'text',

    // 图片
    IMAGE = 'image',

    // tag
    TAG = 'tag',
    // 卡槽
    SLOT = 'slot',

}


/**
 * 列配置属性定义
 * 对应 el-table-column 组件的所有可配置属性
 */
export interface TableColumnProps {
    // 类型
    columnType: ColumnEnumType;

    //是否显示 visible
    visible?: boolean;

    // 排序order
    order?: number;

    /**
     * 列的类型
     * - selection: 显示多选框
     * - index: 显示行索引(从1开始)
     * - expand: 显示展开按钮
     */
    type?: 'selection' | 'index' | 'expand';

    /**
     * 自定义索引值(当 type=index 时生效)
     * 可以是数字或返回索引值的函数
     */
    index?: number | ((row: any, rowIndex: number) => number);

    /**
     * 列标题显示文本
     */
    label?: string;

    /**
     * 列的唯一标识key(用于filter-change事件标识)
     */
    columnKey?: string;

    /**
     * 字段名称(对应数据对象的属性名)
     */
    prop?: string;

    /**
     * 列宽度(固定值)
     */
    width?: string | number;

    /**
     * 列最小宽度(弹性布局时使用)
     */
    minWidth?: string | number;

    /**
     * 列固定位置
     * - true: 固定在左侧
     * - 'left': 固定在左侧
     * - 'right': 固定在右侧
     */
    fixed?: boolean | 'left' | 'right';

    /**
     * 自定义表头渲染函数
     * @param h 渲染函数
     * @param column 列配置
     * @param $index 列索引
     */
    renderHeader?: (h: any, column: any, $index: number) => any;

    /**
     * 排序配置
     * - true: 本地排序
     * - 'custom': 自定义排序(需监听sort-change事件)
     */
    sortable?: boolean | 'custom';

    /**
     * 自定义排序方法(当sortable=true时生效)
     * @param a 第一个比较对象
     * @param b 第二个比较对象
     */
    sortMethod?: (a: any, b: any) => number;

    /**
     * 排序字段(当未设置sortMethod时生效)
     */
    sortBy?: string | string[] | Record<string, any>;

    /**
     * 排序策略轮转顺序
     * 默认顺序:['ascending', 'descending', null]
     */
    sortOrders?: ('ascending' | 'descending' | null)[];

    /**
     * 是否允许调整列宽(需设置border属性)
     */
    resizable?: boolean;

    /**
     * 内容格式化函数
     * @param row 当前行数据
     * @param column 列配置
     * @param cellValue 单元格值
     */
    formatter?: (row: any, column: any, cellValue: any) => string;

    /**
     * 内容过长时显示tooltip
     */
    showOverflowTooltip?: boolean | Record<string, any>;

    /**
     * 列对齐方式
     * - left: 左对齐
     * - center: 居中对齐
     * - right: 右对齐
     */
    align?: 'left' | 'center' | 'right';

    /**
     * 表头对齐方式(未设置则继承表格对齐方式)
     */
    headerAlign?: 'left' | 'center' | 'right';

    /**
     * 列自定义类名
     */
    className?: string;

    /**
     * 列标题自定义类名
     */
    labelClassName?: string;

    /**
     * 多选列的可选状态判断函数
     * @param row 当前行数据
     * @param index 行索引
     */
    selectable?: (row: any, index: number) => boolean;

    /**
     * 数据刷新后是否保留已选项
     */
    reserveSelection?: boolean;

    /**
     * 数据过滤选项配置
     * 每个选项需包含text和value属性
     */
    filters?: { text: string; value: any }[];

    /**
     * 过滤弹出框定位策略
     */
    filterPlacement?: string;

    /**
     * 过滤弹出框自定义类名(v2.5.0+)
     */
    filterClassName?: string;

    /**
     * 过滤是否支持多选
     */
    filterMultiple?: boolean;

    /**
     * 自定义过滤方法
     * @param value 过滤值
     * @param row 当前行数据
     * @param column 列配置
     */
    filterMethod?: (value: any, row: any, column: any) => boolean;

    /**
     * 已选中的过滤值
     */
    filteredValue?: Record<string, any>;

    /**
     * 自定义tooltip内容(v2.9.4+)
     * @param row 当前行数据
     */
    tooltipFormatter?: (row: any) => string;


    // 数据列表
    dictList: IObject[];

    // 卡槽名称
    slotName: string;
}