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/lib/ele-menus/util.cjs
CHANGED
|
@@ -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(
|
|
13
|
-
if (
|
|
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:
|
|
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
|
-
|
|
21
|
+
if (path) {
|
|
22
|
+
return vue.h(vueRouter.RouterLink, { to: path, class: linkClass });
|
|
23
|
+
}
|
|
28
24
|
}
|
|
29
|
-
function getNodes(icons2, titles, badge,
|
|
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 (
|
|
45
|
-
nodes.push(
|
|
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
|
|
71
|
-
|
|
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 (
|
|
88
|
-
return getNodes(iNodes,
|
|
97
|
+
if (first && !tipDisabled) {
|
|
98
|
+
return getNodes(iNodes, void 0, bNode, triggerNode);
|
|
89
99
|
}
|
|
90
|
-
return getNodes(iNodes,
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
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;
|
package/lib/ele-menus/util.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { VNode, Slot } from 'vue';
|
|
2
|
-
import type { MenuItem, MenuTheme, PopupMenuTheme, PopupColorful, MenuResult, MenuEllipsisOption,
|
|
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(
|
|
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
|
|
23
|
+
* @param trigger 子菜单项事件触发元素节点
|
|
22
24
|
*/
|
|
23
|
-
export declare function getNodes(icons?: VNode[], titles?: VNode[], badge?: VNode | null,
|
|
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?:
|
|
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(
|
|
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
|
-
{
|
|
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
|
-
],
|
|
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
|
|
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;
|