ele-admin-plus 1.2.1-beta.4 → 1.2.1-beta.5

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 (51) hide show
  1. package/es/ele-app/style/overwrite/date-picker/index.scss +13 -11
  2. package/es/ele-cropper/components/cropper-tools.js +2 -2
  3. package/es/ele-data-table/components/table-columns.js +12 -2
  4. package/es/ele-data-table/index.d.ts +122 -0
  5. package/es/ele-data-table/style/index.scss +0 -4
  6. package/es/ele-data-table/types.d.ts +3 -0
  7. package/es/ele-drawer/index.d.ts +1 -0
  8. package/es/ele-drawer/index.js +8 -2
  9. package/es/ele-dropdown/components/dropdown-menu-item.d.ts +39 -0
  10. package/es/ele-dropdown/components/dropdown-menu-item.js +132 -0
  11. package/es/ele-dropdown/components/dropdown-menus.d.ts +44 -0
  12. package/es/ele-dropdown/components/dropdown-menus.js +111 -0
  13. package/es/ele-dropdown/components/pro-dropdown.d.ts +2 -1
  14. package/es/ele-dropdown/components/pro-dropdown.js +64 -63
  15. package/es/ele-dropdown/index.d.ts +9 -7
  16. package/es/ele-dropdown/index.js +3 -1
  17. package/es/ele-dropdown/style/index.scss +52 -1
  18. package/es/ele-dropdown/types.d.ts +2 -0
  19. package/es/ele-popconfirm/index.js +31 -24
  20. package/es/ele-pro-layout/index.js +7 -2
  21. package/es/ele-pro-table/components/table-tools.d.ts +2 -3
  22. package/es/ele-pro-table/components/table-tools.js +22 -13
  23. package/es/ele-pro-table/index.d.ts +2 -6
  24. package/es/ele-tabs/index.js +1 -1
  25. package/es/style/themes/default.scss +4 -2
  26. package/lib/ele-app/style/overwrite/date-picker/index.scss +13 -11
  27. package/lib/ele-cropper/components/cropper-tools.cjs +1 -1
  28. package/lib/ele-data-table/components/table-columns.cjs +11 -1
  29. package/lib/ele-data-table/index.d.ts +122 -0
  30. package/lib/ele-data-table/style/index.scss +0 -4
  31. package/lib/ele-data-table/types.d.ts +3 -0
  32. package/lib/ele-drawer/index.cjs +8 -2
  33. package/lib/ele-drawer/index.d.ts +1 -0
  34. package/lib/ele-dropdown/components/dropdown-menu-item.cjs +131 -0
  35. package/lib/ele-dropdown/components/dropdown-menu-item.d.ts +39 -0
  36. package/lib/ele-dropdown/components/dropdown-menus.cjs +110 -0
  37. package/lib/ele-dropdown/components/dropdown-menus.d.ts +44 -0
  38. package/lib/ele-dropdown/components/pro-dropdown.cjs +62 -61
  39. package/lib/ele-dropdown/components/pro-dropdown.d.ts +2 -1
  40. package/lib/ele-dropdown/index.cjs +2 -0
  41. package/lib/ele-dropdown/index.d.ts +9 -7
  42. package/lib/ele-dropdown/style/index.scss +52 -1
  43. package/lib/ele-dropdown/types.d.ts +2 -0
  44. package/lib/ele-popconfirm/index.cjs +31 -24
  45. package/lib/ele-pro-layout/index.cjs +6 -1
  46. package/lib/ele-pro-table/components/table-tools.cjs +21 -12
  47. package/lib/ele-pro-table/components/table-tools.d.ts +2 -3
  48. package/lib/ele-pro-table/index.d.ts +2 -6
  49. package/lib/ele-tabs/index.cjs +1 -1
  50. package/lib/style/themes/default.scss +4 -2
  51. package/package.json +9 -9
@@ -5,10 +5,11 @@ const icons = require("../../icons");
5
5
  const core = require("../../utils/core");
6
6
  const EleTooltip = require("../../ele-tooltip/index");
7
7
  const props$1 = require("../../ele-tooltip/props");
8
+ const DropdownMenus = require("./dropdown-menus");
8
9
  const props = require("../props");
9
10
  const _sfc_main = vue.defineComponent({
10
11
  name: "ProDropdown",
11
- components: { ElIcon: elementPlus.ElIcon, ElButtonGroup: elementPlus.ElButtonGroup, ElButton: elementPlus.ElButton, ElScrollbar: elementPlus.ElScrollbar, EleTooltip },
12
+ components: { ElButton: elementPlus.ElButton, ElScrollbar: elementPlus.ElScrollbar, EleTooltip, DropdownMenus },
12
13
  props: {
13
14
  ...props.dropdownProps,
14
15
  /** 当前选中菜单项 */
@@ -33,6 +34,12 @@ const _sfc_main = vue.defineComponent({
33
34
  options.isPopover = true;
34
35
  return options;
35
36
  });
37
+ const hasSubMenu = vue.computed(
38
+ () => !!(props2.items && props2.items.some((d) => {
39
+ var _a;
40
+ return !!((_a = d.children) == null ? void 0 : _a.length);
41
+ }))
42
+ );
36
43
  const hidePopper = () => {
37
44
  tooltipRef.value && tooltipRef.value.hide();
38
45
  };
@@ -56,10 +63,8 @@ const _sfc_main = vue.defineComponent({
56
63
  emit("after-leave");
57
64
  };
58
65
  const handleItemClick = (item) => {
59
- if (item.disabled) {
60
- return;
61
- }
62
- if (props2.hideOnClick) {
66
+ var _a;
67
+ if (props2.hideOnClick && !((_a = item.children) == null ? void 0 : _a.length)) {
63
68
  hidePopper();
64
69
  }
65
70
  emit("command", item.command);
@@ -76,7 +81,7 @@ const _sfc_main = vue.defineComponent({
76
81
  const handleClose = () => {
77
82
  hidePopper();
78
83
  };
79
- const handleContextmenu = (e) => {
84
+ const handleWrapperContext = (e) => {
80
85
  if (props2.preventContextmenu) {
81
86
  e.preventDefault();
82
87
  }
@@ -85,6 +90,7 @@ const _sfc_main = vue.defineComponent({
85
90
  ArrowDown: icons.ArrowDown,
86
91
  tooltipRef,
87
92
  tooltipProps,
93
+ hasSubMenu,
88
94
  hidePopper,
89
95
  updatePopper,
90
96
  handleUpdateVisible,
@@ -96,7 +102,7 @@ const _sfc_main = vue.defineComponent({
96
102
  handleBtnClick,
97
103
  handleOpen,
98
104
  handleClose,
99
- handleContextmenu
105
+ handleWrapperContext
100
106
  };
101
107
  }
102
108
  });
@@ -107,16 +113,9 @@ const _export_sfc = (sfc, props2) => {
107
113
  }
108
114
  return target;
109
115
  };
110
- const _hoisted_1 = ["role"];
111
- const _hoisted_2 = {
112
- key: 0,
113
- class: "ele-dropdown-menu-divider"
114
- };
115
- const _hoisted_3 = ["onClick"];
116
- const _hoisted_4 = { key: 1 };
117
116
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
118
117
  const _component_ElButton = vue.resolveComponent("ElButton");
119
- const _component_ElIcon = vue.resolveComponent("ElIcon");
118
+ const _component_DropdownMenus = vue.resolveComponent("DropdownMenus");
120
119
  const _component_ElScrollbar = vue.resolveComponent("ElScrollbar");
121
120
  const _component_EleTooltip = vue.resolveComponent("EleTooltip");
122
121
  return vue.openBlock(), vue.createBlock(_component_EleTooltip, vue.mergeProps({ tabindex: _ctx.tabindex }, _ctx.tooltipProps, {
@@ -128,59 +127,61 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
128
127
  onHide: _ctx.handlePopAfterLeave
129
128
  }), {
130
129
  body: vue.withCtx(() => [
131
- vue.createVNode(_component_ElScrollbar, {
130
+ _ctx.hasSubMenu ? (vue.openBlock(), vue.createElementBlock("div", {
131
+ key: 0,
132
+ class: "ele-dropdown-wrapper",
133
+ onContextmenu: _cache[0] || (_cache[0] = (...args) => _ctx.handleWrapperContext && _ctx.handleWrapperContext(...args))
134
+ }, [
135
+ _ctx.items && _ctx.items.length ? (vue.openBlock(), vue.createBlock(_component_DropdownMenus, {
136
+ key: 0,
137
+ role: _ctx.role,
138
+ items: _ctx.items,
139
+ selected: _ctx.modelValue,
140
+ menuStyle: _ctx.menuStyle,
141
+ iconProps: _ctx.iconProps,
142
+ size: _ctx.size,
143
+ onItemClick: _ctx.handleItemClick,
144
+ onWrapperContext: _ctx.handleWrapperContext
145
+ }, vue.createSlots({ _: 2 }, [
146
+ vue.renderList(Object.keys(_ctx.$slots).filter((k) => "default" !== k), (name) => {
147
+ return {
148
+ name,
149
+ fn: vue.withCtx((slotProps) => [
150
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotProps || {})))
151
+ ])
152
+ };
153
+ })
154
+ ]), 1032, ["role", "items", "selected", "menuStyle", "iconProps", "size", "onItemClick", "onWrapperContext"])) : vue.createCommentVNode("", true)
155
+ ], 32)) : (vue.openBlock(), vue.createBlock(_component_ElScrollbar, {
156
+ key: 1,
132
157
  maxHeight: _ctx.maxHeight,
133
158
  class: "ele-dropdown-wrapper",
134
- onContextmenu: _ctx.handleContextmenu
159
+ onContextmenu: _ctx.handleWrapperContext
135
160
  }, {
136
161
  default: vue.withCtx(() => [
137
- vue.createElementVNode("div", {
162
+ _ctx.items && _ctx.items.length ? (vue.openBlock(), vue.createBlock(_component_DropdownMenus, {
163
+ key: 0,
138
164
  role: _ctx.role,
139
- class: vue.normalizeClass([
140
- "ele-dropdown-menu",
141
- { "is-small": _ctx.size === "small" },
142
- { "is-large": _ctx.size === "large" }
143
- ]),
144
- style: vue.normalizeStyle(_ctx.menuStyle)
145
- }, [
146
- (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(_ctx.items, (item) => {
147
- return vue.openBlock(), vue.createElementBlock(vue.Fragment, {
148
- key: item.key == null ? JSON.stringify(item.command) : item.key
149
- }, [
150
- item.divided ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2)) : vue.createCommentVNode("", true),
151
- vue.createElementVNode("div", {
152
- class: vue.normalizeClass([
153
- "ele-dropdown-menu-item",
154
- { "is-disabled": !!item.disabled },
155
- { "is-active": _ctx.modelValue === item.command },
156
- { "is-danger": !!item.danger }
157
- ]),
158
- onClick: ($event) => _ctx.handleItemClick(item)
159
- }, [
160
- item.slot && item.slot !== "default" && _ctx.$slots[item.slot] ? vue.renderSlot(_ctx.$slots, item.slot, {
161
- key: 0,
162
- item
163
- }) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
164
- item.icon ? (vue.openBlock(), vue.createBlock(_component_ElIcon, vue.mergeProps({
165
- key: 0,
166
- ref_for: true
167
- }, { ..._ctx.iconProps || {}, ...item.iconProps || {} }), {
168
- default: vue.withCtx(() => [
169
- (vue.openBlock(), vue.createBlock(vue.resolveDynamicComponent(item.icon), {
170
- style: vue.normalizeStyle(item.iconStyle)
171
- }, null, 8, ["style"]))
172
- ]),
173
- _: 2
174
- }, 1040)) : vue.createCommentVNode("", true),
175
- item.title ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_4, vue.toDisplayString(item.title), 1)) : vue.createCommentVNode("", true)
176
- ], 64))
177
- ], 10, _hoisted_3)
178
- ], 64);
179
- }), 128))
180
- ], 14, _hoisted_1)
165
+ items: _ctx.items,
166
+ selected: _ctx.modelValue,
167
+ menuStyle: _ctx.menuStyle,
168
+ iconProps: _ctx.iconProps,
169
+ size: _ctx.size,
170
+ onItemClick: _ctx.handleItemClick,
171
+ onWrapperContext: _ctx.handleWrapperContext
172
+ }, vue.createSlots({ _: 2 }, [
173
+ vue.renderList(Object.keys(_ctx.$slots).filter((k) => "default" !== k), (name) => {
174
+ return {
175
+ name,
176
+ fn: vue.withCtx((slotProps) => [
177
+ vue.renderSlot(_ctx.$slots, name, vue.normalizeProps(vue.guardReactiveProps(slotProps || {})))
178
+ ])
179
+ };
180
+ })
181
+ ]), 1032, ["role", "items", "selected", "menuStyle", "iconProps", "size", "onItemClick", "onWrapperContext"])) : vue.createCommentVNode("", true)
181
182
  ]),
182
183
  _: 3
183
- }, 8, ["maxHeight", "onContextmenu"])
184
+ }, 8, ["maxHeight", "onContextmenu"]))
184
185
  ]),
185
186
  default: vue.withCtx(() => [
186
187
  _ctx.splitButton ? (vue.openBlock(), vue.createBlock(_component_ElButton, vue.mergeProps({
@@ -89,6 +89,7 @@ declare const _default: import('vue').DefineComponent<{
89
89
  ArrowDown: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
90
90
  tooltipRef: import('vue').Ref<EleTooltipInstance>;
91
91
  tooltipProps: import('vue').ComputedRef<Partial<import('../../ele-tooltip/props').TooltipProps>>;
92
+ hasSubMenu: import('vue').ComputedRef<boolean>;
92
93
  hidePopper: () => void;
93
94
  updatePopper: () => void;
94
95
  handleUpdateVisible: (visible: boolean) => void;
@@ -100,7 +101,7 @@ declare const _default: import('vue').DefineComponent<{
100
101
  handleBtnClick: (e: MouseEvent) => void;
101
102
  handleOpen: () => void;
102
103
  handleClose: () => void;
103
- handleContextmenu: (e: MouseEvent) => void;
104
+ handleWrapperContext: (e: MouseEvent) => void;
104
105
  }, unknown, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
105
106
  click: (_e: MouseEvent) => boolean;
106
107
  command: (_command: DropdownItem["command"]) => boolean;
@@ -11,6 +11,8 @@ const _sfc_main = vue.defineComponent({
11
11
  ElDropdown: elementPlus.ElDropdown,
12
12
  ElDropdownMenu: elementPlus.ElDropdownMenu,
13
13
  ElDropdownItem: elementPlus.ElDropdownItem,
14
+ ElButtonGroup: elementPlus.ElButtonGroup,
15
+ ElButton: elementPlus.ElButton,
14
16
  ElIcon: elementPlus.ElIcon,
15
17
  ProDropdown
16
18
  },
@@ -28,7 +28,7 @@ declare const _default: import('vue').DefineComponent<{
28
28
  readonly validator: ((val: unknown) => boolean) | undefined;
29
29
  readonly __epPropKey: true;
30
30
  };
31
- placement: import('element-plus/es/utils/index').EpPropFinalized<(new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement) | ((new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement))[], unknown, unknown, "bottom", boolean>;
31
+ placement: import('element-plus/es/utils/index').EpPropFinalized<(new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement) | ((new (... /** 更新气泡 */args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement))[], unknown, unknown, "bottom", boolean>;
32
32
  popperClass: import('element-plus/es/utils/index').EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
33
33
  teleported: import('element-plus/es/utils/index').EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
34
34
  disabled: BooleanConstructor;
@@ -112,7 +112,7 @@ declare const _default: import('vue').DefineComponent<{
112
112
  readonly validator: ((val: unknown) => boolean) | undefined;
113
113
  readonly __epPropKey: true;
114
114
  };
115
- placement: import('element-plus/es/utils/index').EpPropFinalized<(new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement) | ((new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement))[], unknown, unknown, "bottom", boolean>;
115
+ placement: import('element-plus/es/utils/index').EpPropFinalized<(new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement) | ((new (... /** 更新气泡 */args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement))[], unknown, unknown, "bottom", boolean>;
116
116
  popperClass: import('element-plus/es/utils/index').EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
117
117
  teleported: import('element-plus/es/utils/index').EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
118
118
  disabled: BooleanConstructor;
@@ -182,6 +182,7 @@ declare const _default: import('vue').DefineComponent<{
182
182
  ArrowDown: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
183
183
  tooltipRef: import('vue').Ref<import('../ele-app/plus').EleTooltipInstance>;
184
184
  tooltipProps: import('vue').ComputedRef<Partial<import('../ele-tooltip/props').TooltipProps>>;
185
+ hasSubMenu: import('vue').ComputedRef<boolean>;
185
186
  hidePopper: () => void;
186
187
  updatePopper: () => void;
187
188
  handleUpdateVisible: (visible: boolean) => void;
@@ -193,7 +194,7 @@ declare const _default: import('vue').DefineComponent<{
193
194
  handleBtnClick: (e: MouseEvent) => void;
194
195
  handleOpen: () => void;
195
196
  handleClose: () => void;
196
- handleContextmenu: (e: MouseEvent) => void;
197
+ handleWrapperContext: (e: MouseEvent) => void;
197
198
  }, unknown, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
198
199
  click: (_e: MouseEvent) => boolean;
199
200
  command: (_command: DropdownItem["command"]) => boolean;
@@ -232,7 +233,7 @@ declare const _default: import('vue').DefineComponent<{
232
233
  readonly validator: ((val: unknown) => boolean) | undefined;
233
234
  readonly __epPropKey: true;
234
235
  };
235
- placement: import('element-plus/es/utils/index').EpPropFinalized<(new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement) | ((new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement))[], unknown, unknown, "bottom", boolean>;
236
+ placement: import('element-plus/es/utils/index').EpPropFinalized<(new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement) | ((new (... /** 更新气泡 */args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement))[], unknown, unknown, "bottom", boolean>;
236
237
  popperClass: import('element-plus/es/utils/index').EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
237
238
  teleported: import('element-plus/es/utils/index').EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
238
239
  disabled: BooleanConstructor;
@@ -359,7 +360,7 @@ declare const _default: import('vue').DefineComponent<{
359
360
  readonly validator: ((val: unknown) => boolean) | undefined;
360
361
  readonly __epPropKey: true;
361
362
  };
362
- placement: import('element-plus/es/utils/index').EpPropFinalized<(new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement) | ((new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement))[], unknown, unknown, "bottom", boolean>;
363
+ placement: import('element-plus/es/utils/index').EpPropFinalized<(new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement) | ((new (... /** 更新气泡 */args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement))[], unknown, unknown, "bottom", boolean>;
363
364
  popperClass: import('element-plus/es/utils/index').EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
364
365
  teleported: import('element-plus/es/utils/index').EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
365
366
  disabled: BooleanConstructor;
@@ -429,6 +430,7 @@ declare const _default: import('vue').DefineComponent<{
429
430
  ArrowDown: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
430
431
  tooltipRef: import('vue').Ref<import('../ele-app/plus').EleTooltipInstance>;
431
432
  tooltipProps: import('vue').ComputedRef<Partial<import('../ele-tooltip/props').TooltipProps>>;
433
+ hasSubMenu: import('vue').ComputedRef<boolean>;
432
434
  hidePopper: () => void;
433
435
  updatePopper: () => void;
434
436
  handleUpdateVisible: (visible: boolean) => void;
@@ -440,7 +442,7 @@ declare const _default: import('vue').DefineComponent<{
440
442
  handleBtnClick: (e: MouseEvent) => void;
441
443
  handleOpen: () => void;
442
444
  handleClose: () => void;
443
- handleContextmenu: (e: MouseEvent) => void;
445
+ handleWrapperContext: (e: MouseEvent) => void;
444
446
  }, {}, {}, {}, {
445
447
  effect: string;
446
448
  placement: import('element-plus/es/utils/index').EpPropMergeType<(new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement) | ((new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement))[], unknown, unknown>;
@@ -514,7 +516,7 @@ declare const _default: import('vue').DefineComponent<{
514
516
  readonly validator: ((val: unknown) => boolean) | undefined;
515
517
  readonly __epPropKey: true;
516
518
  };
517
- placement: import('element-plus/es/utils/index').EpPropFinalized<(new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement) | ((new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement))[], unknown, unknown, "bottom", boolean>;
519
+ placement: import('element-plus/es/utils/index').EpPropFinalized<(new (...args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement) | ((new (... /** 更新气泡 */args: any[]) => import('element-plus').Placement & {}) | (() => import('element-plus').Placement))[], unknown, unknown, "bottom", boolean>;
518
520
  popperClass: import('element-plus/es/utils/index').EpPropFinalized<StringConstructor, unknown, unknown, "", boolean>;
519
521
  teleported: import('element-plus/es/utils/index').EpPropFinalized<BooleanConstructor, unknown, unknown, true, boolean>;
520
522
  disabled: BooleanConstructor;
@@ -14,7 +14,8 @@
14
14
  width: max-content;
15
15
  }
16
16
 
17
- & > .el-scrollbar {
17
+ & > .el-scrollbar,
18
+ & > .ele-dropdown-wrapper {
18
19
  background: inherit;
19
20
  border-radius: inherit;
20
21
  }
@@ -36,6 +37,7 @@
36
37
  border-radius: eleVar('dropdown', 'item-radius');
37
38
  transition: (color $transition-base, background-color $transition-base);
38
39
  box-sizing: border-box;
40
+ position: relative;
39
41
  cursor: pointer;
40
42
 
41
43
  & + .ele-dropdown-menu-item {
@@ -47,6 +49,13 @@
47
49
  margin: eleVar('dropdown', 'icon-margin');
48
50
  }
49
51
 
52
+ & > .ele-dropdown-menu-item-arrow {
53
+ color: eleVar('dropdown', 'arrow-color');
54
+ font-size: eleVar('dropdown', 'arrow-size');
55
+ padding: eleVar('dropdown', 'arrow-padding');
56
+ margin: eleVar('dropdown', 'arrow-margin');
57
+ }
58
+
50
59
  &:hover,
51
60
  &:focus {
52
61
  color: eleVar('dropdown', 'item-hover-color');
@@ -141,6 +150,48 @@
141
150
  }
142
151
  }
143
152
 
153
+ /* 子菜单 */
154
+ .ele-dropdown-wrapper.is-sub-menu {
155
+ width: max-content;
156
+ background: eleVar('popper', 'bg');
157
+ border: eleVar('popper', 'border');
158
+ box-shadow: eleVar('popper', 'shadow');
159
+ border-radius: eleVar('popper', 'radius');
160
+ position: absolute;
161
+ left: 100%;
162
+ top: 0;
163
+ transform-origin: top left;
164
+ transition: all $transition-slow;
165
+
166
+ &.is-right-end {
167
+ top: auto;
168
+ bottom: 0;
169
+ transform-origin: bottom left;
170
+ }
171
+
172
+ &.is-left-start {
173
+ left: auto;
174
+ right: 100%;
175
+ transform-origin: top right;
176
+ }
177
+
178
+ &.is-left-end {
179
+ top: auto;
180
+ bottom: 0;
181
+ left: auto;
182
+ right: 100%;
183
+ transform-origin: bottom right;
184
+ }
185
+ }
186
+
187
+ .ele-dropdown-menu-item:not(:hover) > .ele-dropdown-wrapper,
188
+ .ele-dropdown-menu-item.is-disabled > .ele-dropdown-wrapper {
189
+ opacity: 0;
190
+ transform: scale(0.6);
191
+ pointer-events: none;
192
+ visibility: hidden;
193
+ }
194
+
144
195
  /* ElDropdown */
145
196
  .ele-dropdown-trigger.el-dropdown {
146
197
  color: inherit;
@@ -17,4 +17,6 @@ export interface DropdownItem extends ElDropdownItemProps {
17
17
  slot?: Exclude<string, 'default'>;
18
18
  /** 是否为危险样式 */
19
19
  danger?: boolean;
20
+ /** 子菜单 */
21
+ children?: DropdownItem[];
20
22
  }
@@ -163,34 +163,41 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
163
163
  class: "ele-popconfirm-action",
164
164
  style: vue.normalizeStyle(_ctx.footerStyle)
165
165
  }, [
166
- vue.renderSlot(_ctx.$slots, "action", {
166
+ vue.renderSlot(_ctx.$slots, "actions", {
167
167
  cancel: _ctx.cancel,
168
168
  confirm: _ctx.confirm,
169
169
  cancelText: _ctx.cancelText,
170
170
  confirmText: _ctx.confirmText
171
- }),
172
- !_ctx.hideCancelButton ? (vue.openBlock(), vue.createBlock(_component_ElButton, vue.mergeProps({
173
- key: 0,
174
- size: "small",
175
- type: _ctx.cancelButtonType === "text" ? void 0 : _ctx.cancelButtonType,
176
- text: _ctx.cancelButtonType === "text"
177
- }, _ctx.cancelButtonProps || {}, { onClick: _ctx.cancel }), {
178
- default: vue.withCtx(() => [
179
- vue.createTextVNode(vue.toDisplayString(_ctx.cancelText), 1)
180
- ]),
181
- _: 1
182
- }, 16, ["type", "text", "onClick"])) : vue.createCommentVNode("", true),
183
- !_ctx.hideConfirmButton ? (vue.openBlock(), vue.createBlock(_component_ElButton, vue.mergeProps({
184
- key: 1,
185
- size: "small",
186
- type: _ctx.confirmButtonType === "text" ? void 0 : _ctx.confirmButtonType,
187
- text: _ctx.confirmButtonType === "text"
188
- }, _ctx.confirmButtonProps || {}, { onClick: _ctx.confirm }), {
189
- default: vue.withCtx(() => [
190
- vue.createTextVNode(vue.toDisplayString(_ctx.confirmText), 1)
191
- ]),
192
- _: 1
193
- }, 16, ["type", "text", "onClick"])) : vue.createCommentVNode("", true)
171
+ }, () => [
172
+ vue.renderSlot(_ctx.$slots, "action", {
173
+ cancel: _ctx.cancel,
174
+ confirm: _ctx.confirm,
175
+ cancelText: _ctx.cancelText,
176
+ confirmText: _ctx.confirmText
177
+ }),
178
+ !_ctx.hideCancelButton ? (vue.openBlock(), vue.createBlock(_component_ElButton, vue.mergeProps({
179
+ key: 0,
180
+ size: "small",
181
+ type: _ctx.cancelButtonType === "text" ? void 0 : _ctx.cancelButtonType,
182
+ text: _ctx.cancelButtonType === "text"
183
+ }, _ctx.cancelButtonProps || {}, { onClick: _ctx.cancel }), {
184
+ default: vue.withCtx(() => [
185
+ vue.createTextVNode(vue.toDisplayString(_ctx.cancelText), 1)
186
+ ]),
187
+ _: 1
188
+ }, 16, ["type", "text", "onClick"])) : vue.createCommentVNode("", true),
189
+ !_ctx.hideConfirmButton ? (vue.openBlock(), vue.createBlock(_component_ElButton, vue.mergeProps({
190
+ key: 1,
191
+ size: "small",
192
+ type: _ctx.confirmButtonType === "text" ? void 0 : _ctx.confirmButtonType,
193
+ text: _ctx.confirmButtonType === "text"
194
+ }, _ctx.confirmButtonProps || {}, { onClick: _ctx.confirm }), {
195
+ default: vue.withCtx(() => [
196
+ vue.createTextVNode(vue.toDisplayString(_ctx.confirmText), 1)
197
+ ]),
198
+ _: 1
199
+ }, 16, ["type", "text", "onClick"])) : vue.createCommentVNode("", true)
200
+ ])
194
201
  ], 4)
195
202
  ], 6)
196
203
  ]),
@@ -88,7 +88,12 @@ const _sfc_main = vue.defineComponent({
88
88
  if (!isHome.value) {
89
89
  const to = homeMenuPath.value;
90
90
  const is = { transform: "scale(1.13)", transformOrigin: "8px -2px" };
91
- data.push({ key: to, to, icon: icons.HomeOutlined, iconStyle: is });
91
+ data.push({
92
+ key: to,
93
+ to,
94
+ icon: vue.markRaw(icons.HomeOutlined),
95
+ iconStyle: is
96
+ });
92
97
  }
93
98
  levelData.value.forEach((d) => {
94
99
  data.push({ key: d.path, title: d.title });
@@ -96,6 +96,25 @@ const _sfc_main = vue.defineComponent({
96
96
  const toolExportRef = vue.ref(null);
97
97
  const toolPrintRef = vue.ref(null);
98
98
  const placement = vue.computed(() => props.maximized ? "bottom" : "top");
99
+ const sizeDropdownItems = vue.computed(() => {
100
+ return [
101
+ {
102
+ title: lang.value.sizeLarge,
103
+ command: "large",
104
+ icon: vue.markRaw(icons.SizeSlackOutlined)
105
+ },
106
+ {
107
+ title: lang.value.sizeDefault,
108
+ command: "default",
109
+ icon: vue.markRaw(icons.SizeMiddleOutlined)
110
+ },
111
+ {
112
+ title: lang.value.sizeSmall,
113
+ command: "small",
114
+ icon: vue.markRaw(icons.SizeCompactOutlined)
115
+ }
116
+ ];
117
+ });
99
118
  const reload = () => {
100
119
  emit("reload");
101
120
  };
@@ -133,13 +152,11 @@ const _sfc_main = vue.defineComponent({
133
152
  };
134
153
  return {
135
154
  ownSlots,
136
- SizeSlackOutlined: icons.SizeSlackOutlined,
137
- SizeMiddleOutlined: icons.SizeMiddleOutlined,
138
- SizeCompactOutlined: icons.SizeCompactOutlined,
139
155
  lang,
140
156
  toolExportRef,
141
157
  toolPrintRef,
142
158
  placement,
159
+ sizeDropdownItems,
143
160
  reload,
144
161
  updateSize,
145
162
  updateColumns,
@@ -292,15 +309,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
292
309
  placement: "bottom",
293
310
  popperClass: "ele-tool-size-popper",
294
311
  modelValue: _ctx.size,
295
- items: [
296
- { title: _ctx.lang.sizeLarge, command: "large", icon: _ctx.SizeSlackOutlined },
297
- {
298
- title: _ctx.lang.sizeDefault,
299
- command: "default",
300
- icon: _ctx.SizeMiddleOutlined
301
- },
302
- { title: _ctx.lang.sizeSmall, command: "small", icon: _ctx.SizeCompactOutlined }
303
- ],
312
+ items: _ctx.sizeDropdownItems,
304
313
  popperOptions: {
305
314
  modifiers: [{ name: "offset", options: { offset: [0, 10] } }]
306
315
  },
@@ -1,4 +1,5 @@
1
1
  import { PropType } from 'vue';
2
+ import { DropdownItem } from '../../ele-dropdown/types';
2
3
  import { Columns, TableSize, DataItem, SpanMethod, SummaryMethod, CellStyle, CellClass, HeaderCellStyle, HeaderCellClass, TreeProps } from '../../ele-data-table/types';
3
4
  import { TableTool, TableLocale, FetchFunction, ExportConfig, PrintConfig, TableExportParams } from '../types';
4
5
 
@@ -62,9 +63,6 @@ declare const _default: import('vue').DefineComponent<{
62
63
  };
63
64
  }, {
64
65
  ownSlots: string[];
65
- SizeSlackOutlined: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
66
- SizeMiddleOutlined: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
67
- SizeCompactOutlined: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
68
66
  lang: import('vue').ComputedRef<TableLocale>;
69
67
  toolExportRef: import('vue').Ref<import('vue').CreateComponentPublicInstance<Readonly<import('vue').ExtractPropTypes<{
70
68
  locale: {
@@ -445,6 +443,7 @@ declare const _default: import('vue').DefineComponent<{
445
443
  defaultShowTreeIndex: boolean;
446
444
  }> | null>;
447
445
  placement: import('vue').ComputedRef<"top" | "bottom">;
446
+ sizeDropdownItems: import('vue').ComputedRef<DropdownItem[]>;
448
447
  reload: () => void;
449
448
  updateSize: (size: string) => void;
450
449
  updateColumns: (columns: Columns, tableColumns: Columns, isReset: boolean) => void;
@@ -206,9 +206,6 @@ declare const _default: import('vue').DefineComponent<{
206
206
  "onUpdate:maximized"?: ((_maximized: boolean) => any) | undefined;
207
207
  }, {
208
208
  ownSlots: string[];
209
- SizeSlackOutlined: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
210
- SizeMiddleOutlined: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
211
- SizeCompactOutlined: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
212
209
  lang: import('vue').ComputedRef<import('./types').TableLocale>;
213
210
  toolExportRef: Ref<import('vue').CreateComponentPublicInstance<Readonly<import('vue').ExtractPropTypes<{
214
211
  locale: {
@@ -589,6 +586,7 @@ declare const _default: import('vue').DefineComponent<{
589
586
  defaultShowTreeIndex: boolean;
590
587
  }> | null>;
591
588
  placement: import('vue').ComputedRef<"top" | "bottom">;
589
+ sizeDropdownItems: import('vue').ComputedRef<import('../ele-dropdown/types').DropdownItem[]>;
592
590
  reload: () => void;
593
591
  updateSize: (size: string) => void;
594
592
  updateColumns: (columns: Columns, tableColumns: Columns, isReset: boolean) => void;
@@ -695,9 +693,6 @@ declare const _default: import('vue').DefineComponent<{
695
693
  "onUpdate:maximized"?: ((_maximized: boolean) => any) | undefined;
696
694
  }, {
697
695
  ownSlots: string[];
698
- SizeSlackOutlined: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
699
- SizeMiddleOutlined: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
700
- SizeCompactOutlined: import('vue').DefineComponent<{}, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{}>>, {}, {}>;
701
696
  lang: import('vue').ComputedRef<import('./types').TableLocale>;
702
697
  toolExportRef: Ref<import('vue').CreateComponentPublicInstance<Readonly<import('vue').ExtractPropTypes<{
703
698
  locale: {
@@ -1078,6 +1073,7 @@ declare const _default: import('vue').DefineComponent<{
1078
1073
  defaultShowTreeIndex: boolean;
1079
1074
  }> | null>;
1080
1075
  placement: import('vue').ComputedRef<"top" | "bottom">;
1076
+ sizeDropdownItems: import('vue').ComputedRef<import('../ele-dropdown/types').DropdownItem[]>;
1081
1077
  reload: () => void;
1082
1078
  updateSize: (size: string) => void;
1083
1079
  updateColumns: (columns: Columns, tableColumns: Columns, isReset: boolean) => void;
@@ -65,7 +65,7 @@ const _sfc_main = vue.defineComponent({
65
65
  return;
66
66
  }
67
67
  const el = e.target;
68
- if (el && el.classList.contains("is-icon-close")) {
68
+ if (el && (el.classList.contains("is-icon-close") || el.classList.contains("el-tabs__nav") || el.classList.contains("el-tabs__item"))) {
69
69
  e.preventDefault();
70
70
  }
71
71
  };
@@ -16,8 +16,6 @@ $icon-validate-path: 'M512 43C768 43 981 256 981 512S768 981 512 981 43 768 43 5
16
16
  $icon-expand-path: 'M362 811 662 512 362 213' !default;
17
17
  // 树表格加载图标
18
18
  $icon-loading-path: 'M512 128V299M789 235 672 352M896 512H725M789 789 672 672M512 896V725M235 789 352 672M128 512H299M235 235 352 352' !default;
19
- // 表格筛选图标
20
- $icon-filter-path: 'M349 838c0 17 14 32 31 32h262c17 0 31-14 31-32V642H349v196ZM880 154H143c-24 0-39 26-27 48l221 376h348l221-376c12-21-3-48-27-48' !default;
21
19
  // 字体
22
20
  $logo-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
23
21
  'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji',
@@ -249,6 +247,10 @@ $ele: map.deep-merge(
249
247
  'item-disabled-bg': elVar('disabled', 'bg-color'),
250
248
  'icon-size': 16px,
251
249
  'icon-margin': 0 8px 0 -2px,
250
+ 'arrow-size': 14px,
251
+ 'arrow-color': elVar('text-color', 'placeholder'),
252
+ 'arrow-padding': 0 0 0 6px,
253
+ 'arrow-margin': 0 -8px 0 auto,
252
254
  'divider': 1px solid elVar('border-color', 'light'),
253
255
  'divider-margin': 6px 0,
254
256
  'sm-padding': 3px 0,