import { VNodeChild } from 'vue'; import { Render, TargetType, VueNode, WithFalse } from "../typings"; import { AppMenuProps } from "./index"; import { MenuDataItem as MenuData } from '@antd-vue/hooks'; /** * 菜单主题颜色 */ export declare type MenuTheme = 'light' | 'dark'; /** * 菜单类型 */ export declare type MenuMode = 'vertical' | 'horizontal' | 'inline' | string; /** * 菜单信息 */ export interface MenuInfo { key: string | number; keyPath: string[] | number[]; item: VNodeChild | any; domEvent: MouseEvent; } /** * 选中菜单信息 */ export interface SelectInfo extends MenuInfo { selectedKeys: string[]; } export declare type OpenEventHandler = (keys: string[] | { key: string; item: VNodeChild; trigger: string; open: boolean; }) => void; export declare type CollapseType = 'clickTrigger' | 'responsive'; /** * 菜单数据 */ export interface MenuDataItem extends MenuData { /** * @description 菜单ID */ id: string; /** * @description 父菜单ID */ pid?: string; /** * @description 菜单名称 */ name: string; /** * @description 菜单图标 */ icon?: VueNode; /** * @description 菜单链接地址 */ href?: string; /** * @description 用于标记链接地址是否外链 */ external?: boolean; /** * @description 是外链是打开链接的位置 */ target?: TargetType; /** * @description 菜单隐藏类型 * all 在菜单中隐藏自己和子节点 * self 隐藏自己,并将子节点提升到与自己平级 * children 在菜单中隐藏子节点 * @default false */ hidden?: WithFalse<'all' | 'children' | 'self'>; /** * @description 禁用菜单 */ disable?: boolean; /** * @description 在其前后是否插入分隔符 */ divider?: WithFalse<'before' | 'after' | 'all'>; /** * @description 子菜单 */ children?: MenuDataItem[]; /** * @description 仅用于前端标记当前菜单是否已经注册路由,已注册则添加路由跳转,否则仅用于渲染 dom 节点 */ registeredRoute?: boolean; /** * @description 点击事件 */ onClick?: (...args: any[]) => void; /** * @description 组件属性参数 */ props?: Record; [key: string]: any; } /** * 菜单头部渲染,渲染 logo 和 title */ export declare type MenuHeaderRender

= Render

; /** * 折叠按钮渲染 */ export declare type CollapsedButtonRender = (collapsed: boolean) => VueNode; /** * 菜单内容渲染 */ export declare type MenuContentRender

= (props: P, defaultDom: VueNode) => VueNode; /** * 侧边栏菜单底部渲染 */ export declare type MenuFooterRender

= (props: P) => VueNode; /** * 自定义头右部的 render 方法 */ export declare type MenuRightContentRender

= (props: P) => VueNode; /** * 菜单额外内容渲染 */ export declare type MenuExtraRender

= (props: P) => VueNode; export interface IMenu extends AppMenuProps, IMenuEvent { /** * @description 头部的高度 */ headerHeight?: number; /** * @description 侧边栏宽度 */ sideWidth?: number; /** * @description 侧边栏折叠后的宽度 */ collapsedWidth?: number; /** * @description 是否固定 * @default false */ fixed?: boolean; /** * @description 折叠按钮渲染 */ collapsedButtonRender?: WithFalse; /** * @description 菜单头部渲染 logo & title */ menuHeaderRender?: WithFalse; /** * 菜单内容渲染 */ menuContentRender?: WithFalse; } export interface IMenuEvent { /** * menu 菜单的头部点击事件 * @param e MouseEvent */ onMenuHeaderClick?: (e: MouseEvent) => void; } export declare type FormatMessage = (message: string) => string;