vxe-pc-ui 4.16.9 → 4.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/dist/all.esm.js +284 -147
- package/dist/style.css +1 -1
- package/dist/style.min.css +1 -1
- package/es/checkbox/style.css +1 -0
- package/es/checkbox/style.min.css +1 -1
- package/es/icon/{iconfont.1783939831164.ttf → iconfont.1784122303243.ttf} +0 -0
- package/es/icon/iconfont.1784122303243.woff +0 -0
- package/es/icon/iconfont.1784122303243.woff2 +0 -0
- package/es/icon/style.css +33 -2
- package/es/icon/style.min.css +1 -1
- package/{lib/icon/style/iconfont.1783939831164.ttf → es/iconfont.1784122303243.ttf} +0 -0
- package/es/iconfont.1784122303243.woff +0 -0
- package/es/iconfont.1784122303243.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 +13 -20
- package/es/layout-aside/style.css +1 -3
- package/es/layout-aside/style.min.css +1 -1
- package/es/menu/src/menu.js +265 -121
- package/es/menu/style.css +51 -3
- package/es/menu/style.min.css +1 -1
- package/es/modal/src/modal.js +2 -2
- package/es/radio/style.css +1 -0
- package/es/radio/style.min.css +1 -1
- 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-checkbox/style.css +1 -0
- package/es/vxe-checkbox/style.min.css +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 +51 -3
- package/es/vxe-menu/style.min.css +1 -1
- package/es/vxe-radio/style.css +1 -0
- package/es/vxe-radio/style.min.css +1 -1
- package/lib/checkbox/style/style.css +1 -0
- package/lib/checkbox/style/style.min.css +1 -1
- package/lib/{iconfont.1783939831164.ttf → icon/style/iconfont.1784122303243.ttf} +0 -0
- package/lib/icon/style/iconfont.1784122303243.woff +0 -0
- package/lib/icon/style/iconfont.1784122303243.woff2 +0 -0
- package/lib/icon/style/style.css +33 -2
- package/lib/icon/style/style.min.css +33 -2
- package/{es/iconfont.1783939831164.ttf → lib/iconfont.1784122303243.ttf} +0 -0
- package/lib/iconfont.1784122303243.woff +0 -0
- package/lib/iconfont.1784122303243.woff2 +0 -0
- package/lib/index.umd.js +302 -136
- 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 +283 -116
- package/lib/menu/src/menu.min.js +1 -1
- package/lib/menu/style/style.css +51 -3
- 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/radio/style/style.css +1 -0
- package/lib/radio/style/style.min.css +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-checkbox/style/style.css +1 -0
- package/lib/vxe-checkbox/style/style.min.css +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 +51 -3
- package/lib/vxe-menu/style/style.min.css +1 -1
- package/lib/vxe-radio/style/style.css +1 -0
- package/lib/vxe-radio/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 +15 -21
- package/packages/menu/src/menu.ts +302 -132
- package/packages/modal/src/modal.ts +3 -3
- package/packages/tree-select/src/tree-select.ts +1 -1
- package/styles/components/checkbox.scss +1 -0
- package/styles/components/icon.scss +33 -4
- package/styles/components/layout-aside.scss +1 -3
- package/styles/components/menu.scss +64 -1
- package/styles/components/radio.scss +1 -0
- package/styles/icon/iconfont.ttf +0 -0
- package/styles/icon/iconfont.woff +0 -0
- package/styles/icon/iconfont.woff2 +0 -0
- package/styles/theme/base.scss +1 -1
- 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 +5 -4
- package/types/components/menu.d.ts +65 -17
- package/types/components/modal.d.ts +2 -2
- package/types/components/table.d.ts +11 -11
- package/types/components/toolbar.d.ts +1 -1
- package/es/icon/iconfont.1783939831164.woff +0 -0
- package/es/icon/iconfont.1783939831164.woff2 +0 -0
- package/es/iconfont.1783939831164.woff +0 -0
- package/es/iconfont.1783939831164.woff2 +0 -0
- package/lib/icon/style/iconfont.1783939831164.woff +0 -0
- package/lib/icon/style/iconfont.1783939831164.woff2 +0 -0
- package/lib/iconfont.1783939831164.woff +0 -0
- package/lib/iconfont.1783939831164.woff2 +0 -0
package/lib/menu/src/menu.js
CHANGED
|
@@ -24,6 +24,10 @@ const {
|
|
|
24
24
|
} = _ui.VxeUI;
|
|
25
25
|
function createInternalData() {
|
|
26
26
|
return {
|
|
27
|
+
lastActiveTime: 0,
|
|
28
|
+
menuInitMaps: {},
|
|
29
|
+
menuCacheMaps: {},
|
|
30
|
+
menuKeyMaps: {},
|
|
27
31
|
menuEffectMaps: {}
|
|
28
32
|
};
|
|
29
33
|
}
|
|
@@ -44,10 +48,19 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
44
48
|
props: {
|
|
45
49
|
modelValue: [String, Number],
|
|
46
50
|
expandAll: Boolean,
|
|
51
|
+
expandKeys: Array,
|
|
47
52
|
accordion: {
|
|
48
53
|
type: Boolean,
|
|
49
54
|
default: () => getConfig().menu.accordion
|
|
50
55
|
},
|
|
56
|
+
border: {
|
|
57
|
+
type: [Boolean, String],
|
|
58
|
+
default: () => getConfig().menu.border
|
|
59
|
+
},
|
|
60
|
+
optionProps: {
|
|
61
|
+
type: Object,
|
|
62
|
+
default: () => getConfig().menu.optionProps
|
|
63
|
+
},
|
|
51
64
|
collapsed: {
|
|
52
65
|
type: Boolean,
|
|
53
66
|
default: null
|
|
@@ -85,6 +98,38 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
85
98
|
const computeMenuOpts = (0, _vue.computed)(() => {
|
|
86
99
|
return Object.assign({}, getConfig().menu.menuConfig, props.menuConfig);
|
|
87
100
|
});
|
|
101
|
+
const computePropsOpts = (0, _vue.computed)(() => {
|
|
102
|
+
return Object.assign({}, getConfig().menu.optionProps, props.optionProps);
|
|
103
|
+
});
|
|
104
|
+
const computeTitleField = (0, _vue.computed)(() => {
|
|
105
|
+
const propsOpts = computePropsOpts.value;
|
|
106
|
+
return propsOpts.title || 'title';
|
|
107
|
+
});
|
|
108
|
+
const computeKeyField = (0, _vue.computed)(() => {
|
|
109
|
+
const propsOpts = computePropsOpts.value;
|
|
110
|
+
return propsOpts.name || 'name';
|
|
111
|
+
});
|
|
112
|
+
const computeChildrenField = (0, _vue.computed)(() => {
|
|
113
|
+
const propsOpts = computePropsOpts.value;
|
|
114
|
+
return propsOpts.children || 'children';
|
|
115
|
+
});
|
|
116
|
+
const computeLinkUrlField = (0, _vue.computed)(() => {
|
|
117
|
+
const propsOpts = computePropsOpts.value;
|
|
118
|
+
return propsOpts.linkUrl || 'href';
|
|
119
|
+
});
|
|
120
|
+
const computeRouterLinkField = (0, _vue.computed)(() => {
|
|
121
|
+
const propsOpts = computePropsOpts.value;
|
|
122
|
+
return propsOpts.routerLink || 'routerLink';
|
|
123
|
+
});
|
|
124
|
+
const computeCurrBorder = (0, _vue.computed)(() => {
|
|
125
|
+
const {
|
|
126
|
+
border
|
|
127
|
+
} = props;
|
|
128
|
+
if (border) {
|
|
129
|
+
return border === true ? 'first-group' : border;
|
|
130
|
+
}
|
|
131
|
+
return '';
|
|
132
|
+
});
|
|
88
133
|
const computeIsCollapsed = (0, _vue.computed)(() => {
|
|
89
134
|
const {
|
|
90
135
|
collapsed
|
|
@@ -97,19 +142,15 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
97
142
|
}
|
|
98
143
|
return false;
|
|
99
144
|
});
|
|
100
|
-
const
|
|
101
|
-
let collapseWidth = '';
|
|
102
|
-
if ($xeLayoutAside) {
|
|
103
|
-
collapseWidth = $xeLayoutAside.props.collapseWidth || '';
|
|
104
|
-
}
|
|
105
|
-
return collapseWidth;
|
|
106
|
-
});
|
|
107
|
-
const computeCollapseEnterWidth = (0, _vue.computed)(() => {
|
|
108
|
-
let width = '';
|
|
145
|
+
const computeVarStyle = (0, _vue.computed)(() => {
|
|
109
146
|
if ($xeLayoutAside) {
|
|
110
|
-
|
|
147
|
+
const {
|
|
148
|
+
computeVarStyle: asideComputeVarStyle
|
|
149
|
+
} = $xeLayoutAside.getComputeMaps();
|
|
150
|
+
const asideVarStyle = asideComputeVarStyle.value;
|
|
151
|
+
return asideVarStyle;
|
|
111
152
|
}
|
|
112
|
-
return
|
|
153
|
+
return {};
|
|
113
154
|
});
|
|
114
155
|
const computeMaps = {
|
|
115
156
|
computeSize
|
|
@@ -119,6 +160,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
119
160
|
props,
|
|
120
161
|
context,
|
|
121
162
|
reactData,
|
|
163
|
+
internalData,
|
|
122
164
|
getRefMaps: () => refMaps,
|
|
123
165
|
getComputeMaps: () => computeMaps
|
|
124
166
|
};
|
|
@@ -134,12 +176,16 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
134
176
|
const {
|
|
135
177
|
activeName
|
|
136
178
|
} = reactData;
|
|
137
|
-
|
|
179
|
+
const {
|
|
180
|
+
menuInitMaps
|
|
181
|
+
} = internalData;
|
|
182
|
+
_xeUtils.default.eachTree(reactData.menuList, (item, index, items, path, parentItem, nodes) => {
|
|
138
183
|
if (item.itemKey === activeName) {
|
|
139
184
|
nodes.forEach(obj => {
|
|
140
185
|
obj.isActive = true;
|
|
141
186
|
if (isDefExpand) {
|
|
142
187
|
obj.isExpand = true;
|
|
188
|
+
menuInitMaps[obj.itemId] = true;
|
|
143
189
|
}
|
|
144
190
|
});
|
|
145
191
|
item.isExactActive = true;
|
|
@@ -154,24 +200,66 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
154
200
|
const updateMenuConfig = () => {
|
|
155
201
|
const {
|
|
156
202
|
options,
|
|
157
|
-
expandAll
|
|
203
|
+
expandAll,
|
|
204
|
+
expandKeys
|
|
158
205
|
} = props;
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
206
|
+
const muInitMaps = {};
|
|
207
|
+
const titleField = computeTitleField.value;
|
|
208
|
+
const keyField = computeKeyField.value;
|
|
209
|
+
const childrenField = computeChildrenField.value;
|
|
210
|
+
const linkUrlField = computeLinkUrlField.value;
|
|
211
|
+
const routerLinkField = computeRouterLinkField.value;
|
|
212
|
+
const defaultExpandMaps = {};
|
|
213
|
+
if (expandKeys) {
|
|
214
|
+
expandKeys.forEach(key => {
|
|
215
|
+
defaultExpandMaps[key] = true;
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
const muCacheMaps = {};
|
|
219
|
+
const muKeyMaps = {};
|
|
220
|
+
reactData.menuList = _xeUtils.default.mapTree(options, (item, index, items, path, parentItem) => {
|
|
221
|
+
const itemId = ++nemuUniqueKey;
|
|
222
|
+
const itemKey = item[keyField] || path.join(',');
|
|
223
|
+
const childList = item[childrenField];
|
|
224
|
+
const hasChild = childList && childList.length > 0;
|
|
225
|
+
const isExpand = hasChild ? _xeUtils.default.isBoolean(item.expanded) ? item.expanded : defaultExpandMaps[itemKey] || !!expandAll : false;
|
|
226
|
+
if (isExpand) {
|
|
227
|
+
muInitMaps[itemId] = true;
|
|
228
|
+
}
|
|
229
|
+
const objItem = {
|
|
230
|
+
itemConf: item,
|
|
231
|
+
title: item[titleField],
|
|
232
|
+
name: item[keyField],
|
|
233
|
+
icon: item.icon,
|
|
234
|
+
linkUrl: item[linkUrlField],
|
|
235
|
+
linkTarget: item.linkTarget,
|
|
236
|
+
routerLink: item[routerLinkField],
|
|
237
|
+
permissionCode: item.permissionCode,
|
|
238
|
+
children: childList,
|
|
239
|
+
slots: item.slots,
|
|
240
|
+
parentKey: parentItem ? parentItem.name || path.slice(0, path.length - 1).join(',') : '',
|
|
162
241
|
level: path.length,
|
|
163
|
-
itemId
|
|
164
|
-
itemKey
|
|
242
|
+
itemId,
|
|
243
|
+
itemKey,
|
|
165
244
|
isExactActive: false,
|
|
166
245
|
isActive: false,
|
|
167
|
-
isExpand
|
|
168
|
-
hasChild
|
|
169
|
-
|
|
246
|
+
isExpand,
|
|
247
|
+
hasChild,
|
|
248
|
+
childList: []
|
|
249
|
+
};
|
|
250
|
+
if (muKeyMaps[itemKey]) {
|
|
251
|
+
errLog('vxe.error.repeatKey', [keyField, item[keyField]]);
|
|
252
|
+
}
|
|
253
|
+
muCacheMaps[itemId] = objItem;
|
|
254
|
+
muKeyMaps[itemKey] = objItem;
|
|
170
255
|
return objItem;
|
|
171
256
|
}, {
|
|
172
257
|
children: 'children',
|
|
173
258
|
mapChildren: 'childList'
|
|
174
259
|
});
|
|
260
|
+
internalData.menuInitMaps = muInitMaps;
|
|
261
|
+
internalData.menuCacheMaps = muCacheMaps;
|
|
262
|
+
internalData.menuKeyMaps = muKeyMaps;
|
|
175
263
|
};
|
|
176
264
|
const updateCollapseStyle = () => {
|
|
177
265
|
const {
|
|
@@ -179,12 +267,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
179
267
|
} = props;
|
|
180
268
|
if (collapseFixed) {
|
|
181
269
|
(0, _vue.nextTick)(() => {
|
|
182
|
-
const {
|
|
183
|
-
isEnterCollapse
|
|
184
|
-
} = reactData;
|
|
185
270
|
const isCollapsed = computeIsCollapsed.value;
|
|
186
|
-
const collapseEnterWidth = computeCollapseEnterWidth.value;
|
|
187
|
-
const collapseWidth = computeCollapseWidth.value;
|
|
188
271
|
const el = refElem.value;
|
|
189
272
|
if (el) {
|
|
190
273
|
const clientRect = el.getBoundingClientRect();
|
|
@@ -193,7 +276,6 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
193
276
|
top: (0, _dom.toCssUnit)(clientRect.top),
|
|
194
277
|
left: (0, _dom.toCssUnit)(clientRect.left),
|
|
195
278
|
height: (0, _dom.toCssUnit)(parentNode.clientHeight),
|
|
196
|
-
width: isEnterCollapse ? collapseEnterWidth ? (0, _dom.toCssUnit)(collapseEnterWidth) : '' : collapseWidth ? (0, _dom.toCssUnit)(collapseWidth) : '',
|
|
197
279
|
zIndex: reactData.collapseZindex
|
|
198
280
|
} : {};
|
|
199
281
|
}
|
|
@@ -212,12 +294,6 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
212
294
|
if (isCollapsed) {
|
|
213
295
|
if (!initialized) {
|
|
214
296
|
reactData.initialized = true;
|
|
215
|
-
(0, _vue.nextTick)(() => {
|
|
216
|
-
const collapseEl = refCollapseElem.value;
|
|
217
|
-
if (collapseEl) {
|
|
218
|
-
document.body.appendChild(collapseEl);
|
|
219
|
-
}
|
|
220
|
-
});
|
|
221
297
|
}
|
|
222
298
|
}
|
|
223
299
|
reactData.isEnterCollapse = false;
|
|
@@ -230,7 +306,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
230
306
|
accordion
|
|
231
307
|
} = props;
|
|
232
308
|
const {
|
|
233
|
-
menuEffectMaps
|
|
309
|
+
menuEffectMaps,
|
|
310
|
+
menuInitMaps
|
|
234
311
|
} = internalData;
|
|
235
312
|
const {
|
|
236
313
|
itemId,
|
|
@@ -253,6 +330,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
253
330
|
});
|
|
254
331
|
}
|
|
255
332
|
item.isExpand = expanded;
|
|
333
|
+
menuInitMaps[itemId] = true;
|
|
256
334
|
const wrapperEl = isCollapsed ? refCollapseElem.value : refElem.value;
|
|
257
335
|
if (wrapperEl) {
|
|
258
336
|
const nemuEl = wrapperEl.querySelector(`.vxe-menu--item-wrapper[data-menu-id="${itemId}"]`);
|
|
@@ -297,7 +375,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
297
375
|
if (!visibleMethod || visibleMethod({
|
|
298
376
|
$menu: $xeMenu,
|
|
299
377
|
options,
|
|
300
|
-
currentMenu: item
|
|
378
|
+
currentMenu: item,
|
|
379
|
+
currentOption: item.itemConf
|
|
301
380
|
})) {
|
|
302
381
|
if (_ui.VxeUI.contextMenu) {
|
|
303
382
|
_ui.VxeUI.contextMenu.openByEvent(evnt, {
|
|
@@ -312,6 +391,7 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
312
391
|
const params = {
|
|
313
392
|
menu: option,
|
|
314
393
|
currentMenu: item,
|
|
394
|
+
currentOption: item.itemConf,
|
|
315
395
|
$event: evnt,
|
|
316
396
|
$menu: $xeMenu
|
|
317
397
|
};
|
|
@@ -332,22 +412,27 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
332
412
|
const handleClickMenu = (evnt, item, itemList) => {
|
|
333
413
|
const {
|
|
334
414
|
itemKey,
|
|
415
|
+
linkUrl,
|
|
335
416
|
routerLink,
|
|
336
417
|
hasChild
|
|
337
418
|
} = item;
|
|
338
|
-
if (routerLink) {
|
|
419
|
+
if (linkUrl || routerLink) {
|
|
339
420
|
emitModel(itemKey);
|
|
340
|
-
|
|
421
|
+
reactData.isEnterCollapse = false;
|
|
422
|
+
internalData.lastActiveTime = Date.now();
|
|
341
423
|
} else {
|
|
342
424
|
if (hasChild) {
|
|
343
425
|
handleClickIconCollapse(evnt, item, itemList);
|
|
344
426
|
} else {
|
|
345
427
|
emitModel(itemKey);
|
|
346
|
-
|
|
428
|
+
reactData.isEnterCollapse = false;
|
|
429
|
+
internalData.lastActiveTime = Date.now();
|
|
347
430
|
}
|
|
348
431
|
}
|
|
349
432
|
const params = {
|
|
350
433
|
currentMenu: item,
|
|
434
|
+
currentOption: item.itemConf,
|
|
435
|
+
option: item.itemConf,
|
|
351
436
|
// 已废弃
|
|
352
437
|
menu: item
|
|
353
438
|
};
|
|
@@ -355,30 +440,13 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
355
440
|
};
|
|
356
441
|
const handleMenuMouseenter = () => {
|
|
357
442
|
const {
|
|
358
|
-
|
|
359
|
-
} =
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
width: collapseEnterWidth ? (0, _dom.toCssUnit)(collapseEnterWidth) : ''
|
|
363
|
-
});
|
|
364
|
-
reactData.isEnterCollapse = true;
|
|
365
|
-
};
|
|
366
|
-
const handleMenuMouseover = () => {
|
|
367
|
-
const {
|
|
368
|
-
isEnterCollapse
|
|
369
|
-
} = reactData;
|
|
370
|
-
if (!isEnterCollapse) {
|
|
371
|
-
handleMenuMouseenter();
|
|
443
|
+
lastActiveTime
|
|
444
|
+
} = internalData;
|
|
445
|
+
if (lastActiveTime < Date.now() - 500) {
|
|
446
|
+
reactData.isEnterCollapse = true;
|
|
372
447
|
}
|
|
373
448
|
};
|
|
374
449
|
const handleMenuMouseleave = () => {
|
|
375
|
-
const {
|
|
376
|
-
collapseStyle
|
|
377
|
-
} = reactData;
|
|
378
|
-
const el = refElem.value;
|
|
379
|
-
reactData.collapseStyle = Object.assign({}, collapseStyle, {
|
|
380
|
-
width: el ? (0, _dom.toCssUnit)(el.offsetWidth) : ''
|
|
381
|
-
});
|
|
382
450
|
reactData.isEnterCollapse = false;
|
|
383
451
|
};
|
|
384
452
|
const callSlot = (slotFunc, params) => {
|
|
@@ -397,8 +465,84 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
397
465
|
$menu: $xeMenu
|
|
398
466
|
}, params));
|
|
399
467
|
};
|
|
468
|
+
const handleScrollToView = itemId => {
|
|
469
|
+
const wrapperEl = refElem.value;
|
|
470
|
+
const nemuEl = wrapperEl ? wrapperEl.querySelector(`.vxe-menu--item-wrapper[data-menu-id="${itemId}"]`) : null;
|
|
471
|
+
if (nemuEl) {
|
|
472
|
+
(0, _dom.scrollToView)(nemuEl);
|
|
473
|
+
return true;
|
|
474
|
+
}
|
|
475
|
+
return false;
|
|
476
|
+
};
|
|
400
477
|
const menuMethods = {
|
|
401
|
-
dispatchEvent
|
|
478
|
+
dispatchEvent,
|
|
479
|
+
setExpandByMenuKey(menuKeys, expanded) {
|
|
480
|
+
const {
|
|
481
|
+
menuKeyMaps,
|
|
482
|
+
menuInitMaps
|
|
483
|
+
} = internalData;
|
|
484
|
+
if (menuKeys) {
|
|
485
|
+
if (!_xeUtils.default.isArray(menuKeys)) {
|
|
486
|
+
menuKeys = [menuKeys];
|
|
487
|
+
}
|
|
488
|
+
menuKeys.forEach(mKey => {
|
|
489
|
+
const menuItem = menuKeyMaps[mKey];
|
|
490
|
+
if (menuItem) {
|
|
491
|
+
if (expanded) {
|
|
492
|
+
menuInitMaps[menuItem.itemId] = true;
|
|
493
|
+
}
|
|
494
|
+
menuItem.isExpand = !!expanded;
|
|
495
|
+
}
|
|
496
|
+
});
|
|
497
|
+
}
|
|
498
|
+
return (0, _vue.nextTick)();
|
|
499
|
+
},
|
|
500
|
+
clearAllExpandMenu() {
|
|
501
|
+
const {
|
|
502
|
+
menuList
|
|
503
|
+
} = reactData;
|
|
504
|
+
_xeUtils.default.eachTree(menuList, item => {
|
|
505
|
+
item.isExpand = false;
|
|
506
|
+
}, {
|
|
507
|
+
children: 'childList'
|
|
508
|
+
});
|
|
509
|
+
internalData.menuInitMaps = {};
|
|
510
|
+
return (0, _vue.nextTick)();
|
|
511
|
+
},
|
|
512
|
+
scrollToMenuKey(menuKey) {
|
|
513
|
+
const {
|
|
514
|
+
menuKeyMaps
|
|
515
|
+
} = internalData;
|
|
516
|
+
const menuItem = menuKeyMaps[menuKey];
|
|
517
|
+
if (!menuItem) {
|
|
518
|
+
return (0, _vue.nextTick)();
|
|
519
|
+
}
|
|
520
|
+
const {
|
|
521
|
+
itemId
|
|
522
|
+
} = menuItem;
|
|
523
|
+
if (handleScrollToView(itemId)) {
|
|
524
|
+
return (0, _vue.nextTick)();
|
|
525
|
+
}
|
|
526
|
+
return (0, _vue.nextTick)().then(() => {
|
|
527
|
+
handleScrollToView(itemId);
|
|
528
|
+
});
|
|
529
|
+
},
|
|
530
|
+
scrollToActiveMenu() {
|
|
531
|
+
const {
|
|
532
|
+
activeName
|
|
533
|
+
} = reactData;
|
|
534
|
+
if (activeName) {
|
|
535
|
+
return $xeMenu.scrollToMenuKey(activeName);
|
|
536
|
+
}
|
|
537
|
+
return (0, _vue.nextTick)().then(() => {
|
|
538
|
+
const {
|
|
539
|
+
activeName
|
|
540
|
+
} = reactData;
|
|
541
|
+
if (activeName) {
|
|
542
|
+
return $xeMenu.scrollToMenuKey(activeName);
|
|
543
|
+
}
|
|
544
|
+
});
|
|
545
|
+
}
|
|
402
546
|
};
|
|
403
547
|
const menuPrivateMethods = {};
|
|
404
548
|
Object.assign($xeMenu, menuMethods, menuPrivateMethods);
|
|
@@ -416,9 +560,9 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
416
560
|
const isCollapsed = computeIsCollapsed.value;
|
|
417
561
|
const params = {
|
|
418
562
|
currentMenu: item,
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
563
|
+
currentOption: item.itemConf,
|
|
564
|
+
option: item.itemConf,
|
|
565
|
+
collapsed: isCollapsed
|
|
422
566
|
};
|
|
423
567
|
return [optionSlot ? (0, _ui.renderEmptyElement)($xeMenu) : (0, _vue.h)('div', {
|
|
424
568
|
class: 'vxe-menu--item-link-icon'
|
|
@@ -447,48 +591,56 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
447
591
|
isActive,
|
|
448
592
|
isExactActive,
|
|
449
593
|
isExpand,
|
|
594
|
+
linkUrl,
|
|
450
595
|
routerLink,
|
|
596
|
+
linkTarget,
|
|
451
597
|
childList
|
|
452
598
|
} = item;
|
|
453
599
|
const {
|
|
454
600
|
isEnterCollapse
|
|
455
601
|
} = reactData;
|
|
602
|
+
const {
|
|
603
|
+
menuInitMaps
|
|
604
|
+
} = internalData;
|
|
456
605
|
const isCollapsed = computeIsCollapsed.value;
|
|
457
606
|
if (item.permissionCode) {
|
|
458
607
|
if (!_ui.permission.checkVisible(item.permissionCode)) {
|
|
459
608
|
return (0, _ui.renderEmptyElement)($xeMenu);
|
|
460
609
|
}
|
|
461
610
|
}
|
|
611
|
+
const isExpandChild = (!isCollapsed || isEnterCollapse) && isExpand;
|
|
612
|
+
const linkOns = {
|
|
613
|
+
onContextmenu(evnt) {
|
|
614
|
+
handleContextmenuEvent(evnt, item);
|
|
615
|
+
},
|
|
616
|
+
onClick(evnt) {
|
|
617
|
+
handleClickMenu(evnt, item, itemList);
|
|
618
|
+
}
|
|
619
|
+
};
|
|
462
620
|
return (0, _vue.h)('div', {
|
|
463
621
|
key: itemKey,
|
|
464
622
|
class: ['vxe-menu--item-wrapper', `vxe-menu--item-level${level}`, {
|
|
623
|
+
'has--child': hasChild,
|
|
465
624
|
'is--exact-active': isExactActive,
|
|
466
625
|
'is--active': isActive,
|
|
467
|
-
'is--expand':
|
|
626
|
+
'is--expand': isExpandChild
|
|
468
627
|
}],
|
|
469
628
|
'data-menu-id': itemId
|
|
470
|
-
}, [
|
|
471
|
-
class: 'vxe-menu--item-link',
|
|
629
|
+
}, [linkUrl ? (0, _vue.h)('a', Object.assign({
|
|
630
|
+
class: 'vxe-menu--item-link is--link',
|
|
631
|
+
href: linkUrl,
|
|
632
|
+
target: linkTarget
|
|
633
|
+
}, linkOns), renderMenuTitle(item, itemList)) : routerLink ? (0, _vue.h)((0, _vue.resolveComponent)('router-link'), Object.assign({
|
|
634
|
+
class: 'vxe-menu--item-link is--router',
|
|
472
635
|
to: routerLink,
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
},
|
|
476
|
-
onClick(evnt) {
|
|
477
|
-
handleClickMenu(evnt, item, itemList);
|
|
478
|
-
}
|
|
479
|
-
}, {
|
|
636
|
+
target: linkTarget
|
|
637
|
+
}, linkOns), {
|
|
480
638
|
default: () => renderMenuTitle(item, itemList)
|
|
481
|
-
}) : (0, _vue.h)('div', {
|
|
482
|
-
class: 'vxe-menu--item-link'
|
|
483
|
-
|
|
484
|
-
handleContextmenuEvent(evnt, item);
|
|
485
|
-
},
|
|
486
|
-
onClick(evnt) {
|
|
487
|
-
handleClickMenu(evnt, item, itemList);
|
|
488
|
-
}
|
|
489
|
-
}, renderMenuTitle(item, itemList)), hasChild ? (0, _vue.h)('div', {
|
|
639
|
+
}) : (0, _vue.h)('div', Object.assign({
|
|
640
|
+
class: 'vxe-menu--item-link is--default'
|
|
641
|
+
}, linkOns), renderMenuTitle(item, itemList)), hasChild ? (0, _vue.h)('div', {
|
|
490
642
|
class: 'vxe-menu--item-group'
|
|
491
|
-
}, childList.map(child => renderDefaultChildren(child, childList))) : (0, _ui.renderEmptyElement)($xeMenu)]);
|
|
643
|
+
}, isExpandChild || menuInitMaps[itemId] ? childList.map(child => renderDefaultChildren(child, childList)) : []) : (0, _ui.renderEmptyElement)($xeMenu)]);
|
|
492
644
|
};
|
|
493
645
|
const renderCollapseChildren = (item, itemList) => {
|
|
494
646
|
const {
|
|
@@ -499,6 +651,8 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
499
651
|
isActive,
|
|
500
652
|
isExactActive,
|
|
501
653
|
routerLink,
|
|
654
|
+
linkUrl,
|
|
655
|
+
linkTarget,
|
|
502
656
|
childList
|
|
503
657
|
} = item;
|
|
504
658
|
if (item.permissionCode) {
|
|
@@ -506,33 +660,35 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
506
660
|
return (0, _ui.renderEmptyElement)($xeMenu);
|
|
507
661
|
}
|
|
508
662
|
}
|
|
663
|
+
const linkOns = {
|
|
664
|
+
onContextmenu(evnt) {
|
|
665
|
+
handleContextmenuEvent(evnt, item);
|
|
666
|
+
},
|
|
667
|
+
onClick(evnt) {
|
|
668
|
+
handleClickMenu(evnt, item, itemList);
|
|
669
|
+
}
|
|
670
|
+
};
|
|
509
671
|
return (0, _vue.h)('div', {
|
|
510
672
|
key: itemKey,
|
|
511
673
|
class: ['vxe-menu--item-wrapper', `vxe-menu--item-level${level}`, {
|
|
674
|
+
'has--child': hasChild,
|
|
512
675
|
'is--exact-active': isExactActive,
|
|
513
676
|
'is--active': isActive
|
|
514
677
|
}],
|
|
515
678
|
'data-menu-id': itemId
|
|
516
|
-
}, [
|
|
517
|
-
class: 'vxe-menu--item-link',
|
|
679
|
+
}, [linkUrl ? (0, _vue.h)('a', Object.assign({
|
|
680
|
+
class: 'vxe-menu--item-link is--link',
|
|
681
|
+
href: linkUrl,
|
|
682
|
+
target: linkTarget
|
|
683
|
+
}, linkOns), renderMenuTitle(item, itemList)) : routerLink ? (0, _vue.h)((0, _vue.resolveComponent)('router-link'), Object.assign({
|
|
684
|
+
class: 'vxe-menu--item-link is--router',
|
|
518
685
|
to: routerLink,
|
|
519
|
-
|
|
520
|
-
|
|
521
|
-
},
|
|
522
|
-
onClick(evnt) {
|
|
523
|
-
handleClickMenu(evnt, item, itemList);
|
|
524
|
-
}
|
|
525
|
-
}, {
|
|
686
|
+
target: linkTarget
|
|
687
|
+
}, linkOns), {
|
|
526
688
|
default: () => renderMenuTitle(item, itemList)
|
|
527
|
-
}) : (0, _vue.h)('div', {
|
|
528
|
-
class: 'vxe-menu--item-link'
|
|
529
|
-
|
|
530
|
-
handleContextmenuEvent(evnt, item);
|
|
531
|
-
},
|
|
532
|
-
onClick(evnt) {
|
|
533
|
-
handleClickMenu(evnt, item, itemList);
|
|
534
|
-
}
|
|
535
|
-
}, renderMenuTitle(item, itemList)), hasChild ? (0, _vue.h)('div', {
|
|
689
|
+
}) : (0, _vue.h)('div', Object.assign({
|
|
690
|
+
class: 'vxe-menu--item-link is--default'
|
|
691
|
+
}, linkOns), renderMenuTitle(item, itemList)), hasChild ? (0, _vue.h)('div', {
|
|
536
692
|
class: 'vxe-menu--item-group'
|
|
537
693
|
}, childList.map(child => renderDefaultChildren(child, childList))) : (0, _ui.renderEmptyElement)($xeMenu)]);
|
|
538
694
|
};
|
|
@@ -549,24 +705,38 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
549
705
|
} = reactData;
|
|
550
706
|
const vSize = computeSize.value;
|
|
551
707
|
const isCollapsed = computeIsCollapsed.value;
|
|
708
|
+
const currBorder = computeCurrBorder.value;
|
|
709
|
+
const varStyle = computeVarStyle.value;
|
|
710
|
+
const headerSlot = slots.header;
|
|
711
|
+
const footerSlot = slots.footer;
|
|
552
712
|
let ons = {};
|
|
553
713
|
if (collapseFixed) {
|
|
554
714
|
ons = {
|
|
555
715
|
onMouseenter: handleMenuMouseenter,
|
|
556
|
-
onMouseover: handleMenuMouseover,
|
|
557
716
|
onMouseleave: handleMenuMouseleave
|
|
558
717
|
};
|
|
559
718
|
}
|
|
719
|
+
const stParams = {
|
|
720
|
+
collapsed: isCollapsed
|
|
721
|
+
};
|
|
560
722
|
return (0, _vue.h)('div', {
|
|
561
723
|
ref: refElem,
|
|
562
724
|
class: ['vxe-menu', {
|
|
725
|
+
[`border--${currBorder}`]: currBorder,
|
|
563
726
|
[`size--${vSize}`]: vSize,
|
|
564
727
|
'is--collapsed': isCollapsed,
|
|
565
728
|
'is--loading': loading
|
|
566
729
|
}]
|
|
567
|
-
}, [(0, _vue.h)('div', {
|
|
568
|
-
class: 'vxe-menu--
|
|
569
|
-
},
|
|
730
|
+
}, [headerSlot ? (0, _vue.h)('div', {
|
|
731
|
+
class: 'vxe-menu--header'
|
|
732
|
+
}, headerSlot(stParams)) : (0, _ui.renderEmptyElement)($xeMenu), (0, _vue.h)('div', {
|
|
733
|
+
class: 'vxe-menu--body'
|
|
734
|
+
}, menuList.map(child => isCollapsed ? renderCollapseChildren(child, menuList) : renderDefaultChildren(child, menuList))), footerSlot ? (0, _vue.h)('div', {
|
|
735
|
+
class: 'vxe-menu--footer'
|
|
736
|
+
}, footerSlot(stParams)) : (0, _ui.renderEmptyElement)($xeMenu), (0, _vue.h)(_vue.Teleport, {
|
|
737
|
+
to: 'body',
|
|
738
|
+
disabled: !initialized
|
|
739
|
+
}, [(0, _vue.h)('div', Object.assign({
|
|
570
740
|
ref: refCollapseElem,
|
|
571
741
|
class: ['vxe-menu--collapse-wrapper', {
|
|
572
742
|
[`size--${vSize}`]: vSize,
|
|
@@ -574,10 +744,14 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
574
744
|
'is--enter': isEnterCollapse,
|
|
575
745
|
'is--loading': loading
|
|
576
746
|
}],
|
|
577
|
-
style: collapseStyle
|
|
578
|
-
}, ons),
|
|
579
|
-
class: 'vxe-menu--
|
|
580
|
-
},
|
|
747
|
+
style: Object.assign({}, varStyle, collapseStyle)
|
|
748
|
+
}, ons), isCollapsed ? [headerSlot ? (0, _vue.h)('div', {
|
|
749
|
+
class: 'vxe-menu--header'
|
|
750
|
+
}, headerSlot(stParams)) : (0, _ui.renderEmptyElement)($xeMenu), (0, _vue.h)('div', {
|
|
751
|
+
class: 'vxe-menu--body'
|
|
752
|
+
}, menuList.map(child => renderDefaultChildren(child, menuList))), footerSlot ? (0, _vue.h)('div', {
|
|
753
|
+
class: 'vxe-menu--footer'
|
|
754
|
+
}, footerSlot(stParams)) : (0, _ui.renderEmptyElement)($xeMenu)] : [])]),
|
|
581
755
|
/**
|
|
582
756
|
* 加载中
|
|
583
757
|
*/
|
|
@@ -618,13 +792,6 @@ var _default = exports.default = (0, _comp.defineVxeComponent)({
|
|
|
618
792
|
updateCollapseStyle();
|
|
619
793
|
});
|
|
620
794
|
(0, _vue.onBeforeUnmount)(() => {
|
|
621
|
-
const collapseEl = refCollapseElem.value;
|
|
622
|
-
if (collapseEl) {
|
|
623
|
-
const parentNode = collapseEl.parentNode;
|
|
624
|
-
if (parentNode) {
|
|
625
|
-
parentNode.removeChild(collapseEl);
|
|
626
|
-
}
|
|
627
|
-
}
|
|
628
795
|
_ui.globalEvents.off($xeMenu, 'resize');
|
|
629
796
|
_xeUtils.default.assign(reactData, createReactData());
|
|
630
797
|
_xeUtils.default.assign(internalData, createInternalData());
|