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
@@ -5,26 +5,22 @@ import { isExternalLink, getCurrentStyle, debounce } from "../utils/core";
5
5
  import { ArrowDown, ArrowRight } from "../icons";
6
6
  const linkClass = "ele-menu-link";
7
7
  const titleClass = "ele-menu-title";
8
+ const triggerClass = "ele-menu-trigger";
8
9
  const overflowClass = "ele-menu-overflow";
9
10
  const ellipsisClass = "ele-sub-menu-ellipsis";
10
- function getLinkNode(item, onItemClick) {
11
- if (!(item == null ? void 0 : item.path)) {
12
- return;
13
- }
14
- if (isExternalLink(item.path)) {
11
+ function getLinkNode(path) {
12
+ if (isExternalLink(path)) {
15
13
  return h("a", {
16
- href: item.path,
14
+ href: path,
17
15
  target: "_blank",
18
- class: linkClass,
19
- onClick: (e) => {
20
- e.stopPropagation();
21
- onItemClick && onItemClick(item);
22
- }
16
+ class: linkClass
23
17
  });
24
18
  }
25
- return h(RouterLink, { to: item.path, class: linkClass });
19
+ if (path) {
20
+ return h(RouterLink, { to: path, class: linkClass });
21
+ }
26
22
  }
27
- function getNodes(icons, titles, badge, link) {
23
+ function getNodes(icons, titles, badge, trigger) {
28
24
  const nodes = [];
29
25
  if (icons) {
30
26
  icons.forEach((t) => {
@@ -39,18 +35,19 @@ function getNodes(icons, titles, badge, link) {
39
35
  if (badge) {
40
36
  nodes.push(badge);
41
37
  }
42
- if (link) {
43
- nodes.push(link);
38
+ if (trigger) {
39
+ nodes.push(trigger);
44
40
  }
45
41
  return nodes;
46
42
  }
47
- function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorful, popupColorful, firstPopClass, first, onItemClick) {
43
+ function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorful, popupColorful, firstPopClass, first, onItemClick, onItemMouseenter, onItemMouseleave, webkit) {
48
44
  const nodes = [];
49
45
  if (!items) {
50
46
  return nodes;
51
47
  }
52
48
  items.forEach((item) => {
53
49
  var _a;
50
+ const key = item.key || item.index || item.path;
54
51
  const iNodes = sIcon ? sIcon({ item, icon: item.icon }) ?? [] : [];
55
52
  if (!iNodes.length && item.icon) {
56
53
  iNodes.push(
@@ -65,27 +62,40 @@ function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorfu
65
62
  }
66
63
  const bNode = item.badge != null ? h(ElBadge, item.badge) : null;
67
64
  if (!((_a = item.children) == null ? void 0 : _a.length)) {
68
- const linkNode = getLinkNode(item, onItemClick);
69
- const key = item.key || item.index || item.path;
65
+ const triggerNode = h(
66
+ "div",
67
+ {
68
+ class: triggerClass,
69
+ onClick: (e) => {
70
+ onItemClick && onItemClick(item, e);
71
+ },
72
+ onMouseenter: (e) => {
73
+ onItemMouseenter && onItemMouseenter(item, e);
74
+ },
75
+ onMouseleave: (e) => {
76
+ onItemMouseleave && onItemMouseleave(item, e);
77
+ }
78
+ },
79
+ getLinkNode(item.path)
80
+ );
70
81
  nodes.push(
71
82
  h(
72
83
  ElMenuItem,
73
84
  {
74
85
  key: key + "-" + tipDisabled,
75
- index: item.index,
86
+ index: item.index || item.path,
76
87
  route: item.route,
77
88
  disabled: item.disabled,
78
89
  class: item.overflow ? overflowClass : void 0,
79
90
  onClick: () => {
80
- onItemClick && onItemClick(item);
81
91
  }
82
92
  },
83
93
  {
84
94
  default: () => {
85
- if (!first || tipDisabled) {
86
- return getNodes(iNodes, tNodes, bNode, linkNode);
95
+ if (first && !tipDisabled) {
96
+ return getNodes(iNodes, void 0, bNode, triggerNode);
87
97
  }
88
- return getNodes(iNodes, void 0, bNode, linkNode);
98
+ return getNodes(iNodes, tNodes, bNode, triggerNode);
89
99
  },
90
100
  title: first && !tipDisabled ? () => tNodes : void 0
91
101
  }
@@ -95,47 +105,45 @@ function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorfu
95
105
  }
96
106
  if (item.group === true) {
97
107
  nodes.push(
98
- h(
99
- ElMenuItemGroup,
100
- { key: item.key || item.index },
101
- {
102
- default: () => {
103
- return renderItems(
104
- item.children,
105
- sIcon,
106
- sTitle,
107
- tipDisabled,
108
- theme,
109
- popTheme,
110
- colorful,
111
- popupColorful,
112
- firstPopClass,
113
- first,
114
- onItemClick
115
- );
116
- },
117
- title: () => getNodes(iNodes, tNodes, bNode)
118
- }
119
- )
108
+ h(ElMenuItemGroup, { key }, {
109
+ default: () => {
110
+ return renderItems(
111
+ item.children,
112
+ sIcon,
113
+ sTitle,
114
+ tipDisabled,
115
+ theme,
116
+ popTheme,
117
+ colorful,
118
+ popupColorful,
119
+ firstPopClass,
120
+ first,
121
+ onItemClick,
122
+ onItemMouseenter,
123
+ onItemMouseleave
124
+ );
125
+ },
126
+ title: () => getNodes(iNodes, tNodes, bNode)
127
+ })
120
128
  );
121
129
  return;
122
130
  }
123
- const popperClass = getPopperClass(
124
- item.popperClass,
125
- theme,
126
- popTheme,
127
- colorful,
128
- popupColorful,
129
- firstPopClass,
130
- first
131
- );
132
131
  nodes.push(
133
132
  h(
134
133
  ElSubMenu,
135
134
  {
136
- key: item.key || item.index,
137
- index: item.index,
138
- popperClass,
135
+ key,
136
+ index: item.index || item.path,
137
+ popperClass: getPopperClass(
138
+ item.popperClass,
139
+ theme,
140
+ popTheme,
141
+ colorful,
142
+ popupColorful,
143
+ firstPopClass,
144
+ first,
145
+ webkit
146
+ ),
139
147
  showTimeout: item.showTimeout,
140
148
  hideTimeout: item.hideTimeout,
141
149
  disabled: item.disabled,
@@ -164,7 +172,9 @@ function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorfu
164
172
  popupColorful,
165
173
  firstPopClass,
166
174
  false,
167
- onItemClick
175
+ onItemClick,
176
+ onItemMouseenter,
177
+ onItemMouseleave
168
178
  );
169
179
  },
170
180
  title: () => getNodes(iNodes, tNodes, bNode)
@@ -174,6 +184,25 @@ function renderItems(items, sIcon, sTitle, tipDisabled, theme, popTheme, colorfu
174
184
  });
175
185
  return nodes;
176
186
  }
187
+ function getPopperClass(customerClass, theme, popTheme, colorful, popupColorful, firstPopClass, first, webkit) {
188
+ const popperClass = ["ele-menu"];
189
+ if (webkit) {
190
+ popperClass.push("is-webkit");
191
+ }
192
+ if (popTheme === "dark" || popTheme === "auto" && theme === "dark") {
193
+ popperClass.push("is-night ele-menu-dark");
194
+ }
195
+ if (popupColorful === true || popupColorful === "auto" && colorful) {
196
+ popperClass.push("is-colorful ele-menu-colorful");
197
+ }
198
+ if (first && firstPopClass) {
199
+ popperClass.push(firstPopClass);
200
+ }
201
+ if (customerClass) {
202
+ popperClass.push(customerClass);
203
+ }
204
+ return popperClass.join(" ");
205
+ }
177
206
  function getMenuItems(menus, index, horizontal) {
178
207
  if (!horizontal || !menus || !menus.length) {
179
208
  return { items: menus };
@@ -188,36 +217,16 @@ function getMenuItems(menus, index, horizontal) {
188
217
  const moreItems = index === 0 ? data : data.slice(index);
189
218
  moreItems.forEach((d) => {
190
219
  var _a;
191
- const children = ((_a = d.children) == null ? void 0 : _a.length) ? [null] : void 0;
192
220
  items.push({
193
221
  ...d,
222
+ key: `overflow-${d.key || d.index || d.path}`,
223
+ index: `overflow-${d.index || d.path}`,
194
224
  overflow: true,
195
- key: `overflow-${d.key || d.index}`,
196
- index: `overflow-${d.index}`,
197
- children
225
+ children: ((_a = d.children) == null ? void 0 : _a.length) ? [null] : void 0
198
226
  });
199
227
  });
200
228
  return { items, moreItems };
201
229
  }
202
- function getPopperClass(customerClass, theme, popTheme, colorful, popupColorful, firstPopClass, first) {
203
- const popperClass = ["ele-menu"];
204
- if (navigator.userAgent.includes("WebKit")) {
205
- popperClass.push("is-webkit");
206
- }
207
- if (popTheme === "dark" || popTheme === "auto" && theme === "dark") {
208
- popperClass.push("is-night ele-menu-dark");
209
- }
210
- if (popupColorful === true || popupColorful === "auto" && colorful) {
211
- popperClass.push("is-colorful ele-menu-colorful");
212
- }
213
- if (first && firstPopClass) {
214
- popperClass.push(firstPopClass);
215
- }
216
- if (customerClass) {
217
- popperClass.push(customerClass);
218
- }
219
- return popperClass.join(" ");
220
- }
221
230
  function getMenuWidth(el) {
222
231
  if (!el) {
223
232
  return;
@@ -237,8 +246,7 @@ function getItemWidth(el) {
237
246
  return el.offsetWidth + ml + mr;
238
247
  }
239
248
  function getMenuChilds(el) {
240
- const childs = Array.from(el.childNodes ?? []);
241
- return childs.filter((t) => {
249
+ return Array.from(el.childNodes ?? []).filter((t) => {
242
250
  return t.nodeName === "LI" && !t.classList.contains(ellipsisClass);
243
251
  });
244
252
  }
@@ -310,5 +318,6 @@ export {
310
318
  overflowClass,
311
319
  renderItems,
312
320
  titleClass,
321
+ triggerClass,
313
322
  useMenuEllipsis
314
323
  };
@@ -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;
@@ -1,4 +1,4 @@
1
- import { defineComponent, shallowRef, computed, watch, resolveComponent, openBlock, createElementBlock, normalizeClass, renderSlot, createCommentVNode, createVNode, createElementVNode, createBlock, createSlots, withCtx, normalizeProps, guardReactiveProps } from "vue";
1
+ import { defineComponent, shallowRef, computed, watch, onBeforeUnmount, resolveComponent, openBlock, createElementBlock, normalizeClass, renderSlot, createCommentVNode, createVNode, createElementVNode, createBlock, createSlots, withCtx, normalizeProps, guardReactiveProps } from "vue";
2
2
  import { HomeOutlined } from "../../icons";
3
3
  import EleBreadcrumb from "../../ele-breadcrumb/index";
4
4
  import EleMenus from "../../ele-menus/index";
@@ -20,17 +20,17 @@ const _sfc_main = defineComponent({
20
20
  ellipsis: Boolean,
21
21
  /** 菜单省略项的属性 */
22
22
  ellipsisProps: Object,
23
- /** 子菜单触发方式 */
23
+ /** 父级菜单展开触发方式 */
24
24
  menuTrigger: String,
25
- /** 菜单项触发模式 */
25
+ /** 子菜单项触发模式 */
26
26
  itemTrigger: String,
27
27
  /** 侧栏是否折叠 */
28
28
  collapse: Boolean,
29
29
  /** 当前是否有侧栏 */
30
30
  sidebar: Boolean,
31
- /** 标题插槽名称 */
31
+ /** 菜单标题插槽名称 */
32
32
  titleSlot: String,
33
- /** 图标插槽名称 */
33
+ /** 菜单图标插槽名称 */
34
34
  iconSlot: String,
35
35
  /** 面包屑导航数据 */
36
36
  levels: {
@@ -50,12 +50,20 @@ const _sfc_main = defineComponent({
50
50
  logoClick: () => true,
51
51
  open: (_index, _indexPath) => true,
52
52
  close: (_index, _indexPath) => true,
53
- itemClick: (_item) => true
53
+ itemClick: (_item, _e) => true,
54
+ itemMouseenter: (_item, _e) => true,
55
+ itemMouseleave: (_item, _e) => true,
56
+ mouseEnter: (_e) => true,
57
+ mouseLeave: (_e) => true
54
58
  },
55
59
  setup(props, { emit }) {
60
+ const state = { hover: false, timer: null };
56
61
  const levelItems = shallowRef([]);
57
62
  const menuItems = computed(() => {
58
- return getMenuItems(props.menus, props.itemTrigger != "click");
63
+ return getMenuItems(
64
+ props.menus,
65
+ props.itemTrigger !== "click" && props.itemTrigger !== "hover"
66
+ );
59
67
  });
60
68
  const isDark = computed(() => props.headerStyle === "dark");
61
69
  const isPrimary = computed(() => props.headerStyle === "primary");
@@ -71,8 +79,36 @@ const _sfc_main = defineComponent({
71
79
  const onClose = (index, indexPath) => {
72
80
  emit("close", index, indexPath);
73
81
  };
74
- const onItemClick = (item) => {
75
- emit("itemClick", item);
82
+ const onItemClick = (item, e) => {
83
+ emit("itemClick", item, e);
84
+ };
85
+ const onItemMouseenter = (item, e) => {
86
+ emit("itemMouseenter", item, e);
87
+ onMouseenter(e);
88
+ };
89
+ const onItemMouseleave = (item, e) => {
90
+ emit("itemMouseleave", item, e);
91
+ onMouseleave(e);
92
+ };
93
+ const onMouseenter = (e) => {
94
+ if (state.timer != null) {
95
+ clearTimeout(state.timer);
96
+ state.timer = null;
97
+ }
98
+ if (!state.hover) {
99
+ state.hover = true;
100
+ emit("mouseEnter", e);
101
+ }
102
+ };
103
+ const onMouseleave = (e) => {
104
+ if (state.timer != null) {
105
+ clearTimeout(state.timer);
106
+ }
107
+ state.timer = setTimeout(() => {
108
+ state.timer = null;
109
+ state.hover = false;
110
+ emit("mouseLeave", e);
111
+ }, 300);
76
112
  };
77
113
  watch(
78
114
  [() => props.isHome, () => props.homePath, () => props.levels],
@@ -94,8 +130,17 @@ const _sfc_main = defineComponent({
94
130
  });
95
131
  levelItems.value = data;
96
132
  },
97
- { deep: true, immediate: true }
133
+ {
134
+ immediate: true,
135
+ deep: true
136
+ }
98
137
  );
138
+ onBeforeUnmount(() => {
139
+ if (state.timer != null) {
140
+ clearTimeout(state.timer);
141
+ state.timer = null;
142
+ }
143
+ });
99
144
  return {
100
145
  levelItems,
101
146
  menuItems,
@@ -105,7 +150,11 @@ const _sfc_main = defineComponent({
105
150
  onLogoClick,
106
151
  onOpen,
107
152
  onClose,
108
- onItemClick
153
+ onItemClick,
154
+ onItemMouseenter,
155
+ onItemMouseleave,
156
+ onMouseenter,
157
+ onMouseleave
109
158
  };
110
159
  }
111
160
  });
@@ -137,7 +186,9 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
137
186
  "ele-admin-header",
138
187
  { "is-dark": _ctx.isDark },
139
188
  { "is-primary": _ctx.isPrimary }
140
- ])
189
+ ]),
190
+ onMouseenter: _cache[1] || (_cache[1] = (...args) => _ctx.onMouseenter && _ctx.onMouseenter(...args)),
191
+ onMouseleave: _cache[2] || (_cache[2] = (...args) => _ctx.onMouseleave && _ctx.onMouseleave(...args))
141
192
  }, [
142
193
  _ctx.$slots.logo ? (openBlock(), createElementBlock("div", {
143
194
  key: 0,
@@ -180,7 +231,9 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
180
231
  menuTrigger: _ctx.menuTrigger,
181
232
  onOpen: _ctx.onOpen,
182
233
  onClose: _ctx.onClose,
183
- onItemClick: _ctx.onItemClick
234
+ onItemClick: _ctx.onItemClick,
235
+ onItemMouseenter: _ctx.onItemMouseenter,
236
+ onItemMouseleave: _ctx.onItemMouseleave
184
237
  }, createSlots({ _: 2 }, [
185
238
  _ctx.iconSlot && !["logo", "left", "right", "center", "breadcrumb"].includes(
186
239
  _ctx.iconSlot
@@ -200,12 +253,12 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
200
253
  ]),
201
254
  key: "1"
202
255
  } : void 0
203
- ]), 1032, ["items", "theme", "popupTheme", "ellipsis", "ellipsisProps", "defaultActive", "menuTrigger", "onOpen", "onClose", "onItemClick"])) : createCommentVNode("", true)
256
+ ]), 1032, ["items", "theme", "popupTheme", "ellipsis", "ellipsisProps", "defaultActive", "menuTrigger", "onOpen", "onClose", "onItemClick", "onItemMouseenter", "onItemMouseleave"])) : createCommentVNode("", true)
204
257
  ]),
205
258
  _ctx.$slots.right ? (openBlock(), createElementBlock("div", _hoisted_4, [
206
259
  renderSlot(_ctx.$slots, "right", { sidebar: _ctx.sidebar })
207
260
  ])) : createCommentVNode("", true)
208
- ], 2);
261
+ ], 34);
209
262
  }
210
263
  const proHeader = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render]]);
211
264
  export {
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref, computed, watch, onBeforeUnmount, nextTick, withDirectives, openBlock, createElementBlock, createVNode, TransitionGroup, withCtx, Fragment, renderList, vShow } from "vue";
1
+ import { defineComponent, ref, computed, watch, onBeforeUnmount, nextTick, withDirectives, openBlock, createElementBlock, Fragment, renderList, vShow, createCommentVNode, createBlock, TransitionGroup, withCtx } from "vue";
2
2
  const _sfc_main = defineComponent({
3
3
  name: "ProIframe",
4
4
  props: {
@@ -21,20 +21,22 @@ const _sfc_main = defineComponent({
21
21
  const visible = ref(false);
22
22
  const active = ref(null);
23
23
  const data = computed(() => {
24
- const result = [];
24
+ const list = [];
25
25
  props.tabData.forEach((t) => {
26
26
  var _a, _b;
27
27
  const isAlive = ((_a = t.meta) == null ? void 0 : _a.keepAlive) !== false;
28
- if (t.key && ((_b = t.meta) == null ? void 0 : _b.iframe) && !t.refresh && isAlive) {
29
- result.push({ id: t.key, src: t.meta.iframe });
28
+ if (t.key && ((_b = t.meta) == null ? void 0 : _b.iframe) && isAlive) {
29
+ list.push({ id: t.key, src: t.meta.iframe, refresh: t.refresh });
30
30
  }
31
31
  });
32
- return result;
32
+ return list.sort((a, b) => a.id === b.id ? 0 : a.id > b.id ? 1 : -1);
33
33
  });
34
34
  const onAfterLeave = (delay) => {
35
35
  if (props.tabActive && data.value.length && data.value.some((d) => d.id === props.tabActive)) {
36
36
  if (delay) {
37
+ clearTimer();
37
38
  state.timer = setTimeout(() => {
39
+ state.timer = null;
38
40
  visible.value = true;
39
41
  nextTick(() => {
40
42
  active.value = props.tabActive;
@@ -42,9 +44,7 @@ const _sfc_main = defineComponent({
42
44
  }, delay);
43
45
  } else {
44
46
  visible.value = true;
45
- nextTick(() => {
46
- active.value = props.tabActive;
47
- });
47
+ active.value = props.tabActive;
48
48
  }
49
49
  } else {
50
50
  visible.value = false;
@@ -52,7 +52,7 @@ const _sfc_main = defineComponent({
52
52
  }
53
53
  };
54
54
  const clearTimer = () => {
55
- if (state.timer) {
55
+ if (state.timer != null) {
56
56
  clearTimeout(state.timer);
57
57
  state.timer = null;
58
58
  }
@@ -62,10 +62,14 @@ const _sfc_main = defineComponent({
62
62
  () => {
63
63
  clearTimer();
64
64
  if (visible.value) {
65
- active.value = null;
66
- } else {
67
- onAfterLeave(props.transitionDelay);
65
+ if (!props.transitionName) {
66
+ onAfterLeave();
67
+ } else {
68
+ active.value = null;
69
+ }
70
+ return;
68
71
  }
72
+ onAfterLeave(props.transitionName ? props.transitionDelay : void 0);
69
73
  }
70
74
  );
71
75
  onBeforeUnmount(() => {
@@ -87,28 +91,47 @@ const _export_sfc = (sfc, props) => {
87
91
  return target;
88
92
  };
89
93
  const _hoisted_1 = { class: "ele-admin-iframe-wrap" };
90
- const _hoisted_2 = ["id", "src"];
94
+ const _hoisted_2 = ["data-id", "src"];
95
+ const _hoisted_3 = ["data-id", "src"];
91
96
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
92
97
  return withDirectives((openBlock(), createElementBlock("div", _hoisted_1, [
93
- createVNode(TransitionGroup, {
98
+ !_ctx.transitionName ? (openBlock(true), createElementBlock(Fragment, { key: 0 }, renderList(_ctx.data, (item) => {
99
+ return openBlock(), createElementBlock(Fragment, {
100
+ key: item.id
101
+ }, [
102
+ !item.refresh ? withDirectives((openBlock(), createElementBlock("iframe", {
103
+ key: 0,
104
+ "data-id": item.id,
105
+ src: item.src,
106
+ class: "ele-admin-iframe"
107
+ }, null, 8, _hoisted_2)), [
108
+ [vShow, _ctx.active === item.id]
109
+ ]) : createCommentVNode("", true)
110
+ ], 64);
111
+ }), 128)) : (openBlock(), createBlock(TransitionGroup, {
112
+ key: 1,
94
113
  appear: true,
95
114
  name: _ctx.transitionName,
96
115
  onAfterLeave: _cache[0] || (_cache[0] = ($event) => _ctx.onAfterLeave())
97
116
  }, {
98
117
  default: withCtx(() => [
99
118
  (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.data, (item) => {
100
- return withDirectives((openBlock(), createElementBlock("iframe", {
101
- key: item.id,
102
- id: item.id,
103
- src: item.src,
104
- class: "ele-admin-iframe"
105
- }, null, 8, _hoisted_2)), [
106
- [vShow, _ctx.active === item.id]
107
- ]);
119
+ return openBlock(), createElementBlock(Fragment, {
120
+ key: item.id
121
+ }, [
122
+ !item.refresh ? withDirectives((openBlock(), createElementBlock("iframe", {
123
+ key: 0,
124
+ "data-id": item.id,
125
+ src: item.src,
126
+ class: "ele-admin-iframe"
127
+ }, null, 8, _hoisted_3)), [
128
+ [vShow, _ctx.active === item.id]
129
+ ]) : createCommentVNode("", true)
130
+ ], 64);
108
131
  }), 128))
109
132
  ]),
110
133
  _: 1
111
- }, 8, ["name"])
134
+ }, 8, ["name"]))
112
135
  ], 512)), [
113
136
  [vShow, _ctx.visible]
114
137
  ]);