Skip to content

自定义单元格

  • 通过 StkTableColumn['customCell'] 自定义表体单元格内容。
  • 通过 StkTableColumn['customHeaderCell'] 自定义表头单元格内容。

customCellcustomHeaderCell 使用方式基本相同,下面以 customCell 为例子进行说明。

WARNING

customCell 的根元素请不要设置为 inline/inline-block/inline-flex 等行内元素,否则在虚拟列表中可能会撑开行高。

通过vue SFC 使用

支持传入vue SFC 组件,vue 组件的 props 需要用 CustomCellProps 类型特殊定义。

TIP

最佳实践如下,columns单独定义一个文件。

ts
import { StkTableColumn } from 'stk-table-vue/src/StkTable/index';
import type { DataType } from './types';
import YieldCell from './YieldCell.vue';
const columns: StkTableColumn<DataType> = [{
    title: '收益率',
    dataIndex: 'yield',
    customCell: YieldCell
}]
vue
<script lang="ts" setup>
import { computed } from 'vue';
import { DataType } from './types';
import { CustomCellProps } from 'stk-table-vue/src/StkTable/types/index';

const props = defineProps<CustomCellProps<DataType>>();
const className = computed(() => {
    let name = '';
    if (props.cellValue > 0) {
        name = 'color-up';
    } else if (props.cellValue < 0) {
        name = 'color-down';
    }
    return name;
});
</script>
<template>
    <span :class="className">{{ props.cellValue > 0 ? '+' : '' }}{{ (props.cellValue * 100).toFixed(4) }}%</span>
</template>
<style>
.color-up {
    color: #2fc87b;
}
.color-down {
    color: #ff2b48;
}
</style>
ts
export type DataType = {
    name: string;
    yield: number;
};
loading

通过渲染函数h使用

简单的修改,直接使用渲染函数会比较方便。

比如我们对数值乘以100再加单位

ts
import { StkTableColumn } from 'stk-table-vue/src/StkTable/index';
const columns: StkTableColumn<any>[] = [
    {
        title: '收益率',
        dataIndex: 'yield',
        customCell: ({ cellValue }) => h('span', cellValue * 100 + '%'),
    },
]

通过jsx 使用

使用jsx 需要安装jsx 的环境。

构建工具插件
vite@vitejs/plugin-vue-jsx
webpack + babel@vue/babel-plugin-jsx
webpack + swcswc-plugin-vue-jsx
rspackswc-plugin-vue-jsx
tsx
import { StkTableColumn } from 'stk-table-vue/src/StkTable/index';

const columns:StkTableColumn<any>[] = [
    {
        title: '姓名',
        dataIndex: 'name',
        customCell: ({ row, col, cellValue }) => {
            return <span style="color: red">{cellValue}</span>;
        },
    },
]

API

属性props默认值说明
customCell(props: CustomCellProps) => VNode-自定义单元格渲染函数
customHeaderCell(props: CustomHeaderCellProps) => VNode-自定义表头渲染函数

types

ts
export type CustomCellProps<T extends Record<string, any>> = {
    row: T;
    col: StkTableColumn<T>;
    /** row[col.dataIndex] 的值 */
    cellValue: any;
    rowIndex: number;
    colIndex: number;
    /**
     * 当前行是否展开
     * - 不展开: null
     * - 展开: 返回column配置
     */
    expanded?: PrivateRowDT['__EXPANDED__'];
};

export type CustomHeaderCellProps<T extends Record<string, any>> = {
    col: StkTableColumn<T>;
    rowIndex: number;
    colIndex: number;
};

根据 MIT 许可证发布