index.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. import type { MenuRecordBadgeRaw, ThemeModeType } from '@vben-core/typings';
  2. import type { Ref } from 'vue';
  3. interface MenuProps {
  4. /**
  5. * @zh_CN 是否开启手风琴模式
  6. * @default true
  7. */
  8. accordion?: boolean;
  9. /**
  10. * @zh_CN 菜单是否折叠
  11. * @default false
  12. */
  13. collapse?: boolean;
  14. /**
  15. * @zh_CN 菜单折叠时是否显示菜单名称
  16. * @default false
  17. */
  18. collapseShowTitle?: boolean;
  19. /**
  20. * @zh_CN 默认激活的菜单
  21. */
  22. defaultActive?: string;
  23. /**
  24. * @zh_CN 默认展开的菜单
  25. */
  26. defaultOpeneds?: string[];
  27. /**
  28. * @zh_CN 菜单模式
  29. * @default vertical
  30. */
  31. mode?: 'horizontal' | 'vertical';
  32. /**
  33. * @zh_CN 是否圆润风格
  34. * @default true
  35. */
  36. rounded?: boolean;
  37. /**
  38. * @zh_CN 菜单主题
  39. * @default dark
  40. */
  41. theme?: ThemeModeType;
  42. }
  43. interface SubMenuProps extends MenuRecordBadgeRaw {
  44. /**
  45. * @zh_CN 是否禁用
  46. */
  47. disabled?: boolean;
  48. /**
  49. * @zh_CN 图标
  50. */
  51. icon?: string;
  52. /**
  53. * @zh_CN submenu 名称
  54. */
  55. path: string;
  56. }
  57. interface MenuItemProps extends MenuRecordBadgeRaw {
  58. /**
  59. * @zh_CN 是否禁用
  60. */
  61. disabled?: boolean;
  62. /**
  63. * @zh_CN 图标
  64. */
  65. icon?: string;
  66. /**
  67. * @zh_CN menuitem 名称
  68. */
  69. path: string;
  70. }
  71. interface MenuItemRegistered {
  72. active: boolean;
  73. parentPaths: string[];
  74. path: string;
  75. }
  76. // export interface MenuItemClicked {
  77. // name: string;
  78. // }
  79. interface MenuItemClicked {
  80. parentPaths: string[];
  81. path: string;
  82. }
  83. interface MenuProvider {
  84. activePath?: string;
  85. addMenuItem: (item: MenuItemRegistered) => void;
  86. addSubMenu: (item: MenuItemRegistered) => void;
  87. closeMenu: (path: string, parentLinks: string[]) => void;
  88. handleMenuItemClick: (item: MenuItemClicked) => void;
  89. handleSubMenuClick: (subMenu: MenuItemRegistered) => void;
  90. isMenuPopup: boolean;
  91. items: Record<string, MenuItemRegistered>;
  92. openMenu: (path: string, parentLinks: string[]) => void;
  93. openedMenus: string[];
  94. props: MenuProps;
  95. removeMenuItem: (item: MenuItemRegistered) => void;
  96. removeSubMenu: (item: MenuItemRegistered) => void;
  97. subMenus: Record<string, MenuItemRegistered>;
  98. theme: string;
  99. }
  100. interface SubMenuProvider {
  101. addSubMenu: (item: MenuItemRegistered) => void;
  102. handleMouseleave?: (deepDispatch: boolean) => void;
  103. level: number;
  104. mouseInChild: Ref<boolean>;
  105. removeSubMenu: (item: MenuItemRegistered) => void;
  106. }
  107. export type {
  108. MenuItemClicked,
  109. MenuItemProps,
  110. MenuItemRegistered,
  111. MenuProps,
  112. MenuProvider,
  113. SubMenuProps,
  114. SubMenuProvider,
  115. };