Commit 83786be1 authored by Sendya's avatar Sendya

fix: add PageHeaderWrapper tags, title slot

parent d65c447a
...@@ -14,6 +14,13 @@ ...@@ -14,6 +14,13 @@
console.log('PageHeader::.back') console.log('PageHeader::.back')
}" }"
> >
<template v-slot:title>
自定义标题
</template>
<template v-slot:tags>
<a-tag color="pink">tag1</a-tag>
<a-tag>tag2</a-tag>
</template>
<template v-slot:content> <template v-slot:content>
<span>{{ $t('pages.form.basicform.content') }}</span> <span>{{ $t('pages.form.basicform.content') }}</span>
</template> </template>
......
import './index.less' import './index.less'
import PropTypes from 'ant-design-vue/es/_util/vue-types' import PropTypes from 'ant-design-vue/es/_util/vue-types'
import { isArray } from 'ant-design-vue/lib/_util/vue-types/utils'
import GridContent from '../GridContent' import GridContent from '../GridContent'
import 'ant-design-vue/es/page-header/style' import 'ant-design-vue/es/page-header/style'
import PageHeader, { PageHeaderProps } from 'ant-design-vue/es/page-header' import PageHeader, { PageHeaderProps } from 'ant-design-vue/es/page-header'
...@@ -8,6 +9,7 @@ import 'ant-design-vue/es/tabs/style' ...@@ -8,6 +9,7 @@ import 'ant-design-vue/es/tabs/style'
import Tabs from 'ant-design-vue/es/tabs' import Tabs from 'ant-design-vue/es/tabs'
import { getComponentFromProp } from 'ant-design-vue/lib/_util/props-util' import { getComponentFromProp } from 'ant-design-vue/lib/_util/props-util'
const prefixedClassName = 'ant-pro-page-header-wrap' const prefixedClassName = 'ant-pro-page-header-wrap'
const PageHeaderTabConfig = { const PageHeaderTabConfig = {
...@@ -94,7 +96,8 @@ const renderPageHeader = (h, content, extraContent) => { ...@@ -94,7 +96,8 @@ const renderPageHeader = (h, content, extraContent) => {
const defaultPageHeaderRender = (h, props, pageMeta, i18nRender) => { const defaultPageHeaderRender = (h, props, pageMeta, i18nRender) => {
const { const {
title, title: propTitle,
tags,
content, content,
pageHeaderRender, pageHeaderRender,
extra, extra,
...@@ -106,14 +109,20 @@ const defaultPageHeaderRender = (h, props, pageMeta, i18nRender) => { ...@@ -106,14 +109,20 @@ const defaultPageHeaderRender = (h, props, pageMeta, i18nRender) => {
if (pageHeaderRender) { if (pageHeaderRender) {
return pageHeaderRender({ ...props }) return pageHeaderRender({ ...props })
} }
let pageHeaderTitle = title let pageHeaderTitle = propTitle
if (!title && title !== false) { if (!propTitle && propTitle !== false) {
pageHeaderTitle = pageMeta.title pageHeaderTitle = pageMeta.title
} }
// title props 不是 false 且不是 array 则直接渲染 title
// 反之认为是 VNode, 作为 render 参数直接传入到 PageHeader
const title = isArray(pageHeaderTitle)
? pageHeaderTitle
: pageHeaderTitle && i18nRender(pageHeaderTitle)
let tabProps = { let tabProps = {
breadcrumb, breadcrumb,
extra, extra,
title: pageHeaderTitle && i18nRender(pageHeaderTitle), tags,
title,
footer: renderFooter(h, restProps, i18nRender), footer: renderFooter(h, restProps, i18nRender),
} }
if (!handleBack) { if (!handleBack) {
...@@ -135,6 +144,8 @@ const PageHeaderWrapper = { ...@@ -135,6 +144,8 @@ const PageHeaderWrapper = {
render(h) { render(h) {
const { $route, $listeners } = this const { $route, $listeners } = this
const children = this.$slots.default const children = this.$slots.default
const title = getComponentFromProp(this, 'title')
const tags = getComponentFromProp(this, 'tags')
const content = getComponentFromProp(this, 'content') const content = getComponentFromProp(this, 'content')
const extra = getComponentFromProp(this, 'extra') const extra = getComponentFromProp(this, 'extra')
const extraContent = getComponentFromProp(this, 'extraContent') const extraContent = getComponentFromProp(this, 'extraContent')
...@@ -186,6 +197,8 @@ const PageHeaderWrapper = { ...@@ -186,6 +197,8 @@ const PageHeaderWrapper = {
const props = { const props = {
...this.$props, ...this.$props,
title,
tags,
content, content,
extra, extra,
extraContent, extraContent,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment