Commit d8db40df authored by Sendya's avatar Sendya

fix: menu extra slots

parent 630b659e
<template> <template>
<a-config-provider :get-popup-container="getPopupContainer"> <a-config-provider>
<router-view /> <router-view />
</a-config-provider> </a-config-provider>
</template> </template>
......
...@@ -15,7 +15,13 @@ ...@@ -15,7 +15,13 @@
</template> </template>
<!-- custom right-content --> <!-- custom right-content -->
<template #rightContentRender> <template #rightContentRender>
<span style="color: #0f0; margin-right: 12px"><a-avatar /></span> <div style="margin-right: 12px">
<a-avatar shape="square" size="small">
<template #icon>
<UserOutlined />
</template>
</a-avatar>
</div>
</template> </template>
<!-- custom breadcrumb itemRender --> <!-- custom breadcrumb itemRender -->
<template #breadcrumbRender="{ route, params, routes }"> <template #breadcrumbRender="{ route, params, routes }">
...@@ -26,6 +32,35 @@ ...@@ -26,6 +32,35 @@
{{ route.breadcrumbName }} {{ route.breadcrumbName }}
</router-link> </router-link>
</template> </template>
<template #menuExtraRender="{ collapsed }">
<a-input-search v-if="!collapsed" />
</template>
<template #menuFooterRender>
<a
:style="{
lineHeight: '48rpx',
display: 'flex',
height: '48px',
alignItems: 'center',
}"
href="https://preview.pro.antdv.com/dashboard/analysis"
target="_blank"
rel="noreferrer"
>
<img
alt="pro-logo"
src="https://procomponents.ant.design/favicon.ico"
:style="{
width: '16px',
height: '16px',
margin: '0 16px',
marginRight: '10px',
}"
/>
<span v-if="!baseState.collapsed">Preview Pro</span>
</a>
</template>
<!-- content begin --> <!-- content begin -->
<router-view /> <router-view />
<!-- content end --> <!-- content end -->
...@@ -58,7 +93,7 @@ ...@@ -58,7 +93,7 @@
<script lang="ts"> <script lang="ts">
import { computed, defineComponent, reactive, ref, watchEffect } from 'vue'; import { computed, defineComponent, reactive, ref, watchEffect } from 'vue';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { Button, Switch, Select, Avatar, Space, Badge, Menu } from 'ant-design-vue'; import { Button, Input, Switch, Select, Avatar, Space, Badge } from 'ant-design-vue';
import { getMenuData, clearMenuItem, FooterToolbar } from '@ant-design-vue/pro-layout'; import { getMenuData, clearMenuItem, FooterToolbar } from '@ant-design-vue/pro-layout';
import type { RouteContextProps } from '@ant-design-vue/pro-layout'; import type { RouteContextProps } from '@ant-design-vue/pro-layout';
...@@ -69,6 +104,8 @@ export default defineComponent({ ...@@ -69,6 +104,8 @@ export default defineComponent({
components: { components: {
FooterToolbar, FooterToolbar,
[Button.name]: Button, [Button.name]: Button,
[Input.name]: Input,
[Input.Search.name]: Input.Search,
[Switch.name]: Switch, [Switch.name]: Switch,
[Select.name]: Select, [Select.name]: Select,
[Select.Option.displayName!]: Select.Option, [Select.Option.displayName!]: Select.Option,
...@@ -96,7 +133,8 @@ export default defineComponent({ ...@@ -96,7 +133,8 @@ export default defineComponent({
// title: 'ProLayout', // title: 'ProLayout',
// logo: 'https://alicdn.antdv.com/v2/assets/logo.1ef800a8.svg', // logo: 'https://alicdn.antdv.com/v2/assets/logo.1ef800a8.svg',
navTheme: 'dark', navTheme: 'dark',
layout: 'mix', layout: 'side',
fixSiderbar: true,
}); });
const breadcrumb = computed(() => const breadcrumb = computed(() =>
router.currentRoute.value.matched.concat().map(item => { router.currentRoute.value.matched.concat().map(item => {
......
import 'ant-design-vue/es/style'; import 'ant-design-vue/es/style';
import { ConfigProvider } from 'ant-design-vue'; import { ConfigProvider, Button } from 'ant-design-vue';
import { createApp } from 'vue'; import { createApp } from 'vue';
import router from './router'; import router from './router';
import icons from './icons'; import icons from './icons';
import App from './App.vue'; import App from './App.vue';
// import '../dist/style.less';
import ProLayout, { PageContainer } from '../src'; // '../dist/pro-layout.es'; import ProLayout, { PageContainer } from '../src'; // '../dist/pro-layout.es';
const app = createApp(App); const app = createApp(App);
app.use(router); app.use(router);
app.use(icons); app.use(icons);
app.use(ConfigProvider); app.use(ConfigProvider);
app.use(Button);
app.use(ProLayout); app.use(ProLayout);
app.use(PageContainer); app.use(PageContainer);
app.mount('#app'); app.mount('#app');
...@@ -4,20 +4,33 @@ ...@@ -4,20 +4,33 @@
<a-tag>tag1</a-tag> <a-tag>tag1</a-tag>
<a-tag color="pink">tag2</a-tag> <a-tag color="pink">tag2</a-tag>
</template> </template>
<span>page2</span> <a-result
status="404"
:style="{
height: '100%',
background: '#fff',
}"
title="Hello World"
sub-title="Sorry, you are not authorized to access this page."
>
<template #extra>
<a-button type="primary">Back Home</a-button>
</template>
</a-result>
</PageContainer> </PageContainer>
</template> </template>
<script lang="ts"> <script lang="ts">
import { defineComponent } from 'vue'; import { defineComponent } from 'vue';
import { Tag } from 'ant-design-vue'; import { Tag, Result } from 'ant-design-vue';
export default defineComponent({ export default defineComponent({
components: { components: {
[Tag.name]: Tag, [Tag.name]: Tag,
[Result.name]: Result,
}, },
setup() { setup() {
return {} return {};
}, },
}) });
</script> </script>
{ {
"name": "@ant-design-vue/pro-layout", "name": "@ant-design-vue/pro-layout",
"version": "3.1.0-alpha.10", "version": "3.1.0-beta.1",
"license": "MIT", "license": "MIT",
"files": [ "files": [
"dist", "dist",
......
...@@ -188,7 +188,9 @@ const ProLayout = defineComponent({ ...@@ -188,7 +188,9 @@ const ProLayout = defineComponent({
const headerContentRender = getPropsSlot(slots, props, 'headerContentRender'); const headerContentRender = getPropsSlot(slots, props, 'headerContentRender');
const rightContentRender = getPropsSlot(slots, props, 'rightContentRender'); const rightContentRender = getPropsSlot(slots, props, 'rightContentRender');
const customHeaderRender = getPropsSlot(slots, props, 'headerRender'); const customHeaderRender = getPropsSlot(slots, props, 'headerRender');
const menuHeaderRender = getPropsSlot(slots, props, 'menuHeaderRender'); const menuHeaderRender = getPropsSlotfn(slots, props, 'menuHeaderRender');
const menuExtraRender = getPropsSlotfn(slots, props, 'menuExtraRender');
const menuFooterRender = getPropsSlotfn(slots, props, 'menuFooterRender');
const footerRender = getPropsSlot(slots, props, 'footerRender'); const footerRender = getPropsSlot(slots, props, 'footerRender');
// menu render // menu render
const menuItemRender = getPropsSlotfn(slots, props, 'menuItemRender'); const menuItemRender = getPropsSlotfn(slots, props, 'menuItemRender');
...@@ -235,6 +237,8 @@ const ProLayout = defineComponent({ ...@@ -235,6 +237,8 @@ const ProLayout = defineComponent({
{...menuRenders} {...menuRenders}
isMobile={isMobile.value} isMobile={isMobile.value}
menuHeaderRender={menuHeaderRender} menuHeaderRender={menuHeaderRender}
menuExtraRender={menuExtraRender}
menuFooterRender={menuFooterRender}
collapsedButtonRender={collapsedButtonRender} collapsedButtonRender={collapsedButtonRender}
onCollapse={onCollapse} onCollapse={onCollapse}
onSelect={onSelect} onSelect={onSelect}
......
...@@ -267,8 +267,13 @@ const SiderMenu: FC<SiderMenuProps> = (props: SiderMenuProps) => { ...@@ -267,8 +267,13 @@ const SiderMenu: FC<SiderMenuProps> = (props: SiderMenuProps) => {
{headerDom} {headerDom}
</div> </div>
)} )}
{extraDom && ( {extraDom && !props.collapsed && (
<div class={`${baseClassName}-extra ${!headerDom && `${baseClassName}-extra-no-logo`}`}> <div
class={{
[`${baseClassName}-extra`]: true,
[`${baseClassName}-extra-no-logo`]: !headerDom,
}}
>
{extraDom} {extraDom}
</div> </div>
)} )}
......
...@@ -9,9 +9,7 @@ ...@@ -9,9 +9,7 @@
background-color: @layout-sider-background; background-color: @layout-sider-background;
border-right: 0; border-right: 0;
box-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05); box-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05);
transition: background-color 0.3s transition: all 0.2s;
/* , min-width 0.3s,
max-width 0.3s cubic-bezier(0.645, 0.045, 0.355, 1) */;
z-index: 100; z-index: 100;
&.@{ant-prefix}-menu-vertical .@{ant-prefix}-menu-item:not(:last-child), &.@{ant-prefix}-menu-vertical .@{ant-prefix}-menu-item:not(:last-child),
......
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