ele-admin-plus 1.1.9-beta.2 → 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 (97) hide show
  1. package/es/ele-app/el.d.ts +9 -0
  2. package/es/ele-app/style/overwrite/message-box/index.scss +5 -0
  3. package/es/ele-basic-select/index.d.ts +2 -2
  4. package/es/ele-check-card/index.d.ts +1 -1
  5. package/es/ele-drawer/index.d.ts +1 -1
  6. package/es/ele-dropdown/index.d.ts +2 -2
  7. package/es/ele-dropdown/index.js +1 -0
  8. package/es/ele-icon-select/index.d.ts +3 -3
  9. package/es/ele-map-picker/index.d.ts +1 -1
  10. package/es/ele-menus/index.d.ts +10 -2
  11. package/es/ele-menus/index.js +17 -4
  12. package/es/ele-menus/props.d.ts +8 -2
  13. package/es/ele-menus/props.js +9 -3
  14. package/es/ele-menus/style/index.scss +12 -11
  15. package/es/ele-menus/types.d.ts +9 -9
  16. package/es/ele-menus/util.d.ts +21 -15
  17. package/es/ele-menus/util.js +92 -83
  18. package/es/ele-modal/index.d.ts +2 -2
  19. package/es/ele-modal/index.js +27 -4
  20. package/es/ele-modal/style/index.scss +58 -12
  21. package/es/ele-modal/types.d.ts +2 -10
  22. package/es/ele-modal/util.d.ts +3 -3
  23. package/es/ele-modal/util.js +22 -57
  24. package/es/ele-printer/util.js +3 -1
  25. package/es/ele-pro-layout/components/pro-header.d.ts +23 -11
  26. package/es/ele-pro-layout/components/pro-header.js +68 -15
  27. package/es/ele-pro-layout/components/pro-iframe.js +46 -23
  28. package/es/ele-pro-layout/components/pro-sidebar.d.ts +21 -15
  29. package/es/ele-pro-layout/components/pro-sidebar.js +36 -14
  30. package/es/ele-pro-layout/components/pro-sidebox.d.ts +23 -11
  31. package/es/ele-pro-layout/components/pro-sidebox.js +46 -14
  32. package/es/ele-pro-layout/components/tab-dropdown.js +5 -1
  33. package/es/ele-pro-layout/index.d.ts +40 -27
  34. package/es/ele-pro-layout/index.js +269 -52
  35. package/es/ele-pro-layout/props.d.ts +5 -0
  36. package/es/ele-pro-layout/props.js +5 -0
  37. package/es/ele-pro-layout/types.d.ts +29 -3
  38. package/es/ele-segmented/index.d.ts +1 -1
  39. package/es/ele-table-select/index.d.ts +5 -5
  40. package/es/ele-tree-select/index.d.ts +5 -5
  41. package/es/ele-upload-list/components/list-item.d.ts +5 -1
  42. package/es/ele-upload-list/components/list-item.js +7 -4
  43. package/es/ele-upload-list/index.d.ts +10 -6
  44. package/es/ele-upload-list/index.js +7 -5
  45. package/es/ele-upload-list/props.d.ts +6 -2
  46. package/es/ele-upload-list/props.js +5 -1
  47. package/es/ele-virtual-table/components/body-cell.d.ts +1 -1
  48. package/es/ele-virtual-table/index.d.ts +1 -1
  49. package/lib/ele-app/el.d.ts +9 -0
  50. package/lib/ele-app/style/overwrite/message-box/index.scss +5 -0
  51. package/lib/ele-basic-select/index.d.ts +2 -2
  52. package/lib/ele-check-card/index.d.ts +1 -1
  53. package/lib/ele-drawer/index.d.ts +1 -1
  54. package/lib/ele-dropdown/index.cjs +1 -0
  55. package/lib/ele-dropdown/index.d.ts +2 -2
  56. package/lib/ele-icon-select/index.d.ts +3 -3
  57. package/lib/ele-map-picker/index.d.ts +1 -1
  58. package/lib/ele-menus/index.cjs +17 -4
  59. package/lib/ele-menus/index.d.ts +10 -2
  60. package/lib/ele-menus/props.cjs +9 -3
  61. package/lib/ele-menus/props.d.ts +8 -2
  62. package/lib/ele-menus/style/index.scss +12 -11
  63. package/lib/ele-menus/types.d.ts +9 -9
  64. package/lib/ele-menus/util.cjs +92 -83
  65. package/lib/ele-menus/util.d.ts +21 -15
  66. package/lib/ele-modal/index.cjs +27 -4
  67. package/lib/ele-modal/index.d.ts +2 -2
  68. package/lib/ele-modal/style/index.scss +58 -12
  69. package/lib/ele-modal/types.d.ts +2 -10
  70. package/lib/ele-modal/util.cjs +22 -57
  71. package/lib/ele-modal/util.d.ts +3 -3
  72. package/lib/ele-printer/util.cjs +3 -1
  73. package/lib/ele-pro-layout/components/pro-header.cjs +67 -14
  74. package/lib/ele-pro-layout/components/pro-header.d.ts +23 -11
  75. package/lib/ele-pro-layout/components/pro-iframe.cjs +45 -22
  76. package/lib/ele-pro-layout/components/pro-sidebar.cjs +36 -14
  77. package/lib/ele-pro-layout/components/pro-sidebar.d.ts +21 -15
  78. package/lib/ele-pro-layout/components/pro-sidebox.cjs +46 -14
  79. package/lib/ele-pro-layout/components/pro-sidebox.d.ts +23 -11
  80. package/lib/ele-pro-layout/components/tab-dropdown.cjs +5 -1
  81. package/lib/ele-pro-layout/index.cjs +269 -52
  82. package/lib/ele-pro-layout/index.d.ts +40 -27
  83. package/lib/ele-pro-layout/props.cjs +5 -0
  84. package/lib/ele-pro-layout/props.d.ts +5 -0
  85. package/lib/ele-pro-layout/types.d.ts +29 -3
  86. package/lib/ele-segmented/index.d.ts +1 -1
  87. package/lib/ele-table-select/index.d.ts +5 -5
  88. package/lib/ele-tree-select/index.d.ts +5 -5
  89. package/lib/ele-upload-list/components/list-item.cjs +6 -3
  90. package/lib/ele-upload-list/components/list-item.d.ts +5 -1
  91. package/lib/ele-upload-list/index.cjs +7 -5
  92. package/lib/ele-upload-list/index.d.ts +10 -6
  93. package/lib/ele-upload-list/props.cjs +5 -1
  94. package/lib/ele-upload-list/props.d.ts +6 -2
  95. package/lib/ele-virtual-table/components/body-cell.d.ts +1 -1
  96. package/lib/ele-virtual-table/index.d.ts +1 -1
  97. package/package.json +1 -1
@@ -22,17 +22,21 @@ const _sfc_main = vue.defineComponent({
22
22
  compact: Boolean,
23
23
  /** 二级侧栏是否折叠 */
24
24
  collapse: Boolean,
25
- /** tooltip 主题 */
25
+ /** 菜单折叠提示气泡主题 */
26
26
  popperEffect: String,
27
- /** 菜单项触发模式 */
27
+ /** 子菜单项触发模式 */
28
28
  itemTrigger: String,
29
- /** 标题插槽名称 */
29
+ /** 菜单标题插槽名称 */
30
30
  titleSlot: String,
31
- /** 图标插槽名称 */
31
+ /** 菜单图标插槽名称 */
32
32
  iconSlot: String
33
33
  },
34
34
  emits: {
35
- itemClick: (_item) => true
35
+ itemClick: (_item, _e) => true,
36
+ itemMouseenter: (_item, _e) => true,
37
+ itemMouseleave: (_item, _e) => true,
38
+ mouseEnter: (_e) => true,
39
+ mouseLeave: (_e) => true
36
40
  },
37
41
  setup(props, { emit }) {
38
42
  const { scrollIntoView } = util.useMenuScroll(() => {
@@ -41,17 +45,40 @@ const _sfc_main = vue.defineComponent({
41
45
  });
42
46
  const menusRef = vue.ref(null);
43
47
  const menuItems = vue.computed(() => {
44
- return util.getMenuItems(props.menus, props.itemTrigger != "click");
48
+ return util.getMenuItems(
49
+ props.menus,
50
+ props.itemTrigger !== "click" && props.itemTrigger !== "hover"
51
+ );
45
52
  });
46
- const onItemClick = (item) => {
47
- emit("itemClick", item);
53
+ const onItemClick = (item, e) => {
54
+ emit("itemClick", item, e);
55
+ };
56
+ const onItemMouseenter = (item, e) => {
57
+ emit("itemMouseenter", item, e);
58
+ };
59
+ const onItemMouseleave = (item, e) => {
60
+ emit("itemMouseleave", item, e);
61
+ };
62
+ const onMouseenter = (e) => {
63
+ emit("mouseEnter", e);
64
+ };
65
+ const onMouseleave = (e) => {
66
+ emit("mouseLeave", e);
48
67
  };
49
68
  vue.watch([() => props.active, () => props.compact], () => {
50
69
  vue.nextTick(() => {
51
70
  scrollIntoView();
52
71
  });
53
72
  });
54
- return { menusRef, menuItems, onItemClick };
73
+ return {
74
+ menusRef,
75
+ menuItems,
76
+ onItemClick,
77
+ onItemMouseenter,
78
+ onItemMouseleave,
79
+ onMouseenter,
80
+ onMouseleave
81
+ };
55
82
  }
56
83
  });
57
84
  const _export_sfc = (sfc, props) => {
@@ -61,11 +88,14 @@ const _export_sfc = (sfc, props) => {
61
88
  }
62
89
  return target;
63
90
  };
64
- const _hoisted_1 = { class: "ele-admin-sidebox" };
65
91
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
66
92
  const _component_EleMenus = vue.resolveComponent("EleMenus");
67
93
  const _component_ElScrollbar = vue.resolveComponent("ElScrollbar");
68
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1, [
94
+ return vue.openBlock(), vue.createElementBlock("div", {
95
+ class: "ele-admin-sidebox",
96
+ onMouseenter: _cache[0] || (_cache[0] = (...args) => _ctx.onMouseenter && _ctx.onMouseenter(...args)),
97
+ onMouseleave: _cache[1] || (_cache[1] = (...args) => _ctx.onMouseleave && _ctx.onMouseleave(...args))
98
+ }, [
69
99
  vue.renderSlot(_ctx.$slots, "boxTop"),
70
100
  vue.createVNode(_component_ElScrollbar, {
71
101
  ref: "menusRef",
@@ -84,7 +114,9 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
84
114
  collapseTransition: false,
85
115
  firstPopperClass: "ele-admin-sidebox-popup",
86
116
  tooltipDisabled: !_ctx.compact,
87
- onItemClick: _ctx.onItemClick
117
+ onItemClick: _ctx.onItemClick,
118
+ onItemMouseenter: _ctx.onItemMouseenter,
119
+ onItemMouseleave: _ctx.onItemMouseleave
88
120
  }, vue.createSlots({ _: 2 }, [
89
121
  _ctx.iconSlot && !["boxTop", "boxBottom"].includes(_ctx.iconSlot) && _ctx.$slots[_ctx.iconSlot] ? {
90
122
  name: "icon",
@@ -100,12 +132,12 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
100
132
  ]),
101
133
  key: "1"
102
134
  } : void 0
103
- ]), 1032, ["items", "theme", "popupColorful", "collapse", "defaultActive", "popperEffect", "tooltipDisabled", "onItemClick"])) : vue.createCommentVNode("", true)
135
+ ]), 1032, ["items", "theme", "popupColorful", "collapse", "defaultActive", "popperEffect", "tooltipDisabled", "onItemClick", "onItemMouseenter", "onItemMouseleave"])) : vue.createCommentVNode("", true)
104
136
  ]),
105
137
  _: 3
106
138
  }, 512),
107
139
  vue.renderSlot(_ctx.$slots, "boxBottom")
108
- ]);
140
+ ], 32);
109
141
  }
110
142
  const proSidebox = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
111
143
  module.exports = proSidebox;
@@ -17,20 +17,28 @@ declare const _default: import("vue").DefineComponent<{
17
17
  compact: BooleanConstructor;
18
18
  /** 二级侧栏是否折叠 */
19
19
  collapse: BooleanConstructor;
20
- /** tooltip 主题 */
20
+ /** 菜单折叠提示气泡主题 */
21
21
  popperEffect: PropType<import("element-plus/es/utils/index").EpPropMergeType<StringConstructor, "light" | "dark", unknown> | undefined>;
22
- /** 菜单项触发模式 */
22
+ /** 子菜单项触发模式 */
23
23
  itemTrigger: PropType<MenuItemTrigger>;
24
- /** 标题插槽名称 */
24
+ /** 菜单标题插槽名称 */
25
25
  titleSlot: StringConstructor;
26
- /** 图标插槽名称 */
26
+ /** 菜单图标插槽名称 */
27
27
  iconSlot: StringConstructor;
28
28
  }, {
29
29
  menusRef: import("vue").Ref<ElScrollbarInstance>;
30
30
  menuItems: import("vue").ComputedRef<Partial<import("../../ele-menus/types").MenuItem>[]>;
31
- onItemClick: (item: MenuItemProps) => void;
31
+ onItemClick: (item: MenuItemProps, e: MouseEvent) => void;
32
+ onItemMouseenter: (item: MenuItemProps, e: MouseEvent) => void;
33
+ onItemMouseleave: (item: MenuItemProps, e: MouseEvent) => void;
34
+ onMouseenter: (e: MouseEvent) => void;
35
+ onMouseleave: (e: MouseEvent) => void;
32
36
  }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
33
- itemClick: (_item: MenuItemProps) => true;
37
+ itemClick: (_item: MenuItemProps, _e: MouseEvent) => true;
38
+ itemMouseenter: (_item: MenuItemProps, _e: MouseEvent) => true;
39
+ itemMouseleave: (_item: MenuItemProps, _e: MouseEvent) => true;
40
+ mouseEnter: (_e: MouseEvent) => true;
41
+ mouseLeave: (_e: MouseEvent) => true;
34
42
  }, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
35
43
  /** 菜单数据 */
36
44
  menus: {
@@ -47,16 +55,20 @@ declare const _default: import("vue").DefineComponent<{
47
55
  compact: BooleanConstructor;
48
56
  /** 二级侧栏是否折叠 */
49
57
  collapse: BooleanConstructor;
50
- /** tooltip 主题 */
58
+ /** 菜单折叠提示气泡主题 */
51
59
  popperEffect: PropType<import("element-plus/es/utils/index").EpPropMergeType<StringConstructor, "light" | "dark", unknown> | undefined>;
52
- /** 菜单项触发模式 */
60
+ /** 子菜单项触发模式 */
53
61
  itemTrigger: PropType<MenuItemTrigger>;
54
- /** 标题插槽名称 */
62
+ /** 菜单标题插槽名称 */
55
63
  titleSlot: StringConstructor;
56
- /** 图标插槽名称 */
64
+ /** 菜单图标插槽名称 */
57
65
  iconSlot: StringConstructor;
58
66
  }>> & {
59
- onItemClick?: ((_item: Partial<import("../../ele-menus/types").MenuItem>) => any) | undefined;
67
+ onItemClick?: ((_item: Partial<import("../../ele-menus/types").MenuItem>, _e: MouseEvent) => any) | undefined;
68
+ onItemMouseenter?: ((_item: Partial<import("../../ele-menus/types").MenuItem>, _e: MouseEvent) => any) | undefined;
69
+ onItemMouseleave?: ((_item: Partial<import("../../ele-menus/types").MenuItem>, _e: MouseEvent) => any) | undefined;
70
+ onMouseEnter?: ((_e: MouseEvent) => any) | undefined;
71
+ onMouseLeave?: ((_e: MouseEvent) => any) | undefined;
60
72
  }, {
61
73
  collapse: boolean;
62
74
  compact: boolean;
@@ -25,13 +25,17 @@ const _sfc_main = vue.defineComponent({
25
25
  const state = { timer: null };
26
26
  const dropdownRef = vue.ref(null);
27
27
  const clearTimer = () => {
28
- state.timer && clearTimeout(state.timer);
28
+ if (state.timer) {
29
+ clearTimeout(state.timer);
30
+ state.timer = null;
31
+ }
29
32
  };
30
33
  const onCommand = (command) => {
31
34
  emit("menuClick", command);
32
35
  clearTimer();
33
36
  if (props.autoClose) {
34
37
  state.timer = setTimeout(() => {
38
+ state.timer = null;
35
39
  if (dropdownRef.value) {
36
40
  dropdownRef.value.handleClose();
37
41
  }
@@ -29,6 +29,13 @@ const _sfc_main = vue.defineComponent({
29
29
  const { authenticated } = receiver.useLicense();
30
30
  const { currentRoute, push } = vueRouter.useRouter();
31
31
  const { disableTransition } = util.useDisableTransition();
32
+ const state = {
33
+ headerData: [],
34
+ sideboxData: [],
35
+ sidebarData: [],
36
+ menuTimer: null,
37
+ isHover: false
38
+ };
32
39
  const contentRef = vue.ref(null);
33
40
  const levelData = vue.shallowRef([]);
34
41
  const tabData = vue.shallowRef([]);
@@ -216,6 +223,9 @@ const _sfc_main = vue.defineComponent({
216
223
  sideboxActive.value = active1;
217
224
  }
218
225
  sidebarActive.value = active;
226
+ state.headerActive = headerActive.value;
227
+ state.sideboxActive = sideboxActive.value;
228
+ state.sidebarActive = sidebarActive.value;
219
229
  };
220
230
  const splitMenuData = () => {
221
231
  var _a;
@@ -292,6 +302,9 @@ const _sfc_main = vue.defineComponent({
292
302
  sidebarData.value = menuData.value;
293
303
  }
294
304
  }
305
+ state.headerData = headerData.value;
306
+ state.sideboxData = sideboxData.value;
307
+ state.sidebarData = sidebarData.value;
295
308
  };
296
309
  const updateMenuData = () => {
297
310
  let temp;
@@ -337,90 +350,276 @@ const _sfc_main = vue.defineComponent({
337
350
  });
338
351
  }
339
352
  };
340
- const onNavItemClick = (item) => {
341
- if (!item.index || props2.navTrigger != "click") {
342
- return;
343
- }
344
- if (props2.beforeClick && props2.beforeClick(item) === false) {
353
+ const onNavItemClick = (item, e) => {
354
+ const path = item.index;
355
+ const trigger = props2.navTrigger;
356
+ if (!path || trigger !== "click" && trigger !== "hover") {
345
357
  return;
346
358
  }
347
359
  if (core.isExternalLink(item.index)) {
348
- window.open(item.index);
360
+ e.stopPropagation();
361
+ if (props2.beforeClick && props2.beforeClick(item, e) === false) {
362
+ return;
363
+ }
364
+ window.open(path);
349
365
  return;
350
366
  }
351
- headerActive.value = item.index;
352
- const temp = util.getActiveChilds(
353
- headerData.value,
354
- headerActive.value,
355
- "tempChildren"
356
- );
367
+ const temp = util.getActiveChilds(headerData.value, path, "tempChildren");
357
368
  const isChild = !temp.some((d) => {
358
369
  var _a;
359
370
  return !((_a = d.meta) == null ? void 0 : _a.hide);
360
371
  });
361
- if (isChild && item.index !== vue.unref(currentRoute).fullPath) {
362
- push(item.index);
372
+ if (trigger !== "click" && !isChild) {
373
+ e.stopPropagation();
363
374
  return;
364
375
  }
365
- if (mixSidebar.value) {
376
+ if (props2.beforeClick && props2.beforeClick(item, e) === false) {
377
+ return;
378
+ }
379
+ if (isChild) {
380
+ if (path !== vue.unref(currentRoute).fullPath) {
381
+ push(path);
382
+ }
383
+ return;
384
+ }
385
+ if (headerActive.value !== path) {
386
+ headerActive.value = path;
387
+ if (!mixSidebar.value) {
388
+ sidebarData.value = temp;
389
+ return;
390
+ }
366
391
  sideboxData.value = temp.map((d) => {
367
392
  return {
368
- name: d.name,
369
- path: d.path,
370
- component: d.component,
371
- redirect: d.redirect,
372
- meta: d.meta,
393
+ ...d,
373
394
  children: props2.collapse ? d.children : void 0,
374
395
  tempChildren: d.children
375
396
  };
376
397
  });
398
+ }
399
+ };
400
+ const onNavItemMouseenter = (item, e) => {
401
+ if (!mixLayout.value) {
402
+ return;
403
+ }
404
+ if (state.menuTimer != null) {
405
+ clearTimeout(state.menuTimer);
406
+ state.menuTimer = null;
407
+ }
408
+ const path = item.index;
409
+ const trigger = props2.navTrigger;
410
+ if (trigger !== "hover" || !path || core.isExternalLink(path)) {
377
411
  return;
378
412
  }
379
- sidebarData.value = temp;
413
+ const temp = util.getActiveChilds(headerData.value, path, "tempChildren");
414
+ if (!temp.some((d) => {
415
+ var _a;
416
+ return !((_a = d.meta) == null ? void 0 : _a.hide);
417
+ })) {
418
+ return;
419
+ }
420
+ if (props2.beforeClick && props2.beforeClick(item, e) === false) {
421
+ return;
422
+ }
423
+ if (headerActive.value !== path) {
424
+ state.isHover = true;
425
+ headerActive.value = path;
426
+ if (!mixSidebar.value) {
427
+ sidebarData.value = temp;
428
+ return;
429
+ }
430
+ sideboxData.value = temp.map((d) => {
431
+ return {
432
+ ...d,
433
+ children: props2.collapse ? d.children : void 0,
434
+ tempChildren: d.children
435
+ };
436
+ });
437
+ }
438
+ };
439
+ const onNavMouseEnter = () => {
440
+ if (state.menuTimer != null) {
441
+ clearTimeout(state.menuTimer);
442
+ state.menuTimer = null;
443
+ }
444
+ };
445
+ const onNavMouseLeave = () => {
446
+ if (!state.isHover) {
447
+ return;
448
+ }
449
+ if (state.menuTimer != null) {
450
+ clearTimeout(state.menuTimer);
451
+ state.menuTimer = null;
452
+ }
453
+ state.menuTimer = setTimeout(() => {
454
+ state.isHover = false;
455
+ if (headerActive.value !== state.headerActive) {
456
+ headerActive.value = state.headerActive;
457
+ if (mixSidebar.value) {
458
+ sideboxData.value = state.sideboxData;
459
+ } else {
460
+ sidebarData.value = state.sidebarData;
461
+ }
462
+ }
463
+ if (mixSidebar.value && sideboxActive.value !== state.sideboxActive) {
464
+ sideboxActive.value = state.sideboxActive;
465
+ sidebarData.value = state.sidebarData;
466
+ }
467
+ }, props2.menuHoverTimeout);
380
468
  };
381
- const onBoxItemClick = (item) => {
382
- if (!item.index || props2.boxTrigger != "click") {
469
+ const onBoxItemClick = (item, e) => {
470
+ const path = item.index;
471
+ const trigger = props2.boxTrigger;
472
+ if (!path || trigger !== "click" && trigger !== "hover") {
383
473
  return;
384
474
  }
385
- if (props2.beforeClick && props2.beforeClick(item) === false) {
475
+ if (core.isExternalLink(path)) {
476
+ e.stopPropagation();
477
+ if (props2.beforeClick && props2.beforeClick(item, e) === false) {
478
+ return;
479
+ }
480
+ window.open(path);
386
481
  return;
387
482
  }
388
- if (core.isExternalLink(item.index)) {
389
- window.open(item.index);
483
+ if (props2.collapse) {
484
+ if (props2.beforeClick && props2.beforeClick(item, e) === false) {
485
+ return;
486
+ }
487
+ if (path !== vue.unref(currentRoute).fullPath) {
488
+ push(path);
489
+ }
390
490
  return;
391
491
  }
392
- sideboxActive.value = item.index;
393
- const temp = util.getActiveChilds(
394
- sideboxData.value,
395
- sideboxActive.value,
396
- "tempChildren"
397
- );
492
+ const temp = util.getActiveChilds(sideboxData.value, path, "tempChildren");
398
493
  const isChild = !temp.some((d) => {
399
494
  var _a;
400
495
  return !((_a = d.meta) == null ? void 0 : _a.hide);
401
496
  });
402
- if (isChild && item.index !== vue.unref(currentRoute).fullPath) {
403
- push(item.index);
497
+ if (trigger !== "click" && !isChild) {
498
+ e.stopPropagation();
499
+ return;
500
+ }
501
+ if (props2.beforeClick && props2.beforeClick(item, e) === false) {
502
+ return;
503
+ }
504
+ if (isChild) {
505
+ if (path !== vue.unref(currentRoute).fullPath) {
506
+ push(path);
507
+ }
404
508
  return;
405
509
  }
406
- sidebarData.value = temp;
510
+ if (sideboxActive.value !== path) {
511
+ sideboxActive.value = path;
512
+ sidebarData.value = temp;
513
+ }
407
514
  };
408
- const onMenuItemClick = (item) => {
409
- if (!item.index || props2.itemTrigger != "click") {
515
+ const onBoxItemMouseenter = (item, e) => {
516
+ if (props2.collapse) {
410
517
  return;
411
518
  }
412
- if (props2.beforeClick && props2.beforeClick(item) === false) {
519
+ if (state.menuTimer != null) {
520
+ clearTimeout(state.menuTimer);
521
+ state.menuTimer = null;
522
+ }
523
+ const path = item.index;
524
+ const trigger = props2.boxTrigger;
525
+ if (trigger !== "hover" || !path || core.isExternalLink(path)) {
413
526
  return;
414
527
  }
415
- if (core.isExternalLink(item.index)) {
416
- window.open(item.index);
528
+ const temp = util.getActiveChilds(sideboxData.value, path, "tempChildren");
529
+ if (!temp.some((d) => {
530
+ var _a;
531
+ return !((_a = d.meta) == null ? void 0 : _a.hide);
532
+ })) {
533
+ return;
534
+ }
535
+ if (props2.beforeClick && props2.beforeClick(item, e) === false) {
417
536
  return;
418
537
  }
419
- sidebarActive.value = item.index;
420
- if (item.index !== vue.unref(currentRoute).fullPath) {
421
- push(item.index);
538
+ if (sideboxActive.value !== path) {
539
+ state.isHover = true;
540
+ sideboxActive.value = path;
541
+ sidebarData.value = temp;
422
542
  }
423
543
  };
544
+ const onBoxMouseEnter = () => {
545
+ if (state.menuTimer != null) {
546
+ clearTimeout(state.menuTimer);
547
+ state.menuTimer = null;
548
+ }
549
+ };
550
+ const onBoxMouseLeave = () => {
551
+ if (!state.isHover) {
552
+ return;
553
+ }
554
+ if (state.menuTimer != null) {
555
+ clearTimeout(state.menuTimer);
556
+ state.menuTimer = null;
557
+ }
558
+ state.menuTimer = setTimeout(() => {
559
+ state.isHover = false;
560
+ if (headerActive.value !== state.headerActive) {
561
+ headerActive.value = state.headerActive;
562
+ if (mixSidebar.value) {
563
+ sideboxData.value = state.sideboxData;
564
+ } else {
565
+ sidebarData.value = state.sidebarData;
566
+ }
567
+ }
568
+ if (mixSidebar.value && sideboxActive.value !== state.sideboxActive) {
569
+ sideboxActive.value = state.sideboxActive;
570
+ sidebarData.value = state.sidebarData;
571
+ }
572
+ }, props2.menuHoverTimeout);
573
+ };
574
+ const onMenuItemClick = (item, e) => {
575
+ const path = item.index;
576
+ const trigger = props2.itemTrigger;
577
+ if (!path || trigger !== "click" && trigger !== "hover") {
578
+ return;
579
+ }
580
+ if (props2.beforeClick && props2.beforeClick(item, e) === false) {
581
+ return;
582
+ }
583
+ if (core.isExternalLink(path)) {
584
+ e.stopPropagation();
585
+ window.open(path);
586
+ return;
587
+ }
588
+ sidebarActive.value = path;
589
+ if (path !== vue.unref(currentRoute).fullPath) {
590
+ push(path);
591
+ }
592
+ };
593
+ const onSideMouseEnter = () => {
594
+ if (state.menuTimer != null) {
595
+ clearTimeout(state.menuTimer);
596
+ state.menuTimer = null;
597
+ }
598
+ };
599
+ const onSideMouseLeave = () => {
600
+ if (!state.isHover) {
601
+ return;
602
+ }
603
+ if (state.menuTimer != null) {
604
+ clearTimeout(state.menuTimer);
605
+ state.menuTimer = null;
606
+ }
607
+ state.menuTimer = setTimeout(() => {
608
+ state.isHover = false;
609
+ if (headerActive.value !== state.headerActive) {
610
+ headerActive.value = state.headerActive;
611
+ if (mixSidebar.value) {
612
+ sideboxData.value = state.sideboxData;
613
+ } else {
614
+ sidebarData.value = state.sidebarData;
615
+ }
616
+ }
617
+ if (mixSidebar.value && sideboxActive.value !== state.sideboxActive) {
618
+ sideboxActive.value = state.sideboxActive;
619
+ sidebarData.value = state.sidebarData;
620
+ }
621
+ }, props2.menuHoverTimeout);
622
+ };
424
623
  vue.watch(
425
624
  () => props2.menus,
426
625
  () => {
@@ -463,11 +662,13 @@ const _sfc_main = vue.defineComponent({
463
662
  sideboxData.value = sideboxData.value.map((d) => {
464
663
  return { ...d, children: d.tempChildren };
465
664
  });
665
+ state.sideboxData = sideboxData.value;
466
666
  return;
467
667
  }
468
668
  sideboxData.value = sideboxData.value.map((d) => {
469
669
  return { ...d, children: void 0 };
470
670
  });
671
+ state.sideboxData = sideboxData.value;
471
672
  }
472
673
  );
473
674
  vue.watch(
@@ -528,7 +729,7 @@ const _sfc_main = vue.defineComponent({
528
729
  props2
529
730
  );
530
731
  const layoutProvide = vue.computed(() => {
531
- const state = {
732
+ const state2 = {
532
733
  mobile: mobile.value,
533
734
  collapse: props2.collapse,
534
735
  compact: props2.compact,
@@ -541,7 +742,7 @@ const _sfc_main = vue.defineComponent({
541
742
  keepAlive: props2.tabBar && props2.keepAlive,
542
743
  responsive: props2.responsive
543
744
  };
544
- return state;
745
+ return state2;
545
746
  });
546
747
  vue.provide(receiver.LAYOUT_KEY, layoutProvide);
547
748
  return {
@@ -577,8 +778,16 @@ const _sfc_main = vue.defineComponent({
577
778
  onHeadMenuOpen,
578
779
  onHeadMenuClose,
579
780
  onNavItemClick,
781
+ onNavItemMouseenter,
782
+ onNavMouseEnter,
783
+ onNavMouseLeave,
580
784
  onBoxItemClick,
581
- onMenuItemClick
785
+ onBoxItemMouseenter,
786
+ onBoxMouseEnter,
787
+ onBoxMouseLeave,
788
+ onMenuItemClick,
789
+ onSideMouseEnter,
790
+ onSideMouseLeave
582
791
  };
583
792
  }
584
793
  });
@@ -625,7 +834,10 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
625
834
  onLogoClick: _ctx.onLogoClick,
626
835
  onOpen: _ctx.onHeadMenuOpen,
627
836
  onClsoe: _ctx.onHeadMenuClose,
628
- onItemClick: _ctx.onNavItemClick
837
+ onItemClick: _ctx.onNavItemClick,
838
+ onItemMouseenter: _ctx.onNavItemMouseenter,
839
+ onMouseEnter: _ctx.onNavMouseEnter,
840
+ onMouseLeave: _ctx.onNavMouseLeave
629
841
  }, vue.createSlots({ _: 2 }, [
630
842
  vue.renderList(Object.keys(_ctx.$slots).filter(
631
843
  (k) => ![
@@ -648,7 +860,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
648
860
  ])
649
861
  };
650
862
  })
651
- ]), 1032, ["menus", "headerStyle", "active", "ellipsis", "ellipsisProps", "menuTrigger", "itemTrigger", "collapse", "sidebar", "titleSlot", "iconSlot", "levels", "breadcrumb", "breadcrumbSeparator", "homePath", "isHome", "onLogoClick", "onOpen", "onClsoe", "onItemClick"]),
863
+ ]), 1032, ["menus", "headerStyle", "active", "ellipsis", "ellipsisProps", "menuTrigger", "itemTrigger", "collapse", "sidebar", "titleSlot", "iconSlot", "levels", "breadcrumb", "breadcrumbSeparator", "homePath", "isHome", "onLogoClick", "onOpen", "onClsoe", "onItemClick", "onItemMouseenter", "onMouseEnter", "onMouseLeave"]),
652
864
  vue.createVNode(_component_EleWatermark, {
653
865
  class: "ele-admin-main",
654
866
  height: 68,
@@ -669,7 +881,10 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
669
881
  itemTrigger: _ctx.boxTrigger,
670
882
  titleSlot: _ctx.sideboxTitleSlot,
671
883
  iconSlot: _ctx.sideboxIconSlot,
672
- onItemClick: _ctx.onBoxItemClick
884
+ onItemClick: _ctx.onBoxItemClick,
885
+ onItemMouseenter: _ctx.onBoxItemMouseenter,
886
+ onMouseEnter: _ctx.onBoxMouseEnter,
887
+ onMouseLeave: _ctx.onBoxMouseLeave
673
888
  }, vue.createSlots({ _: 2 }, [
674
889
  vue.renderList(Object.keys(_ctx.$slots).filter(
675
890
  (k) => ![
@@ -695,7 +910,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
695
910
  ])
696
911
  };
697
912
  })
698
- ]), 1032, ["menus", "sidebarStyle", "colorfulIcon", "active", "compact", "collapse", "popperEffect", "itemTrigger", "titleSlot", "iconSlot", "onItemClick"])) : vue.createCommentVNode("", true),
913
+ ]), 1032, ["menus", "sidebarStyle", "colorfulIcon", "active", "compact", "collapse", "popperEffect", "itemTrigger", "titleSlot", "iconSlot", "onItemClick", "onItemMouseenter", "onMouseEnter", "onMouseLeave"])) : vue.createCommentVNode("", true),
699
914
  _ctx.sidebar ? (vue.openBlock(), vue.createBlock(_component_ProSidebar, {
700
915
  key: 1,
701
916
  menus: _ctx.sidebarData,
@@ -711,7 +926,9 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
711
926
  iconSlot: _ctx.sidebarIconSlot,
712
927
  onOpen: _ctx.onSideMenuOpen,
713
928
  onClsoe: _ctx.onSideMenuClose,
714
- onItemClick: _ctx.onMenuItemClick
929
+ onItemClick: _ctx.onMenuItemClick,
930
+ onMouseEnter: _ctx.onSideMouseEnter,
931
+ onMouseLeave: _ctx.onSideMouseLeave
715
932
  }, vue.createSlots({ _: 2 }, [
716
933
  vue.renderList(Object.keys(_ctx.$slots).filter(
717
934
  (k) => ![
@@ -737,7 +954,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
737
954
  ])
738
955
  };
739
956
  })
740
- ]), 1032, ["menus", "sidebarStyle", "colorfulIcon", "active", "collapse", "uniqueOpened", "defaultOpeneds", "popperEffect", "itemTrigger", "titleSlot", "iconSlot", "onOpen", "onClsoe", "onItemClick"])) : vue.createCommentVNode("", true),
957
+ ]), 1032, ["menus", "sidebarStyle", "colorfulIcon", "active", "collapse", "uniqueOpened", "defaultOpeneds", "popperEffect", "itemTrigger", "titleSlot", "iconSlot", "onOpen", "onClsoe", "onItemClick", "onMouseEnter", "onMouseLeave"])) : vue.createCommentVNode("", true),
741
958
  vue.createElementVNode("div", _hoisted_1, [
742
959
  _ctx.tabBar ? (vue.openBlock(), vue.createBlock(_component_ProTabs, {
743
960
  key: 0,