@@ -3,21 +3,20 @@ import {
33 defineComponent ,
44 unref ,
55 toRefs ,
6+ type FunctionalComponent ,
67 type VNode ,
78 type VNodeChild ,
89 type PropType ,
910 type ExtractPropTypes ,
1011} from 'vue'
1112/* replace antd ts define */
12- import omit from 'omit.js'
13-
1413import PageHeader , { pageHeaderProps } from 'ant-design-vue/es/page-header'
1514import { Tabs , Affix , Spin } from 'ant-design-vue'
1615import type { TabPaneProps } from './interfaces/TabPane'
1716import type { TabBarExtraContent /*, TabsProps */ } from './interfaces/Tabs'
1817import type { AffixProps } from './interfaces/Affix'
1918/* replace antd ts define end */
20- import { type RouteContextProps , useRouteContext } from '../../RouteContext'
19+ import { useRouteContext } from '../../RouteContext'
2120import { getSlot , getSlotVNode } from '../../utils'
2221import 'ant-design-vue/es/affix/style'
2322import 'ant-design-vue/es/page-header/style'
@@ -104,13 +103,14 @@ export const pageContainerProps = {
104103 } ,
105104 pageHeaderRender : {
106105 type : [ Object , Function , Boolean ] as PropType < PageHeaderRender > ,
106+ default : ( ) => undefined ,
107107 } ,
108108 affixProps : {
109109 type : [ Object , Function ] as PropType < AffixProps > ,
110110 } ,
111111 ghost : {
112112 type : Boolean ,
113- default : ( ) => undefined ,
113+ default : ( ) => false ,
114114 } , //PropTypes.looseBool,
115115 loading : {
116116 type : Boolean ,
@@ -177,41 +177,58 @@ const renderPageHeader = (
177177 )
178178}
179179
180- const defaultPageHeaderRender = (
181- props : PageContainerProps ,
182- value : Required < RouteContextProps > & { prefixedClassName : string }
183- ) => {
184- const { title, tabList, tabActiveKey, content, pageHeaderRender, header, extraContent, ...restProps } = omit ( props , [
185- 'prefixCls' ,
186- ] )
180+ const ProPageHeader : FunctionalComponent < PageContainerProps & { prefixedClassName : string } > = ( props ) => {
181+ const {
182+ title,
183+ tabList,
184+ tabActiveKey,
185+ content,
186+ pageHeaderRender,
187+ header,
188+ extraContent,
189+ prefixedClassName,
190+ prefixCls,
191+ ...restProps
192+ } = props
193+ const value = useRouteContext ( )
194+
195+ if ( pageHeaderRender === false ) {
196+ return null
197+ }
187198 if ( pageHeaderRender ) {
188- return pageHeaderRender ( { ...props , ... value } )
199+ return pageHeaderRender ( { ...props } )
189200 }
201+
190202 let pageHeaderTitle = title
191203 if ( ! title && title !== false ) {
192204 pageHeaderTitle = value . title
193205 }
206+
194207 const unrefBreadcrumb = unref ( value . breadcrumb || { } )
195208 const breadcrumb = restProps . breadcrumb || {
196209 ...unrefBreadcrumb ,
197210 routes : unrefBreadcrumb . routes ,
198211 itemRender : unrefBreadcrumb . itemRender ,
199212 }
200- // inject value
213+
201214 return (
202- < PageHeader
203- { ...restProps }
204- title = { pageHeaderTitle }
205- breadcrumb = { breadcrumb }
206- footer = { renderFooter ( {
207- ...restProps ,
208- tabList,
209- tabActiveKey,
210- prefixedClassName : value . prefixedClassName ,
211- } ) }
212- >
213- { header || renderPageHeader ( content , extraContent , value . prefixedClassName ) }
214- </ PageHeader >
215+ < div class = { `${ prefixedClassName } -wrap` } >
216+ < PageHeader
217+ { ...restProps }
218+ { ...value }
219+ title = { pageHeaderTitle }
220+ breadcrumb = { breadcrumb }
221+ footer = { renderFooter ( {
222+ ...restProps ,
223+ tabList,
224+ tabActiveKey,
225+ prefixedClassName,
226+ } ) }
227+ prefixCls = { prefixCls }
228+ >
229+ { header || renderPageHeader ( content , extraContent , prefixedClassName ) }
230+ </ PageHeader >
231+ </ div >
215232 )
216233}
217234
@@ -231,39 +248,42 @@ const PageContainer = defineComponent({
231248 [ `${ prefixCls } -page-container-ghost` ] : ghost . value ,
232249 }
233250 } )
234-
235251 const headerDom = computed ( ( ) => {
236252 const tags = getSlotVNode < DefaultPropRender > ( slots , props , 'tags' )
237253 const headerContent = getSlotVNode < DefaultPropRender > ( slots , props , 'content' )
238254 const extra = getSlotVNode < DefaultPropRender > ( slots , props , 'extra' )
239255 const extraContent = getSlotVNode < DefaultPropRender > ( slots , props , 'extraContent' )
256+ // {
257+ // ...props,
258+ // tags,
259+ // content: headerContent,
260+ // extra,
261+ // extraContent,
262+ // prefixCls: undefined,
263+ // prefixedClassName: prefixedClassName.value,
264+ // }
240265 return (
241- < div class = { `${ prefixedClassName . value } -warp` } >
242- { defaultPageHeaderRender (
243- {
244- ...props ,
245- tags,
246- content : headerContent ,
247- extra,
248- extraContent,
249- prefixCls : undefined ,
250- } ,
251- {
252- ...value ,
253- prefixedClassName : prefixedClassName . value ,
254- }
255- ) }
256- </ div >
266+ < ProPageHeader
267+ { ...props }
268+ prefixCls = { undefined }
269+ prefixedClassName = { prefixedClassName . value }
270+ ghost = { ghost . value }
271+ content = { headerContent }
272+ tags = { tags }
273+ extra = { extra }
274+ extraContent = { extraContent }
275+ />
257276 )
258277 } )
259278
260279 return ( ) => {
280+ const { fixedHeader } = props
261281 const footer = getSlot ( slots , props , 'footer' )
262282
263283 return (
264284 < div class = { classNames . value } >
265- { value . fixedHeader ? (
266- < Affix offsetTop = { value . fixedHeader ? value . headerHeight : 0 } { ... affixProps . value } >
285+ { fixedHeader && headerDom . value ? (
286+ < Affix { ... affixProps . value } offsetTop = { value . hasHeader && value . fixedHeader ? value . headerHeight : 0 } >
267287 { headerDom . value }
268288 </ Affix >
269289 ) : (
0 commit comments