Commit 49bf02d3 authored by Sendya's avatar Sendya Committed by 言肆

fix: PageHeader title, menuHeaderRender

parent ad93e657
{ {
"name": "@ant-design-vue/pro-layout", "name": "@ant-design-vue/pro-layout",
"version": "3.0.0-beta.7", "version": "3.0.0-beta.9",
"main": "./lib/index.js", "main": "./lib/index.js",
"module": "./es/index.js", "module": "./es/index.js",
"repository": { "repository": {
......
...@@ -71,6 +71,7 @@ const ProLayout = defineComponent({ ...@@ -71,6 +71,7 @@ const ProLayout = defineComponent({
'openKeys', 'openKeys',
'select', 'select',
'menuHeaderClick', 'menuHeaderClick',
'menuClick',
], ],
props: basicLayoutProps, props: basicLayoutProps,
setup(props, { emit, slots }) { setup(props, { emit, slots }) {
...@@ -96,6 +97,9 @@ const ProLayout = defineComponent({ ...@@ -96,6 +97,9 @@ const ProLayout = defineComponent({
const onMenuHeaderClick = (e: MouseEvent) => { const onMenuHeaderClick = (e: MouseEvent) => {
emit('menuHeaderClick', e); emit('menuHeaderClick', e);
}; };
const onMenuClick = (args: any) => {
emit('menuClick', args);
};
const colSize = useMediaQuery(); const colSize = useMediaQuery();
const isMobile = computed( const isMobile = computed(
...@@ -170,7 +174,7 @@ const ProLayout = defineComponent({ ...@@ -170,7 +174,7 @@ const ProLayout = defineComponent({
const routeContext = reactive({ const routeContext = reactive({
getPrefixCls, getPrefixCls,
...props, // ...props,
locale: refProps.locale, locale: refProps.locale,
breadcrumb: computed(() => { breadcrumb: computed(() => {
return { return {
...@@ -191,7 +195,9 @@ const ProLayout = defineComponent({ ...@@ -191,7 +195,9 @@ const ProLayout = defineComponent({
openKeys: refProps.openKeys, openKeys: refProps.openKeys,
}); });
const restProps = computed(() => omit(props, ['onCollapse', 'onOpenKeys', 'onSelect'])); const restProps = computed(() =>
omit(props, ['onCollapse', 'onOpenKeys', 'onSelect', 'onMenuClick', 'menuHeaderRender']),
);
provide('route-context', routeContext); provide('route-context', routeContext);
return () => ( return () => (
...@@ -209,6 +215,7 @@ const ProLayout = defineComponent({ ...@@ -209,6 +215,7 @@ const ProLayout = defineComponent({
onCollapse={onCollapse} onCollapse={onCollapse}
onSelect={onSelect} onSelect={onSelect}
onOpenKeys={onOpenKeys} onOpenKeys={onOpenKeys}
onMenuClick={onMenuClick}
/> />
)} )}
<Layout style={genLayoutStyle}> <Layout style={genLayoutStyle}>
......
...@@ -88,6 +88,8 @@ export const baseMenuProps = { ...@@ -88,6 +88,8 @@ export const baseMenuProps = {
type: [Function, Boolean] as PropType<CustomMenuRender['subMenuItemRender']>, type: [Function, Boolean] as PropType<CustomMenuRender['subMenuItemRender']>,
default: () => false, default: () => false,
}, },
onClick: [Function, Object] as PropType<(...args: any) => void>,
}; };
export type BaseMenuProps = ExtractPropTypes<typeof baseMenuProps>; export type BaseMenuProps = ExtractPropTypes<typeof baseMenuProps>;
...@@ -180,7 +182,6 @@ class MenuUtil { ...@@ -180,7 +182,6 @@ class MenuUtil {
danger={item.meta?.danger} danger={item.meta?.danger}
key={item.path} key={item.path}
icon={item.meta?.icon && <LazyIcon icon={item.meta.icon} />} icon={item.meta?.icon && <LazyIcon icon={item.meta.icon} />}
// onClick={}
> >
{this.getMenuItem(item)} {this.getMenuItem(item)}
</Menu.Item> </Menu.Item>
...@@ -222,7 +223,7 @@ class MenuUtil { ...@@ -222,7 +223,7 @@ class MenuUtil {
export default defineComponent({ export default defineComponent({
name: 'BaseMenu', name: 'BaseMenu',
props: baseMenuProps, props: baseMenuProps,
emits: ['update:openKeys', 'update:selectedKeys'], emits: ['update:openKeys', 'update:selectedKeys', 'click'],
setup(props, { emit }) { setup(props, { emit }) {
const menuUtil = new MenuUtil(props); const menuUtil = new MenuUtil(props);
...@@ -238,8 +239,13 @@ export default defineComponent({ ...@@ -238,8 +239,13 @@ export default defineComponent({
}): void => { }): void => {
emit('update:selectedKeys', params.selectedKeys); emit('update:selectedKeys', params.selectedKeys);
}; };
// TODO :: add `Menu` onClick custom handle. const handleClick = (args: {
item: VNodeChild;
key: string | number;
keyPath: string | string[] | number | number[];
}) => {
emit('click', args);
};
return () => ( return () => (
<Menu <Menu
key="Menu" key="Menu"
...@@ -252,6 +258,7 @@ export default defineComponent({ ...@@ -252,6 +258,7 @@ export default defineComponent({
// @ts-ignore // @ts-ignore
onOpenChange={handleOpenChange} onOpenChange={handleOpenChange}
onSelect={handleSelect} onSelect={handleSelect}
onClick={handleClick}
{...props.menuProps} {...props.menuProps}
> >
{menuUtil.getNavMenuItems(props.menuData)} {menuUtil.getNavMenuItems(props.menuData)}
......
...@@ -77,6 +77,7 @@ export const siderMenuProps = { ...@@ -77,6 +77,7 @@ export const siderMenuProps = {
// events // events
onMenuHeaderClick: PropTypes.func, onMenuHeaderClick: PropTypes.func,
onMenuClick: PropTypes.func,
onCollapse: { onCollapse: {
type: Function as PropType<(collapsed: boolean) => void>, type: Function as PropType<(collapsed: boolean) => void>,
}, },
...@@ -120,9 +121,11 @@ export const defaultRenderLogoAndTitle = ( ...@@ -120,9 +121,11 @@ export const defaultRenderLogoAndTitle = (
const logoDom = defaultRenderLogo(logo, logoStyle); const logoDom = defaultRenderLogo(logo, logoStyle);
const titleDom = <h1>{title}</h1>; const titleDom = <h1>{title}</h1>;
// call menuHeaderRender // call menuHeaderRender
if (renderFunction) { if (typeof renderFunction === 'function') {
// when collapsed, no render title // when collapsed, no render title
return renderFunction(logoDom, props.collapsed ? null : titleDom, props); return renderFunction(logoDom, props.collapsed ? null : titleDom, props);
} else if (Array.isArray(renderFunction)) {
return <>{renderFunction}</>;
} }
if (layout === 'mix' && renderKey === 'menuHeaderRender') { if (layout === 'mix' && renderKey === 'menuHeaderRender') {
return null; return null;
...@@ -191,6 +194,7 @@ const SiderMenu: FC<SiderMenuProps> = (props: SiderMenuProps) => { ...@@ -191,6 +194,7 @@ const SiderMenu: FC<SiderMenuProps> = (props: SiderMenuProps) => {
selectedKeys={context.selectedKeys} selectedKeys={context.selectedKeys}
menuItemRender={props.menuItemRender} menuItemRender={props.menuItemRender}
subMenuItemRender={props.subMenuItemRender} subMenuItemRender={props.subMenuItemRender}
onClick={props.onMenuClick}
style={{ style={{
width: '100%', width: '100%',
}} }}
......
import { Slots } from 'vue';
import { MenuDataItem } from '../typings'; import { MenuDataItem } from '../typings';
export { getPropsSlot } from 'ant-design-vue/es/_util/props-util';
export { default as PropTypes } from 'ant-design-vue/es/_util/vue-types'; export { default as PropTypes } from 'ant-design-vue/es/_util/vue-types';
export { default as isUrl } from './isUrl'; export { default as isUrl } from './isUrl';
...@@ -61,6 +61,10 @@ export function getMenuFirstChildren(menus: MenuDataItem[], key?: string) { ...@@ -61,6 +61,10 @@ export function getMenuFirstChildren(menus: MenuDataItem[], key?: string) {
: (menus[menus.findIndex(menu => menu.path === key)] || {}).children || []; : (menus[menus.findIndex(menu => menu.path === key)] || {}).children || [];
} }
export function getPropsSlot(slots: Slots, props: Record<string, any>, prop = 'default') {
return props[prop] ?? slots[prop]?.();
}
export const PropRenderType = { export const PropRenderType = {
type: [Function, Boolean], type: [Function, Boolean],
default: () => undefined, default: () => undefined,
......
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