vxe-pc-ui 3.16.10 → 3.16.11
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/icon/{iconfont.1783944544969.ttf → iconfont.1784122289327.ttf} +0 -0
- package/es/icon/iconfont.1784122289327.woff +0 -0
- package/es/icon/iconfont.1784122289327.woff2 +0 -0
- package/es/icon/style.css +33 -2
- package/es/icon/style.min.css +1 -1
- package/{lib/icon/style/iconfont.1783944544969.ttf → es/iconfont.1784122289327.ttf} +0 -0
- package/es/iconfont.1784122289327.woff +0 -0
- package/es/iconfont.1784122289327.woff2 +0 -0
- package/es/language/en-US.js +3 -3
- package/es/language/hy-AM.js +3 -3
- package/es/language/zh-CN.js +3 -3
- package/es/layout-aside/src/layout-aside.js +11 -19
- package/es/layout-aside/style.css +1 -3
- package/es/layout-aside/style.min.css +1 -1
- package/es/menu/src/menu.js +308 -101
- package/es/menu/style.css +52 -4
- package/es/menu/style.min.css +1 -1
- package/es/modal/src/modal.js +2 -2
- package/es/style.css +1 -1
- package/es/style.min.css +1 -1
- package/es/tree-select/src/tree-select.js +1 -1
- package/es/ui/index.js +1 -1
- package/es/ui/src/log.js +1 -1
- package/es/vxe-icon/style.css +33 -2
- package/es/vxe-icon/style.min.css +1 -1
- package/es/vxe-layout-aside/style.css +1 -3
- package/es/vxe-layout-aside/style.min.css +1 -1
- package/es/vxe-menu/style.css +52 -4
- package/es/vxe-menu/style.min.css +1 -1
- package/lib/{iconfont.1783944544969.ttf → icon/style/iconfont.1784122289327.ttf} +0 -0
- package/lib/icon/style/iconfont.1784122289327.woff +0 -0
- package/lib/icon/style/iconfont.1784122289327.woff2 +0 -0
- package/lib/icon/style/style.css +33 -2
- package/lib/icon/style/style.min.css +33 -2
- package/{es/iconfont.1783944544969.ttf → lib/iconfont.1784122289327.ttf} +0 -0
- package/lib/iconfont.1784122289327.woff +0 -0
- package/lib/iconfont.1784122289327.woff2 +0 -0
- package/lib/index.umd.js +314 -121
- package/lib/index.umd.min.js +1 -1
- package/lib/language/en-US.js +3 -3
- package/lib/language/en-US.min.js +1 -1
- package/lib/language/en-US.umd.js +3 -3
- package/lib/language/hy-AM.js +3 -3
- package/lib/language/hy-AM.min.js +1 -1
- package/lib/language/hy-AM.umd.js +3 -3
- package/lib/language/zh-CN.js +3 -3
- package/lib/language/zh-CN.min.js +1 -1
- package/lib/language/zh-CN.umd.js +3 -3
- package/lib/layout-aside/src/layout-aside.js +12 -18
- package/lib/layout-aside/src/layout-aside.min.js +1 -1
- package/lib/layout-aside/style/style.css +1 -3
- package/lib/layout-aside/style/style.min.css +1 -1
- package/lib/menu/src/menu.js +292 -93
- package/lib/menu/src/menu.min.js +1 -1
- package/lib/menu/style/style.css +52 -4
- package/lib/menu/style/style.min.css +1 -1
- package/lib/modal/src/modal.js +2 -2
- package/lib/modal/src/modal.min.js +1 -1
- package/lib/style.css +1 -1
- package/lib/style.min.css +1 -1
- package/lib/tree-select/src/tree-select.js +1 -1
- package/lib/tree-select/src/tree-select.min.js +1 -1
- package/lib/ui/index.js +1 -1
- package/lib/ui/index.min.js +1 -1
- package/lib/ui/src/log.js +1 -1
- package/lib/ui/src/log.min.js +1 -1
- package/lib/vxe-icon/style/style.css +33 -2
- package/lib/vxe-icon/style/style.min.css +1 -1
- package/lib/vxe-layout-aside/style/style.css +1 -3
- package/lib/vxe-layout-aside/style/style.min.css +1 -1
- package/lib/vxe-menu/style/style.css +52 -4
- package/lib/vxe-menu/style/style.min.css +1 -1
- package/package.json +2 -2
- package/packages/language/en-US.ts +3 -3
- package/packages/language/hy-AM.ts +3 -3
- package/packages/language/zh-CN.ts +3 -3
- package/packages/layout-aside/src/layout-aside.ts +13 -20
- package/packages/menu/src/menu.ts +323 -111
- package/packages/modal/src/modal.ts +2 -2
- package/packages/tree-select/src/tree-select.ts +1 -1
- package/styles/components/icon.scss +33 -4
- package/styles/components/layout-aside.scss +1 -3
- package/styles/components/menu.scss +64 -1
- package/styles/icon/iconfont.ttf +0 -0
- package/styles/icon/iconfont.woff +0 -0
- package/styles/icon/iconfont.woff2 +0 -0
- package/styles/theme/dark.scss +1 -0
- package/styles/theme/light.scss +1 -0
- package/styles/variable.scss +2 -1
- package/types/components/icon.d.ts +1 -1
- package/types/components/layout-aside.d.ts +3 -1
- package/types/components/menu.d.ts +64 -17
- package/types/components/table.d.ts +11 -11
- package/types/components/toolbar.d.ts +1 -1
- package/es/icon/iconfont.1783944544969.woff +0 -0
- package/es/icon/iconfont.1783944544969.woff2 +0 -0
- package/es/iconfont.1783944544969.woff +0 -0
- package/es/iconfont.1783944544969.woff2 +0 -0
- package/lib/icon/style/iconfont.1783944544969.woff +0 -0
- package/lib/icon/style/iconfont.1783944544969.woff2 +0 -0
- package/lib/iconfont.1783944544969.woff +0 -0
- package/lib/iconfont.1783944544969.woff2 +0 -0
|
@@ -3,14 +3,12 @@
|
|
|
3
3
|
display: flex;
|
|
4
4
|
flex-direction: column;
|
|
5
5
|
flex-shrink: 0;
|
|
6
|
+
width: var(--vxe-ui-layout-aside-default-width);
|
|
6
7
|
overflow: hidden;
|
|
7
8
|
}
|
|
8
9
|
.vxe-layout-aside.is--animat {
|
|
9
10
|
transition: width 0.3s;
|
|
10
11
|
}
|
|
11
|
-
.vxe-layout-aside.is--default-width {
|
|
12
|
-
width: var(--vxe-ui-layout-aside-default-width);
|
|
13
|
-
}
|
|
14
12
|
.vxe-layout-aside.is--collapse {
|
|
15
13
|
width: var(--vxe-ui-layout-aside-collapse-width);
|
|
16
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.vxe-layout-aside{position:relative;display:flex;flex-direction:column;flex-shrink:0;overflow:hidden}.vxe-layout-aside.is--animat{transition:width .3s}.vxe-layout-aside.is--
|
|
1
|
+
.vxe-layout-aside{position:relative;display:flex;flex-direction:column;flex-shrink:0;width:var(--vxe-ui-layout-aside-default-width);overflow:hidden}.vxe-layout-aside.is--animat{transition:width .3s}.vxe-layout-aside.is--collapse{width:var(--vxe-ui-layout-aside-collapse-width)}.vxe-layout-aside.is--padding{padding:var(--vxe-ui-layout-padding-default)}.vxe-layout-aside--inner{flex-grow:1;overflow-y:auto;overflow-x:hidden;outline:0}
|
package/es/menu/src/menu.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { defineVxeComponent } from '../../ui/src/comp';
|
|
2
2
|
import XEUtils from 'xe-utils';
|
|
3
3
|
import { VxeUI, createEvent, permission, globalMixins, globalEvents, renderEmptyElement } from '../../ui';
|
|
4
|
-
import { toCssUnit } from '../../ui/src/dom';
|
|
4
|
+
import { scrollToView, toCssUnit } from '../../ui/src/dom';
|
|
5
5
|
import { getLastZIndex, nextZIndex, isEnableConf } from '../../ui/src/utils';
|
|
6
6
|
import { getSlotVNs } from '../../ui/src/vn';
|
|
7
7
|
import { createComponentLog } from '../../ui/src/log';
|
|
@@ -10,6 +10,10 @@ const { errLog } = createComponentLog('menu');
|
|
|
10
10
|
const { menus, getConfig, getIcon } = VxeUI;
|
|
11
11
|
function createInternalData() {
|
|
12
12
|
return {
|
|
13
|
+
lastActiveTime: 0,
|
|
14
|
+
menuInitMaps: {},
|
|
15
|
+
menuCacheMaps: {},
|
|
16
|
+
menuKeyMaps: {},
|
|
13
17
|
menuEffectMaps: {}
|
|
14
18
|
};
|
|
15
19
|
}
|
|
@@ -34,10 +38,19 @@ export default {
|
|
|
34
38
|
props: {
|
|
35
39
|
value: [String, Number],
|
|
36
40
|
expandAll: Boolean,
|
|
41
|
+
expandKeys: Array,
|
|
37
42
|
accordion: {
|
|
38
43
|
type: Boolean,
|
|
39
44
|
default: () => getConfig().menu.accordion
|
|
40
45
|
},
|
|
46
|
+
border: {
|
|
47
|
+
type: [Boolean, String],
|
|
48
|
+
default: () => getConfig().menu.border
|
|
49
|
+
},
|
|
50
|
+
optionProps: {
|
|
51
|
+
type: Object,
|
|
52
|
+
default: () => getConfig().menu.optionProps
|
|
53
|
+
},
|
|
41
54
|
collapsed: {
|
|
42
55
|
type: Boolean,
|
|
43
56
|
default: null
|
|
@@ -63,7 +76,46 @@ export default {
|
|
|
63
76
|
const reactData = createReactData();
|
|
64
77
|
return Object.assign(Object.assign({}, {}), { xID: XEUtils.uniqueId(), reactData });
|
|
65
78
|
},
|
|
66
|
-
computed: Object.assign(Object.assign({}, {}), {
|
|
79
|
+
computed: Object.assign(Object.assign({}, {}), { computePropsOpts() {
|
|
80
|
+
const $xeMenu = this;
|
|
81
|
+
const props = $xeMenu;
|
|
82
|
+
return Object.assign({}, getConfig().menu.optionProps, props.optionProps);
|
|
83
|
+
},
|
|
84
|
+
computeTitleField() {
|
|
85
|
+
const $xeMenu = this;
|
|
86
|
+
const propsOpts = $xeMenu.computePropsOpts;
|
|
87
|
+
return propsOpts.title || 'title';
|
|
88
|
+
},
|
|
89
|
+
computeKeyField() {
|
|
90
|
+
const $xeMenu = this;
|
|
91
|
+
const propsOpts = $xeMenu.computePropsOpts;
|
|
92
|
+
return propsOpts.name || 'name';
|
|
93
|
+
},
|
|
94
|
+
computeChildrenField() {
|
|
95
|
+
const $xeMenu = this;
|
|
96
|
+
const propsOpts = $xeMenu.computePropsOpts;
|
|
97
|
+
return propsOpts.children || 'children';
|
|
98
|
+
},
|
|
99
|
+
computeLinkUrlField() {
|
|
100
|
+
const $xeMenu = this;
|
|
101
|
+
const propsOpts = $xeMenu.computePropsOpts;
|
|
102
|
+
return propsOpts.linkUrl || 'href';
|
|
103
|
+
},
|
|
104
|
+
computeRouterLinkField() {
|
|
105
|
+
const $xeMenu = this;
|
|
106
|
+
const propsOpts = $xeMenu.computePropsOpts;
|
|
107
|
+
return propsOpts.routerLink || 'routerLink';
|
|
108
|
+
},
|
|
109
|
+
computeCurrBorder() {
|
|
110
|
+
const $xeMenu = this;
|
|
111
|
+
const props = $xeMenu;
|
|
112
|
+
const { border } = props;
|
|
113
|
+
if (border) {
|
|
114
|
+
return border === true ? 'first-group' : border;
|
|
115
|
+
}
|
|
116
|
+
return '';
|
|
117
|
+
},
|
|
118
|
+
computeMenuOpts() {
|
|
67
119
|
const $xeMenu = this;
|
|
68
120
|
const props = $xeMenu;
|
|
69
121
|
return Object.assign({}, getConfig().tree.menuConfig, props.menuConfig);
|
|
@@ -80,14 +132,14 @@ export default {
|
|
|
80
132
|
}
|
|
81
133
|
return false;
|
|
82
134
|
},
|
|
83
|
-
|
|
135
|
+
computeVarStyle() {
|
|
84
136
|
const $xeMenu = this;
|
|
85
137
|
const $xeLayoutAside = $xeMenu.$xeLayoutAside;
|
|
86
|
-
let collapseWidth = '';
|
|
87
138
|
if ($xeLayoutAside) {
|
|
88
|
-
|
|
139
|
+
const asideVarStyle = $xeLayoutAside.computeVarStyle;
|
|
140
|
+
return asideVarStyle;
|
|
89
141
|
}
|
|
90
|
-
return
|
|
142
|
+
return {};
|
|
91
143
|
},
|
|
92
144
|
computeCollapseEnterWidth() {
|
|
93
145
|
const $xeMenu = this;
|
|
@@ -132,6 +184,77 @@ export default {
|
|
|
132
184
|
}
|
|
133
185
|
return [];
|
|
134
186
|
},
|
|
187
|
+
setExpandByMenuKey(menuKeys, expanded) {
|
|
188
|
+
const $xeMenu = this;
|
|
189
|
+
const internalData = $xeMenu.internalData;
|
|
190
|
+
const { menuKeyMaps, menuInitMaps } = internalData;
|
|
191
|
+
if (menuKeys) {
|
|
192
|
+
if (!XEUtils.isArray(menuKeys)) {
|
|
193
|
+
menuKeys = [menuKeys];
|
|
194
|
+
}
|
|
195
|
+
menuKeys.forEach((mKey) => {
|
|
196
|
+
const menuItem = menuKeyMaps[mKey];
|
|
197
|
+
if (menuItem) {
|
|
198
|
+
if (expanded) {
|
|
199
|
+
menuInitMaps[menuItem.itemId] = true;
|
|
200
|
+
}
|
|
201
|
+
menuItem.isExpand = !!expanded;
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
return $xeMenu.$nextTick();
|
|
206
|
+
},
|
|
207
|
+
clearAllExpandMenu() {
|
|
208
|
+
const $xeMenu = this;
|
|
209
|
+
const reactData = $xeMenu.reactData;
|
|
210
|
+
const internalData = $xeMenu.internalData;
|
|
211
|
+
const { menuList } = reactData;
|
|
212
|
+
XEUtils.eachTree(menuList, (item) => {
|
|
213
|
+
item.isExpand = false;
|
|
214
|
+
}, { children: 'childList' });
|
|
215
|
+
internalData.menuInitMaps = {};
|
|
216
|
+
return $xeMenu.$nextTick();
|
|
217
|
+
},
|
|
218
|
+
handleScrollToView(itemId) {
|
|
219
|
+
const $xeMenu = this;
|
|
220
|
+
const el = $xeMenu.$refs.refElem;
|
|
221
|
+
const nemuEl = el ? el.querySelector(`.vxe-menu--item-wrapper[data-menu-id="${itemId}"]`) : null;
|
|
222
|
+
if (nemuEl) {
|
|
223
|
+
scrollToView(nemuEl);
|
|
224
|
+
return true;
|
|
225
|
+
}
|
|
226
|
+
return false;
|
|
227
|
+
},
|
|
228
|
+
scrollToMenuKey(menuKey) {
|
|
229
|
+
const $xeMenu = this;
|
|
230
|
+
const internalData = $xeMenu.internalData;
|
|
231
|
+
const { menuKeyMaps } = internalData;
|
|
232
|
+
const menuItem = menuKeyMaps[menuKey];
|
|
233
|
+
if (!menuItem) {
|
|
234
|
+
return $xeMenu.$nextTick();
|
|
235
|
+
}
|
|
236
|
+
const { itemId } = menuItem;
|
|
237
|
+
if ($xeMenu.handleScrollToView(itemId)) {
|
|
238
|
+
return $xeMenu.$nextTick();
|
|
239
|
+
}
|
|
240
|
+
return $xeMenu.$nextTick().then(() => {
|
|
241
|
+
$xeMenu.handleScrollToView(itemId);
|
|
242
|
+
});
|
|
243
|
+
},
|
|
244
|
+
scrollToActiveMenu() {
|
|
245
|
+
const $xeMenu = this;
|
|
246
|
+
const reactData = $xeMenu.reactData;
|
|
247
|
+
const { activeName } = reactData;
|
|
248
|
+
if (activeName) {
|
|
249
|
+
return $xeMenu.scrollToMenuKey(activeName);
|
|
250
|
+
}
|
|
251
|
+
return $xeMenu.$nextTick().then(() => {
|
|
252
|
+
const { activeName } = reactData;
|
|
253
|
+
if (activeName) {
|
|
254
|
+
return $xeMenu.scrollToMenuKey(activeName);
|
|
255
|
+
}
|
|
256
|
+
});
|
|
257
|
+
},
|
|
135
258
|
getMenuTitle(item) {
|
|
136
259
|
return `${item.title || item.name}`;
|
|
137
260
|
},
|
|
@@ -145,13 +268,16 @@ export default {
|
|
|
145
268
|
updateActiveMenu(isDefExpand) {
|
|
146
269
|
const $xeMenu = this;
|
|
147
270
|
const reactData = $xeMenu.reactData;
|
|
271
|
+
const internalData = $xeMenu.internalData;
|
|
148
272
|
const { activeName } = reactData;
|
|
273
|
+
const { menuInitMaps } = internalData;
|
|
149
274
|
XEUtils.eachTree(reactData.menuList, (item, index, items, path, parent, nodes) => {
|
|
150
275
|
if (item.itemKey === activeName) {
|
|
151
276
|
nodes.forEach(obj => {
|
|
152
277
|
obj.isActive = true;
|
|
153
278
|
if (isDefExpand) {
|
|
154
279
|
obj.isExpand = true;
|
|
280
|
+
menuInitMaps[obj.itemId] = true;
|
|
155
281
|
}
|
|
156
282
|
});
|
|
157
283
|
item.isExactActive = true;
|
|
@@ -166,11 +292,62 @@ export default {
|
|
|
166
292
|
const $xeMenu = this;
|
|
167
293
|
const props = $xeMenu;
|
|
168
294
|
const reactData = $xeMenu.reactData;
|
|
169
|
-
const
|
|
170
|
-
|
|
171
|
-
|
|
295
|
+
const internalData = $xeMenu.internalData;
|
|
296
|
+
const { options, expandAll, expandKeys } = props;
|
|
297
|
+
const muInitMaps = {};
|
|
298
|
+
const titleField = $xeMenu.computeTitleField;
|
|
299
|
+
const keyField = $xeMenu.computeKeyField;
|
|
300
|
+
const childrenField = $xeMenu.computeChildrenField;
|
|
301
|
+
const linkUrlField = $xeMenu.computeLinkUrlField;
|
|
302
|
+
const routerLinkField = $xeMenu.computeRouterLinkField;
|
|
303
|
+
const defaultExpandMaps = {};
|
|
304
|
+
if (expandKeys) {
|
|
305
|
+
expandKeys.forEach(key => {
|
|
306
|
+
defaultExpandMaps[key] = true;
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
const muCacheMaps = {};
|
|
310
|
+
const muKeyMaps = {};
|
|
311
|
+
reactData.menuList = XEUtils.mapTree(options, (item, index, items, path, parentItem) => {
|
|
312
|
+
const itemId = ++nemuUniqueKey;
|
|
313
|
+
const itemKey = item[keyField] || path.join(',');
|
|
314
|
+
const childList = item[childrenField];
|
|
315
|
+
const hasChild = childList && childList.length > 0;
|
|
316
|
+
const isExpand = hasChild ? (XEUtils.isBoolean(item.expanded) ? item.expanded : (defaultExpandMaps[itemKey] || !!expandAll)) : false;
|
|
317
|
+
if (isExpand) {
|
|
318
|
+
muInitMaps[itemId] = true;
|
|
319
|
+
}
|
|
320
|
+
const objItem = {
|
|
321
|
+
itemConf: item,
|
|
322
|
+
title: item[titleField],
|
|
323
|
+
name: item[keyField],
|
|
324
|
+
icon: item.icon,
|
|
325
|
+
linkUrl: item[linkUrlField],
|
|
326
|
+
linkTarget: item.linkTarget,
|
|
327
|
+
routerLink: item[routerLinkField],
|
|
328
|
+
permissionCode: item.permissionCode,
|
|
329
|
+
children: childList,
|
|
330
|
+
slots: item.slots,
|
|
331
|
+
parentKey: parentItem ? (parentItem.name || path.slice(0, path.length - 1).join(',')) : '',
|
|
332
|
+
level: path.length,
|
|
333
|
+
itemId,
|
|
334
|
+
itemKey,
|
|
335
|
+
isExactActive: false,
|
|
336
|
+
isActive: false,
|
|
337
|
+
isExpand,
|
|
338
|
+
hasChild,
|
|
339
|
+
childList: []
|
|
340
|
+
};
|
|
341
|
+
if (muKeyMaps[itemKey]) {
|
|
342
|
+
errLog('vxe.error.repeatKey', [keyField, item[keyField]]);
|
|
343
|
+
}
|
|
344
|
+
muCacheMaps[itemId] = objItem;
|
|
345
|
+
muKeyMaps[itemKey] = objItem;
|
|
172
346
|
return objItem;
|
|
173
347
|
}, { children: 'children', mapChildren: 'childList' });
|
|
348
|
+
internalData.menuInitMaps = muInitMaps;
|
|
349
|
+
internalData.menuCacheMaps = muCacheMaps;
|
|
350
|
+
internalData.menuKeyMaps = muKeyMaps;
|
|
174
351
|
},
|
|
175
352
|
updateCollapseStyle() {
|
|
176
353
|
const $xeMenu = this;
|
|
@@ -179,10 +356,7 @@ export default {
|
|
|
179
356
|
const { collapseFixed } = props;
|
|
180
357
|
if (collapseFixed) {
|
|
181
358
|
$xeMenu.$nextTick(() => {
|
|
182
|
-
const { isEnterCollapse } = reactData;
|
|
183
359
|
const isCollapsed = $xeMenu.computeIsCollapsed;
|
|
184
|
-
const collapseEnterWidth = $xeMenu.computeCollapseEnterWidth;
|
|
185
|
-
const collapseWidth = $xeMenu.computeCollapseWidth;
|
|
186
360
|
const el = $xeMenu.$refs.refElem;
|
|
187
361
|
if (el) {
|
|
188
362
|
const clientRect = el.getBoundingClientRect();
|
|
@@ -192,7 +366,6 @@ export default {
|
|
|
192
366
|
top: toCssUnit(clientRect.top),
|
|
193
367
|
left: toCssUnit(clientRect.left),
|
|
194
368
|
height: toCssUnit(parentNode.clientHeight),
|
|
195
|
-
width: isEnterCollapse ? (collapseEnterWidth ? toCssUnit(collapseEnterWidth) : '') : (collapseWidth ? toCssUnit(collapseWidth) : ''),
|
|
196
369
|
zIndex: reactData.collapseZindex
|
|
197
370
|
}
|
|
198
371
|
: {};
|
|
@@ -229,7 +402,7 @@ export default {
|
|
|
229
402
|
const props = $xeMenu;
|
|
230
403
|
const internalData = $xeMenu.internalData;
|
|
231
404
|
const { accordion } = props;
|
|
232
|
-
const { menuEffectMaps } = internalData;
|
|
405
|
+
const { menuEffectMaps, menuInitMaps } = internalData;
|
|
233
406
|
const { itemId, hasChild, isExpand } = item;
|
|
234
407
|
const isCollapsed = $xeMenu.computeIsCollapsed;
|
|
235
408
|
const expanded = !isExpand;
|
|
@@ -247,6 +420,7 @@ export default {
|
|
|
247
420
|
});
|
|
248
421
|
}
|
|
249
422
|
item.isExpand = expanded;
|
|
423
|
+
menuInitMaps[itemId] = true;
|
|
250
424
|
const wrapperEl = isCollapsed ? $xeMenu.$refs.refCollapseElem : $xeMenu.$refs.refElem;
|
|
251
425
|
if (wrapperEl) {
|
|
252
426
|
const nemuEl = wrapperEl.querySelector(`.vxe-menu--item-wrapper[data-menu-id="${itemId}"]`);
|
|
@@ -282,7 +456,7 @@ export default {
|
|
|
282
456
|
const menuOpts = $xeMenu.computeMenuOpts;
|
|
283
457
|
if (menuConfig ? isEnableConf(menuOpts) : menuOpts.enabled) {
|
|
284
458
|
const { options, visibleMethod } = menuOpts;
|
|
285
|
-
if (!visibleMethod || visibleMethod({ $menu: $xeMenu, options, currentMenu: item })) {
|
|
459
|
+
if (!visibleMethod || visibleMethod({ $menu: $xeMenu, options, currentMenu: item, currentOption: item.itemConf })) {
|
|
286
460
|
if (VxeUI.contextMenu) {
|
|
287
461
|
VxeUI.contextMenu.openByEvent(evnt, {
|
|
288
462
|
options,
|
|
@@ -291,7 +465,7 @@ export default {
|
|
|
291
465
|
const { option } = eventParams;
|
|
292
466
|
const gMenuOpts = menus.get(option.code);
|
|
293
467
|
const mmMethod = gMenuOpts ? gMenuOpts.menuMenuMethod : null;
|
|
294
|
-
const params = { menu: option, currentMenu: item, $event: evnt, $menu: $xeMenu };
|
|
468
|
+
const params = { menu: option, currentMenu: item, currentOption: item.itemConf, $event: evnt, $menu: $xeMenu };
|
|
295
469
|
if (mmMethod) {
|
|
296
470
|
mmMethod(params, evnt);
|
|
297
471
|
}
|
|
@@ -306,9 +480,13 @@ export default {
|
|
|
306
480
|
},
|
|
307
481
|
handleClickMenu(evnt, item, itemList) {
|
|
308
482
|
const $xeMenu = this;
|
|
309
|
-
const
|
|
310
|
-
|
|
483
|
+
const reactData = $xeMenu.reactData;
|
|
484
|
+
const internalData = $xeMenu.internalData;
|
|
485
|
+
const { itemKey, linkUrl, routerLink, hasChild } = item;
|
|
486
|
+
if (linkUrl || routerLink) {
|
|
311
487
|
$xeMenu.emitModel(itemKey);
|
|
488
|
+
reactData.isEnterCollapse = false;
|
|
489
|
+
internalData.lastActiveTime = Date.now();
|
|
312
490
|
}
|
|
313
491
|
else {
|
|
314
492
|
if (hasChild) {
|
|
@@ -316,10 +494,14 @@ export default {
|
|
|
316
494
|
}
|
|
317
495
|
else {
|
|
318
496
|
$xeMenu.emitModel(itemKey);
|
|
497
|
+
reactData.isEnterCollapse = false;
|
|
498
|
+
internalData.lastActiveTime = Date.now();
|
|
319
499
|
}
|
|
320
500
|
}
|
|
321
501
|
const params = {
|
|
322
502
|
currentMenu: item,
|
|
503
|
+
currentOption: item.itemConf,
|
|
504
|
+
option: item.itemConf,
|
|
323
505
|
// 已废弃
|
|
324
506
|
menu: item
|
|
325
507
|
};
|
|
@@ -328,29 +510,15 @@ export default {
|
|
|
328
510
|
handleMenuMouseenter() {
|
|
329
511
|
const $xeMenu = this;
|
|
330
512
|
const reactData = $xeMenu.reactData;
|
|
331
|
-
const
|
|
332
|
-
const
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
});
|
|
336
|
-
reactData.isEnterCollapse = true;
|
|
337
|
-
},
|
|
338
|
-
handleMenuMouseover() {
|
|
339
|
-
const $xeMenu = this;
|
|
340
|
-
const reactData = $xeMenu.reactData;
|
|
341
|
-
const { isEnterCollapse } = reactData;
|
|
342
|
-
if (!isEnterCollapse) {
|
|
343
|
-
$xeMenu.handleMenuMouseenter();
|
|
513
|
+
const internalData = $xeMenu.internalData;
|
|
514
|
+
const { lastActiveTime } = internalData;
|
|
515
|
+
if (lastActiveTime < Date.now() - 500) {
|
|
516
|
+
reactData.isEnterCollapse = true;
|
|
344
517
|
}
|
|
345
518
|
},
|
|
346
519
|
handleMenuMouseleave() {
|
|
347
520
|
const $xeMenu = this;
|
|
348
521
|
const reactData = $xeMenu.reactData;
|
|
349
|
-
const { collapseStyle } = reactData;
|
|
350
|
-
const el = $xeMenu.$refs.refElem;
|
|
351
|
-
reactData.collapseStyle = Object.assign({}, collapseStyle, {
|
|
352
|
-
width: el ? toCssUnit(el.offsetWidth) : ''
|
|
353
|
-
});
|
|
354
522
|
reactData.isEnterCollapse = false;
|
|
355
523
|
},
|
|
356
524
|
//
|
|
@@ -369,9 +537,9 @@ export default {
|
|
|
369
537
|
const isCollapsed = $xeMenu.computeIsCollapsed;
|
|
370
538
|
const params = {
|
|
371
539
|
currentMenu: item,
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
540
|
+
currentOption: item.itemConf,
|
|
541
|
+
option: item.itemConf,
|
|
542
|
+
collapsed: isCollapsed
|
|
375
543
|
};
|
|
376
544
|
return [
|
|
377
545
|
optionSlot
|
|
@@ -414,70 +582,87 @@ export default {
|
|
|
414
582
|
renderDefaultChildren(h, item, itemList) {
|
|
415
583
|
const $xeMenu = this;
|
|
416
584
|
const reactData = $xeMenu.reactData;
|
|
417
|
-
const
|
|
585
|
+
const internalData = $xeMenu.internalData;
|
|
586
|
+
const { itemId, itemKey, level, hasChild, isActive, isExactActive, isExpand, linkUrl, routerLink, linkTarget, childList } = item;
|
|
418
587
|
const { isEnterCollapse } = reactData;
|
|
588
|
+
const { menuInitMaps } = internalData;
|
|
419
589
|
const isCollapsed = $xeMenu.computeIsCollapsed;
|
|
420
590
|
if (item.permissionCode) {
|
|
421
591
|
if (!permission.checkVisible(item.permissionCode)) {
|
|
422
592
|
return renderEmptyElement($xeMenu);
|
|
423
593
|
}
|
|
424
594
|
}
|
|
595
|
+
const isExpandChild = (!isCollapsed || isEnterCollapse) && isExpand;
|
|
596
|
+
const linkOns = {
|
|
597
|
+
contextmenu(evnt) {
|
|
598
|
+
$xeMenu.handleContextmenuEvent(evnt, item);
|
|
599
|
+
},
|
|
600
|
+
click(evnt) {
|
|
601
|
+
$xeMenu.handleClickMenu(evnt, item, itemList);
|
|
602
|
+
}
|
|
603
|
+
};
|
|
425
604
|
return h('div', {
|
|
426
605
|
key: itemKey,
|
|
427
606
|
class: ['vxe-menu--item-wrapper', `vxe-menu--item-level${level}`, {
|
|
607
|
+
'has--child': hasChild,
|
|
428
608
|
'is--exact-active': isExactActive,
|
|
429
609
|
'is--active': isActive,
|
|
430
|
-
'is--expand':
|
|
610
|
+
'is--expand': isExpandChild
|
|
431
611
|
}],
|
|
432
612
|
attrs: {
|
|
433
613
|
'data-menu-id': itemId
|
|
434
614
|
}
|
|
435
615
|
}, [
|
|
436
|
-
|
|
437
|
-
? h('
|
|
438
|
-
class: 'vxe-menu--item-link',
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
616
|
+
linkUrl
|
|
617
|
+
? h('a', {
|
|
618
|
+
class: 'vxe-menu--item-link is--link',
|
|
619
|
+
attrs: {
|
|
620
|
+
href: linkUrl,
|
|
621
|
+
target: linkTarget
|
|
442
622
|
},
|
|
443
|
-
on:
|
|
444
|
-
contextmenu(evnt) {
|
|
445
|
-
$xeMenu.handleContextmenuEvent(evnt, item);
|
|
446
|
-
},
|
|
447
|
-
click(evnt) {
|
|
448
|
-
$xeMenu.handleClickMenu(evnt, item, itemList);
|
|
449
|
-
}
|
|
450
|
-
}
|
|
623
|
+
on: linkOns
|
|
451
624
|
}, $xeMenu.renderMenuTitle(h, item, itemList))
|
|
452
|
-
:
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
625
|
+
: (routerLink
|
|
626
|
+
? h('router-link', {
|
|
627
|
+
class: 'vxe-menu--item-link is--router',
|
|
628
|
+
props: {
|
|
629
|
+
custom: true,
|
|
630
|
+
to: routerLink,
|
|
631
|
+
target: linkTarget
|
|
457
632
|
},
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
633
|
+
on: linkOns
|
|
634
|
+
}, $xeMenu.renderMenuTitle(h, item, itemList))
|
|
635
|
+
: h('div', {
|
|
636
|
+
class: 'vxe-menu--item-link is--default',
|
|
637
|
+
on: linkOns
|
|
638
|
+
}, $xeMenu.renderMenuTitle(h, item, itemList))),
|
|
463
639
|
hasChild
|
|
464
640
|
? h('div', {
|
|
465
641
|
class: 'vxe-menu--item-group'
|
|
466
|
-
}, childList.map(child => $xeMenu.renderDefaultChildren(h, child, childList)))
|
|
642
|
+
}, isExpandChild || menuInitMaps[itemId] ? childList.map(child => $xeMenu.renderDefaultChildren(h, child, childList)) : [])
|
|
467
643
|
: renderEmptyElement($xeMenu)
|
|
468
644
|
]);
|
|
469
645
|
},
|
|
470
646
|
renderCollapseChildren(h, item, itemList) {
|
|
471
647
|
const $xeMenu = this;
|
|
472
|
-
const { itemId, itemKey, level, hasChild, isActive, isExactActive, routerLink, childList } = item;
|
|
648
|
+
const { itemId, itemKey, level, hasChild, isActive, isExactActive, routerLink, linkUrl, linkTarget, childList } = item;
|
|
473
649
|
if (item.permissionCode) {
|
|
474
650
|
if (!permission.checkVisible(item.permissionCode)) {
|
|
475
651
|
return renderEmptyElement($xeMenu);
|
|
476
652
|
}
|
|
477
653
|
}
|
|
654
|
+
const linkOns = {
|
|
655
|
+
contextmenu(evnt) {
|
|
656
|
+
$xeMenu.handleContextmenuEvent(evnt, item);
|
|
657
|
+
},
|
|
658
|
+
click(evnt) {
|
|
659
|
+
$xeMenu.handleClickMenu(evnt, item, itemList);
|
|
660
|
+
}
|
|
661
|
+
};
|
|
478
662
|
return h('div', {
|
|
479
663
|
key: itemKey,
|
|
480
664
|
class: ['vxe-menu--item-wrapper', `vxe-menu--item-level${level}`, {
|
|
665
|
+
'has--child': hasChild,
|
|
481
666
|
'is--exact-active': isExactActive,
|
|
482
667
|
'is--active': isActive
|
|
483
668
|
}],
|
|
@@ -485,33 +670,29 @@ export default {
|
|
|
485
670
|
'data-menu-id': itemId
|
|
486
671
|
}
|
|
487
672
|
}, [
|
|
488
|
-
|
|
489
|
-
? h('
|
|
490
|
-
class: 'vxe-menu--item-link',
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
673
|
+
linkUrl
|
|
674
|
+
? h('a', {
|
|
675
|
+
class: 'vxe-menu--item-link is--link',
|
|
676
|
+
attrs: {
|
|
677
|
+
href: linkUrl,
|
|
678
|
+
target: linkTarget
|
|
494
679
|
},
|
|
495
|
-
on:
|
|
496
|
-
contextmenu(evnt) {
|
|
497
|
-
$xeMenu.handleContextmenuEvent(evnt, item);
|
|
498
|
-
},
|
|
499
|
-
click(evnt) {
|
|
500
|
-
$xeMenu.handleClickMenu(evnt, item, itemList);
|
|
501
|
-
}
|
|
502
|
-
}
|
|
680
|
+
on: linkOns
|
|
503
681
|
}, $xeMenu.renderMenuTitle(h, item, itemList))
|
|
504
|
-
:
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
682
|
+
: (routerLink
|
|
683
|
+
? h('router-link', {
|
|
684
|
+
class: 'vxe-menu--item-link is--router',
|
|
685
|
+
props: {
|
|
686
|
+
custom: true,
|
|
687
|
+
to: routerLink,
|
|
688
|
+
target: linkTarget
|
|
509
689
|
},
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
690
|
+
on: linkOns
|
|
691
|
+
}, $xeMenu.renderMenuTitle(h, item, itemList))
|
|
692
|
+
: h('div', {
|
|
693
|
+
class: 'vxe-menu--item-link is--default',
|
|
694
|
+
on: linkOns
|
|
695
|
+
}, $xeMenu.renderMenuTitle(h, item, itemList))),
|
|
515
696
|
hasChild
|
|
516
697
|
? h('div', {
|
|
517
698
|
class: 'vxe-menu--item-group'
|
|
@@ -522,30 +703,46 @@ export default {
|
|
|
522
703
|
renderVN(h) {
|
|
523
704
|
const $xeMenu = this;
|
|
524
705
|
const props = $xeMenu;
|
|
706
|
+
const slots = $xeMenu.$scopedSlots;
|
|
525
707
|
const reactData = $xeMenu.reactData;
|
|
526
708
|
const { loading, collapseFixed } = props;
|
|
527
709
|
const { initialized, menuList, collapseStyle, isEnterCollapse } = reactData;
|
|
528
710
|
const vSize = $xeMenu.computeSize;
|
|
529
711
|
const isCollapsed = $xeMenu.computeIsCollapsed;
|
|
712
|
+
const currBorder = $xeMenu.computeCurrBorder;
|
|
713
|
+
const varStyle = $xeMenu.computeVarStyle;
|
|
714
|
+
const headerSlot = slots.header;
|
|
715
|
+
const footerSlot = slots.footer;
|
|
530
716
|
let ons = {};
|
|
531
717
|
if (collapseFixed) {
|
|
532
718
|
ons = {
|
|
533
719
|
mouseenter: $xeMenu.handleMenuMouseenter,
|
|
534
|
-
mouseover: $xeMenu.handleMenuMouseover,
|
|
535
720
|
mouseleave: $xeMenu.handleMenuMouseleave
|
|
536
721
|
};
|
|
537
722
|
}
|
|
723
|
+
const stParams = { collapsed: isCollapsed };
|
|
538
724
|
return h('div', {
|
|
539
725
|
ref: 'refElem',
|
|
540
726
|
class: ['vxe-menu', {
|
|
727
|
+
[`border--${currBorder}`]: currBorder,
|
|
541
728
|
[`size--${vSize}`]: vSize,
|
|
542
729
|
'is--collapsed': isCollapsed,
|
|
543
730
|
'is--loading': loading
|
|
544
731
|
}]
|
|
545
732
|
}, [
|
|
733
|
+
headerSlot
|
|
734
|
+
? h('div', {
|
|
735
|
+
class: 'vxe-menu--header'
|
|
736
|
+
}, headerSlot(stParams))
|
|
737
|
+
: renderEmptyElement($xeMenu),
|
|
546
738
|
h('div', {
|
|
547
|
-
class: 'vxe-menu--
|
|
739
|
+
class: 'vxe-menu--body'
|
|
548
740
|
}, menuList.map(child => isCollapsed ? $xeMenu.renderCollapseChildren(h, child, menuList) : $xeMenu.renderDefaultChildren(h, child, menuList))),
|
|
741
|
+
footerSlot
|
|
742
|
+
? h('div', {
|
|
743
|
+
class: 'vxe-menu--footer'
|
|
744
|
+
}, footerSlot(stParams))
|
|
745
|
+
: renderEmptyElement($xeMenu),
|
|
549
746
|
initialized
|
|
550
747
|
? h('div', {
|
|
551
748
|
ref: 'refCollapseElem',
|
|
@@ -555,15 +752,25 @@ export default {
|
|
|
555
752
|
'is--enter': isEnterCollapse,
|
|
556
753
|
'is--loading': loading
|
|
557
754
|
}],
|
|
558
|
-
style: collapseStyle,
|
|
755
|
+
style: Object.assign({}, varStyle, collapseStyle),
|
|
559
756
|
on: ons
|
|
560
|
-
},
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
757
|
+
}, isCollapsed
|
|
758
|
+
? [
|
|
759
|
+
headerSlot
|
|
760
|
+
? h('div', {
|
|
761
|
+
class: 'vxe-menu--header'
|
|
762
|
+
}, headerSlot(stParams))
|
|
763
|
+
: renderEmptyElement($xeMenu),
|
|
764
|
+
h('div', {
|
|
765
|
+
class: 'vxe-menu--body'
|
|
766
|
+
}, menuList.map(child => $xeMenu.renderDefaultChildren(h, child, menuList))),
|
|
767
|
+
footerSlot
|
|
768
|
+
? h('div', {
|
|
769
|
+
class: 'vxe-menu--footer'
|
|
770
|
+
}, footerSlot(stParams))
|
|
771
|
+
: renderEmptyElement($xeMenu)
|
|
772
|
+
]
|
|
773
|
+
: [])
|
|
567
774
|
: renderEmptyElement($xeMenu),
|
|
568
775
|
/**
|
|
569
776
|
* 加载中
|