Skip to content

Commit f72ad76

Browse files
committed
feat(element-plus): TableColumnsRender.columns 支持自定义 ElTableColumn 渲染
1 parent 692ca8c commit f72ad76

File tree

1 file changed

+22
-3
lines changed
  • src/element-plus/table-columns-render

1 file changed

+22
-3
lines changed

src/element-plus/table-columns-render/index.tsx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
import type { TableColumnCtx } from 'element-plus'
2-
import type { FunctionalComponent, ObjectEmitsOptions, VNodeChild } from 'vue'
2+
import type {
3+
FunctionalComponent,
4+
ObjectEmitsOptions,
5+
VNodeArrayChildren,
6+
VNodeChild,
7+
} from 'vue'
38
import type { ComponentProps } from 'vue-component-type-helpers'
4-
import { isString, objectMap } from '@antfu/utils'
9+
import { isFunction, isString, objectMap } from '@antfu/utils'
510
import { ElTableColumn } from 'element-plus'
11+
import { isVNode } from 'vue'
612

713
/**
814
* `ElTableColumn` 的插槽类型
@@ -74,9 +80,15 @@ export type ObjectTableColumnProps<T extends { [K: PropertyKey]: any } = any> =
7480

7581
type FalsyTableColumnProps = false | null | undefined
7682

83+
export type FunctionTableColumnProps = () => Exclude<
84+
VNodeChild,
85+
VNodeArrayChildren
86+
>
87+
7788
export type TableColumnProps<T extends { [K: PropertyKey]: any } = any> =
7889
| FalsyTableColumnProps |
79-
ObjectTableColumnProps<T>
90+
ObjectTableColumnProps<T> |
91+
FunctionTableColumnProps
8092

8193
export interface TableColumnsRenderProps {
8294
/**
@@ -111,6 +123,13 @@ export const TableColumnsRender: FunctionalComponent<
111123
continue
112124
}
113125

126+
if (isFunction(column)) {
127+
const vNode = column()
128+
// 只有在返回 VNode 时才添加到列表中
129+
isVNode(vNode) && vNodes.push(vNode)
130+
continue
131+
}
132+
114133
const { children, slots: userSlots = {}, ...columnProps } = column
115134
const finalSlots = objectMap(userSlots, (key, value) => [
116135
key,

0 commit comments

Comments
 (0)