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
@@ -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;
@@ -1,13 +1,14 @@
1
- import { defineComponent, ref, computed, resolveComponent, openBlock, createBlock, mergeProps, withCtx, createVNode, createElementVNode, normalizeClass, normalizeStyle, createElementBlock, Fragment, renderList, createCommentVNode, renderSlot, resolveDynamicComponent, toDisplayString } from "vue";
2
- import { ElIcon, ElButtonGroup, ElButton, ElScrollbar } from "element-plus";
1
+ import { defineComponent, ref, computed, resolveComponent, openBlock, createBlock, mergeProps, withCtx, createElementBlock, createSlots, renderList, renderSlot, normalizeProps, guardReactiveProps, createCommentVNode } from "vue";
2
+ import { ElButton, ElScrollbar } from "element-plus";
3
3
  import { ArrowDown } from "../../icons";
4
4
  import { pick } from "../../utils/core";
5
5
  import EleTooltip from "../../ele-tooltip/index";
6
6
  import { tooltipPropKeys } from "../../ele-tooltip/props";
7
+ import DropdownMenus from "./dropdown-menus";
7
8
  import { dropdownProps, dropdownEmits } from "../props";
8
9
  const _sfc_main = defineComponent({
9
10
  name: "ProDropdown",
10
- components: { ElIcon, ElButtonGroup, ElButton, ElScrollbar, EleTooltip },
11
+ components: { ElButton, ElScrollbar, EleTooltip, DropdownMenus },
11
12
  props: {
12
13
  ...dropdownProps,
13
14
  /** 当前选中菜单项 */
@@ -32,6 +33,12 @@ const _sfc_main = defineComponent({
32
33
  options.isPopover = true;
33
34
  return options;
34
35
  });
36
+ const hasSubMenu = computed(
37
+ () => !!(props.items && props.items.some((d) => {
38
+ var _a;
39
+ return !!((_a = d.children) == null ? void 0 : _a.length);
40
+ }))
41
+ );
35
42
  const hidePopper = () => {
36
43
  tooltipRef.value && tooltipRef.value.hide();
37
44
  };
@@ -55,10 +62,8 @@ const _sfc_main = defineComponent({
55
62
  emit("after-leave");
56
63
  };
57
64
  const handleItemClick = (item) => {
58
- if (item.disabled) {
59
- return;
60
- }
61
- if (props.hideOnClick) {
65
+ var _a;
66
+ if (props.hideOnClick && !((_a = item.children) == null ? void 0 : _a.length)) {
62
67
  hidePopper();
63
68
  }
64
69
  emit("command", item.command);
@@ -75,7 +80,7 @@ const _sfc_main = defineComponent({
75
80
  const handleClose = () => {
76
81
  hidePopper();
77
82
  };
78
- const handleContextmenu = (e) => {
83
+ const handleWrapperContext = (e) => {
79
84
  if (props.preventContextmenu) {
80
85
  e.preventDefault();
81
86
  }
@@ -84,6 +89,7 @@ const _sfc_main = defineComponent({
84
89
  ArrowDown,
85
90
  tooltipRef,
86
91
  tooltipProps,
92
+ hasSubMenu,
87
93
  hidePopper,
88
94
  updatePopper,
89
95
  handleUpdateVisible,
@@ -95,7 +101,7 @@ const _sfc_main = defineComponent({
95
101
  handleBtnClick,
96
102
  handleOpen,
97
103
  handleClose,
98
- handleContextmenu
104
+ handleWrapperContext
99
105
  };
100
106
  }
101
107
  });
@@ -106,16 +112,9 @@ const _export_sfc = (sfc, props) => {
106
112
  }
107
113
  return target;
108
114
  };
109
- const _hoisted_1 = ["role"];
110
- const _hoisted_2 = {
111
- key: 0,
112
- class: "ele-dropdown-menu-divider"
113
- };
114
- const _hoisted_3 = ["onClick"];
115
- const _hoisted_4 = { key: 1 };
116
115
  function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
117
116
  const _component_ElButton = resolveComponent("ElButton");
118
- const _component_ElIcon = resolveComponent("ElIcon");
117
+ const _component_DropdownMenus = resolveComponent("DropdownMenus");
119
118
  const _component_ElScrollbar = resolveComponent("ElScrollbar");
120
119
  const _component_EleTooltip = resolveComponent("EleTooltip");
121
120
  return openBlock(), createBlock(_component_EleTooltip, mergeProps({ tabindex: _ctx.tabindex }, _ctx.tooltipProps, {
@@ -127,59 +126,61 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
127
126
  onHide: _ctx.handlePopAfterLeave
128
127
  }), {
129
128
  body: withCtx(() => [
130
- createVNode(_component_ElScrollbar, {
129
+ _ctx.hasSubMenu ? (openBlock(), createElementBlock("div", {
130
+ key: 0,
131
+ class: "ele-dropdown-wrapper",
132
+ onContextmenu: _cache[0] || (_cache[0] = (...args) => _ctx.handleWrapperContext && _ctx.handleWrapperContext(...args))
133
+ }, [
134
+ _ctx.items && _ctx.items.length ? (openBlock(), createBlock(_component_DropdownMenus, {
135
+ key: 0,
136
+ role: _ctx.role,
137
+ items: _ctx.items,
138
+ selected: _ctx.modelValue,
139
+ menuStyle: _ctx.menuStyle,
140
+ iconProps: _ctx.iconProps,
141
+ size: _ctx.size,
142
+ onItemClick: _ctx.handleItemClick,
143
+ onWrapperContext: _ctx.handleWrapperContext
144
+ }, createSlots({ _: 2 }, [
145
+ renderList(Object.keys(_ctx.$slots).filter((k) => "default" !== k), (name) => {
146
+ return {
147
+ name,
148
+ fn: withCtx((slotProps) => [
149
+ renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotProps || {})))
150
+ ])
151
+ };
152
+ })
153
+ ]), 1032, ["role", "items", "selected", "menuStyle", "iconProps", "size", "onItemClick", "onWrapperContext"])) : createCommentVNode("", true)
154
+ ], 32)) : (openBlock(), createBlock(_component_ElScrollbar, {
155
+ key: 1,
131
156
  maxHeight: _ctx.maxHeight,
132
157
  class: "ele-dropdown-wrapper",
133
- onContextmenu: _ctx.handleContextmenu
158
+ onContextmenu: _ctx.handleWrapperContext
134
159
  }, {
135
160
  default: withCtx(() => [
136
- createElementVNode("div", {
161
+ _ctx.items && _ctx.items.length ? (openBlock(), createBlock(_component_DropdownMenus, {
162
+ key: 0,
137
163
  role: _ctx.role,
138
- class: normalizeClass([
139
- "ele-dropdown-menu",
140
- { "is-small": _ctx.size === "small" },
141
- { "is-large": _ctx.size === "large" }
142
- ]),
143
- style: normalizeStyle(_ctx.menuStyle)
144
- }, [
145
- (openBlock(true), createElementBlock(Fragment, null, renderList(_ctx.items, (item) => {
146
- return openBlock(), createElementBlock(Fragment, {
147
- key: item.key == null ? JSON.stringify(item.command) : item.key
148
- }, [
149
- item.divided ? (openBlock(), createElementBlock("div", _hoisted_2)) : createCommentVNode("", true),
150
- createElementVNode("div", {
151
- class: normalizeClass([
152
- "ele-dropdown-menu-item",
153
- { "is-disabled": !!item.disabled },
154
- { "is-active": _ctx.modelValue === item.command },
155
- { "is-danger": !!item.danger }
156
- ]),
157
- onClick: ($event) => _ctx.handleItemClick(item)
158
- }, [
159
- item.slot && item.slot !== "default" && _ctx.$slots[item.slot] ? renderSlot(_ctx.$slots, item.slot, {
160
- key: 0,
161
- item
162
- }) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
163
- item.icon ? (openBlock(), createBlock(_component_ElIcon, mergeProps({
164
- key: 0,
165
- ref_for: true
166
- }, { ..._ctx.iconProps || {}, ...item.iconProps || {} }), {
167
- default: withCtx(() => [
168
- (openBlock(), createBlock(resolveDynamicComponent(item.icon), {
169
- style: normalizeStyle(item.iconStyle)
170
- }, null, 8, ["style"]))
171
- ]),
172
- _: 2
173
- }, 1040)) : createCommentVNode("", true),
174
- item.title ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString(item.title), 1)) : createCommentVNode("", true)
175
- ], 64))
176
- ], 10, _hoisted_3)
177
- ], 64);
178
- }), 128))
179
- ], 14, _hoisted_1)
164
+ items: _ctx.items,
165
+ selected: _ctx.modelValue,
166
+ menuStyle: _ctx.menuStyle,
167
+ iconProps: _ctx.iconProps,
168
+ size: _ctx.size,
169
+ onItemClick: _ctx.handleItemClick,
170
+ onWrapperContext: _ctx.handleWrapperContext
171
+ }, createSlots({ _: 2 }, [
172
+ renderList(Object.keys(_ctx.$slots).filter((k) => "default" !== k), (name) => {
173
+ return {
174
+ name,
175
+ fn: withCtx((slotProps) => [
176
+ renderSlot(_ctx.$slots, name, normalizeProps(guardReactiveProps(slotProps || {})))
177
+ ])
178
+ };
179
+ })
180
+ ]), 1032, ["role", "items", "selected", "menuStyle", "iconProps", "size", "onItemClick", "onWrapperContext"])) : createCommentVNode("", true)
180
181
  ]),
181
182
  _: 3
182
- }, 8, ["maxHeight", "onContextmenu"])
183
+ }, 8, ["maxHeight", "onContextmenu"]))
183
184
  ]),
184
185
  default: withCtx(() => [
185
186
  _ctx.splitButton ? (openBlock(), createBlock(_component_ElButton, mergeProps({
@@ -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;
@@ -1,5 +1,5 @@
1
1
  import { defineComponent, ref, computed, resolveComponent, openBlock, createElementBlock, Fragment, createBlock, mergeProps, createSlots, renderList, withCtx, renderSlot, normalizeProps, guardReactiveProps, createVNode, normalizeStyle, resolveDynamicComponent, createCommentVNode, toDisplayString } from "vue";
2
- import { ElDropdown, ElDropdownMenu, ElDropdownItem, ElIcon } from "element-plus";
2
+ import { ElDropdown, ElDropdownMenu, ElDropdownItem, ElButtonGroup, ElButton, ElIcon } from "element-plus";
3
3
  import { pick, omit } from "../utils/core";
4
4
  import { useFormValidate } from "../ele-basic-select/util";
5
5
  import ProDropdown from "./components/pro-dropdown";
@@ -10,6 +10,8 @@ const _sfc_main = defineComponent({
10
10
  ElDropdown,
11
11
  ElDropdownMenu,
12
12
  ElDropdownItem,
13
+ ElButtonGroup,
14
+ ElButton,
13
15
  ElIcon,
14
16
  ProDropdown
15
17
  },
@@ -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
  }
@@ -162,34 +162,41 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
162
162
  class: "ele-popconfirm-action",
163
163
  style: normalizeStyle(_ctx.footerStyle)
164
164
  }, [
165
- renderSlot(_ctx.$slots, "action", {
165
+ renderSlot(_ctx.$slots, "actions", {
166
166
  cancel: _ctx.cancel,
167
167
  confirm: _ctx.confirm,
168
168
  cancelText: _ctx.cancelText,
169
169
  confirmText: _ctx.confirmText
170
- }),
171
- !_ctx.hideCancelButton ? (openBlock(), createBlock(_component_ElButton, mergeProps({
172
- key: 0,
173
- size: "small",
174
- type: _ctx.cancelButtonType === "text" ? void 0 : _ctx.cancelButtonType,
175
- text: _ctx.cancelButtonType === "text"
176
- }, _ctx.cancelButtonProps || {}, { onClick: _ctx.cancel }), {
177
- default: withCtx(() => [
178
- createTextVNode(toDisplayString(_ctx.cancelText), 1)
179
- ]),
180
- _: 1
181
- }, 16, ["type", "text", "onClick"])) : createCommentVNode("", true),
182
- !_ctx.hideConfirmButton ? (openBlock(), createBlock(_component_ElButton, mergeProps({
183
- key: 1,
184
- size: "small",
185
- type: _ctx.confirmButtonType === "text" ? void 0 : _ctx.confirmButtonType,
186
- text: _ctx.confirmButtonType === "text"
187
- }, _ctx.confirmButtonProps || {}, { onClick: _ctx.confirm }), {
188
- default: withCtx(() => [
189
- createTextVNode(toDisplayString(_ctx.confirmText), 1)
190
- ]),
191
- _: 1
192
- }, 16, ["type", "text", "onClick"])) : createCommentVNode("", true)
170
+ }, () => [
171
+ renderSlot(_ctx.$slots, "action", {
172
+ cancel: _ctx.cancel,
173
+ confirm: _ctx.confirm,
174
+ cancelText: _ctx.cancelText,
175
+ confirmText: _ctx.confirmText
176
+ }),
177
+ !_ctx.hideCancelButton ? (openBlock(), createBlock(_component_ElButton, mergeProps({
178
+ key: 0,
179
+ size: "small",
180
+ type: _ctx.cancelButtonType === "text" ? void 0 : _ctx.cancelButtonType,
181
+ text: _ctx.cancelButtonType === "text"
182
+ }, _ctx.cancelButtonProps || {}, { onClick: _ctx.cancel }), {
183
+ default: withCtx(() => [
184
+ createTextVNode(toDisplayString(_ctx.cancelText), 1)
185
+ ]),
186
+ _: 1
187
+ }, 16, ["type", "text", "onClick"])) : createCommentVNode("", true),
188
+ !_ctx.hideConfirmButton ? (openBlock(), createBlock(_component_ElButton, mergeProps({
189
+ key: 1,
190
+ size: "small",
191
+ type: _ctx.confirmButtonType === "text" ? void 0 : _ctx.confirmButtonType,
192
+ text: _ctx.confirmButtonType === "text"
193
+ }, _ctx.confirmButtonProps || {}, { onClick: _ctx.confirm }), {
194
+ default: withCtx(() => [
195
+ createTextVNode(toDisplayString(_ctx.confirmText), 1)
196
+ ]),
197
+ _: 1
198
+ }, 16, ["type", "text", "onClick"])) : createCommentVNode("", true)
199
+ ])
193
200
  ], 4)
194
201
  ], 6)
195
202
  ]),
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref, shallowRef, computed, watch, unref, shallowReactive, provide, nextTick, onMounted, resolveComponent, openBlock, createBlock, normalizeClass, createSlots, withCtx, createCommentVNode, renderSlot, renderList, normalizeProps, guardReactiveProps } from "vue";
1
+ import { defineComponent, ref, shallowRef, computed, markRaw, watch, unref, shallowReactive, provide, nextTick, onMounted, resolveComponent, openBlock, createBlock, normalizeClass, createSlots, withCtx, createCommentVNode, renderSlot, renderList, normalizeProps, guardReactiveProps } from "vue";
2
2
  import { useRouter } from "vue-router";
3
3
  import { HomeOutlined } from "../icons";
4
4
  import { useTimer, useMediaQuery, useWindowListener } from "../utils/hook";
@@ -87,7 +87,12 @@ const _sfc_main = defineComponent({
87
87
  if (!isHome.value) {
88
88
  const to = homeMenuPath.value;
89
89
  const is = { transform: "scale(1.13)", transformOrigin: "8px -2px" };
90
- data.push({ key: to, to, icon: HomeOutlined, iconStyle: is });
90
+ data.push({
91
+ key: to,
92
+ to,
93
+ icon: markRaw(HomeOutlined),
94
+ iconStyle: is
95
+ });
91
96
  }
92
97
  levelData.value.forEach((d) => {
93
98
  data.push({ key: d.path, title: d.title });
@@ -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;
@@ -1,4 +1,4 @@
1
- import { defineComponent, ref, computed, resolveComponent, openBlock, createElementBlock, Fragment, createVNode, createSlots, renderList, withCtx, renderSlot, normalizeProps, guardReactiveProps, createBlock, createCommentVNode } from "vue";
1
+ import { defineComponent, ref, computed, markRaw, resolveComponent, openBlock, createElementBlock, Fragment, createVNode, createSlots, renderList, withCtx, renderSlot, normalizeProps, guardReactiveProps, createBlock, createCommentVNode } from "vue";
2
2
  import { ElIcon } from "element-plus";
3
3
  import { ReloadOutlined, DownloadOutlined, PrinterOutlined, ColumnHeightOutlined, FullscreenOutlined, FullscreenExitOutlined, SizeSlackOutlined, SizeMiddleOutlined, SizeCompactOutlined } from "../../icons";
4
4
  import EleDropdown from "../../ele-dropdown/index";
@@ -95,6 +95,25 @@ const _sfc_main = defineComponent({
95
95
  const toolExportRef = ref(null);
96
96
  const toolPrintRef = ref(null);
97
97
  const placement = computed(() => props.maximized ? "bottom" : "top");
98
+ const sizeDropdownItems = computed(() => {
99
+ return [
100
+ {
101
+ title: lang.value.sizeLarge,
102
+ command: "large",
103
+ icon: markRaw(SizeSlackOutlined)
104
+ },
105
+ {
106
+ title: lang.value.sizeDefault,
107
+ command: "default",
108
+ icon: markRaw(SizeMiddleOutlined)
109
+ },
110
+ {
111
+ title: lang.value.sizeSmall,
112
+ command: "small",
113
+ icon: markRaw(SizeCompactOutlined)
114
+ }
115
+ ];
116
+ });
98
117
  const reload = () => {
99
118
  emit("reload");
100
119
  };
@@ -132,13 +151,11 @@ const _sfc_main = defineComponent({
132
151
  };
133
152
  return {
134
153
  ownSlots,
135
- SizeSlackOutlined,
136
- SizeMiddleOutlined,
137
- SizeCompactOutlined,
138
154
  lang,
139
155
  toolExportRef,
140
156
  toolPrintRef,
141
157
  placement,
158
+ sizeDropdownItems,
142
159
  reload,
143
160
  updateSize,
144
161
  updateColumns,
@@ -291,15 +308,7 @@ function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) {
291
308
  placement: "bottom",
292
309
  popperClass: "ele-tool-size-popper",
293
310
  modelValue: _ctx.size,
294
- items: [
295
- { title: _ctx.lang.sizeLarge, command: "large", icon: _ctx.SizeSlackOutlined },
296
- {
297
- title: _ctx.lang.sizeDefault,
298
- command: "default",
299
- icon: _ctx.SizeMiddleOutlined
300
- },
301
- { title: _ctx.lang.sizeSmall, command: "small", icon: _ctx.SizeCompactOutlined }
302
- ],
311
+ items: _ctx.sizeDropdownItems,
303
312
  popperOptions: {
304
313
  modifiers: [{ name: "offset", options: { offset: [0, 10] } }]
305
314
  },
@@ -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;
@@ -64,7 +64,7 @@ const _sfc_main = defineComponent({
64
64
  return;
65
65
  }
66
66
  const el = e.target;
67
- if (el && el.classList.contains("is-icon-close")) {
67
+ if (el && (el.classList.contains("is-icon-close") || el.classList.contains("el-tabs__nav") || el.classList.contains("el-tabs__item"))) {
68
68
  e.preventDefault();
69
69
  }
70
70
  };
@@ -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,