Unverified Commit dfcae6c6 authored by Sendya's avatar Sendya

fix: menuHeaderRender

parent 6a015a41
...@@ -33,10 +33,12 @@ export default { ...@@ -33,10 +33,12 @@ export default {
| --- | --- | --- | --- | | --- | --- | --- | --- |
| title | layout in the upper left corner title | VNode \| String | `'Ant Design Pro'` | | title | layout in the upper left corner title | VNode \| String | `'Ant Design Pro'` |
| logo | layout top left logo url | VNode \| render | - | | logo | layout top left logo url | VNode \| render | - |
| loading`*` | layout loading status | boolean | - |
| menuHeaderRender | render logo and title | VNode \| (logo,title)=>VNode | - |
| layout | layout menu mode, sidemenu: right navigation, topmenu: top navigation | 'sidemenu' \| 'topmenu' | `'sidemenu'` | | layout | layout menu mode, sidemenu: right navigation, topmenu: top navigation | 'sidemenu' \| 'topmenu' | `'sidemenu'` |
| contentWidth | content mode of layout, Fluid: fixed width 1200px, Fixed: adaptive | true \| false | `false` | | contentWidth | content mode of layout, Fluid: fixed width 1200px, Fixed: adaptive | true \| false | `false` |
| theme | Navigation menu theme | 'light' \| 'dark' | `'dark'` | | theme | Navigation menu theme | 'light' \| 'dark' | `'dark'` |
| menus | vue-router `routes` prop | Object | `[{}]` | | menus | Vue-router `routes` prop | Object | `[{}]` |
| collapsed | control menu's collapse and expansion | boolean | true | | collapsed | control menu's collapse and expansion | boolean | true |
| handleCollapse | folding collapse event of menu | (collapsed: boolean) => void | - | | handleCollapse | folding collapse event of menu | (collapsed: boolean) => void | - |
| headerRender | custom header render method | (props: BasicLayoutProps) => VNode | - | | headerRender | custom header render method | (props: BasicLayoutProps) => VNode | - |
......
...@@ -6,7 +6,7 @@ import { i18nRender } from '../locales' ...@@ -6,7 +6,7 @@ import { i18nRender } from '../locales'
import ProLayout from '@ant-design-vue/pro-layout' import ProLayout from '@ant-design-vue/pro-layout'
import SelectLang from '../components/SelectLang' import SelectLang from '../components/SelectLang'
import LogoSvg from '../assets/logo.svg?inline' import LogoSvg from '../assets/logo.svg?inline'
import defaultSettings from '@config/defaultSettings' // import defaultSettings from '@config/defaultSettings'
const Account = { const Account = {
name: 'Account', name: 'Account',
...@@ -36,6 +36,16 @@ const Account = { ...@@ -36,6 +36,16 @@ const Account = {
} }
} }
// render logo and title
const menuHeaderRender = (h, logo, title) => {
return (
<div>
<LogoSvg />
<h1>Ant Design Pro</h1>
</div>
)
}
const rightContentRender = (h, props) => { const rightContentRender = (h, props) => {
const cls = { const cls = {
'ant-pro-global-header-index-right': true, 'ant-pro-global-header-index-right': true,
...@@ -68,11 +78,11 @@ export default { ...@@ -68,11 +78,11 @@ export default {
// 媒体查询 // 媒体查询
query: {}, query: {},
// 布局类型 // 布局类型
layout: 'topmenu', // 'sidemenu', 'topmenu' layout: 'sidemenu', // 'sidemenu', 'topmenu'
// 定宽: true / 流式: false // 定宽: true / 流式: false
contentWidth: true, contentWidth: true,
// 主题 'dark' | 'light' // 主题 'dark' | 'light'
theme: 'light', theme: 'dark',
// 是否手机模式 // 是否手机模式
isMobile: false isMobile: false
} }
...@@ -114,11 +124,14 @@ export default { ...@@ -114,11 +124,14 @@ export default {
contentWidth, contentWidth,
theme, theme,
isMobile: this.isMobile, isMobile: this.isMobile,
// custom render
rightContentRender, rightContentRender,
footerRender, footerRender,
i18nRender, i18nRender,
logo: LogoSvg, menuHeaderRender
title: defaultSettings.title
// logo: LogoSvg,
// title: defaultSettings.title
} }
} }
......
...@@ -92,10 +92,12 @@ const BasicLayout = { ...@@ -92,10 +92,12 @@ const BasicLayout = {
const footerRender = getComponentFormProp(content, 'footerRender') const footerRender = getComponentFormProp(content, 'footerRender')
const rightContentRender = getComponentFormProp(content, 'rightContentRender') const rightContentRender = getComponentFormProp(content, 'rightContentRender')
const collapsedButtonRender = getComponentFormProp(content, 'collapsedButtonRender') const collapsedButtonRender = getComponentFormProp(content, 'collapsedButtonRender')
const menuHeaderRender = getComponentFormProp(content, 'menuHeaderRender')
const cdProps = { const cdProps = {
...props, ...props,
footerRender, footerRender,
menuHeaderRender,
rightContentRender, rightContentRender,
collapsedButtonRender collapsedButtonRender
} }
......
...@@ -60,6 +60,10 @@ export const SiderMenuProps = { ...@@ -60,6 +60,10 @@ export const SiderMenuProps = {
title: { title: {
type: String, type: String,
default: '' default: ''
},
menuHeaderRender: {
type: Function,
default: null
} }
} }
...@@ -73,7 +77,13 @@ export const defaultRenderLogo = (h, logo) => { ...@@ -73,7 +77,13 @@ export const defaultRenderLogo = (h, logo) => {
return h(logo) return h(logo)
} }
export const defaultRenderLogoAntTitle = (h, logo, title, menuHeaderRender) => { export const defaultRenderLogoAntTitle = (h, props) => {
const {
logo = 'https://gw.alipayobjects.com/zos/antfincdn/PmY%24TNNDBI/logo.svg',
title,
menuHeaderRender
} = props
if (menuHeaderRender === false) { if (menuHeaderRender === false) {
return null return null
} }
...@@ -81,7 +91,7 @@ export const defaultRenderLogoAntTitle = (h, logo, title, menuHeaderRender) => { ...@@ -81,7 +91,7 @@ export const defaultRenderLogoAntTitle = (h, logo, title, menuHeaderRender) => {
const titleDom = <h1>{title}</h1> const titleDom = <h1>{title}</h1>
if (menuHeaderRender) { if (menuHeaderRender) {
return menuHeaderRender(h, logoDom, titleDom) return menuHeaderRender(h, logoDom, props.collapsed ? null : titleDom, props)
} }
return ( return (
<span> <span>
...@@ -110,7 +120,9 @@ const SiderMenu = { ...@@ -110,7 +120,9 @@ const SiderMenu = {
logo, logo,
title, title,
handleCollapse, handleCollapse,
i18nRender onMenuHeaderClick = () => null,
i18nRender,
menuHeaderRender
} = this } = this
const siderCls = ['ant-pro-sider-menu-sider'] const siderCls = ['ant-pro-sider-menu-sider']
...@@ -121,6 +133,10 @@ const SiderMenu = { ...@@ -121,6 +133,10 @@ const SiderMenu = {
// this.$emit('collapse', collapsed) // this.$emit('collapse', collapsed)
// } // }
const headerDom = defaultRenderLogoAntTitle(h, {
logo, title, menuHeaderRender, collapsed
})
return (<Sider return (<Sider
class={siderCls} class={siderCls}
breakpoint={'lg'} breakpoint={'lg'}
...@@ -131,11 +147,17 @@ const SiderMenu = { ...@@ -131,11 +147,17 @@ const SiderMenu = {
collapsed={collapsed} collapsed={collapsed}
onCollapse={handleCollapse} onCollapse={handleCollapse}
> >
<div class='ant-pro-sider-menu-logo' id='logo'> {headerDom && (
<div
class="ant-pro-sider-menu-logo"
onClick={onMenuHeaderClick}
id="logo"
>
<router-link to={{ path: '/' }}> <router-link to={{ path: '/' }}>
{defaultRenderLogoAntTitle(h, logo, title, null)} {headerDom}
</router-link> </router-link>
</div> </div>
)}
<BaseMenu collapsed={collapsed} menus={menus} mode={mode} theme={theme} i18nRender={i18nRender} /> <BaseMenu collapsed={collapsed} menus={menus} mode={mode} theme={theme} i18nRender={i18nRender} />
</Sider>) </Sider>)
} }
......
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