You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

56 lines
2.2 KiB
TypeScript

1 year ago
import type { VNode } from 'vue'
import type { PrivateSiderMenuProps, SiderMenuProps } from './components/SiderMenu/SiderMenu'
import type { HeaderViewProps } from './Header'
import type { MenuDataItem } from './types'
import type { BaseMenuProps } from './components/SiderMenu/BaseMenu'
import type { VueNode, VueNodeOrRender } from '#/types'
// 多页签的渲染
export type MultiTabRender = (props: HeaderViewProps) => VueNode
// 头部渲染器
export type HeaderRender = (props: HeaderViewProps, defaultDom: VueNodeOrRender) => VueNode
// 头部标题渲染器
export type HeaderTitleRender = (
props: HeaderViewProps,
logo?: VueNodeOrRender,
title?: VueNodeOrRender
) => VueNode
// 头部内容渲染器
export type HeaderContentRender = (props: HeaderViewProps, defaultDom?: VueNodeOrRender) => VueNode
// 头部右侧内容渲染器
export type RightContentRender = (props: HeaderViewProps) => VueNode
// 处理父级菜单的 props可以复写菜单的点击功能一般用于埋点
export type SubMenuItemRender = (
item: MenuDataItem & { isUrl: boolean },
defaultDom: VueNodeOrRender,
menuProps: BaseMenuProps
) => VueNode
// 子菜单的渲染器
export type MenuItemRender = (
item: MenuDataItem & { isUrl: boolean; onClick: () => void },
defaultDom: VueNodeOrRender,
menuProps: BaseMenuProps & Partial<PrivateSiderMenuProps>
) => VueNode
// 菜单渲染器
export type MenuRender = (props: HeaderViewProps, defaultDom: VueNodeOrRender) => VueNode
// 菜单头部渲染器
export type MenuHeaderRender = (
props: SiderMenuProps,
logo: VueNodeOrRender,
title: VueNodeOrRender
) => VueNode
// 菜单底部渲染器
export type MenuFootRender = (props?: SiderMenuProps) => VueNode
// 菜单内容渲染器
export type MenuContentRender = (props: SiderMenuProps, defaultDom: VueNodeOrRender) => VueNode
// 菜单在 logo 和 content 之间的扩展区域渲染器,一般用来放搜索框
export type MenuExtraReander = (props: SiderMenuProps) => VueNode
// 菜单折叠按钮的渲染器
export type CollapsedButtonRender = (collapsed?: boolean) => VueNode
// 整体布局的底部渲染器
export type FooterRender = (props: HeaderViewProps, defaultDom: VNode) => VueNode