Skip to content

Commit 491d3ff

Browse files
committed
✨ (pro-table) headerTitle 支持 slot 方式定制
1 parent 4acbe14 commit 491d3ff

File tree

3 files changed

+15
-10
lines changed

3 files changed

+15
-10
lines changed

pro-components/table/Table.tsx

-2
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,6 @@ const TableRender = defineComponent({
112112
return Object.fromEntries(tablePropKeys.map(k => [k, props[k]]))
113113
})
114114

115-
console.log(props.rowSelection, userTableProps.value.rowKey)
116-
117115
const tableProps = computed(() => ({
118116
...userTableProps.value,
119117
size: props.size,

pro-components/table/components/ToolBar/index.tsx

+12-5
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ import DensityIcon from './DensityIcon'
1010
import type { ActionType, ProTableProps, OptionSearchProps, LabelTooltipType } from '../../typing'
1111
import { useIntl } from '#/provider'
1212
import type { IntlType } from '#/provider'
13-
import { VueNodePropType } from '#/types'
14-
import type { VueKey, VueNode } from '#/types'
13+
import { VueNodeOrRenderPropType, VueNodePropType } from '#/types'
14+
import type { VueKey, VueNode, VueNodeOrRender } from '#/types'
1515
import { computed, defineComponent, watchEffect } from 'vue'
1616
import type { ExtractPropTypes, PropType, Ref } from 'vue'
1717
import type { ChangeEvent } from 'ant-design-vue/es/_util/EventInterface'
@@ -20,6 +20,7 @@ import { useContainer } from '#/table/container'
2020
import { getRender } from '#/layout/utils'
2121
import type { ToolBarRender } from '#/table/renderTypes'
2222
import ColumnSetting from '#/table/components/ColumnSetting'
23+
import { isFunction } from '@vueuse/shared'
2324

2425
export type OptionConfig = {
2526
density?: boolean
@@ -42,7 +43,7 @@ export type OptionsFunctionType = (e: MouseEvent, action?: ActionType) => void
4243
export type OptionsType = OptionsFunctionType | boolean
4344

4445
export const toolBarProps = () => ({
45-
headerTitle: VueNodePropType as PropType<VueNode>,
46+
headerTitle: VueNodeOrRenderPropType as PropType<VueNodeOrRender>,
4647
tooltip: [String, Object] as PropType<LabelTooltipType>,
4748
toolbar: Object as PropType<ListToolBarProps>,
4849
toolBarRender: Function as PropType<ToolBarRender>,
@@ -234,9 +235,15 @@ const ToolBar = defineComponent({
234235
: []
235236
})
236237

238+
const titleDom = computed(() => {
239+
const headerRender = getRender<VueNode>(props, slots, 'headerTitle')
240+
// @ts-ignore
241+
return isFunction(headerRender) ? headerRender() : headerRender
242+
})
243+
237244
return () => (
238245
<ListToolBar
239-
title={props.headerTitle}
246+
title={titleDom.value}
240247
tooltip={props.tooltip}
241248
search={searchConfig.value}
242249
onSearch={props.onSearch}
@@ -256,7 +263,7 @@ const toolbarRenderProps = () => ({
256263
tooltip: [String, Object] as PropType<string | LabelTooltipType>,
257264
selectedRows: Array as PropType<any[]>,
258265
selectedRowKeys: Array as PropType<VueKey[]>,
259-
headerTitle: VueNodePropType as PropType<VueNode>,
266+
headerTitle: VueNodeOrRenderPropType as PropType<VueNodeOrRender>,
260267
toolbar: Object as PropType<ProTableProps['toolbar']>,
261268
options: [Object, Boolean] as PropType<ProTableProps['options']>,
262269
toolBarRender: Function as PropType<ToolBarProps['toolBarRender']>,

pro-components/table/typing.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@ import type { ColumnsState, CounterType } from './container'
1616
import type { SizeType } from 'ant-design-vue/lib/config-provider/context'
1717

1818
import type { TooltipProps } from 'ant-design-vue/es/tooltip'
19-
import type { VueKey, VueNode } from '#/types'
19+
import type { VueKey, VueNode, VueNodeOrRender } from '#/types'
2020
import type { CardProps, InputProps } from 'ant-design-vue'
2121
import type { ChangeEvent } from 'ant-design-vue/es/_util/EventInterface'
2222
import { tableProps } from 'ant-design-vue/es/table'
2323
import type { WithFalse } from '#/layout/types'
24-
import { VueNodePropType } from '#/types'
24+
import { VueNodeOrRenderPropType } from '#/types'
2525
import omit from 'ant-design-vue/es/_util/omit'
2626
import type { ProFieldEmptyText } from '#/field'
2727
import type { LightWrapperProps } from '#/form/BaseForm/LightWrapper'
@@ -361,7 +361,7 @@ export const proTableProps = <T, U = Record<string, any>, ValueType = 'text'>()
361361
tableStyle: Object as PropType<CSSProperties>,
362362

363363
/** 左上角的 title */
364-
headerTitle: VueNodePropType as PropType<VueNode>,
364+
headerTitle: VueNodeOrRenderPropType as PropType<VueNodeOrRender>,
365365

366366
/** 标题旁边的 tooltip */
367367
tooltip: [String, Object] as PropType<string | LabelTooltipType>,

0 commit comments

Comments
 (0)