vxe-pc-ui 4.16.10 → 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.
Files changed (101) hide show
  1. package/dist/all.esm.js +282 -145
  2. package/dist/style.css +1 -1
  3. package/dist/style.min.css +1 -1
  4. package/es/icon/{iconfont.1783944746257.ttf → iconfont.1784122303243.ttf} +0 -0
  5. package/es/icon/iconfont.1784122303243.woff +0 -0
  6. package/es/icon/iconfont.1784122303243.woff2 +0 -0
  7. package/es/icon/style.css +33 -2
  8. package/es/icon/style.min.css +1 -1
  9. package/{lib/icon/style/iconfont.1783944746257.ttf → es/iconfont.1784122303243.ttf} +0 -0
  10. package/es/iconfont.1784122303243.woff +0 -0
  11. package/es/iconfont.1784122303243.woff2 +0 -0
  12. package/es/language/en-US.js +3 -3
  13. package/es/language/hy-AM.js +3 -3
  14. package/es/language/zh-CN.js +3 -3
  15. package/es/layout-aside/src/layout-aside.js +13 -20
  16. package/es/layout-aside/style.css +1 -3
  17. package/es/layout-aside/style.min.css +1 -1
  18. package/es/menu/src/menu.js +265 -121
  19. package/es/menu/style.css +51 -3
  20. package/es/menu/style.min.css +1 -1
  21. package/es/style.css +1 -1
  22. package/es/style.min.css +1 -1
  23. package/es/tree-select/src/tree-select.js +1 -1
  24. package/es/ui/index.js +1 -1
  25. package/es/ui/src/log.js +1 -1
  26. package/es/vxe-icon/style.css +33 -2
  27. package/es/vxe-icon/style.min.css +1 -1
  28. package/es/vxe-layout-aside/style.css +1 -3
  29. package/es/vxe-layout-aside/style.min.css +1 -1
  30. package/es/vxe-menu/style.css +51 -3
  31. package/es/vxe-menu/style.min.css +1 -1
  32. package/lib/{iconfont.1783944746257.ttf → icon/style/iconfont.1784122303243.ttf} +0 -0
  33. package/lib/icon/style/iconfont.1784122303243.woff +0 -0
  34. package/lib/icon/style/iconfont.1784122303243.woff2 +0 -0
  35. package/lib/icon/style/style.css +33 -2
  36. package/lib/icon/style/style.min.css +33 -2
  37. package/{es/iconfont.1783944746257.ttf → lib/iconfont.1784122303243.ttf} +0 -0
  38. package/lib/iconfont.1784122303243.woff +0 -0
  39. package/lib/iconfont.1784122303243.woff2 +0 -0
  40. package/lib/index.umd.js +300 -134
  41. package/lib/index.umd.min.js +1 -1
  42. package/lib/language/en-US.js +3 -3
  43. package/lib/language/en-US.min.js +1 -1
  44. package/lib/language/en-US.umd.js +3 -3
  45. package/lib/language/hy-AM.js +3 -3
  46. package/lib/language/hy-AM.min.js +1 -1
  47. package/lib/language/hy-AM.umd.js +3 -3
  48. package/lib/language/zh-CN.js +3 -3
  49. package/lib/language/zh-CN.min.js +1 -1
  50. package/lib/language/zh-CN.umd.js +3 -3
  51. package/lib/layout-aside/src/layout-aside.js +12 -18
  52. package/lib/layout-aside/src/layout-aside.min.js +1 -1
  53. package/lib/layout-aside/style/style.css +1 -3
  54. package/lib/layout-aside/style/style.min.css +1 -1
  55. package/lib/menu/src/menu.js +283 -116
  56. package/lib/menu/src/menu.min.js +1 -1
  57. package/lib/menu/style/style.css +51 -3
  58. package/lib/menu/style/style.min.css +1 -1
  59. package/lib/style.css +1 -1
  60. package/lib/style.min.css +1 -1
  61. package/lib/tree-select/src/tree-select.js +1 -1
  62. package/lib/tree-select/src/tree-select.min.js +1 -1
  63. package/lib/ui/index.js +1 -1
  64. package/lib/ui/index.min.js +1 -1
  65. package/lib/ui/src/log.js +1 -1
  66. package/lib/ui/src/log.min.js +1 -1
  67. package/lib/vxe-icon/style/style.css +33 -2
  68. package/lib/vxe-icon/style/style.min.css +1 -1
  69. package/lib/vxe-layout-aside/style/style.css +1 -3
  70. package/lib/vxe-layout-aside/style/style.min.css +1 -1
  71. package/lib/vxe-menu/style/style.css +51 -3
  72. package/lib/vxe-menu/style/style.min.css +1 -1
  73. package/package.json +2 -2
  74. package/packages/language/en-US.ts +3 -3
  75. package/packages/language/hy-AM.ts +3 -3
  76. package/packages/language/zh-CN.ts +3 -3
  77. package/packages/layout-aside/src/layout-aside.ts +15 -21
  78. package/packages/menu/src/menu.ts +302 -132
  79. package/packages/tree-select/src/tree-select.ts +1 -1
  80. package/styles/components/icon.scss +33 -4
  81. package/styles/components/layout-aside.scss +1 -3
  82. package/styles/components/menu.scss +64 -1
  83. package/styles/icon/iconfont.ttf +0 -0
  84. package/styles/icon/iconfont.woff +0 -0
  85. package/styles/icon/iconfont.woff2 +0 -0
  86. package/styles/theme/dark.scss +1 -0
  87. package/styles/theme/light.scss +1 -0
  88. package/styles/variable.scss +2 -1
  89. package/types/components/icon.d.ts +1 -1
  90. package/types/components/layout-aside.d.ts +5 -4
  91. package/types/components/menu.d.ts +65 -17
  92. package/types/components/table.d.ts +11 -11
  93. package/types/components/toolbar.d.ts +1 -1
  94. package/es/icon/iconfont.1783944746257.woff +0 -0
  95. package/es/icon/iconfont.1783944746257.woff2 +0 -0
  96. package/es/iconfont.1783944746257.woff +0 -0
  97. package/es/iconfont.1783944746257.woff2 +0 -0
  98. package/lib/icon/style/iconfont.1783944746257.woff +0 -0
  99. package/lib/icon/style/iconfont.1783944746257.woff2 +0 -0
  100. package/lib/iconfont.1783944746257.woff +0 -0
  101. package/lib/iconfont.1783944746257.woff2 +0 -0
package/dist/all.esm.js CHANGED
@@ -81,7 +81,7 @@ function checkDynamic() {
81
81
  }
82
82
 
83
83
  const { log } = VxeUI;
84
- const uiVersion = `ui v${"4.16.10"}`;
84
+ const uiVersion = `ui v${"4.16.11"}`;
85
85
  function createComponentLog(name) {
86
86
  const tableVersion = VxeUI.tableVersion ? `table v${VxeUI.tableVersion}` : '';
87
87
  const ganttVersion = VxeUI.ganttVersion ? `gantt v${VxeUI.ganttVersion}` : '';
@@ -95,7 +95,7 @@ function createComponentLog(name) {
95
95
  const warnLog$h = log.create('warn', uiVersion);
96
96
  log.create('error', uiVersion);
97
97
 
98
- const version = "4.16.10";
98
+ const version = "4.16.11";
99
99
  VxeUI.uiVersion = version;
100
100
  VxeUI.dynamicApp = dynamicApp;
101
101
  function config(options) {
@@ -866,7 +866,7 @@ var zhCN = {
866
866
  expError: '导出失败',
867
867
  expFilename: '导出_{0}',
868
868
  expOriginFilename: '导出_源_{0}',
869
- customTitle: '列设置',
869
+ customTitle: '个性化设置',
870
870
  customAll: '全部',
871
871
  customConfirm: '确认',
872
872
  customClose: '关闭',
@@ -950,7 +950,7 @@ var zhCN = {
950
950
  search: '搜索'
951
951
  },
952
952
  custom: {
953
- cstmTitle: '列设置',
953
+ cstmTitle: '个性化设置',
954
954
  cstmRestore: '恢复默认',
955
955
  cstmCancel: '取消',
956
956
  cstmConfirm: '确定',
@@ -1076,7 +1076,7 @@ var zhCN = {
1076
1076
  refresh: '刷新',
1077
1077
  zoomIn: '全屏',
1078
1078
  zoomOut: '还原',
1079
- custom: '列设置',
1079
+ custom: '个性化设置',
1080
1080
  customAll: '全部',
1081
1081
  customConfirm: '确认',
1082
1082
  customRestore: '重置',
@@ -27918,22 +27918,20 @@ var VxeLayoutAsideComponent = defineVxeComponent({
27918
27918
  const computeCollapseOpts = computed(() => {
27919
27919
  return Object.assign({}, getConfig$3().layoutAside.collapseConfig, props.collapseConfig);
27920
27920
  });
27921
- const computeWrapperWidth = computed(() => {
27922
- const { width, collapsed, collapseWidth } = props;
27923
- if (collapsed) {
27924
- if (collapseWidth) {
27925
- return toCssUnit(collapseWidth);
27926
- }
27921
+ const computeVarStyle = computed(() => {
27922
+ const { width, collapseWidth } = props;
27923
+ const stys = {};
27924
+ if (collapseWidth) {
27925
+ stys['--vxe-ui-layout-aside-collapse-width'] = toCssUnit(collapseWidth);
27927
27926
  }
27928
- else {
27929
- if (width) {
27930
- return toCssUnit(width);
27931
- }
27927
+ if (width) {
27928
+ stys['--vxe-ui-layout-aside-default-width'] = toCssUnit(width);
27932
27929
  }
27933
- return '';
27930
+ return stys;
27934
27931
  });
27935
27932
  const computeMaps = {
27936
- computeSize
27933
+ computeSize,
27934
+ computeVarStyle
27937
27935
  };
27938
27936
  const $xeLayoutAside = {
27939
27937
  xID,
@@ -27952,8 +27950,8 @@ var VxeLayoutAsideComponent = defineVxeComponent({
27952
27950
  const layoutAsidePrivateMethods = {};
27953
27951
  Object.assign($xeLayoutAside, layoutAsideMethods, layoutAsidePrivateMethods);
27954
27952
  const renderVN = () => {
27955
- const { width, collapsed, loading, padding } = props;
27956
- const wrapperWidth = computeWrapperWidth.value;
27953
+ const { collapsed, loading, padding } = props;
27954
+ const varStyle = computeVarStyle.value;
27957
27955
  const vSize = computeSize.value;
27958
27956
  const collapseOpts = computeCollapseOpts.value;
27959
27957
  const defaultSlot = slots.default;
@@ -27963,15 +27961,10 @@ var VxeLayoutAsideComponent = defineVxeComponent({
27963
27961
  [`size--${vSize}`]: vSize,
27964
27962
  'is--animat': collapseOpts.animation !== false,
27965
27963
  'is--padding': padding,
27966
- 'is--default-width': !width,
27967
27964
  'is--collapse': collapsed,
27968
27965
  'is--loading': loading
27969
27966
  }],
27970
- style: wrapperWidth
27971
- ? {
27972
- width: wrapperWidth
27973
- }
27974
- : null
27967
+ style: varStyle
27975
27968
  }, [
27976
27969
  h('div', {
27977
27970
  class: 'vxe-layout-aside--inner'
@@ -28451,6 +28444,10 @@ const { errLog: errLog$9 } = createComponentLog('menu');
28451
28444
  const { menus: menus$1, getConfig: getConfig$1, getIcon: getIcon$1 } = VxeUI;
28452
28445
  function createInternalData$8() {
28453
28446
  return {
28447
+ lastActiveTime: 0,
28448
+ menuInitMaps: {},
28449
+ menuCacheMaps: {},
28450
+ menuKeyMaps: {},
28454
28451
  menuEffectMaps: {}
28455
28452
  };
28456
28453
  }
@@ -28471,10 +28468,19 @@ var VxeMenuComponent = defineVxeComponent({
28471
28468
  props: {
28472
28469
  modelValue: [String, Number],
28473
28470
  expandAll: Boolean,
28471
+ expandKeys: Array,
28474
28472
  accordion: {
28475
28473
  type: Boolean,
28476
28474
  default: () => getConfig$1().menu.accordion
28477
28475
  },
28476
+ border: {
28477
+ type: [Boolean, String],
28478
+ default: () => getConfig$1().menu.border
28479
+ },
28480
+ optionProps: {
28481
+ type: Object,
28482
+ default: () => getConfig$1().menu.optionProps
28483
+ },
28478
28484
  collapsed: {
28479
28485
  type: Boolean,
28480
28486
  default: null
@@ -28512,6 +28518,36 @@ var VxeMenuComponent = defineVxeComponent({
28512
28518
  const computeMenuOpts = computed(() => {
28513
28519
  return Object.assign({}, getConfig$1().menu.menuConfig, props.menuConfig);
28514
28520
  });
28521
+ const computePropsOpts = computed(() => {
28522
+ return Object.assign({}, getConfig$1().menu.optionProps, props.optionProps);
28523
+ });
28524
+ const computeTitleField = computed(() => {
28525
+ const propsOpts = computePropsOpts.value;
28526
+ return propsOpts.title || 'title';
28527
+ });
28528
+ const computeKeyField = computed(() => {
28529
+ const propsOpts = computePropsOpts.value;
28530
+ return propsOpts.name || 'name';
28531
+ });
28532
+ const computeChildrenField = computed(() => {
28533
+ const propsOpts = computePropsOpts.value;
28534
+ return propsOpts.children || 'children';
28535
+ });
28536
+ const computeLinkUrlField = computed(() => {
28537
+ const propsOpts = computePropsOpts.value;
28538
+ return propsOpts.linkUrl || 'href';
28539
+ });
28540
+ const computeRouterLinkField = computed(() => {
28541
+ const propsOpts = computePropsOpts.value;
28542
+ return propsOpts.routerLink || 'routerLink';
28543
+ });
28544
+ const computeCurrBorder = computed(() => {
28545
+ const { border } = props;
28546
+ if (border) {
28547
+ return border === true ? 'first-group' : border;
28548
+ }
28549
+ return '';
28550
+ });
28515
28551
  const computeIsCollapsed = computed(() => {
28516
28552
  const { collapsed } = props;
28517
28553
  if (XEUtils.isBoolean(collapsed)) {
@@ -28522,19 +28558,13 @@ var VxeMenuComponent = defineVxeComponent({
28522
28558
  }
28523
28559
  return false;
28524
28560
  });
28525
- const computeCollapseWidth = computed(() => {
28526
- let collapseWidth = '';
28527
- if ($xeLayoutAside) {
28528
- collapseWidth = $xeLayoutAside.props.collapseWidth || '';
28529
- }
28530
- return collapseWidth;
28531
- });
28532
- const computeCollapseEnterWidth = computed(() => {
28533
- let width = '';
28561
+ const computeVarStyle = computed(() => {
28534
28562
  if ($xeLayoutAside) {
28535
- width = $xeLayoutAside.props.width || '';
28563
+ const { computeVarStyle: asideComputeVarStyle } = $xeLayoutAside.getComputeMaps();
28564
+ const asideVarStyle = asideComputeVarStyle.value;
28565
+ return asideVarStyle;
28536
28566
  }
28537
- return width;
28567
+ return {};
28538
28568
  });
28539
28569
  const computeMaps = {
28540
28570
  computeSize
@@ -28544,6 +28574,7 @@ var VxeMenuComponent = defineVxeComponent({
28544
28574
  props,
28545
28575
  context,
28546
28576
  reactData,
28577
+ internalData,
28547
28578
  getRefMaps: () => refMaps,
28548
28579
  getComputeMaps: () => computeMaps
28549
28580
  };
@@ -28557,12 +28588,14 @@ var VxeMenuComponent = defineVxeComponent({
28557
28588
  };
28558
28589
  const updateActiveMenu = (isDefExpand) => {
28559
28590
  const { activeName } = reactData;
28560
- XEUtils.eachTree(reactData.menuList, (item, index, items, path, parent, nodes) => {
28591
+ const { menuInitMaps } = internalData;
28592
+ XEUtils.eachTree(reactData.menuList, (item, index, items, path, parentItem, nodes) => {
28561
28593
  if (item.itemKey === activeName) {
28562
28594
  nodes.forEach(obj => {
28563
28595
  obj.isActive = true;
28564
28596
  {
28565
28597
  obj.isExpand = true;
28598
+ menuInitMaps[obj.itemId] = true;
28566
28599
  }
28567
28600
  });
28568
28601
  item.isExactActive = true;
@@ -28574,20 +28607,67 @@ var VxeMenuComponent = defineVxeComponent({
28574
28607
  }, { children: 'childList' });
28575
28608
  };
28576
28609
  const updateMenuConfig = () => {
28577
- const { options, expandAll } = props;
28578
- reactData.menuList = XEUtils.mapTree(options, (item, index, items, path, parent) => {
28579
- const objItem = Object.assign(Object.assign({}, item), { parentKey: parent ? (parent.name || path.slice(0, path.length - 1).join(',')) : '', level: path.length, itemId: ++nemuUniqueKey, itemKey: item.name || path.join(','), isExactActive: false, isActive: false, isExpand: XEUtils.isBoolean(item.expanded) ? item.expanded : !!expandAll, hasChild: item.children && item.children.length > 0 });
28610
+ const { options, expandAll, expandKeys } = props;
28611
+ const muInitMaps = {};
28612
+ const titleField = computeTitleField.value;
28613
+ const keyField = computeKeyField.value;
28614
+ const childrenField = computeChildrenField.value;
28615
+ const linkUrlField = computeLinkUrlField.value;
28616
+ const routerLinkField = computeRouterLinkField.value;
28617
+ const defaultExpandMaps = {};
28618
+ if (expandKeys) {
28619
+ expandKeys.forEach(key => {
28620
+ defaultExpandMaps[key] = true;
28621
+ });
28622
+ }
28623
+ const muCacheMaps = {};
28624
+ const muKeyMaps = {};
28625
+ reactData.menuList = XEUtils.mapTree(options, (item, index, items, path, parentItem) => {
28626
+ const itemId = ++nemuUniqueKey;
28627
+ const itemKey = item[keyField] || path.join(',');
28628
+ const childList = item[childrenField];
28629
+ const hasChild = childList && childList.length > 0;
28630
+ const isExpand = hasChild ? (XEUtils.isBoolean(item.expanded) ? item.expanded : (defaultExpandMaps[itemKey] || !!expandAll)) : false;
28631
+ if (isExpand) {
28632
+ muInitMaps[itemId] = true;
28633
+ }
28634
+ const objItem = {
28635
+ itemConf: item,
28636
+ title: item[titleField],
28637
+ name: item[keyField],
28638
+ icon: item.icon,
28639
+ linkUrl: item[linkUrlField],
28640
+ linkTarget: item.linkTarget,
28641
+ routerLink: item[routerLinkField],
28642
+ permissionCode: item.permissionCode,
28643
+ children: childList,
28644
+ slots: item.slots,
28645
+ parentKey: parentItem ? (parentItem.name || path.slice(0, path.length - 1).join(',')) : '',
28646
+ level: path.length,
28647
+ itemId,
28648
+ itemKey,
28649
+ isExactActive: false,
28650
+ isActive: false,
28651
+ isExpand,
28652
+ hasChild,
28653
+ childList: []
28654
+ };
28655
+ if (muKeyMaps[itemKey]) {
28656
+ errLog$9('vxe.error.repeatKey', [keyField, item[keyField]]);
28657
+ }
28658
+ muCacheMaps[itemId] = objItem;
28659
+ muKeyMaps[itemKey] = objItem;
28580
28660
  return objItem;
28581
28661
  }, { children: 'children', mapChildren: 'childList' });
28662
+ internalData.menuInitMaps = muInitMaps;
28663
+ internalData.menuCacheMaps = muCacheMaps;
28664
+ internalData.menuKeyMaps = muKeyMaps;
28582
28665
  };
28583
28666
  const updateCollapseStyle = () => {
28584
28667
  const { collapseFixed } = props;
28585
28668
  if (collapseFixed) {
28586
28669
  nextTick(() => {
28587
- const { isEnterCollapse } = reactData;
28588
28670
  const isCollapsed = computeIsCollapsed.value;
28589
- const collapseEnterWidth = computeCollapseEnterWidth.value;
28590
- const collapseWidth = computeCollapseWidth.value;
28591
28671
  const el = refElem.value;
28592
28672
  if (el) {
28593
28673
  const clientRect = el.getBoundingClientRect();
@@ -28597,7 +28677,6 @@ var VxeMenuComponent = defineVxeComponent({
28597
28677
  top: toCssUnit(clientRect.top),
28598
28678
  left: toCssUnit(clientRect.left),
28599
28679
  height: toCssUnit(parentNode.clientHeight),
28600
- width: isEnterCollapse ? (collapseEnterWidth ? toCssUnit(collapseEnterWidth) : '') : (collapseWidth ? toCssUnit(collapseWidth) : ''),
28601
28680
  zIndex: reactData.collapseZindex
28602
28681
  }
28603
28682
  : {};
@@ -28613,12 +28692,6 @@ var VxeMenuComponent = defineVxeComponent({
28613
28692
  if (isCollapsed) {
28614
28693
  if (!initialized) {
28615
28694
  reactData.initialized = true;
28616
- nextTick(() => {
28617
- const collapseEl = refCollapseElem.value;
28618
- if (collapseEl) {
28619
- document.body.appendChild(collapseEl);
28620
- }
28621
- });
28622
28695
  }
28623
28696
  }
28624
28697
  reactData.isEnterCollapse = false;
@@ -28628,7 +28701,7 @@ var VxeMenuComponent = defineVxeComponent({
28628
28701
  };
28629
28702
  const handleClickIconCollapse = (evnt, item, itemList) => {
28630
28703
  const { accordion } = props;
28631
- const { menuEffectMaps } = internalData;
28704
+ const { menuEffectMaps, menuInitMaps } = internalData;
28632
28705
  const { itemId, hasChild, isExpand } = item;
28633
28706
  const isCollapsed = computeIsCollapsed.value;
28634
28707
  const expanded = !isExpand;
@@ -28646,6 +28719,7 @@ var VxeMenuComponent = defineVxeComponent({
28646
28719
  });
28647
28720
  }
28648
28721
  item.isExpand = expanded;
28722
+ menuInitMaps[itemId] = true;
28649
28723
  const wrapperEl = isCollapsed ? refCollapseElem.value : refElem.value;
28650
28724
  if (wrapperEl) {
28651
28725
  const nemuEl = wrapperEl.querySelector(`.vxe-menu--item-wrapper[data-menu-id="${itemId}"]`);
@@ -28683,7 +28757,7 @@ var VxeMenuComponent = defineVxeComponent({
28683
28757
  const menuOpts = computeMenuOpts.value;
28684
28758
  if (menuConfig ? isEnableConf(menuOpts) : menuOpts.enabled) {
28685
28759
  const { options, visibleMethod } = menuOpts;
28686
- if (!visibleMethod || visibleMethod({ $menu: $xeMenu, options, currentMenu: item })) {
28760
+ if (!visibleMethod || visibleMethod({ $menu: $xeMenu, options, currentMenu: item, currentOption: item.itemConf })) {
28687
28761
  if (VxeUI.contextMenu) {
28688
28762
  VxeUI.contextMenu.openByEvent(evnt, {
28689
28763
  options,
@@ -28692,7 +28766,7 @@ var VxeMenuComponent = defineVxeComponent({
28692
28766
  const { option } = eventParams;
28693
28767
  const gMenuOpts = menus$1.get(option.code);
28694
28768
  const mmMethod = gMenuOpts ? gMenuOpts.menuMenuMethod : null;
28695
- const params = { menu: option, currentMenu: item, $event: evnt, $menu: $xeMenu };
28769
+ const params = { menu: option, currentMenu: item, currentOption: item.itemConf, $event: evnt, $menu: $xeMenu };
28696
28770
  if (mmMethod) {
28697
28771
  mmMethod(params, evnt);
28698
28772
  }
@@ -28706,10 +28780,11 @@ var VxeMenuComponent = defineVxeComponent({
28706
28780
  dispatchEvent('option-menu', { currentMenu: item }, evnt);
28707
28781
  };
28708
28782
  const handleClickMenu = (evnt, item, itemList) => {
28709
- const { itemKey, routerLink, hasChild } = item;
28710
- if (routerLink) {
28783
+ const { itemKey, linkUrl, routerLink, hasChild } = item;
28784
+ if (linkUrl || routerLink) {
28711
28785
  emitModel(itemKey);
28712
- handleMenuMouseleave();
28786
+ reactData.isEnterCollapse = false;
28787
+ internalData.lastActiveTime = Date.now();
28713
28788
  }
28714
28789
  else {
28715
28790
  if (hasChild) {
@@ -28717,36 +28792,26 @@ var VxeMenuComponent = defineVxeComponent({
28717
28792
  }
28718
28793
  else {
28719
28794
  emitModel(itemKey);
28720
- handleMenuMouseleave();
28795
+ reactData.isEnterCollapse = false;
28796
+ internalData.lastActiveTime = Date.now();
28721
28797
  }
28722
28798
  }
28723
28799
  const params = {
28724
28800
  currentMenu: item,
28801
+ currentOption: item.itemConf,
28802
+ option: item.itemConf,
28725
28803
  // 已废弃
28726
28804
  menu: item
28727
28805
  };
28728
28806
  dispatchEvent('click', params, evnt);
28729
28807
  };
28730
28808
  const handleMenuMouseenter = () => {
28731
- const { collapseStyle } = reactData;
28732
- const collapseEnterWidth = computeCollapseEnterWidth.value;
28733
- reactData.collapseStyle = Object.assign({}, collapseStyle, {
28734
- width: collapseEnterWidth ? toCssUnit(collapseEnterWidth) : ''
28735
- });
28736
- reactData.isEnterCollapse = true;
28737
- };
28738
- const handleMenuMouseover = () => {
28739
- const { isEnterCollapse } = reactData;
28740
- if (!isEnterCollapse) {
28741
- handleMenuMouseenter();
28809
+ const { lastActiveTime } = internalData;
28810
+ if (lastActiveTime < Date.now() - 500) {
28811
+ reactData.isEnterCollapse = true;
28742
28812
  }
28743
28813
  };
28744
28814
  const handleMenuMouseleave = () => {
28745
- const { collapseStyle } = reactData;
28746
- const el = refElem.value;
28747
- reactData.collapseStyle = Object.assign({}, collapseStyle, {
28748
- width: el ? toCssUnit(el.offsetWidth) : ''
28749
- });
28750
28815
  reactData.isEnterCollapse = false;
28751
28816
  };
28752
28817
  const callSlot = (slotFunc, params) => {
@@ -28763,8 +28828,69 @@ var VxeMenuComponent = defineVxeComponent({
28763
28828
  const dispatchEvent = (type, params, evnt) => {
28764
28829
  emit(type, createEvent(evnt, { $menu: $xeMenu }, params));
28765
28830
  };
28831
+ const handleScrollToView = (itemId) => {
28832
+ const wrapperEl = refElem.value;
28833
+ const nemuEl = wrapperEl ? wrapperEl.querySelector(`.vxe-menu--item-wrapper[data-menu-id="${itemId}"]`) : null;
28834
+ if (nemuEl) {
28835
+ scrollToView(nemuEl);
28836
+ return true;
28837
+ }
28838
+ return false;
28839
+ };
28766
28840
  const menuMethods = {
28767
- dispatchEvent
28841
+ dispatchEvent,
28842
+ setExpandByMenuKey(menuKeys, expanded) {
28843
+ const { menuKeyMaps, menuInitMaps } = internalData;
28844
+ if (menuKeys) {
28845
+ if (!XEUtils.isArray(menuKeys)) {
28846
+ menuKeys = [menuKeys];
28847
+ }
28848
+ menuKeys.forEach(mKey => {
28849
+ const menuItem = menuKeyMaps[mKey];
28850
+ if (menuItem) {
28851
+ if (expanded) {
28852
+ menuInitMaps[menuItem.itemId] = true;
28853
+ }
28854
+ menuItem.isExpand = !!expanded;
28855
+ }
28856
+ });
28857
+ }
28858
+ return nextTick();
28859
+ },
28860
+ clearAllExpandMenu() {
28861
+ const { menuList } = reactData;
28862
+ XEUtils.eachTree(menuList, (item) => {
28863
+ item.isExpand = false;
28864
+ }, { children: 'childList' });
28865
+ internalData.menuInitMaps = {};
28866
+ return nextTick();
28867
+ },
28868
+ scrollToMenuKey(menuKey) {
28869
+ const { menuKeyMaps } = internalData;
28870
+ const menuItem = menuKeyMaps[menuKey];
28871
+ if (!menuItem) {
28872
+ return nextTick();
28873
+ }
28874
+ const { itemId } = menuItem;
28875
+ if (handleScrollToView(itemId)) {
28876
+ return nextTick();
28877
+ }
28878
+ return nextTick().then(() => {
28879
+ handleScrollToView(itemId);
28880
+ });
28881
+ },
28882
+ scrollToActiveMenu() {
28883
+ const { activeName } = reactData;
28884
+ if (activeName) {
28885
+ return $xeMenu.scrollToMenuKey(activeName);
28886
+ }
28887
+ return nextTick().then(() => {
28888
+ const { activeName } = reactData;
28889
+ if (activeName) {
28890
+ return $xeMenu.scrollToMenuKey(activeName);
28891
+ }
28892
+ });
28893
+ }
28768
28894
  };
28769
28895
  const menuPrivateMethods = {};
28770
28896
  Object.assign($xeMenu, menuMethods, menuPrivateMethods);
@@ -28778,9 +28904,9 @@ var VxeMenuComponent = defineVxeComponent({
28778
28904
  const isCollapsed = computeIsCollapsed.value;
28779
28905
  const params = {
28780
28906
  currentMenu: item,
28781
- collapsed: isCollapsed,
28782
- // 已废弃
28783
- option: item
28907
+ currentOption: item.itemConf,
28908
+ option: item.itemConf,
28909
+ collapsed: isCollapsed
28784
28910
  };
28785
28911
  return [
28786
28912
  optionSlot
@@ -28817,89 +28943,79 @@ var VxeMenuComponent = defineVxeComponent({
28817
28943
  ];
28818
28944
  };
28819
28945
  const renderDefaultChildren = (item, itemList) => {
28820
- const { itemId, itemKey, level, hasChild, isActive, isExactActive, isExpand, routerLink, childList } = item;
28946
+ const { itemId, itemKey, level, hasChild, isActive, isExactActive, isExpand, linkUrl, routerLink, linkTarget, childList } = item;
28821
28947
  const { isEnterCollapse } = reactData;
28948
+ const { menuInitMaps } = internalData;
28822
28949
  const isCollapsed = computeIsCollapsed.value;
28823
28950
  if (item.permissionCode) {
28824
28951
  if (!permission.checkVisible(item.permissionCode)) {
28825
28952
  return renderEmptyElement($xeMenu);
28826
28953
  }
28827
28954
  }
28955
+ const isExpandChild = (!isCollapsed || isEnterCollapse) && isExpand;
28956
+ const linkOns = {
28957
+ onContextmenu(evnt) {
28958
+ handleContextmenuEvent(evnt, item);
28959
+ },
28960
+ onClick(evnt) {
28961
+ handleClickMenu(evnt, item, itemList);
28962
+ }
28963
+ };
28828
28964
  return h('div', {
28829
28965
  key: itemKey,
28830
28966
  class: ['vxe-menu--item-wrapper', `vxe-menu--item-level${level}`, {
28967
+ 'has--child': hasChild,
28831
28968
  'is--exact-active': isExactActive,
28832
28969
  'is--active': isActive,
28833
- 'is--expand': (!isCollapsed || isEnterCollapse) && isExpand
28970
+ 'is--expand': isExpandChild
28834
28971
  }],
28835
28972
  'data-menu-id': itemId
28836
28973
  }, [
28837
- routerLink
28838
- ? h(resolveComponent('router-link'), {
28839
- class: 'vxe-menu--item-link',
28840
- to: routerLink,
28841
- onContextmenu(evnt) {
28842
- handleContextmenuEvent(evnt, item);
28843
- },
28844
- onClick(evnt) {
28845
- handleClickMenu(evnt, item, itemList);
28846
- }
28847
- }, {
28848
- default: () => renderMenuTitle(item, itemList)
28849
- })
28850
- : h('div', {
28851
- class: 'vxe-menu--item-link',
28852
- onContextmenu(evnt) {
28853
- handleContextmenuEvent(evnt, item);
28854
- },
28855
- onClick(evnt) {
28856
- handleClickMenu(evnt, item, itemList);
28857
- }
28858
- }, renderMenuTitle(item, itemList)),
28974
+ linkUrl
28975
+ ? h('a', Object.assign({ class: 'vxe-menu--item-link is--link', href: linkUrl, target: linkTarget }, linkOns), renderMenuTitle(item, itemList))
28976
+ : (routerLink
28977
+ ? h(resolveComponent('router-link'), Object.assign({ class: 'vxe-menu--item-link is--router', to: routerLink, target: linkTarget }, linkOns), {
28978
+ default: () => renderMenuTitle(item, itemList)
28979
+ })
28980
+ : h('div', Object.assign({ class: 'vxe-menu--item-link is--default' }, linkOns), renderMenuTitle(item, itemList))),
28859
28981
  hasChild
28860
28982
  ? h('div', {
28861
28983
  class: 'vxe-menu--item-group'
28862
- }, childList.map(child => renderDefaultChildren(child, childList)))
28984
+ }, isExpandChild || menuInitMaps[itemId] ? childList.map(child => renderDefaultChildren(child, childList)) : [])
28863
28985
  : renderEmptyElement($xeMenu)
28864
28986
  ]);
28865
28987
  };
28866
28988
  const renderCollapseChildren = (item, itemList) => {
28867
- const { itemId, itemKey, level, hasChild, isActive, isExactActive, routerLink, childList } = item;
28989
+ const { itemId, itemKey, level, hasChild, isActive, isExactActive, routerLink, linkUrl, linkTarget, childList } = item;
28868
28990
  if (item.permissionCode) {
28869
28991
  if (!permission.checkVisible(item.permissionCode)) {
28870
28992
  return renderEmptyElement($xeMenu);
28871
28993
  }
28872
28994
  }
28995
+ const linkOns = {
28996
+ onContextmenu(evnt) {
28997
+ handleContextmenuEvent(evnt, item);
28998
+ },
28999
+ onClick(evnt) {
29000
+ handleClickMenu(evnt, item, itemList);
29001
+ }
29002
+ };
28873
29003
  return h('div', {
28874
29004
  key: itemKey,
28875
29005
  class: ['vxe-menu--item-wrapper', `vxe-menu--item-level${level}`, {
29006
+ 'has--child': hasChild,
28876
29007
  'is--exact-active': isExactActive,
28877
29008
  'is--active': isActive
28878
29009
  }],
28879
29010
  'data-menu-id': itemId
28880
29011
  }, [
28881
- routerLink
28882
- ? h(resolveComponent('router-link'), {
28883
- class: 'vxe-menu--item-link',
28884
- to: routerLink,
28885
- onContextmenu(evnt) {
28886
- handleContextmenuEvent(evnt, item);
28887
- },
28888
- onClick(evnt) {
28889
- handleClickMenu(evnt, item, itemList);
28890
- }
28891
- }, {
28892
- default: () => renderMenuTitle(item, itemList)
28893
- })
28894
- : h('div', {
28895
- class: 'vxe-menu--item-link',
28896
- onContextmenu(evnt) {
28897
- handleContextmenuEvent(evnt, item);
28898
- },
28899
- onClick(evnt) {
28900
- handleClickMenu(evnt, item, itemList);
28901
- }
28902
- }, renderMenuTitle(item, itemList)),
29012
+ linkUrl
29013
+ ? h('a', Object.assign({ class: 'vxe-menu--item-link is--link', href: linkUrl, target: linkTarget }, linkOns), renderMenuTitle(item, itemList))
29014
+ : (routerLink
29015
+ ? h(resolveComponent('router-link'), Object.assign({ class: 'vxe-menu--item-link is--router', to: routerLink, target: linkTarget }, linkOns), {
29016
+ default: () => renderMenuTitle(item, itemList)
29017
+ })
29018
+ : h('div', Object.assign({ class: 'vxe-menu--item-link is--default' }, linkOns), renderMenuTitle(item, itemList))),
28903
29019
  hasChild
28904
29020
  ? h('div', {
28905
29021
  class: 'vxe-menu--item-group'
@@ -28912,39 +29028,67 @@ var VxeMenuComponent = defineVxeComponent({
28912
29028
  const { initialized, menuList, collapseStyle, isEnterCollapse } = reactData;
28913
29029
  const vSize = computeSize.value;
28914
29030
  const isCollapsed = computeIsCollapsed.value;
29031
+ const currBorder = computeCurrBorder.value;
29032
+ const varStyle = computeVarStyle.value;
29033
+ const headerSlot = slots.header;
29034
+ const footerSlot = slots.footer;
28915
29035
  let ons = {};
28916
29036
  if (collapseFixed) {
28917
29037
  ons = {
28918
29038
  onMouseenter: handleMenuMouseenter,
28919
- onMouseover: handleMenuMouseover,
28920
29039
  onMouseleave: handleMenuMouseleave
28921
29040
  };
28922
29041
  }
29042
+ const stParams = { collapsed: isCollapsed };
28923
29043
  return h('div', {
28924
29044
  ref: refElem,
28925
29045
  class: ['vxe-menu', {
29046
+ [`border--${currBorder}`]: currBorder,
28926
29047
  [`size--${vSize}`]: vSize,
28927
29048
  'is--collapsed': isCollapsed,
28928
29049
  'is--loading': loading
28929
29050
  }]
28930
29051
  }, [
29052
+ headerSlot
29053
+ ? h('div', {
29054
+ class: 'vxe-menu--header'
29055
+ }, headerSlot(stParams))
29056
+ : renderEmptyElement($xeMenu),
28931
29057
  h('div', {
28932
- class: 'vxe-menu--item-list'
29058
+ class: 'vxe-menu--body'
28933
29059
  }, menuList.map(child => isCollapsed ? renderCollapseChildren(child, menuList) : renderDefaultChildren(child, menuList))),
28934
- initialized
28935
- ? h('div', Object.assign({ ref: refCollapseElem, class: ['vxe-menu--collapse-wrapper', {
29060
+ footerSlot
29061
+ ? h('div', {
29062
+ class: 'vxe-menu--footer'
29063
+ }, footerSlot(stParams))
29064
+ : renderEmptyElement($xeMenu),
29065
+ h(Teleport, {
29066
+ to: 'body',
29067
+ disabled: !initialized
29068
+ }, [
29069
+ h('div', Object.assign({ ref: refCollapseElem, class: ['vxe-menu--collapse-wrapper', {
28936
29070
  [`size--${vSize}`]: vSize,
28937
29071
  'is--collapsed': isCollapsed,
28938
29072
  'is--enter': isEnterCollapse,
28939
29073
  'is--loading': loading
28940
- }], style: collapseStyle }, ons), [
28941
- isCollapsed
28942
- ? h('div', {
28943
- class: 'vxe-menu--item-list'
28944
- }, menuList.map(child => renderDefaultChildren(child, menuList)))
28945
- : renderEmptyElement($xeMenu)
28946
- ])
28947
- : renderEmptyElement($xeMenu),
29074
+ }], style: Object.assign({}, varStyle, collapseStyle) }, ons), isCollapsed
29075
+ ? [
29076
+ headerSlot
29077
+ ? h('div', {
29078
+ class: 'vxe-menu--header'
29079
+ }, headerSlot(stParams))
29080
+ : renderEmptyElement($xeMenu),
29081
+ h('div', {
29082
+ class: 'vxe-menu--body'
29083
+ }, menuList.map(child => renderDefaultChildren(child, menuList))),
29084
+ footerSlot
29085
+ ? h('div', {
29086
+ class: 'vxe-menu--footer'
29087
+ }, footerSlot(stParams))
29088
+ : renderEmptyElement($xeMenu)
29089
+ ]
29090
+ : [])
29091
+ ]),
28948
29092
  /**
28949
29093
  * 加载中
28950
29094
  */
@@ -28984,13 +29128,6 @@ var VxeMenuComponent = defineVxeComponent({
28984
29128
  updateCollapseStyle();
28985
29129
  });
28986
29130
  onBeforeUnmount(() => {
28987
- const collapseEl = refCollapseElem.value;
28988
- if (collapseEl) {
28989
- const parentNode = collapseEl.parentNode;
28990
- if (parentNode) {
28991
- parentNode.removeChild(collapseEl);
28992
- }
28993
- }
28994
29131
  globalEvents.off($xeMenu, 'resize');
28995
29132
  XEUtils.assign(reactData, createReactData$9());
28996
29133
  XEUtils.assign(internalData, createInternalData$8());
@@ -44252,7 +44389,7 @@ var VxeTreeSelectComponent = defineVxeComponent({
44252
44389
  });
44253
44390
  });
44254
44391
  const computePropsOpts = computed(() => {
44255
- return props.optionProps || {};
44392
+ return Object.assign({}, getConfig$3().treeSelect.optionProps, props.optionProps);
44256
44393
  });
44257
44394
  const computeNodeKeyField = computed(() => {
44258
44395
  const treeOpts = computeTreeOpts.value;