@ibiz-template/vue3-components 0.7.41-alpha.6 → 0.7.41-alpha.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index-cbi1NJAY.js +4 -0
- package/dist/index.min.css +1 -1
- package/dist/index.system.min.js +1 -1
- package/dist/{wang-editor-kEzIt0zV.js → wang-editor-ELTZ-byh.js} +1 -1
- package/dist/{xlsx-util-_VPcoWqm.js → xlsx-util--EbSIMDJ.js} +1 -1
- package/es/common/editor-empty-text/editor-empty-text.css +1 -0
- package/es/common/editor-empty-text/editor-empty-text.d.ts +25 -0
- package/es/common/editor-empty-text/editor-empty-text.mjs +31 -0
- package/es/common/index.mjs +2 -0
- package/es/control/drtab/drtab-control.util.mjs +1 -1
- package/es/control/tree/el-tree-util.d.ts +11 -0
- package/es/control/tree/el-tree-util.mjs +35 -1
- package/es/control/tree/index.d.ts +1 -0
- package/es/control/tree/tree.css +1 -1
- package/es/control/tree/tree.d.ts +2 -2
- package/es/control/tree/tree.mjs +61 -5
- package/es/control/wizard-panel/wizard-panel.css +1 -1
- package/es/control/wizard-panel/wizard-panel.mjs +24 -8
- package/es/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.mjs +4 -1
- package/es/editor/cascader/ibiz-cascader/ibiz-cascader.mjs +4 -1
- package/es/editor/data-picker/ibiz-mpicker/ibiz-mpicker.mjs +4 -1
- package/es/editor/data-picker/ibiz-picker/ibiz-picker.mjs +4 -1
- package/es/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.mjs +4 -1
- package/es/editor/data-picker/ibiz-picker-link/ibiz-picker-link.mjs +5 -2
- package/es/editor/data-picker/ibiz-picker-select-view/ibiz-picker-select-view.mjs +4 -1
- package/es/editor/date-picker/ibiz-date-picker/ibiz-date-picker.mjs +4 -1
- package/es/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.mjs +4 -1
- package/es/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.mjs +4 -1
- package/es/editor/dropdown-list/ibiz-emoji-picker/ibiz-emoji-picker.mjs +4 -1
- package/es/editor/map-picker/ibiz-map-picker/ibiz-map-picker.mjs +4 -1
- package/es/editor/number-range/ibiz-number-range-picker/ibiz-number-range-picker.mjs +4 -1
- package/es/editor/span/span/span.mjs +4 -1
- package/es/editor/text-box/ibiz-input-number/ibiz-input-number.mjs +4 -1
- package/es/editor/text-box/input/input.mjs +4 -1
- package/es/locale/en/index.d.ts +1 -0
- package/es/locale/zh-CN/index.d.ts +1 -0
- package/es/panel-component/app-extend-menu/bottom-side-menu/bottom-side-menu.css +1 -1
- package/es/panel-component/app-extend-menu/extend-menu-base/common-extend-menu/common-extend-menu.d.ts +1 -0
- package/es/panel-component/app-extend-menu/extend-menu-base/common-extend-menu/common-extend-menu.mjs +25 -4
- package/es/panel-component/app-extend-menu/extend-menu-base/extend-button-menu/extend-button-menu.css +1 -0
- package/es/panel-component/app-extend-menu/extend-menu-base/extend-button-menu/extend-button-menu.d.ts +2030 -0
- package/es/panel-component/app-extend-menu/extend-menu-base/extend-button-menu/extend-button-menu.mjs +223 -0
- package/es/panel-component/app-extend-menu/extend-menu-base/extend-menu-base.util.d.ts +166 -0
- package/es/panel-component/app-extend-menu/extend-menu-base/extend-menu-base.util.mjs +339 -0
- package/es/panel-component/app-extend-menu/left-side-menu/left-side-menu.css +1 -1
- package/es/panel-component/app-extend-menu/right-side-menu/right-side-menu.css +1 -1
- package/es/panel-component/app-extend-menu/top-side-menu/top-side-menu.css +1 -1
- package/es/util/fullscreen/fullscreen-util.mjs +1 -1
- package/lib/common/editor-empty-text/editor-empty-text.cjs +33 -0
- package/lib/common/editor-empty-text/editor-empty-text.css +1 -0
- package/lib/common/index.cjs +2 -0
- package/lib/control/drtab/drtab-control.util.cjs +1 -1
- package/lib/control/tree/el-tree-util.cjs +35 -0
- package/lib/control/tree/tree.cjs +59 -3
- package/lib/control/tree/tree.css +1 -1
- package/lib/control/wizard-panel/wizard-panel.cjs +23 -7
- package/lib/control/wizard-panel/wizard-panel.css +1 -1
- package/lib/editor/autocomplete/ibiz-autocomplete/ibiz-autocomplete.cjs +4 -1
- package/lib/editor/cascader/ibiz-cascader/ibiz-cascader.cjs +4 -1
- package/lib/editor/data-picker/ibiz-mpicker/ibiz-mpicker.cjs +4 -1
- package/lib/editor/data-picker/ibiz-picker/ibiz-picker.cjs +4 -1
- package/lib/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.cjs +4 -1
- package/lib/editor/data-picker/ibiz-picker-link/ibiz-picker-link.cjs +4 -1
- package/lib/editor/data-picker/ibiz-picker-select-view/ibiz-picker-select-view.cjs +4 -1
- package/lib/editor/date-picker/ibiz-date-picker/ibiz-date-picker.cjs +4 -1
- package/lib/editor/date-range/ibiz-date-range-picker/ibiz-date-range-picker.cjs +4 -1
- package/lib/editor/dropdown-list/ibiz-dropdown/ibiz-dropdown.cjs +4 -1
- package/lib/editor/dropdown-list/ibiz-emoji-picker/ibiz-emoji-picker.cjs +4 -1
- package/lib/editor/map-picker/ibiz-map-picker/ibiz-map-picker.cjs +4 -1
- package/lib/editor/number-range/ibiz-number-range-picker/ibiz-number-range-picker.cjs +4 -1
- package/lib/editor/span/span/span.cjs +4 -1
- package/lib/editor/text-box/ibiz-input-number/ibiz-input-number.cjs +4 -1
- package/lib/editor/text-box/input/input.cjs +4 -1
- package/lib/panel-component/app-extend-menu/bottom-side-menu/bottom-side-menu.css +1 -1
- package/lib/panel-component/app-extend-menu/extend-menu-base/common-extend-menu/common-extend-menu.cjs +24 -3
- package/lib/panel-component/app-extend-menu/extend-menu-base/extend-button-menu/extend-button-menu.cjs +225 -0
- package/lib/panel-component/app-extend-menu/extend-menu-base/extend-button-menu/extend-button-menu.css +1 -0
- package/lib/panel-component/app-extend-menu/extend-menu-base/extend-menu-base.util.cjs +344 -0
- package/lib/panel-component/app-extend-menu/left-side-menu/left-side-menu.css +1 -1
- package/lib/panel-component/app-extend-menu/right-side-menu/right-side-menu.css +1 -1
- package/lib/panel-component/app-extend-menu/top-side-menu/top-side-menu.css +1 -1
- package/lib/util/fullscreen/fullscreen-util.cjs +1 -1
- package/package.json +5 -5
- package/dist/index-2Djp0sQl.js +0 -4
- /package/es/node_modules/.pnpm/{@ibiz-template_core@0.7.41-alpha.2_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1 → @ibiz-template_core@0.7.41-alpha.7_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1}/node_modules/@ibiz-template/core/out/utils/namespace/namespace.mjs +0 -0
- /package/lib/node_modules/.pnpm/{@ibiz-template_core@0.7.41-alpha.2_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1 → @ibiz-template_core@0.7.41-alpha.7_axios@1.6.8_lodash-es@4.17.21_qs@6.11.2_qx-util@0.4.8_ramda@0.29.1}/node_modules/@ibiz-template/core/out/utils/namespace/namespace.cjs +0 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { createVNode, resolveComponent, ref, computed, defineComponent } from 'vue';
|
|
2
|
+
import { useNamespace } from '@ibiz-template/vue3-util';
|
|
3
|
+
import { showTitle } from '@ibiz-template/core';
|
|
4
|
+
import { getMenus, useCascaderPopover, useBorderLayout, findMenuItem } from '../extend-menu-base.util.mjs';
|
|
5
|
+
import './extend-button-menu.css';
|
|
6
|
+
|
|
7
|
+
"use strict";
|
|
8
|
+
const rightArrow = () => createVNode("svg", {
|
|
9
|
+
"xmlns": "http://www.w3.org/2000/svg",
|
|
10
|
+
"viewBox": "0 0 1024 1024",
|
|
11
|
+
"width": "1em",
|
|
12
|
+
"height": "1em",
|
|
13
|
+
"fill": "currentColor"
|
|
14
|
+
}, [createVNode("path", {
|
|
15
|
+
"fill": "currentColor",
|
|
16
|
+
"d": "M340.864 149.312a30.592 30.592 0 0 0 0 42.752L652.736 512 340.864 831.872a30.592 30.592 0 0 0 0 42.752 29.12 29.12 0 0 0 41.728 0L714.24 534.336a32 32 0 0 0 0-44.672L382.592 149.376a29.12 29.12 0 0 0-41.728 0z"
|
|
17
|
+
}, null)]);
|
|
18
|
+
function renderMenuItem(params) {
|
|
19
|
+
var _a, _b, _c;
|
|
20
|
+
const {
|
|
21
|
+
ns,
|
|
22
|
+
menu,
|
|
23
|
+
menuAlign,
|
|
24
|
+
menuItemsState
|
|
25
|
+
} = params;
|
|
26
|
+
if (!menu.id || !((_a = menuItemsState[menu.id]) == null ? void 0 : _a.visible))
|
|
27
|
+
return;
|
|
28
|
+
if (menu.itemType === "MENUITEM") {
|
|
29
|
+
return createVNode(resolveComponent("el-button"), {
|
|
30
|
+
"class": [ns.e("menuitem"), "".concat(((_b = menu.sysCss) == null ? void 0 : _b.cssName) || "")],
|
|
31
|
+
"index": menu.id
|
|
32
|
+
}, {
|
|
33
|
+
default: () => [menu.sysImage && createVNode(resolveComponent("iBizIcon"), {
|
|
34
|
+
"class": ns.e("icon"),
|
|
35
|
+
"icon": menu.sysImage
|
|
36
|
+
}, null), menu.caption && createVNode("span", {
|
|
37
|
+
"class": ns.e("caption"),
|
|
38
|
+
"title": showTitle(menu.tooltip)
|
|
39
|
+
}, [menu.caption])]
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
if (menu.itemType === "SEPERATOR") {
|
|
43
|
+
const direction = menuAlign === "horizontal" ? "vertical" : "horizontal";
|
|
44
|
+
return createVNode(resolveComponent("el-divider"), {
|
|
45
|
+
"direction": direction,
|
|
46
|
+
"class": [ns.em("separator"), ns.em("separator", direction)],
|
|
47
|
+
"id": menu.id
|
|
48
|
+
}, null);
|
|
49
|
+
}
|
|
50
|
+
if (menu.itemType === "RAWITEM") {
|
|
51
|
+
return createVNode(resolveComponent("el-button"), {
|
|
52
|
+
"index": menu.id,
|
|
53
|
+
"title": showTitle(menu.tooltip),
|
|
54
|
+
"class": [ns.e("rawitem"), "".concat(((_c = menu.sysCss) == null ? void 0 : _c.cssName) || "")]
|
|
55
|
+
}, {
|
|
56
|
+
default: () => [createVNode(resolveComponent("iBizRawItem"), {
|
|
57
|
+
"rawItem": menu
|
|
58
|
+
}, null)]
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
function renderMenuContent(_params) {
|
|
63
|
+
const {
|
|
64
|
+
ns,
|
|
65
|
+
isLayout,
|
|
66
|
+
position,
|
|
67
|
+
menuAlign,
|
|
68
|
+
menus,
|
|
69
|
+
menuItemsState,
|
|
70
|
+
showCascaderArrow,
|
|
71
|
+
handleMenuItemClick,
|
|
72
|
+
handleMenuItemMouseEnter,
|
|
73
|
+
handleMenuItemMouseLeave
|
|
74
|
+
} = _params;
|
|
75
|
+
return createVNode(resolveComponent("el-row"), {
|
|
76
|
+
"class": [ns.e("content"), ns.is(menuAlign, !!menuAlign), ns.is(position == null ? void 0 : position.toLowerCase(), !!position)]
|
|
77
|
+
}, {
|
|
78
|
+
default: () => menus.map((menu) => {
|
|
79
|
+
var _a, _b;
|
|
80
|
+
const menuItem = renderMenuItem({
|
|
81
|
+
menu,
|
|
82
|
+
ns,
|
|
83
|
+
menuAlign,
|
|
84
|
+
menuItemsState
|
|
85
|
+
});
|
|
86
|
+
if (!menuItem)
|
|
87
|
+
return;
|
|
88
|
+
const style = {};
|
|
89
|
+
if (isLayout && ((_a = menu.layoutPos) == null ? void 0 : _a.layout) === "FLEX") {
|
|
90
|
+
const pos = menu.layoutPos;
|
|
91
|
+
Object.assign(style, {
|
|
92
|
+
flexGrow: pos.grow,
|
|
93
|
+
flexShrink: pos.shrink === 1 ? void 0 : pos.shrink,
|
|
94
|
+
flexBasis: pos.basis
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
const isShowArrow = !!(showCascaderArrow && menu.children);
|
|
98
|
+
return createVNode("div", {
|
|
99
|
+
"class": [ns.em("content", "item"), ns.em("content", (_b = menu.itemType) == null ? void 0 : _b.toLowerCase()), ns.is("show-arrow", isShowArrow)],
|
|
100
|
+
"style": style
|
|
101
|
+
}, [createVNode("div", {
|
|
102
|
+
"class": ns.em("content", "item-container"),
|
|
103
|
+
"onMouseenter": (_e) => handleMenuItemMouseEnter(menu, _e),
|
|
104
|
+
"onMouseleave": (_e) => handleMenuItemMouseLeave(menu, _e),
|
|
105
|
+
"onClick": (_e) => handleMenuItemClick(menu, _e)
|
|
106
|
+
}, [menuItem]), createVNode("span", {
|
|
107
|
+
"class": ns.em("content", "item-arrow")
|
|
108
|
+
}, [isShowArrow && rightArrow()])]);
|
|
109
|
+
})
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
const ExtendButtonMenu = /* @__PURE__ */ defineComponent({
|
|
113
|
+
name: "IBizExtendButtonMenu",
|
|
114
|
+
props: {
|
|
115
|
+
items: {
|
|
116
|
+
type: Object,
|
|
117
|
+
required: true
|
|
118
|
+
},
|
|
119
|
+
menuItemsState: {
|
|
120
|
+
type: Object,
|
|
121
|
+
required: true
|
|
122
|
+
},
|
|
123
|
+
providers: {
|
|
124
|
+
type: Object,
|
|
125
|
+
required: true
|
|
126
|
+
},
|
|
127
|
+
position: {
|
|
128
|
+
type: String,
|
|
129
|
+
required: true
|
|
130
|
+
},
|
|
131
|
+
layoutMode: {
|
|
132
|
+
type: String,
|
|
133
|
+
required: true
|
|
134
|
+
},
|
|
135
|
+
layout: {
|
|
136
|
+
type: Object
|
|
137
|
+
}
|
|
138
|
+
},
|
|
139
|
+
emits: {
|
|
140
|
+
menuItemClick: (item, event) => true
|
|
141
|
+
},
|
|
142
|
+
setup(props, {
|
|
143
|
+
emit
|
|
144
|
+
}) {
|
|
145
|
+
const ns = useNamespace("extend-menu-button");
|
|
146
|
+
const buttonMenuRef = ref();
|
|
147
|
+
const menuAlign = computed(() => ["TOP", "BOTTOM"].includes(props.position) ? "horizontal" : "vertical");
|
|
148
|
+
const isLayout = computed(() => props.layoutMode !== "BORDER" && ["TOP", "BOTTOM"].includes(props.position));
|
|
149
|
+
const menus = ref(getMenus(props.items));
|
|
150
|
+
const renderCascaderContent = (_menu) => {
|
|
151
|
+
return renderMenuContent({
|
|
152
|
+
ns,
|
|
153
|
+
menuAlign: "vertical",
|
|
154
|
+
position: props.position,
|
|
155
|
+
menus: _menu.children,
|
|
156
|
+
menuItemsState: props.menuItemsState,
|
|
157
|
+
handleMenuItemClick,
|
|
158
|
+
handleMenuItemMouseEnter,
|
|
159
|
+
handleMenuItemMouseLeave,
|
|
160
|
+
showCascaderArrow: true,
|
|
161
|
+
isLayout: false
|
|
162
|
+
});
|
|
163
|
+
};
|
|
164
|
+
const renderBorderContent = () => {
|
|
165
|
+
return renderMenuContent({
|
|
166
|
+
ns,
|
|
167
|
+
menuAlign: menuAlign.value,
|
|
168
|
+
position: props.position,
|
|
169
|
+
menus: menus.value,
|
|
170
|
+
menuItemsState: props.menuItemsState,
|
|
171
|
+
handleMenuItemClick,
|
|
172
|
+
handleMenuItemMouseEnter,
|
|
173
|
+
handleMenuItemMouseLeave,
|
|
174
|
+
isLayout: isLayout.value,
|
|
175
|
+
showCascaderArrow: true
|
|
176
|
+
});
|
|
177
|
+
};
|
|
178
|
+
const {
|
|
179
|
+
getOverlayNum,
|
|
180
|
+
clearAllCascader,
|
|
181
|
+
handleMenuItemMouseEnter,
|
|
182
|
+
handleMenuItemMouseLeave
|
|
183
|
+
} = useCascaderPopover(props, ns, menuAlign, renderCascaderContent);
|
|
184
|
+
let closeBorderPopover;
|
|
185
|
+
if (props.layoutMode === "BORDER") {
|
|
186
|
+
const borderLayout = useBorderLayout(buttonMenuRef, ns, props.position, menuAlign, getOverlayNum, renderBorderContent);
|
|
187
|
+
closeBorderPopover = borderLayout.closeBorderPopover;
|
|
188
|
+
}
|
|
189
|
+
const handleMenuItemClick = async (_menu, _event) => {
|
|
190
|
+
if (_menu.children)
|
|
191
|
+
return;
|
|
192
|
+
clearAllCascader();
|
|
193
|
+
if (closeBorderPopover)
|
|
194
|
+
closeBorderPopover();
|
|
195
|
+
if (!_menu.appFuncId) {
|
|
196
|
+
ibiz.log.warn(ibiz.i18n.t("runtime.controller.control.menu.noConfigured"));
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const menuItem = findMenuItem(_menu.id, props.items);
|
|
200
|
+
emit("menuItemClick", menuItem, _event);
|
|
201
|
+
};
|
|
202
|
+
return {
|
|
203
|
+
ns,
|
|
204
|
+
menus,
|
|
205
|
+
menuAlign,
|
|
206
|
+
isLayout,
|
|
207
|
+
buttonMenuRef,
|
|
208
|
+
handleMenuItemClick,
|
|
209
|
+
handleMenuItemMouseEnter,
|
|
210
|
+
handleMenuItemMouseLeave
|
|
211
|
+
};
|
|
212
|
+
},
|
|
213
|
+
render() {
|
|
214
|
+
return createVNode("div", {
|
|
215
|
+
"ref": "buttonMenuRef",
|
|
216
|
+
"class": [this.ns.b(), this.ns.is(this.layoutMode.toLowerCase(), !!this.layoutMode), this.ns.is(this.position.toLowerCase(), !!this.position), this.ns.is(this.menuAlign, !!this.menuAlign)]
|
|
217
|
+
}, [this.layoutMode !== "BORDER" && renderMenuContent({
|
|
218
|
+
...this
|
|
219
|
+
})]);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
|
|
223
|
+
export { ExtendButtonMenu };
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { Ref, VNode } from 'vue';
|
|
2
|
+
import { IAppMenuItem, ILayout } from '@ibiz/model-core';
|
|
3
|
+
import { IAppMenuItemProvider } from '@ibiz-template/runtime';
|
|
4
|
+
import { Namespace } from '@ibiz-template/core';
|
|
5
|
+
/**
|
|
6
|
+
* @description 组件传参类型定义
|
|
7
|
+
*
|
|
8
|
+
* @export
|
|
9
|
+
* @interface IExtendMenuProps
|
|
10
|
+
*/
|
|
11
|
+
export interface IExtendMenuProps {
|
|
12
|
+
items: IAppMenuItem[];
|
|
13
|
+
menuItemsState: {
|
|
14
|
+
[p: string]: {
|
|
15
|
+
visible: boolean;
|
|
16
|
+
permitted: boolean;
|
|
17
|
+
};
|
|
18
|
+
};
|
|
19
|
+
providers: {
|
|
20
|
+
[key: string]: IAppMenuItemProvider;
|
|
21
|
+
};
|
|
22
|
+
position: 'LEFT' | 'RIGHT' | 'TOP' | 'BOTTOM';
|
|
23
|
+
layoutMode: 'TABLE' | 'TABLE_12COL' | 'TABLE_24COL' | 'FLEX' | 'BORDER' | 'ABSOLUTE';
|
|
24
|
+
layout: ILayout;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* @description 菜单项绘制数据
|
|
28
|
+
*
|
|
29
|
+
* @export
|
|
30
|
+
* @interface IButtonMenuItem
|
|
31
|
+
* @extends {IAppMenuItem}
|
|
32
|
+
*/
|
|
33
|
+
export interface IButtonMenuItem extends IAppMenuItem {
|
|
34
|
+
/** 数据层级 */
|
|
35
|
+
level: number;
|
|
36
|
+
/** 主键 */
|
|
37
|
+
value?: string;
|
|
38
|
+
/** 主文本 */
|
|
39
|
+
label?: string;
|
|
40
|
+
/** 父主键 */
|
|
41
|
+
parentId?: string;
|
|
42
|
+
/** 子项数据集合 */
|
|
43
|
+
children?: IButtonMenuItem[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* @description 菜单绘制通用参数
|
|
47
|
+
*
|
|
48
|
+
* @export
|
|
49
|
+
* @interface IMenuRenderParams
|
|
50
|
+
*/
|
|
51
|
+
export interface IMenuRenderParams {
|
|
52
|
+
/** 菜单样式处理命名空间 */
|
|
53
|
+
ns: Namespace;
|
|
54
|
+
/** 菜单对齐 */
|
|
55
|
+
menuAlign: 'horizontal' | 'vertical';
|
|
56
|
+
/** 菜单项权限数据 */
|
|
57
|
+
menuItemsState: {
|
|
58
|
+
[p: string]: {
|
|
59
|
+
visible: boolean;
|
|
60
|
+
permitted: boolean;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* @description 绘制单个菜单项参数
|
|
66
|
+
*
|
|
67
|
+
* @export
|
|
68
|
+
* @interface IMenuItemParams
|
|
69
|
+
* @extends {IMenuRenderParams}
|
|
70
|
+
*/
|
|
71
|
+
export interface IMenuItemParams extends IMenuRenderParams {
|
|
72
|
+
/** 菜单项 */
|
|
73
|
+
menu: IButtonMenuItem;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* @description 多菜单项(子菜单内容)参数
|
|
77
|
+
*
|
|
78
|
+
* @export
|
|
79
|
+
* @interface IMenuContentParams
|
|
80
|
+
* @extends {IMenuRenderParams}
|
|
81
|
+
*/
|
|
82
|
+
export interface IMenuContentParams extends IMenuRenderParams {
|
|
83
|
+
/** 是否支持布局 */
|
|
84
|
+
isLayout: boolean;
|
|
85
|
+
/** 菜单方向 */
|
|
86
|
+
position: string;
|
|
87
|
+
/** 菜单项绘制数据集合 */
|
|
88
|
+
menus: IButtonMenuItem[];
|
|
89
|
+
/** 显示级联箭头 */
|
|
90
|
+
showCascaderArrow?: boolean;
|
|
91
|
+
/** 菜单项点击 */
|
|
92
|
+
handleMenuItemClick: (_menu: IButtonMenuItem, event: MouseEvent) => void;
|
|
93
|
+
/** 鼠标移入菜单项,准备弹出子菜单 */
|
|
94
|
+
handleMenuItemMouseEnter: (_menu: IButtonMenuItem, event: MouseEvent) => void;
|
|
95
|
+
/** 鼠标移出菜单项 */
|
|
96
|
+
handleMenuItemMouseLeave: (_menu: IButtonMenuItem, event: MouseEvent) => void;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* @description 用于构建级联菜单的弹出层控制逻辑
|
|
100
|
+
*
|
|
101
|
+
* - 支持多层级菜单结构;
|
|
102
|
+
* - 根据鼠标移入/移出控制子菜单弹出与关闭;
|
|
103
|
+
* - 菜单项移入时打开对应子菜单,移出时自动延迟关闭;
|
|
104
|
+
* - 子菜单弹出方向根据配置自动计算;
|
|
105
|
+
* - 支持箭头图标旋转动画;
|
|
106
|
+
*
|
|
107
|
+
* @param props - 外部传入的菜单属性,包含菜单项、权限、适配器、布局模式等
|
|
108
|
+
* @param ns - 命名空间,用于生成 CSS BEM 类名
|
|
109
|
+
* @param menuAlign - 菜单排列方向(如 vertical)
|
|
110
|
+
* @param onMenuItemClick - 菜单项点击事件处理器
|
|
111
|
+
* @param renderCascader - 子菜单内容渲染函数(返回 VNode)
|
|
112
|
+
*
|
|
113
|
+
* @returns {
|
|
114
|
+
* getOverlayNum: 获取打开的级联数量;
|
|
115
|
+
* clearAllCascader: 清除所有层级弹窗和计时器;
|
|
116
|
+
* openCascaderPopover: 打开子菜单气泡;
|
|
117
|
+
* onMenuItemMouseEnter: 鼠标移入菜单项时的处理函数;
|
|
118
|
+
* onMenuItemMouseLeave: 鼠标移出菜单项时的处理函数;
|
|
119
|
+
* }
|
|
120
|
+
*/
|
|
121
|
+
export declare function useCascaderPopover(props: IExtendMenuProps, ns: Namespace, menuAlign: Ref<string>, renderCascaderContent: (_menu: IButtonMenuItem) => VNode): {
|
|
122
|
+
getOverlayNum: () => number;
|
|
123
|
+
clearAllCascader: () => void;
|
|
124
|
+
openCascaderPopover: (menu: IButtonMenuItem, evt: MouseEvent, opts?: IData) => void;
|
|
125
|
+
handleMenuItemMouseEnter: (_menu: IButtonMenuItem, _event: MouseEvent) => void;
|
|
126
|
+
handleMenuItemMouseLeave: (_menu: IButtonMenuItem, _event: MouseEvent) => void;
|
|
127
|
+
};
|
|
128
|
+
/**
|
|
129
|
+
* @description 用于构建边缘布局弹出层控制逻辑
|
|
130
|
+
*
|
|
131
|
+
* - 创建 fixed 占位元素
|
|
132
|
+
* - 占位块随目标元素变化而更新
|
|
133
|
+
* - 鼠标悬停触发弹出层
|
|
134
|
+
* - 移出占位层自动关闭弹层
|
|
135
|
+
* - 组件卸载自动清理
|
|
136
|
+
*
|
|
137
|
+
* @export
|
|
138
|
+
* @param {(Ref<HTMLElement | undefined>)} menuRef 菜单元素引用
|
|
139
|
+
* @param {Namespace} ns 命名空间工具
|
|
140
|
+
* @param {('LEFT' | 'RIGHT' | 'TOP' | 'BOTTOM')} position 元素的方向
|
|
141
|
+
* @param {Ref<string>} menuAlign 菜单对齐方式
|
|
142
|
+
* @param {() => number} getOverlayNum 获取当前层级 Overlay 数量
|
|
143
|
+
* @param {() => VNode} renderBorderContent 渲染边框内容
|
|
144
|
+
* @returns {
|
|
145
|
+
* closeBorderPopover: 关闭边框弹出层
|
|
146
|
+
* }
|
|
147
|
+
*/
|
|
148
|
+
export declare function useBorderLayout(menuRef: Ref<HTMLElement | undefined>, ns: Namespace, position: 'LEFT' | 'RIGHT' | 'TOP' | 'BOTTOM', menuAlign: Ref<string>, getOverlayNum: () => number, renderBorderContent: () => VNode): {
|
|
149
|
+
closeBorderPopover: () => void;
|
|
150
|
+
};
|
|
151
|
+
/**
|
|
152
|
+
* 递归生成菜单数据,递给 element 的 Menu 组件
|
|
153
|
+
*
|
|
154
|
+
* @param {AppMenuItemModel[]} items
|
|
155
|
+
* @return {*} {IButtonMenuItem[]}
|
|
156
|
+
*/
|
|
157
|
+
export declare function getMenus(items: IAppMenuItem[], _parentItem?: IAppMenuItem, level?: number): IButtonMenuItem[];
|
|
158
|
+
/**
|
|
159
|
+
* @description 查询菜单项模型
|
|
160
|
+
*
|
|
161
|
+
* @export
|
|
162
|
+
* @param {string} _id 菜单标识
|
|
163
|
+
* @param {IAppMenuItem[]} items 菜单数据集合
|
|
164
|
+
* @return {*} {(IAppMenuItem | undefined)}
|
|
165
|
+
*/
|
|
166
|
+
export declare function findMenuItem(_id: string, items: IAppMenuItem[]): IAppMenuItem | undefined;
|