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.
- package/es/ele-app/el.d.ts +3 -0
- package/es/ele-basic-select/index.d.ts +2 -2
- package/es/ele-check-card/index.d.ts +1 -1
- package/es/ele-drawer/index.d.ts +1 -1
- package/es/ele-icon-select/index.d.ts +3 -3
- package/es/ele-map-picker/index.d.ts +1 -1
- package/es/ele-menus/index.d.ts +10 -2
- package/es/ele-menus/index.js +17 -4
- package/es/ele-menus/props.d.ts +8 -2
- package/es/ele-menus/props.js +9 -3
- package/es/ele-menus/style/index.scss +12 -11
- package/es/ele-menus/types.d.ts +9 -9
- package/es/ele-menus/util.d.ts +21 -15
- package/es/ele-menus/util.js +92 -83
- package/es/ele-pro-layout/components/pro-header.d.ts +23 -11
- package/es/ele-pro-layout/components/pro-header.js +68 -15
- package/es/ele-pro-layout/components/pro-iframe.js +46 -23
- package/es/ele-pro-layout/components/pro-sidebar.d.ts +21 -15
- package/es/ele-pro-layout/components/pro-sidebar.js +36 -14
- package/es/ele-pro-layout/components/pro-sidebox.d.ts +23 -11
- package/es/ele-pro-layout/components/pro-sidebox.js +46 -14
- package/es/ele-pro-layout/components/tab-dropdown.js +5 -1
- package/es/ele-pro-layout/index.d.ts +40 -27
- package/es/ele-pro-layout/index.js +269 -52
- package/es/ele-pro-layout/props.d.ts +5 -0
- package/es/ele-pro-layout/props.js +5 -0
- package/es/ele-pro-layout/types.d.ts +29 -3
- package/es/ele-segmented/index.d.ts +1 -1
- package/es/ele-table-select/index.d.ts +5 -5
- package/es/ele-tree-select/index.d.ts +5 -5
- package/es/ele-upload-list/components/list-item.d.ts +5 -1
- package/es/ele-upload-list/components/list-item.js +7 -4
- package/es/ele-upload-list/index.d.ts +10 -6
- package/es/ele-upload-list/index.js +7 -5
- package/es/ele-upload-list/props.d.ts +6 -2
- package/es/ele-upload-list/props.js +5 -1
- package/es/ele-virtual-table/components/body-cell.d.ts +1 -1
- package/es/ele-virtual-table/index.d.ts +1 -1
- package/lib/ele-app/el.d.ts +3 -0
- package/lib/ele-basic-select/index.d.ts +2 -2
- package/lib/ele-check-card/index.d.ts +1 -1
- package/lib/ele-drawer/index.d.ts +1 -1
- package/lib/ele-icon-select/index.d.ts +3 -3
- package/lib/ele-map-picker/index.d.ts +1 -1
- package/lib/ele-menus/index.cjs +17 -4
- package/lib/ele-menus/index.d.ts +10 -2
- package/lib/ele-menus/props.cjs +9 -3
- package/lib/ele-menus/props.d.ts +8 -2
- package/lib/ele-menus/style/index.scss +12 -11
- package/lib/ele-menus/types.d.ts +9 -9
- package/lib/ele-menus/util.cjs +92 -83
- package/lib/ele-menus/util.d.ts +21 -15
- package/lib/ele-pro-layout/components/pro-header.cjs +67 -14
- package/lib/ele-pro-layout/components/pro-header.d.ts +23 -11
- package/lib/ele-pro-layout/components/pro-iframe.cjs +45 -22
- package/lib/ele-pro-layout/components/pro-sidebar.cjs +36 -14
- package/lib/ele-pro-layout/components/pro-sidebar.d.ts +21 -15
- package/lib/ele-pro-layout/components/pro-sidebox.cjs +46 -14
- package/lib/ele-pro-layout/components/pro-sidebox.d.ts +23 -11
- package/lib/ele-pro-layout/components/tab-dropdown.cjs +5 -1
- package/lib/ele-pro-layout/index.cjs +269 -52
- package/lib/ele-pro-layout/index.d.ts +40 -27
- package/lib/ele-pro-layout/props.cjs +5 -0
- package/lib/ele-pro-layout/props.d.ts +5 -0
- package/lib/ele-pro-layout/types.d.ts +29 -3
- package/lib/ele-segmented/index.d.ts +1 -1
- package/lib/ele-table-select/index.d.ts +5 -5
- package/lib/ele-tree-select/index.d.ts +5 -5
- package/lib/ele-upload-list/components/list-item.cjs +6 -3
- package/lib/ele-upload-list/components/list-item.d.ts +5 -1
- package/lib/ele-upload-list/index.cjs +7 -5
- package/lib/ele-upload-list/index.d.ts +10 -6
- package/lib/ele-upload-list/props.cjs +5 -1
- package/lib/ele-upload-list/props.d.ts +6 -2
- package/lib/ele-virtual-table/components/body-cell.d.ts +1 -1
- package/lib/ele-virtual-table/index.d.ts +1 -1
- package/package.json +1 -1
package/es/ele-menus/util.js
CHANGED
|
@@ -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(
|
|
11
|
-
if (
|
|
12
|
-
return;
|
|
13
|
-
}
|
|
14
|
-
if (isExternalLink(item.path)) {
|
|
11
|
+
function getLinkNode(path) {
|
|
12
|
+
if (isExternalLink(path)) {
|
|
15
13
|
return h("a", {
|
|
16
|
-
href:
|
|
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
|
-
|
|
19
|
+
if (path) {
|
|
20
|
+
return h(RouterLink, { to: path, class: linkClass });
|
|
21
|
+
}
|
|
26
22
|
}
|
|
27
|
-
function getNodes(icons, titles, badge,
|
|
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 (
|
|
43
|
-
nodes.push(
|
|
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
|
|
69
|
-
|
|
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 (
|
|
86
|
-
return getNodes(iNodes,
|
|
95
|
+
if (first && !tipDisabled) {
|
|
96
|
+
return getNodes(iNodes, void 0, bNode, triggerNode);
|
|
87
97
|
}
|
|
88
|
-
return getNodes(iNodes,
|
|
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
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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(
|
|
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
|
-
{
|
|
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
|
-
],
|
|
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,
|
|
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
|
|
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) &&
|
|
29
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
66
|
-
|
|
67
|
-
|
|
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
|
-
|
|
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
|
|
101
|
-
key: item.id
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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
|
]);
|