ele-admin-plus 1.1.9-beta.3 → 1.1.9-beta.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/es/ele-app/el.d.ts +3 -0
  2. package/es/ele-basic-select/index.d.ts +2 -2
  3. package/es/ele-check-card/index.d.ts +1 -1
  4. package/es/ele-drawer/index.d.ts +1 -1
  5. package/es/ele-icon-select/index.d.ts +3 -3
  6. package/es/ele-map-picker/index.d.ts +1 -1
  7. package/es/ele-menus/index.d.ts +10 -2
  8. package/es/ele-menus/index.js +17 -4
  9. package/es/ele-menus/props.d.ts +8 -2
  10. package/es/ele-menus/props.js +9 -3
  11. package/es/ele-menus/style/index.scss +12 -11
  12. package/es/ele-menus/types.d.ts +9 -9
  13. package/es/ele-menus/util.d.ts +21 -15
  14. package/es/ele-menus/util.js +92 -83
  15. package/es/ele-pro-layout/components/pro-header.d.ts +23 -11
  16. package/es/ele-pro-layout/components/pro-header.js +68 -15
  17. package/es/ele-pro-layout/components/pro-iframe.js +46 -23
  18. package/es/ele-pro-layout/components/pro-sidebar.d.ts +21 -15
  19. package/es/ele-pro-layout/components/pro-sidebar.js +36 -14
  20. package/es/ele-pro-layout/components/pro-sidebox.d.ts +23 -11
  21. package/es/ele-pro-layout/components/pro-sidebox.js +46 -14
  22. package/es/ele-pro-layout/components/tab-dropdown.js +5 -1
  23. package/es/ele-pro-layout/index.d.ts +40 -27
  24. package/es/ele-pro-layout/index.js +269 -52
  25. package/es/ele-pro-layout/props.d.ts +5 -0
  26. package/es/ele-pro-layout/props.js +5 -0
  27. package/es/ele-pro-layout/types.d.ts +29 -3
  28. package/es/ele-segmented/index.d.ts +1 -1
  29. package/es/ele-table-select/index.d.ts +5 -5
  30. package/es/ele-tree-select/index.d.ts +5 -5
  31. package/es/ele-upload-list/components/list-item.d.ts +5 -1
  32. package/es/ele-upload-list/components/list-item.js +7 -4
  33. package/es/ele-upload-list/index.d.ts +10 -6
  34. package/es/ele-upload-list/index.js +7 -5
  35. package/es/ele-upload-list/props.d.ts +6 -2
  36. package/es/ele-upload-list/props.js +5 -1
  37. package/es/ele-virtual-table/components/body-cell.d.ts +1 -1
  38. package/es/ele-virtual-table/index.d.ts +1 -1
  39. package/lib/ele-app/el.d.ts +3 -0
  40. package/lib/ele-basic-select/index.d.ts +2 -2
  41. package/lib/ele-check-card/index.d.ts +1 -1
  42. package/lib/ele-drawer/index.d.ts +1 -1
  43. package/lib/ele-icon-select/index.d.ts +3 -3
  44. package/lib/ele-map-picker/index.d.ts +1 -1
  45. package/lib/ele-menus/index.cjs +17 -4
  46. package/lib/ele-menus/index.d.ts +10 -2
  47. package/lib/ele-menus/props.cjs +9 -3
  48. package/lib/ele-menus/props.d.ts +8 -2
  49. package/lib/ele-menus/style/index.scss +12 -11
  50. package/lib/ele-menus/types.d.ts +9 -9
  51. package/lib/ele-menus/util.cjs +92 -83
  52. package/lib/ele-menus/util.d.ts +21 -15
  53. package/lib/ele-pro-layout/components/pro-header.cjs +67 -14
  54. package/lib/ele-pro-layout/components/pro-header.d.ts +23 -11
  55. package/lib/ele-pro-layout/components/pro-iframe.cjs +45 -22
  56. package/lib/ele-pro-layout/components/pro-sidebar.cjs +36 -14
  57. package/lib/ele-pro-layout/components/pro-sidebar.d.ts +21 -15
  58. package/lib/ele-pro-layout/components/pro-sidebox.cjs +46 -14
  59. package/lib/ele-pro-layout/components/pro-sidebox.d.ts +23 -11
  60. package/lib/ele-pro-layout/components/tab-dropdown.cjs +5 -1
  61. package/lib/ele-pro-layout/index.cjs +269 -52
  62. package/lib/ele-pro-layout/index.d.ts +40 -27
  63. package/lib/ele-pro-layout/props.cjs +5 -0
  64. package/lib/ele-pro-layout/props.d.ts +5 -0
  65. package/lib/ele-pro-layout/types.d.ts +29 -3
  66. package/lib/ele-segmented/index.d.ts +1 -1
  67. package/lib/ele-table-select/index.d.ts +5 -5
  68. package/lib/ele-tree-select/index.d.ts +5 -5
  69. package/lib/ele-upload-list/components/list-item.cjs +6 -3
  70. package/lib/ele-upload-list/components/list-item.d.ts +5 -1
  71. package/lib/ele-upload-list/index.cjs +7 -5
  72. package/lib/ele-upload-list/index.d.ts +10 -6
  73. package/lib/ele-upload-list/props.cjs +5 -1
  74. package/lib/ele-upload-list/props.d.ts +6 -2
  75. package/lib/ele-virtual-table/components/body-cell.d.ts +1 -1
  76. package/lib/ele-virtual-table/index.d.ts +1 -1
  77. package/package.json +1 -1
@@ -7,26 +7,22 @@ const core = require("../utils/core");
7
7
  const icons = require("../icons");
8
8
  const linkClass = "ele-menu-link";
9
9
  const titleClass = "ele-menu-title";
10
+ const triggerClass = "ele-menu-trigger";
10
11
  const overflowClass = "ele-menu-overflow";
11
12
  const ellipsisClass = "ele-sub-menu-ellipsis";
12
- function getLinkNode(item, onItemClick) {
13
- if (!(item == null ? void 0 : item.path)) {
14
- return;
15
- }
16
- if (core.isExternalLink(item.path)) {
13
+ function getLinkNode(path) {
14
+ if (core.isExternalLink(path)) {
17
15
  return vue.h("a", {
18
- href: item.path,
16
+ href: path,
19
17
  target: "_blank",
20
- class: linkClass,
21
- onClick: (e) => {
22
- e.stopPropagation();
23
- onItemClick && onItemClick(item);
24
- }
18
+ class: linkClass
25
19
  });
26
20
  }
27
- return vue.h(vueRouter.RouterLink, { to: item.path, class: linkClass });
21
+ if (path) {
22
+ return vue.h(vueRouter.RouterLink, { to: path, class: linkClass });
23
+ }
28
24
  }
29
- function getNodes(icons2, titles, badge, link) {
25
+ function getNodes(icons2, titles, badge, trigger) {
30
26
  const nodes = [];
31
27
  if (icons2) {
32
28
  icons2.forEach((t) => {
@@ -41,18 +37,19 @@ function getNodes(icons2, titles, badge, link) {
41
37
  if (badge) {
42
38
  nodes.push(badge);
43
39
  }
44
- if (link) {
45
- nodes.push(link);
40
+ if (trigger) {
41
+ nodes.push(trigger);
46
42
  }
47
43
  return nodes;
48
44
  }
49
- function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorful, popupColorful, firstPopClass, first, onItemClick) {
45
+ function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorful, popupColorful, firstPopClass, first, onItemClick, onItemMouseenter, onItemMouseleave, webkit) {
50
46
  const nodes = [];
51
47
  if (!items) {
52
48
  return nodes;
53
49
  }
54
50
  items.forEach((item) => {
55
51
  var _a;
52
+ const key = item.key || item.index || item.path;
56
53
  const iNodes = sIcon ? sIcon({ item, icon: item.icon }) ?? [] : [];
57
54
  if (!iNodes.length && item.icon) {
58
55
  iNodes.push(
@@ -67,27 +64,40 @@ function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorfu
67
64
  }
68
65
  const bNode = item.badge != null ? vue.h(elementPlus.ElBadge, item.badge) : null;
69
66
  if (!((_a = item.children) == null ? void 0 : _a.length)) {
70
- const linkNode = getLinkNode(item, onItemClick);
71
- const key = item.key || item.index || item.path;
67
+ const triggerNode = vue.h(
68
+ "div",
69
+ {
70
+ class: triggerClass,
71
+ onClick: (e) => {
72
+ onItemClick && onItemClick(item, e);
73
+ },
74
+ onMouseenter: (e) => {
75
+ onItemMouseenter && onItemMouseenter(item, e);
76
+ },
77
+ onMouseleave: (e) => {
78
+ onItemMouseleave && onItemMouseleave(item, e);
79
+ }
80
+ },
81
+ getLinkNode(item.path)
82
+ );
72
83
  nodes.push(
73
84
  vue.h(
74
85
  elementPlus.ElMenuItem,
75
86
  {
76
87
  key: key + "-" + tipDisabled,
77
- index: item.index,
88
+ index: item.index || item.path,
78
89
  route: item.route,
79
90
  disabled: item.disabled,
80
91
  class: item.overflow ? overflowClass : void 0,
81
92
  onClick: () => {
82
- onItemClick && onItemClick(item);
83
93
  }
84
94
  },
85
95
  {
86
96
  default: () => {
87
- if (!first || tipDisabled) {
88
- return getNodes(iNodes, tNodes, bNode, linkNode);
97
+ if (first && !tipDisabled) {
98
+ return getNodes(iNodes, void 0, bNode, triggerNode);
89
99
  }
90
- return getNodes(iNodes, void 0, bNode, linkNode);
100
+ return getNodes(iNodes, tNodes, bNode, triggerNode);
91
101
  },
92
102
  title: first && !tipDisabled ? () => tNodes : void 0
93
103
  }
@@ -97,47 +107,45 @@ function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorfu
97
107
  }
98
108
  if (item.group === true) {
99
109
  nodes.push(
100
- vue.h(
101
- elementPlus.ElMenuItemGroup,
102
- { key: item.key || item.index },
103
- {
104
- default: () => {
105
- return renderItems(
106
- item.children,
107
- sIcon,
108
- sTitle,
109
- tipDisabled,
110
- theme,
111
- popTheme,
112
- colorful,
113
- popupColorful,
114
- firstPopClass,
115
- first,
116
- onItemClick
117
- );
118
- },
119
- title: () => getNodes(iNodes, tNodes, bNode)
120
- }
121
- )
110
+ vue.h(elementPlus.ElMenuItemGroup, { key }, {
111
+ default: () => {
112
+ return renderItems(
113
+ item.children,
114
+ sIcon,
115
+ sTitle,
116
+ tipDisabled,
117
+ theme,
118
+ popTheme,
119
+ colorful,
120
+ popupColorful,
121
+ firstPopClass,
122
+ first,
123
+ onItemClick,
124
+ onItemMouseenter,
125
+ onItemMouseleave
126
+ );
127
+ },
128
+ title: () => getNodes(iNodes, tNodes, bNode)
129
+ })
122
130
  );
123
131
  return;
124
132
  }
125
- const popperClass = getPopperClass(
126
- item.popperClass,
127
- theme,
128
- popTheme,
129
- colorful,
130
- popupColorful,
131
- firstPopClass,
132
- first
133
- );
134
133
  nodes.push(
135
134
  vue.h(
136
135
  elementPlus.ElSubMenu,
137
136
  {
138
- key: item.key || item.index,
139
- index: item.index,
140
- popperClass,
137
+ key,
138
+ index: item.index || item.path,
139
+ popperClass: getPopperClass(
140
+ item.popperClass,
141
+ theme,
142
+ popTheme,
143
+ colorful,
144
+ popupColorful,
145
+ firstPopClass,
146
+ first,
147
+ webkit
148
+ ),
141
149
  showTimeout: item.showTimeout,
142
150
  hideTimeout: item.hideTimeout,
143
151
  disabled: item.disabled,
@@ -166,7 +174,9 @@ function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorfu
166
174
  popupColorful,
167
175
  firstPopClass,
168
176
  false,
169
- onItemClick
177
+ onItemClick,
178
+ onItemMouseenter,
179
+ onItemMouseleave
170
180
  );
171
181
  },
172
182
  title: () => getNodes(iNodes, tNodes, bNode)
@@ -176,6 +186,25 @@ function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorfu
176
186
  });
177
187
  return nodes;
178
188
  }
189
+ function getPopperClass(customerClass, theme, popTheme, colorful, popupColorful, firstPopClass, first, webkit) {
190
+ const popperClass = ["ele-menu"];
191
+ if (webkit) {
192
+ popperClass.push("is-webkit");
193
+ }
194
+ if (popTheme === "dark" || popTheme === "auto" && theme === "dark") {
195
+ popperClass.push("is-night ele-menu-dark");
196
+ }
197
+ if (popupColorful === true || popupColorful === "auto" && colorful) {
198
+ popperClass.push("is-colorful ele-menu-colorful");
199
+ }
200
+ if (first && firstPopClass) {
201
+ popperClass.push(firstPopClass);
202
+ }
203
+ if (customerClass) {
204
+ popperClass.push(customerClass);
205
+ }
206
+ return popperClass.join(" ");
207
+ }
179
208
  function getMenuItems(menus, index, horizontal) {
180
209
  if (!horizontal || !menus || !menus.length) {
181
210
  return { items: menus };
@@ -190,36 +219,16 @@ function getMenuItems(menus, index, horizontal) {
190
219
  const moreItems = index === 0 ? data : data.slice(index);
191
220
  moreItems.forEach((d) => {
192
221
  var _a;
193
- const children = ((_a = d.children) == null ? void 0 : _a.length) ? [null] : void 0;
194
222
  items.push({
195
223
  ...d,
224
+ key: `overflow-${d.key || d.index || d.path}`,
225
+ index: `overflow-${d.index || d.path}`,
196
226
  overflow: true,
197
- key: `overflow-${d.key || d.index}`,
198
- index: `overflow-${d.index}`,
199
- children
227
+ children: ((_a = d.children) == null ? void 0 : _a.length) ? [null] : void 0
200
228
  });
201
229
  });
202
230
  return { items, moreItems };
203
231
  }
204
- function getPopperClass(customerClass, theme, popTheme, colorful, popupColorful, firstPopClass, first) {
205
- const popperClass = ["ele-menu"];
206
- if (navigator.userAgent.includes("WebKit")) {
207
- popperClass.push("is-webkit");
208
- }
209
- if (popTheme === "dark" || popTheme === "auto" && theme === "dark") {
210
- popperClass.push("is-night ele-menu-dark");
211
- }
212
- if (popupColorful === true || popupColorful === "auto" && colorful) {
213
- popperClass.push("is-colorful ele-menu-colorful");
214
- }
215
- if (first && firstPopClass) {
216
- popperClass.push(firstPopClass);
217
- }
218
- if (customerClass) {
219
- popperClass.push(customerClass);
220
- }
221
- return popperClass.join(" ");
222
- }
223
232
  function getMenuWidth(el) {
224
233
  if (!el) {
225
234
  return;
@@ -239,8 +248,7 @@ function getItemWidth(el) {
239
248
  return el.offsetWidth + ml + mr;
240
249
  }
241
250
  function getMenuChilds(el) {
242
- const childs = Array.from(el.childNodes ?? []);
243
- return childs.filter((t) => {
251
+ return Array.from(el.childNodes ?? []).filter((t) => {
244
252
  return t.nodeName === "LI" && !t.classList.contains(ellipsisClass);
245
253
  });
246
254
  }
@@ -311,4 +319,5 @@ exports.linkClass = linkClass;
311
319
  exports.overflowClass = overflowClass;
312
320
  exports.renderItems = renderItems;
313
321
  exports.titleClass = titleClass;
322
+ exports.triggerClass = triggerClass;
314
323
  exports.useMenuEllipsis = useMenuEllipsis;
@@ -1,9 +1,11 @@
1
1
  import type { VNode, Slot } from 'vue';
2
- import type { MenuItem, MenuTheme, PopupMenuTheme, PopupColorful, MenuResult, MenuEllipsisOption, ItemClick } from './types';
3
- /** 菜单链接类名 */
2
+ import type { MenuItem, MenuTheme, PopupMenuTheme, PopupColorful, MenuResult, MenuEllipsisOption, MenuItemEvent } from './types';
3
+ /** 子菜单项链接类名 */
4
4
  export declare const linkClass = "ele-menu-link";
5
5
  /** 菜单标题类名 */
6
6
  export declare const titleClass = "ele-menu-title";
7
+ /** 子菜单项事件触发元素类名 */
8
+ export declare const triggerClass = "ele-menu-trigger";
7
9
  /** 菜单溢出隐藏项类名 */
8
10
  export declare const overflowClass = "ele-menu-overflow";
9
11
  /** 菜单省略项的类名 */
@@ -12,20 +14,20 @@ export declare const ellipsisClass = "ele-sub-menu-ellipsis";
12
14
  * 生成菜单链接节点
13
15
  * @param path 链接地址
14
16
  */
15
- export declare function getLinkNode(item: MenuItem, onItemClick?: ItemClick): VNode | undefined;
17
+ export declare function getLinkNode(path?: string): VNode | undefined;
16
18
  /**
17
19
  * 生成菜单内容节点
18
20
  * @param icons 图标节点
19
21
  * @param titles 标题节点
20
22
  * @param badge 徽章节点
21
- * @param link 链接节点
23
+ * @param trigger 子菜单项事件触发元素节点
22
24
  */
23
- export declare function getNodes(icons?: VNode[], titles?: VNode[], badge?: VNode | null, link?: VNode | null): VNode[];
25
+ export declare function getNodes(icons?: VNode[], titles?: VNode[], badge?: VNode | null, trigger?: VNode | null): VNode[];
24
26
  /**
25
27
  * 递归生成菜单节点
26
28
  * @param items 菜单数据
27
29
  * @param sIcon 图标插槽
28
- * @param sTitle 白哦提插槽
30
+ * @param sTitle 标题插槽
29
31
  * @param tipDisabled 是否禁用折叠的tooltip
30
32
  * @param theme 主题
31
33
  * @param popTheme 气泡菜单主题
@@ -33,15 +35,12 @@ export declare function getNodes(icons?: VNode[], titles?: VNode[], badge?: VNod
33
35
  * @param popupColorful 气泡菜单是否彩色图标
34
36
  * @param firstPopClass 第一级气泡菜单类名
35
37
  * @param first 是否是第一级菜单
38
+ * @param onItemClick 子菜单项点击事件
39
+ * @param onItemMouseenter 子菜单项鼠标进入事件
40
+ * @param onItemMouseenter 子菜单项鼠标离开事件
41
+ * @param webkit 是否时webkit内核
36
42
  */
37
- export declare function renderItems(items?: MenuItem[], sIcon?: Slot, sTitle?: Slot, tipDisabled?: boolean, theme?: MenuTheme, popTheme?: PopupMenuTheme, colorful?: boolean, popupColorful?: PopupColorful, firstPopClass?: string, first?: boolean, onItemClick?: ItemClick): VNode[];
38
- /**
39
- * 生成菜单数据
40
- * @param items 菜单数据
41
- * @param index 省略位置
42
- * @param horizontal 是否是水平菜单
43
- */
44
- export declare function getMenuItems(menus?: MenuItem[], index?: number, horizontal?: boolean): MenuResult;
43
+ export declare function renderItems(items?: MenuItem[], sIcon?: Slot, sTitle?: Slot, tipDisabled?: boolean, theme?: MenuTheme, popTheme?: PopupMenuTheme, colorful?: boolean, popupColorful?: PopupColorful, firstPopClass?: string, first?: boolean, onItemClick?: MenuItemEvent, onItemMouseenter?: MenuItemEvent, onItemMouseleave?: MenuItemEvent, webkit?: boolean): VNode[];
45
44
  /**
46
45
  * 生成气泡菜单的类名
47
46
  * @param customerClass 自定义的类名
@@ -52,7 +51,14 @@ export declare function getMenuItems(menus?: MenuItem[], index?: number, horizon
52
51
  * @param firstPopClass 第一级气泡菜单类名
53
52
  * @param first 是否是第一级菜单
54
53
  */
55
- export declare function getPopperClass(customerClass?: string, theme?: MenuTheme, popTheme?: PopupMenuTheme, colorful?: boolean, popupColorful?: PopupColorful, firstPopClass?: string, first?: boolean): string;
54
+ export declare function getPopperClass(customerClass?: string, theme?: MenuTheme, popTheme?: PopupMenuTheme, colorful?: boolean, popupColorful?: PopupColorful, firstPopClass?: string, first?: boolean, webkit?: boolean): string;
55
+ /**
56
+ * 生成菜单数据
57
+ * @param items 菜单数据
58
+ * @param index 省略位置
59
+ * @param horizontal 是否是水平菜单
60
+ */
61
+ export declare function getMenuItems(menus?: MenuItem[], index?: number, horizontal?: boolean): MenuResult;
56
62
  /**
57
63
  * 获取菜单节点宽度
58
64
  * @param el 菜单节点
@@ -21,17 +21,17 @@ const _sfc_main = vue.defineComponent({
21
21
  ellipsis: Boolean,
22
22
  /** 菜单省略项的属性 */
23
23
  ellipsisProps: Object,
24
- /** 子菜单触发方式 */
24
+ /** 父级菜单展开触发方式 */
25
25
  menuTrigger: String,
26
- /** 菜单项触发模式 */
26
+ /** 子菜单项触发模式 */
27
27
  itemTrigger: String,
28
28
  /** 侧栏是否折叠 */
29
29
  collapse: Boolean,
30
30
  /** 当前是否有侧栏 */
31
31
  sidebar: Boolean,
32
- /** 标题插槽名称 */
32
+ /** 菜单标题插槽名称 */
33
33
  titleSlot: String,
34
- /** 图标插槽名称 */
34
+ /** 菜单图标插槽名称 */
35
35
  iconSlot: String,
36
36
  /** 面包屑导航数据 */
37
37
  levels: {
@@ -51,12 +51,20 @@ const _sfc_main = vue.defineComponent({
51
51
  logoClick: () => true,
52
52
  open: (_index, _indexPath) => true,
53
53
  close: (_index, _indexPath) => true,
54
- itemClick: (_item) => true
54
+ itemClick: (_item, _e) => true,
55
+ itemMouseenter: (_item, _e) => true,
56
+ itemMouseleave: (_item, _e) => true,
57
+ mouseEnter: (_e) => true,
58
+ mouseLeave: (_e) => true
55
59
  },
56
60
  setup(props, { emit }) {
61
+ const state = { hover: false, timer: null };
57
62
  const levelItems = vue.shallowRef([]);
58
63
  const menuItems = vue.computed(() => {
59
- return util.getMenuItems(props.menus, props.itemTrigger != "click");
64
+ return util.getMenuItems(
65
+ props.menus,
66
+ props.itemTrigger !== "click" && props.itemTrigger !== "hover"
67
+ );
60
68
  });
61
69
  const isDark = vue.computed(() => props.headerStyle === "dark");
62
70
  const isPrimary = vue.computed(() => props.headerStyle === "primary");
@@ -72,8 +80,36 @@ const _sfc_main = vue.defineComponent({
72
80
  const onClose = (index, indexPath) => {
73
81
  emit("close", index, indexPath);
74
82
  };
75
- const onItemClick = (item) => {
76
- emit("itemClick", item);
83
+ const onItemClick = (item, e) => {
84
+ emit("itemClick", item, e);
85
+ };
86
+ const onItemMouseenter = (item, e) => {
87
+ emit("itemMouseenter", item, e);
88
+ onMouseenter(e);
89
+ };
90
+ const onItemMouseleave = (item, e) => {
91
+ emit("itemMouseleave", item, e);
92
+ onMouseleave(e);
93
+ };
94
+ const onMouseenter = (e) => {
95
+ if (state.timer != null) {
96
+ clearTimeout(state.timer);
97
+ state.timer = null;
98
+ }
99
+ if (!state.hover) {
100
+ state.hover = true;
101
+ emit("mouseEnter", e);
102
+ }
103
+ };
104
+ const onMouseleave = (e) => {
105
+ if (state.timer != null) {
106
+ clearTimeout(state.timer);
107
+ }
108
+ state.timer = setTimeout(() => {
109
+ state.timer = null;
110
+ state.hover = false;
111
+ emit("mouseLeave", e);
112
+ }, 300);
77
113
  };
78
114
  vue.watch(
79
115
  [() => props.isHome, () => props.homePath, () => props.levels],
@@ -95,8 +131,17 @@ const _sfc_main = vue.defineComponent({
95
131
  });
96
132
  levelItems.value = data;
97
133
  },
98
- { deep: true, immediate: true }
134
+ {
135
+ immediate: true,
136
+ deep: true
137
+ }
99
138
  );
139
+ vue.onBeforeUnmount(() => {
140
+ if (state.timer != null) {
141
+ clearTimeout(state.timer);
142
+ state.timer = null;
143
+ }
144
+ });
100
145
  return {
101
146
  levelItems,
102
147
  menuItems,
@@ -106,7 +151,11 @@ const _sfc_main = vue.defineComponent({
106
151
  onLogoClick,
107
152
  onOpen,
108
153
  onClose,
109
- onItemClick
154
+ onItemClick,
155
+ onItemMouseenter,
156
+ onItemMouseleave,
157
+ onMouseenter,
158
+ onMouseleave
110
159
  };
111
160
  }
112
161
  });
@@ -138,7 +187,9 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
138
187
  "ele-admin-header",
139
188
  { "is-dark": _ctx.isDark },
140
189
  { "is-primary": _ctx.isPrimary }
141
- ])
190
+ ]),
191
+ onMouseenter: _cache[1] || (_cache[1] = (...args) => _ctx.onMouseenter && _ctx.onMouseenter(...args)),
192
+ onMouseleave: _cache[2] || (_cache[2] = (...args) => _ctx.onMouseleave && _ctx.onMouseleave(...args))
142
193
  }, [
143
194
  _ctx.$slots.logo ? (vue.openBlock(), vue.createElementBlock("div", {
144
195
  key: 0,
@@ -181,7 +232,9 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
181
232
  menuTrigger: _ctx.menuTrigger,
182
233
  onOpen: _ctx.onOpen,
183
234
  onClose: _ctx.onClose,
184
- onItemClick: _ctx.onItemClick
235
+ onItemClick: _ctx.onItemClick,
236
+ onItemMouseenter: _ctx.onItemMouseenter,
237
+ onItemMouseleave: _ctx.onItemMouseleave
185
238
  }, vue.createSlots({ _: 2 }, [
186
239
  _ctx.iconSlot && !["logo", "left", "right", "center", "breadcrumb"].includes(
187
240
  _ctx.iconSlot
@@ -201,12 +254,12 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
201
254
  ]),
202
255
  key: "1"
203
256
  } : void 0
204
- ]), 1032, ["items", "theme", "popupTheme", "ellipsis", "ellipsisProps", "defaultActive", "menuTrigger", "onOpen", "onClose", "onItemClick"])) : vue.createCommentVNode("", true)
257
+ ]), 1032, ["items", "theme", "popupTheme", "ellipsis", "ellipsisProps", "defaultActive", "menuTrigger", "onOpen", "onClose", "onItemClick", "onItemMouseenter", "onItemMouseleave"])) : vue.createCommentVNode("", true)
205
258
  ]),
206
259
  _ctx.$slots.right ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4, [
207
260
  vue.renderSlot(_ctx.$slots, "right", { sidebar: _ctx.sidebar })
208
261
  ])) : vue.createCommentVNode("", true)
209
- ], 2);
262
+ ], 34);
210
263
  }
211
264
  const proHeader = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
212
265
  module.exports = proHeader;
@@ -16,17 +16,17 @@ declare const _default: import("vue").DefineComponent<{
16
16
  ellipsis: BooleanConstructor;
17
17
  /** 菜单省略项的属性 */
18
18
  ellipsisProps: PropType<EllipsisProps>;
19
- /** 子菜单触发方式 */
19
+ /** 父级菜单展开触发方式 */
20
20
  menuTrigger: PropType<import("element-plus/es/utils/index").EpPropMergeType<StringConstructor, "hover" | "click", unknown> | undefined>;
21
- /** 菜单项触发模式 */
21
+ /** 子菜单项触发模式 */
22
22
  itemTrigger: PropType<MenuItemTrigger>;
23
23
  /** 侧栏是否折叠 */
24
24
  collapse: BooleanConstructor;
25
25
  /** 当前是否有侧栏 */
26
26
  sidebar: BooleanConstructor;
27
- /** 标题插槽名称 */
27
+ /** 菜单标题插槽名称 */
28
28
  titleSlot: StringConstructor;
29
- /** 图标插槽名称 */
29
+ /** 菜单图标插槽名称 */
30
30
  iconSlot: StringConstructor;
31
31
  /** 面包屑导航数据 */
32
32
  levels: {
@@ -50,12 +50,20 @@ declare const _default: import("vue").DefineComponent<{
50
50
  onLogoClick: () => void;
51
51
  onOpen: (index: string, indexPath: string[]) => void;
52
52
  onClose: (index: string, indexPath: string[]) => void;
53
- onItemClick: (item: MenuItemProps) => void;
53
+ onItemClick: (item: MenuItemProps, e: MouseEvent) => void;
54
+ onItemMouseenter: (item: MenuItemProps, e: MouseEvent) => void;
55
+ onItemMouseleave: (item: MenuItemProps, e: MouseEvent) => void;
56
+ onMouseenter: (e: MouseEvent) => void;
57
+ onMouseleave: (e: MouseEvent) => void;
54
58
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
55
59
  logoClick: () => true;
56
60
  open: (_index: string, _indexPath: string[]) => true;
57
61
  close: (_index: string, _indexPath: string[]) => true;
58
- itemClick: (_item: MenuItemProps) => true;
62
+ itemClick: (_item: MenuItemProps, _e: MouseEvent) => true;
63
+ itemMouseenter: (_item: MenuItemProps, _e: MouseEvent) => true;
64
+ itemMouseleave: (_item: MenuItemProps, _e: MouseEvent) => true;
65
+ mouseEnter: (_e: MouseEvent) => true;
66
+ mouseLeave: (_e: MouseEvent) => true;
59
67
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
60
68
  /** 菜单数据 */
61
69
  menus: {
@@ -70,17 +78,17 @@ declare const _default: import("vue").DefineComponent<{
70
78
  ellipsis: BooleanConstructor;
71
79
  /** 菜单省略项的属性 */
72
80
  ellipsisProps: PropType<EllipsisProps>;
73
- /** 子菜单触发方式 */
81
+ /** 父级菜单展开触发方式 */
74
82
  menuTrigger: PropType<import("element-plus/es/utils/index").EpPropMergeType<StringConstructor, "hover" | "click", unknown> | undefined>;
75
- /** 菜单项触发模式 */
83
+ /** 子菜单项触发模式 */
76
84
  itemTrigger: PropType<MenuItemTrigger>;
77
85
  /** 侧栏是否折叠 */
78
86
  collapse: BooleanConstructor;
79
87
  /** 当前是否有侧栏 */
80
88
  sidebar: BooleanConstructor;
81
- /** 标题插槽名称 */
89
+ /** 菜单标题插槽名称 */
82
90
  titleSlot: StringConstructor;
83
- /** 图标插槽名称 */
91
+ /** 菜单图标插槽名称 */
84
92
  iconSlot: StringConstructor;
85
93
  /** 面包屑导航数据 */
86
94
  levels: {
@@ -98,8 +106,12 @@ declare const _default: import("vue").DefineComponent<{
98
106
  }>> & {
99
107
  onOpen?: ((_index: string, _indexPath: string[]) => any) | undefined;
100
108
  onClose?: ((_index: string, _indexPath: string[]) => any) | undefined;
101
- onItemClick?: ((_item: Partial<import("../../ele-menus/types").MenuItem>) => any) | undefined;
109
+ onItemClick?: ((_item: Partial<import("../../ele-menus/types").MenuItem>, _e: MouseEvent) => any) | undefined;
110
+ onItemMouseenter?: ((_item: Partial<import("../../ele-menus/types").MenuItem>, _e: MouseEvent) => any) | undefined;
111
+ onItemMouseleave?: ((_item: Partial<import("../../ele-menus/types").MenuItem>, _e: MouseEvent) => any) | undefined;
102
112
  onLogoClick?: (() => any) | undefined;
113
+ onMouseEnter?: ((_e: MouseEvent) => any) | undefined;
114
+ onMouseLeave?: ((_e: MouseEvent) => any) | undefined;
103
115
  }, {
104
116
  collapse: boolean;
105
117
  ellipsis: boolean;