vxe-pc-ui 3.16.9 → 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.
Files changed (122) hide show
  1. package/es/checkbox/style.css +1 -0
  2. package/es/checkbox/style.min.css +1 -1
  3. package/es/icon/{iconfont.1783939819897.ttf → iconfont.1784122289327.ttf} +0 -0
  4. package/es/icon/iconfont.1784122289327.woff +0 -0
  5. package/es/icon/iconfont.1784122289327.woff2 +0 -0
  6. package/es/icon/style.css +33 -2
  7. package/es/icon/style.min.css +1 -1
  8. package/{lib/icon/style/iconfont.1783939819897.ttf → es/iconfont.1784122289327.ttf} +0 -0
  9. package/es/iconfont.1784122289327.woff +0 -0
  10. package/es/iconfont.1784122289327.woff2 +0 -0
  11. package/es/language/en-US.js +3 -3
  12. package/es/language/hy-AM.js +3 -3
  13. package/es/language/zh-CN.js +3 -3
  14. package/es/layout-aside/src/layout-aside.js +11 -19
  15. package/es/layout-aside/style.css +1 -3
  16. package/es/layout-aside/style.min.css +1 -1
  17. package/es/menu/src/menu.js +308 -101
  18. package/es/menu/style.css +52 -4
  19. package/es/menu/style.min.css +1 -1
  20. package/es/modal/src/modal.js +2 -2
  21. package/es/radio/style.css +1 -0
  22. package/es/radio/style.min.css +1 -1
  23. package/es/style.css +1 -1
  24. package/es/style.min.css +1 -1
  25. package/es/tree-select/src/tree-select.js +1 -1
  26. package/es/ui/index.js +1 -1
  27. package/es/ui/src/log.js +1 -1
  28. package/es/vxe-checkbox/style.css +1 -0
  29. package/es/vxe-checkbox/style.min.css +1 -1
  30. package/es/vxe-icon/style.css +33 -2
  31. package/es/vxe-icon/style.min.css +1 -1
  32. package/es/vxe-layout-aside/style.css +1 -3
  33. package/es/vxe-layout-aside/style.min.css +1 -1
  34. package/es/vxe-menu/style.css +52 -4
  35. package/es/vxe-menu/style.min.css +1 -1
  36. package/es/vxe-radio/style.css +1 -0
  37. package/es/vxe-radio/style.min.css +1 -1
  38. package/lib/checkbox/style/style.css +1 -0
  39. package/lib/checkbox/style/style.min.css +1 -1
  40. package/lib/{iconfont.1783939819897.ttf → icon/style/iconfont.1784122289327.ttf} +0 -0
  41. package/lib/icon/style/iconfont.1784122289327.woff +0 -0
  42. package/lib/icon/style/iconfont.1784122289327.woff2 +0 -0
  43. package/lib/icon/style/style.css +33 -2
  44. package/lib/icon/style/style.min.css +33 -2
  45. package/{es/iconfont.1783939819897.ttf → lib/iconfont.1784122289327.ttf} +0 -0
  46. package/lib/iconfont.1784122289327.woff +0 -0
  47. package/lib/iconfont.1784122289327.woff2 +0 -0
  48. package/lib/index.umd.js +314 -121
  49. package/lib/index.umd.min.js +1 -1
  50. package/lib/language/en-US.js +3 -3
  51. package/lib/language/en-US.min.js +1 -1
  52. package/lib/language/en-US.umd.js +3 -3
  53. package/lib/language/hy-AM.js +3 -3
  54. package/lib/language/hy-AM.min.js +1 -1
  55. package/lib/language/hy-AM.umd.js +3 -3
  56. package/lib/language/zh-CN.js +3 -3
  57. package/lib/language/zh-CN.min.js +1 -1
  58. package/lib/language/zh-CN.umd.js +3 -3
  59. package/lib/layout-aside/src/layout-aside.js +12 -18
  60. package/lib/layout-aside/src/layout-aside.min.js +1 -1
  61. package/lib/layout-aside/style/style.css +1 -3
  62. package/lib/layout-aside/style/style.min.css +1 -1
  63. package/lib/menu/src/menu.js +292 -93
  64. package/lib/menu/src/menu.min.js +1 -1
  65. package/lib/menu/style/style.css +52 -4
  66. package/lib/menu/style/style.min.css +1 -1
  67. package/lib/modal/src/modal.js +2 -2
  68. package/lib/modal/src/modal.min.js +1 -1
  69. package/lib/radio/style/style.css +1 -0
  70. package/lib/radio/style/style.min.css +1 -1
  71. package/lib/style.css +1 -1
  72. package/lib/style.min.css +1 -1
  73. package/lib/tree-select/src/tree-select.js +1 -1
  74. package/lib/tree-select/src/tree-select.min.js +1 -1
  75. package/lib/ui/index.js +1 -1
  76. package/lib/ui/index.min.js +1 -1
  77. package/lib/ui/src/log.js +1 -1
  78. package/lib/ui/src/log.min.js +1 -1
  79. package/lib/vxe-checkbox/style/style.css +1 -0
  80. package/lib/vxe-checkbox/style/style.min.css +1 -1
  81. package/lib/vxe-icon/style/style.css +33 -2
  82. package/lib/vxe-icon/style/style.min.css +1 -1
  83. package/lib/vxe-layout-aside/style/style.css +1 -3
  84. package/lib/vxe-layout-aside/style/style.min.css +1 -1
  85. package/lib/vxe-menu/style/style.css +52 -4
  86. package/lib/vxe-menu/style/style.min.css +1 -1
  87. package/lib/vxe-radio/style/style.css +1 -0
  88. package/lib/vxe-radio/style/style.min.css +1 -1
  89. package/package.json +2 -2
  90. package/packages/language/en-US.ts +3 -3
  91. package/packages/language/hy-AM.ts +3 -3
  92. package/packages/language/zh-CN.ts +3 -3
  93. package/packages/layout-aside/src/layout-aside.ts +13 -20
  94. package/packages/menu/src/menu.ts +323 -111
  95. package/packages/modal/src/modal.ts +3 -3
  96. package/packages/tree-select/src/tree-select.ts +1 -1
  97. package/styles/components/checkbox.scss +1 -0
  98. package/styles/components/icon.scss +33 -4
  99. package/styles/components/layout-aside.scss +1 -3
  100. package/styles/components/menu.scss +64 -1
  101. package/styles/components/radio.scss +1 -0
  102. package/styles/icon/iconfont.ttf +0 -0
  103. package/styles/icon/iconfont.woff +0 -0
  104. package/styles/icon/iconfont.woff2 +0 -0
  105. package/styles/theme/base.scss +1 -1
  106. package/styles/theme/dark.scss +1 -0
  107. package/styles/theme/light.scss +1 -0
  108. package/styles/variable.scss +2 -1
  109. package/types/components/icon.d.ts +1 -1
  110. package/types/components/layout-aside.d.ts +3 -1
  111. package/types/components/menu.d.ts +64 -17
  112. package/types/components/modal.d.ts +2 -2
  113. package/types/components/table.d.ts +11 -11
  114. package/types/components/toolbar.d.ts +1 -1
  115. package/es/icon/iconfont.1783939819897.woff +0 -0
  116. package/es/icon/iconfont.1783939819897.woff2 +0 -0
  117. package/es/iconfont.1783939819897.woff +0 -0
  118. package/es/iconfont.1783939819897.woff2 +0 -0
  119. package/lib/icon/style/iconfont.1783939819897.woff +0 -0
  120. package/lib/icon/style/iconfont.1783939819897.woff2 +0 -0
  121. package/lib/iconfont.1783939819897.woff +0 -0
  122. package/lib/iconfont.1783939819897.woff2 +0 -0
@@ -24,6 +24,10 @@ var menus = _ui.VxeUI.menus,
24
24
  getIcon = _ui.VxeUI.getIcon;
25
25
  function createInternalData() {
26
26
  return {
27
+ lastActiveTime: 0,
28
+ menuInitMaps: {},
29
+ menuCacheMaps: {},
30
+ menuKeyMaps: {},
27
31
  menuEffectMaps: {}
28
32
  };
29
33
  }
@@ -45,12 +49,25 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
45
49
  props: {
46
50
  value: [String, Number],
47
51
  expandAll: Boolean,
52
+ expandKeys: Array,
48
53
  accordion: {
49
54
  type: Boolean,
50
55
  default: function _default() {
51
56
  return getConfig().menu.accordion;
52
57
  }
53
58
  },
59
+ border: {
60
+ type: [Boolean, String],
61
+ default: function _default() {
62
+ return getConfig().menu.border;
63
+ }
64
+ },
65
+ optionProps: {
66
+ type: Object,
67
+ default: function _default() {
68
+ return getConfig().menu.optionProps;
69
+ }
70
+ },
54
71
  collapsed: {
55
72
  type: Boolean,
56
73
  default: null
@@ -84,6 +101,45 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
84
101
  });
85
102
  },
86
103
  computed: Object.assign(Object.assign({}, {}), {
104
+ computePropsOpts: function computePropsOpts() {
105
+ var $xeMenu = this;
106
+ var props = $xeMenu;
107
+ return Object.assign({}, getConfig().menu.optionProps, props.optionProps);
108
+ },
109
+ computeTitleField: function computeTitleField() {
110
+ var $xeMenu = this;
111
+ var propsOpts = $xeMenu.computePropsOpts;
112
+ return propsOpts.title || 'title';
113
+ },
114
+ computeKeyField: function computeKeyField() {
115
+ var $xeMenu = this;
116
+ var propsOpts = $xeMenu.computePropsOpts;
117
+ return propsOpts.name || 'name';
118
+ },
119
+ computeChildrenField: function computeChildrenField() {
120
+ var $xeMenu = this;
121
+ var propsOpts = $xeMenu.computePropsOpts;
122
+ return propsOpts.children || 'children';
123
+ },
124
+ computeLinkUrlField: function computeLinkUrlField() {
125
+ var $xeMenu = this;
126
+ var propsOpts = $xeMenu.computePropsOpts;
127
+ return propsOpts.linkUrl || 'href';
128
+ },
129
+ computeRouterLinkField: function computeRouterLinkField() {
130
+ var $xeMenu = this;
131
+ var propsOpts = $xeMenu.computePropsOpts;
132
+ return propsOpts.routerLink || 'routerLink';
133
+ },
134
+ computeCurrBorder: function computeCurrBorder() {
135
+ var $xeMenu = this;
136
+ var props = $xeMenu;
137
+ var border = props.border;
138
+ if (border) {
139
+ return border === true ? 'first-group' : border;
140
+ }
141
+ return '';
142
+ },
87
143
  computeMenuOpts: function computeMenuOpts() {
88
144
  var $xeMenu = this;
89
145
  var props = $xeMenu;
@@ -101,14 +157,14 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
101
157
  }
102
158
  return false;
103
159
  },
104
- computeCollapseWidth: function computeCollapseWidth() {
160
+ computeVarStyle: function computeVarStyle() {
105
161
  var $xeMenu = this;
106
162
  var $xeLayoutAside = $xeMenu.$xeLayoutAside;
107
- var collapseWidth = '';
108
163
  if ($xeLayoutAside) {
109
- collapseWidth = $xeLayoutAside.collapseWidth || '';
164
+ var asideVarStyle = $xeLayoutAside.computeVarStyle;
165
+ return asideVarStyle;
110
166
  }
111
- return collapseWidth;
167
+ return {};
112
168
  },
113
169
  computeCollapseEnterWidth: function computeCollapseEnterWidth() {
114
170
  var $xeMenu = this;
@@ -155,6 +211,80 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
155
211
  }
156
212
  return [];
157
213
  },
214
+ setExpandByMenuKey: function setExpandByMenuKey(menuKeys, expanded) {
215
+ var $xeMenu = this;
216
+ var internalData = $xeMenu.internalData;
217
+ var menuKeyMaps = internalData.menuKeyMaps,
218
+ menuInitMaps = internalData.menuInitMaps;
219
+ if (menuKeys) {
220
+ if (!_xeUtils.default.isArray(menuKeys)) {
221
+ menuKeys = [menuKeys];
222
+ }
223
+ menuKeys.forEach(function (mKey) {
224
+ var menuItem = menuKeyMaps[mKey];
225
+ if (menuItem) {
226
+ if (expanded) {
227
+ menuInitMaps[menuItem.itemId] = true;
228
+ }
229
+ menuItem.isExpand = !!expanded;
230
+ }
231
+ });
232
+ }
233
+ return $xeMenu.$nextTick();
234
+ },
235
+ clearAllExpandMenu: function clearAllExpandMenu() {
236
+ var $xeMenu = this;
237
+ var reactData = $xeMenu.reactData;
238
+ var internalData = $xeMenu.internalData;
239
+ var menuList = reactData.menuList;
240
+ _xeUtils.default.eachTree(menuList, function (item) {
241
+ item.isExpand = false;
242
+ }, {
243
+ children: 'childList'
244
+ });
245
+ internalData.menuInitMaps = {};
246
+ return $xeMenu.$nextTick();
247
+ },
248
+ handleScrollToView: function handleScrollToView(itemId) {
249
+ var $xeMenu = this;
250
+ var el = $xeMenu.$refs.refElem;
251
+ var nemuEl = el ? el.querySelector(".vxe-menu--item-wrapper[data-menu-id=\"".concat(itemId, "\"]")) : null;
252
+ if (nemuEl) {
253
+ (0, _dom.scrollToView)(nemuEl);
254
+ return true;
255
+ }
256
+ return false;
257
+ },
258
+ scrollToMenuKey: function scrollToMenuKey(menuKey) {
259
+ var $xeMenu = this;
260
+ var internalData = $xeMenu.internalData;
261
+ var menuKeyMaps = internalData.menuKeyMaps;
262
+ var menuItem = menuKeyMaps[menuKey];
263
+ if (!menuItem) {
264
+ return $xeMenu.$nextTick();
265
+ }
266
+ var itemId = menuItem.itemId;
267
+ if ($xeMenu.handleScrollToView(itemId)) {
268
+ return $xeMenu.$nextTick();
269
+ }
270
+ return $xeMenu.$nextTick().then(function () {
271
+ $xeMenu.handleScrollToView(itemId);
272
+ });
273
+ },
274
+ scrollToActiveMenu: function scrollToActiveMenu() {
275
+ var $xeMenu = this;
276
+ var reactData = $xeMenu.reactData;
277
+ var activeName = reactData.activeName;
278
+ if (activeName) {
279
+ return $xeMenu.scrollToMenuKey(activeName);
280
+ }
281
+ return $xeMenu.$nextTick().then(function () {
282
+ var activeName = reactData.activeName;
283
+ if (activeName) {
284
+ return $xeMenu.scrollToMenuKey(activeName);
285
+ }
286
+ });
287
+ },
158
288
  getMenuTitle: function getMenuTitle(item) {
159
289
  return "".concat(item.title || item.name);
160
290
  },
@@ -168,13 +298,16 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
168
298
  updateActiveMenu: function updateActiveMenu(isDefExpand) {
169
299
  var $xeMenu = this;
170
300
  var reactData = $xeMenu.reactData;
301
+ var internalData = $xeMenu.internalData;
171
302
  var activeName = reactData.activeName;
303
+ var menuInitMaps = internalData.menuInitMaps;
172
304
  _xeUtils.default.eachTree(reactData.menuList, function (item, index, items, path, parent, nodes) {
173
305
  if (item.itemKey === activeName) {
174
306
  nodes.forEach(function (obj) {
175
307
  obj.isActive = true;
176
308
  if (isDefExpand) {
177
309
  obj.isExpand = true;
310
+ menuInitMaps[obj.itemId] = true;
178
311
  }
179
312
  });
180
313
  item.isExactActive = true;
@@ -190,24 +323,67 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
190
323
  var $xeMenu = this;
191
324
  var props = $xeMenu;
192
325
  var reactData = $xeMenu.reactData;
326
+ var internalData = $xeMenu.internalData;
193
327
  var options = props.options,
194
- expandAll = props.expandAll;
195
- reactData.menuList = _xeUtils.default.mapTree(options, function (item, index, items, path, parent) {
196
- var objItem = Object.assign(Object.assign({}, item), {
197
- parentKey: parent ? parent.name || path.slice(0, path.length - 1).join(',') : '',
328
+ expandAll = props.expandAll,
329
+ expandKeys = props.expandKeys;
330
+ var muInitMaps = {};
331
+ var titleField = $xeMenu.computeTitleField;
332
+ var keyField = $xeMenu.computeKeyField;
333
+ var childrenField = $xeMenu.computeChildrenField;
334
+ var linkUrlField = $xeMenu.computeLinkUrlField;
335
+ var routerLinkField = $xeMenu.computeRouterLinkField;
336
+ var defaultExpandMaps = {};
337
+ if (expandKeys) {
338
+ expandKeys.forEach(function (key) {
339
+ defaultExpandMaps[key] = true;
340
+ });
341
+ }
342
+ var muCacheMaps = {};
343
+ var muKeyMaps = {};
344
+ reactData.menuList = _xeUtils.default.mapTree(options, function (item, index, items, path, parentItem) {
345
+ var itemId = ++nemuUniqueKey;
346
+ var itemKey = item[keyField] || path.join(',');
347
+ var childList = item[childrenField];
348
+ var hasChild = childList && childList.length > 0;
349
+ var isExpand = hasChild ? _xeUtils.default.isBoolean(item.expanded) ? item.expanded : defaultExpandMaps[itemKey] || !!expandAll : false;
350
+ if (isExpand) {
351
+ muInitMaps[itemId] = true;
352
+ }
353
+ var objItem = {
354
+ itemConf: item,
355
+ title: item[titleField],
356
+ name: item[keyField],
357
+ icon: item.icon,
358
+ linkUrl: item[linkUrlField],
359
+ linkTarget: item.linkTarget,
360
+ routerLink: item[routerLinkField],
361
+ permissionCode: item.permissionCode,
362
+ children: childList,
363
+ slots: item.slots,
364
+ parentKey: parentItem ? parentItem.name || path.slice(0, path.length - 1).join(',') : '',
198
365
  level: path.length,
199
- itemId: ++nemuUniqueKey,
200
- itemKey: item.name || path.join(','),
366
+ itemId: itemId,
367
+ itemKey: itemKey,
201
368
  isExactActive: false,
202
369
  isActive: false,
203
- isExpand: _xeUtils.default.isBoolean(item.expanded) ? item.expanded : !!expandAll,
204
- hasChild: item.children && item.children.length > 0
205
- });
370
+ isExpand: isExpand,
371
+ hasChild: hasChild,
372
+ childList: []
373
+ };
374
+ if (muKeyMaps[itemKey]) {
375
+ errLog('vxe.error.repeatKey', [keyField, item[keyField]]);
376
+ }
377
+ muCacheMaps[itemId] = objItem;
378
+ muKeyMaps[itemKey] = objItem;
206
379
  return objItem;
207
380
  }, {
208
381
  children: 'children',
209
382
  mapChildren: 'childList'
210
383
  });
384
+ internalData.menuInitMaps = muInitMaps;
385
+ internalData.menuCacheMaps = muCacheMaps;
386
+ internalData.menuKeyMaps = muKeyMaps;
211
387
  },
212
388
  updateCollapseStyle: function updateCollapseStyle() {
213
389
  var $xeMenu = this;
@@ -216,10 +392,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
216
392
  var collapseFixed = props.collapseFixed;
217
393
  if (collapseFixed) {
218
394
  $xeMenu.$nextTick(function () {
219
- var isEnterCollapse = reactData.isEnterCollapse;
220
395
  var isCollapsed = $xeMenu.computeIsCollapsed;
221
- var collapseEnterWidth = $xeMenu.computeCollapseEnterWidth;
222
- var collapseWidth = $xeMenu.computeCollapseWidth;
223
396
  var el = $xeMenu.$refs.refElem;
224
397
  if (el) {
225
398
  var clientRect = el.getBoundingClientRect();
@@ -228,7 +401,6 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
228
401
  top: (0, _dom.toCssUnit)(clientRect.top),
229
402
  left: (0, _dom.toCssUnit)(clientRect.left),
230
403
  height: (0, _dom.toCssUnit)(parentNode.clientHeight),
231
- width: isEnterCollapse ? collapseEnterWidth ? (0, _dom.toCssUnit)(collapseEnterWidth) : '' : collapseWidth ? (0, _dom.toCssUnit)(collapseWidth) : '',
232
404
  zIndex: reactData.collapseZindex
233
405
  } : {};
234
406
  }
@@ -264,7 +436,8 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
264
436
  var props = $xeMenu;
265
437
  var internalData = $xeMenu.internalData;
266
438
  var accordion = props.accordion;
267
- var menuEffectMaps = internalData.menuEffectMaps;
439
+ var menuEffectMaps = internalData.menuEffectMaps,
440
+ menuInitMaps = internalData.menuInitMaps;
268
441
  var itemId = item.itemId,
269
442
  hasChild = item.hasChild,
270
443
  isExpand = item.isExpand;
@@ -284,6 +457,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
284
457
  });
285
458
  }
286
459
  item.isExpand = expanded;
460
+ menuInitMaps[itemId] = true;
287
461
  var wrapperEl = isCollapsed ? $xeMenu.$refs.refCollapseElem : $xeMenu.$refs.refElem;
288
462
  if (wrapperEl) {
289
463
  var nemuEl = wrapperEl.querySelector(".vxe-menu--item-wrapper[data-menu-id=\"".concat(itemId, "\"]"));
@@ -322,7 +496,8 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
322
496
  if (!visibleMethod || visibleMethod({
323
497
  $menu: $xeMenu,
324
498
  options: options,
325
- currentMenu: item
499
+ currentMenu: item,
500
+ currentOption: item.itemConf
326
501
  })) {
327
502
  if (_ui.VxeUI.contextMenu) {
328
503
  _ui.VxeUI.contextMenu.openByEvent(evnt, {
@@ -335,6 +510,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
335
510
  var params = {
336
511
  menu: option,
337
512
  currentMenu: item,
513
+ currentOption: item.itemConf,
338
514
  $event: evnt,
339
515
  $menu: $xeMenu
340
516
  };
@@ -354,20 +530,29 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
354
530
  },
355
531
  handleClickMenu: function handleClickMenu(evnt, item, itemList) {
356
532
  var $xeMenu = this;
533
+ var reactData = $xeMenu.reactData;
534
+ var internalData = $xeMenu.internalData;
357
535
  var itemKey = item.itemKey,
536
+ linkUrl = item.linkUrl,
358
537
  routerLink = item.routerLink,
359
538
  hasChild = item.hasChild;
360
- if (routerLink) {
539
+ if (linkUrl || routerLink) {
361
540
  $xeMenu.emitModel(itemKey);
541
+ reactData.isEnterCollapse = false;
542
+ internalData.lastActiveTime = Date.now();
362
543
  } else {
363
544
  if (hasChild) {
364
545
  $xeMenu.handleClickIconCollapse(evnt, item, itemList);
365
546
  } else {
366
547
  $xeMenu.emitModel(itemKey);
548
+ reactData.isEnterCollapse = false;
549
+ internalData.lastActiveTime = Date.now();
367
550
  }
368
551
  }
369
552
  var params = {
370
553
  currentMenu: item,
554
+ currentOption: item.itemConf,
555
+ option: item.itemConf,
371
556
  // 已废弃
372
557
  menu: item
373
558
  };
@@ -376,29 +561,15 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
376
561
  handleMenuMouseenter: function handleMenuMouseenter() {
377
562
  var $xeMenu = this;
378
563
  var reactData = $xeMenu.reactData;
379
- var collapseStyle = reactData.collapseStyle;
380
- var collapseEnterWidth = $xeMenu.computeCollapseEnterWidth;
381
- reactData.collapseStyle = Object.assign({}, collapseStyle, {
382
- width: collapseEnterWidth ? (0, _dom.toCssUnit)(collapseEnterWidth) : ''
383
- });
384
- reactData.isEnterCollapse = true;
385
- },
386
- handleMenuMouseover: function handleMenuMouseover() {
387
- var $xeMenu = this;
388
- var reactData = $xeMenu.reactData;
389
- var isEnterCollapse = reactData.isEnterCollapse;
390
- if (!isEnterCollapse) {
391
- $xeMenu.handleMenuMouseenter();
564
+ var internalData = $xeMenu.internalData;
565
+ var lastActiveTime = internalData.lastActiveTime;
566
+ if (lastActiveTime < Date.now() - 500) {
567
+ reactData.isEnterCollapse = true;
392
568
  }
393
569
  },
394
570
  handleMenuMouseleave: function handleMenuMouseleave() {
395
571
  var $xeMenu = this;
396
572
  var reactData = $xeMenu.reactData;
397
- var collapseStyle = reactData.collapseStyle;
398
- var el = $xeMenu.$refs.refElem;
399
- reactData.collapseStyle = Object.assign({}, collapseStyle, {
400
- width: el ? (0, _dom.toCssUnit)(el.offsetWidth) : ''
401
- });
402
573
  reactData.isEnterCollapse = false;
403
574
  },
404
575
  //
@@ -419,9 +590,9 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
419
590
  var isCollapsed = $xeMenu.computeIsCollapsed;
420
591
  var params = {
421
592
  currentMenu: item,
422
- collapsed: isCollapsed,
423
- // 已废弃
424
- option: item
593
+ currentOption: item.itemConf,
594
+ option: item.itemConf,
595
+ collapsed: isCollapsed
425
596
  };
426
597
  return [optionSlot ? (0, _ui.renderEmptyElement)($xeMenu) : h('div', {
427
598
  class: 'vxe-menu--item-link-icon'
@@ -448,6 +619,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
448
619
  renderDefaultChildren: function renderDefaultChildren(h, item, itemList) {
449
620
  var $xeMenu = this;
450
621
  var reactData = $xeMenu.reactData;
622
+ var internalData = $xeMenu.internalData;
451
623
  var itemId = item.itemId,
452
624
  itemKey = item.itemKey,
453
625
  level = item.level,
@@ -455,54 +627,61 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
455
627
  isActive = item.isActive,
456
628
  isExactActive = item.isExactActive,
457
629
  isExpand = item.isExpand,
630
+ linkUrl = item.linkUrl,
458
631
  routerLink = item.routerLink,
632
+ linkTarget = item.linkTarget,
459
633
  childList = item.childList;
460
634
  var isEnterCollapse = reactData.isEnterCollapse;
635
+ var menuInitMaps = internalData.menuInitMaps;
461
636
  var isCollapsed = $xeMenu.computeIsCollapsed;
462
637
  if (item.permissionCode) {
463
638
  if (!_ui.permission.checkVisible(item.permissionCode)) {
464
639
  return (0, _ui.renderEmptyElement)($xeMenu);
465
640
  }
466
641
  }
642
+ var isExpandChild = (!isCollapsed || isEnterCollapse) && isExpand;
643
+ var linkOns = {
644
+ contextmenu: function contextmenu(evnt) {
645
+ $xeMenu.handleContextmenuEvent(evnt, item);
646
+ },
647
+ click: function click(evnt) {
648
+ $xeMenu.handleClickMenu(evnt, item, itemList);
649
+ }
650
+ };
467
651
  return h('div', {
468
652
  key: itemKey,
469
653
  class: ['vxe-menu--item-wrapper', "vxe-menu--item-level".concat(level), {
654
+ 'has--child': hasChild,
470
655
  'is--exact-active': isExactActive,
471
656
  'is--active': isActive,
472
- 'is--expand': (!isCollapsed || isEnterCollapse) && isExpand
657
+ 'is--expand': isExpandChild
473
658
  }],
474
659
  attrs: {
475
660
  'data-menu-id': itemId
476
661
  }
477
- }, [routerLink ? h('router-link', {
478
- class: 'vxe-menu--item-link',
662
+ }, [linkUrl ? h('a', {
663
+ class: 'vxe-menu--item-link is--link',
664
+ attrs: {
665
+ href: linkUrl,
666
+ target: linkTarget
667
+ },
668
+ on: linkOns
669
+ }, $xeMenu.renderMenuTitle(h, item, itemList)) : routerLink ? h('router-link', {
670
+ class: 'vxe-menu--item-link is--router',
479
671
  props: {
480
672
  custom: true,
481
- to: routerLink
673
+ to: routerLink,
674
+ target: linkTarget
482
675
  },
483
- on: {
484
- contextmenu: function contextmenu(evnt) {
485
- $xeMenu.handleContextmenuEvent(evnt, item);
486
- },
487
- click: function click(evnt) {
488
- $xeMenu.handleClickMenu(evnt, item, itemList);
489
- }
490
- }
676
+ on: linkOns
491
677
  }, $xeMenu.renderMenuTitle(h, item, itemList)) : h('div', {
492
- class: 'vxe-menu--item-link',
493
- on: {
494
- contextmenu: function contextmenu(evnt) {
495
- $xeMenu.handleContextmenuEvent(evnt, item);
496
- },
497
- click: function click(evnt) {
498
- $xeMenu.handleClickMenu(evnt, item, itemList);
499
- }
500
- }
678
+ class: 'vxe-menu--item-link is--default',
679
+ on: linkOns
501
680
  }, $xeMenu.renderMenuTitle(h, item, itemList)), hasChild ? h('div', {
502
681
  class: 'vxe-menu--item-group'
503
- }, childList.map(function (child) {
682
+ }, isExpandChild || menuInitMaps[itemId] ? childList.map(function (child) {
504
683
  return $xeMenu.renderDefaultChildren(h, child, childList);
505
- })) : (0, _ui.renderEmptyElement)($xeMenu)]);
684
+ }) : []) : (0, _ui.renderEmptyElement)($xeMenu)]);
506
685
  },
507
686
  renderCollapseChildren: function renderCollapseChildren(h, item, itemList) {
508
687
  var $xeMenu = this;
@@ -513,45 +692,50 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
513
692
  isActive = item.isActive,
514
693
  isExactActive = item.isExactActive,
515
694
  routerLink = item.routerLink,
695
+ linkUrl = item.linkUrl,
696
+ linkTarget = item.linkTarget,
516
697
  childList = item.childList;
517
698
  if (item.permissionCode) {
518
699
  if (!_ui.permission.checkVisible(item.permissionCode)) {
519
700
  return (0, _ui.renderEmptyElement)($xeMenu);
520
701
  }
521
702
  }
703
+ var linkOns = {
704
+ contextmenu: function contextmenu(evnt) {
705
+ $xeMenu.handleContextmenuEvent(evnt, item);
706
+ },
707
+ click: function click(evnt) {
708
+ $xeMenu.handleClickMenu(evnt, item, itemList);
709
+ }
710
+ };
522
711
  return h('div', {
523
712
  key: itemKey,
524
713
  class: ['vxe-menu--item-wrapper', "vxe-menu--item-level".concat(level), {
714
+ 'has--child': hasChild,
525
715
  'is--exact-active': isExactActive,
526
716
  'is--active': isActive
527
717
  }],
528
718
  attrs: {
529
719
  'data-menu-id': itemId
530
720
  }
531
- }, [routerLink ? h('router-link', {
532
- class: 'vxe-menu--item-link',
721
+ }, [linkUrl ? h('a', {
722
+ class: 'vxe-menu--item-link is--link',
723
+ attrs: {
724
+ href: linkUrl,
725
+ target: linkTarget
726
+ },
727
+ on: linkOns
728
+ }, $xeMenu.renderMenuTitle(h, item, itemList)) : routerLink ? h('router-link', {
729
+ class: 'vxe-menu--item-link is--router',
533
730
  props: {
534
731
  custom: true,
535
- to: routerLink
732
+ to: routerLink,
733
+ target: linkTarget
536
734
  },
537
- on: {
538
- contextmenu: function contextmenu(evnt) {
539
- $xeMenu.handleContextmenuEvent(evnt, item);
540
- },
541
- click: function click(evnt) {
542
- $xeMenu.handleClickMenu(evnt, item, itemList);
543
- }
544
- }
735
+ on: linkOns
545
736
  }, $xeMenu.renderMenuTitle(h, item, itemList)) : h('div', {
546
- class: 'vxe-menu--item-link',
547
- on: {
548
- contextmenu: function contextmenu(evnt) {
549
- $xeMenu.handleContextmenuEvent(evnt, item);
550
- },
551
- click: function click(evnt) {
552
- $xeMenu.handleClickMenu(evnt, item, itemList);
553
- }
554
- }
737
+ class: 'vxe-menu--item-link is--default',
738
+ on: linkOns
555
739
  }, $xeMenu.renderMenuTitle(h, item, itemList)), hasChild ? h('div', {
556
740
  class: 'vxe-menu--item-group'
557
741
  }, childList.map(function (child) {
@@ -561,6 +745,7 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
561
745
  renderVN: function renderVN(h) {
562
746
  var $xeMenu = this;
563
747
  var props = $xeMenu;
748
+ var slots = $xeMenu.$scopedSlots;
564
749
  var reactData = $xeMenu.reactData;
565
750
  var loading = props.loading,
566
751
  collapseFixed = props.collapseFixed;
@@ -570,31 +755,45 @@ var _default2 = exports.default = /* define-vxe-component start */(0, _comp.defi
570
755
  isEnterCollapse = reactData.isEnterCollapse;
571
756
  var vSize = $xeMenu.computeSize;
572
757
  var isCollapsed = $xeMenu.computeIsCollapsed;
758
+ var currBorder = $xeMenu.computeCurrBorder;
759
+ var varStyle = $xeMenu.computeVarStyle;
760
+ var headerSlot = slots.header;
761
+ var footerSlot = slots.footer;
573
762
  var ons = {};
574
763
  if (collapseFixed) {
575
764
  ons = {
576
765
  mouseenter: $xeMenu.handleMenuMouseenter,
577
- mouseover: $xeMenu.handleMenuMouseover,
578
766
  mouseleave: $xeMenu.handleMenuMouseleave
579
767
  };
580
768
  }
769
+ var stParams = {
770
+ collapsed: isCollapsed
771
+ };
581
772
  return h('div', {
582
773
  ref: 'refElem',
583
- class: ['vxe-menu', _defineProperty(_defineProperty(_defineProperty({}, "size--".concat(vSize), vSize), 'is--collapsed', isCollapsed), 'is--loading', loading)]
584
- }, [h('div', {
585
- class: 'vxe-menu--item-list'
774
+ class: ['vxe-menu', _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "border--".concat(currBorder), currBorder), "size--".concat(vSize), vSize), 'is--collapsed', isCollapsed), 'is--loading', loading)]
775
+ }, [headerSlot ? h('div', {
776
+ class: 'vxe-menu--header'
777
+ }, headerSlot(stParams)) : (0, _ui.renderEmptyElement)($xeMenu), h('div', {
778
+ class: 'vxe-menu--body'
586
779
  }, menuList.map(function (child) {
587
780
  return isCollapsed ? $xeMenu.renderCollapseChildren(h, child, menuList) : $xeMenu.renderDefaultChildren(h, child, menuList);
588
- })), initialized ? h('div', {
781
+ })), footerSlot ? h('div', {
782
+ class: 'vxe-menu--footer'
783
+ }, footerSlot(stParams)) : (0, _ui.renderEmptyElement)($xeMenu), initialized ? h('div', {
589
784
  ref: 'refCollapseElem',
590
785
  class: ['vxe-menu--collapse-wrapper', _defineProperty(_defineProperty(_defineProperty(_defineProperty({}, "size--".concat(vSize), vSize), 'is--collapsed', isCollapsed), 'is--enter', isEnterCollapse), 'is--loading', loading)],
591
- style: collapseStyle,
786
+ style: Object.assign({}, varStyle, collapseStyle),
592
787
  on: ons
593
- }, [isCollapsed ? h('div', {
594
- class: 'vxe-menu--item-list'
788
+ }, isCollapsed ? [headerSlot ? h('div', {
789
+ class: 'vxe-menu--header'
790
+ }, headerSlot(stParams)) : (0, _ui.renderEmptyElement)($xeMenu), h('div', {
791
+ class: 'vxe-menu--body'
595
792
  }, menuList.map(function (child) {
596
793
  return $xeMenu.renderDefaultChildren(h, child, menuList);
597
- })) : (0, _ui.renderEmptyElement)($xeMenu)]) : (0, _ui.renderEmptyElement)($xeMenu),
794
+ })), footerSlot ? h('div', {
795
+ class: 'vxe-menu--footer'
796
+ }, footerSlot(stParams)) : (0, _ui.renderEmptyElement)($xeMenu)] : []) : (0, _ui.renderEmptyElement)($xeMenu),
598
797
  /**
599
798
  * 加载中
600
799
  */