Skip to content

Commit 7673da2

Browse files
committed
fix: useContent ignore inject fixedHeader #206
1 parent 5c22f80 commit 7673da2

File tree

3 files changed

+67
-47
lines changed

3 files changed

+67
-47
lines changed

Diff for: packages/pro-layout/examples/layouts/BasicLayout.vue

+1-1
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ export default defineComponent({
115115
splitMenus: true,
116116
// title: 'ProLayout',
117117
// logo: 'https://alicdn.antdv.com/v2/assets/logo.1ef800a8.svg',
118-
navTheme: 'dark',
118+
navTheme: 'light',
119119
layout: 'side',
120120
fixSiderbar: true,
121121
fixedHeader: true,

Diff for: packages/pro-layout/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@ant-design-vue/pro-layout",
3-
"version": "3.2.0-rc.0",
3+
"version": "3.2.0-rc.1",
44
"scripts": {
55
"dev": "vite",
66
"build": "vue-tsc --noEmit && vite build",

Diff for: packages/pro-layout/src/components/PageContainer/index.tsx

+65-45
Original file line numberDiff line numberDiff line change
@@ -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-
1413
import PageHeader, { pageHeaderProps } from 'ant-design-vue/es/page-header'
1514
import { Tabs, Affix, Spin } from 'ant-design-vue'
1615
import type { TabPaneProps } from './interfaces/TabPane'
1716
import type { TabBarExtraContent /*, TabsProps */ } from './interfaces/Tabs'
1817
import type { AffixProps } from './interfaces/Affix'
1918
/* replace antd ts define end */
20-
import { type RouteContextProps, useRouteContext } from '../../RouteContext'
19+
import { useRouteContext } from '../../RouteContext'
2120
import { getSlot, getSlotVNode } from '../../utils'
2221
import 'ant-design-vue/es/affix/style'
2322
import '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

Comments
 (0)