@ibiz-template/vue3-components 0.7.41-alpha.6 → 0.7.41-alpha.8
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-4CBJktLS.js → index-CsiyXR27.js} +1 -1
- package/dist/index-bg15JdWL.js +4 -0
- package/dist/{index-QL7Ukex9.js → index-tjsobxd3.js} +1 -1
- package/dist/index.min.css +1 -1
- package/dist/index.system.min.js +1 -1
- package/dist/{wang-editor-kEzIt0zV.js → wang-editor-7B_U_6_C.js} +1 -1
- package/dist/{xlsx-util-_VPcoWqm.js → xlsx-util-J0IypI5_.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/data-view/data-view.css +1 -1
- package/es/control/data-view/data-view.mjs +4 -4
- package/es/control/drbar/drbar.controller.mjs +3 -1
- package/es/control/drtab/drtab-control.util.mjs +1 -1
- package/es/control/drtab/drtab.controller.mjs +3 -5
- package/es/control/drtab/drtab.d.ts +13 -0
- package/es/control/drtab/drtab.mjs +7 -1
- package/es/control/drtab/index.d.ts +7 -0
- package/es/control/kanban/kanban.css +1 -1
- package/es/control/kanban/kanban.d.ts +2 -2
- package/es/control/kanban/kanban.mjs +14 -9
- package/es/control/kanban/lane-kanban/lane-kanban.css +1 -0
- package/es/control/kanban/lane-kanban/lane-kanban.d.ts +27 -0
- package/es/control/kanban/lane-kanban/lane-kanban.mjs +409 -0
- package/es/control/toolbar/toolbar.css +1 -1
- package/es/control/toolbar/toolbar.mjs +232 -132
- 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 +11 -12
- package/es/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.mjs +17 -17
- package/es/editor/data-picker/ibiz-picker-link/ibiz-picker-link.mjs +10 -9
- 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/raw/ibiz-raw/ibiz-raw.d.ts +2 -2
- package/es/editor/raw/ibiz-raw/ibiz-raw.mjs +2 -0
- package/es/editor/span/span/span.d.ts +3 -3
- package/es/editor/span/span/span.mjs +7 -4
- package/es/editor/stepper/ibiz-stepper/ibiz-stepper.mjs +2 -1
- package/es/editor/switch/ibiz-switch/ibiz-switch.d.ts +1 -1
- package/es/editor/text-box/ibiz-input-number/ibiz-input-number.d.ts +2 -2
- package/es/editor/text-box/ibiz-input-number/ibiz-input-number.mjs +5 -2
- package/es/editor/text-box/input/input.d.ts +4 -3
- package/es/editor/text-box/input/input.mjs +6 -3
- package/es/locale/en/index.d.ts +6 -0
- package/es/locale/en/index.mjs +5 -0
- package/es/locale/zh-CN/index.d.ts +6 -0
- package/es/locale/zh-CN/index.mjs +5 -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 +231 -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/app-util/app-util.d.ts +6 -0
- package/es/util/app-util/app-util.mjs +8 -0
- package/es/util/fullscreen/fullscreen-util.mjs +1 -1
- package/es/view-engine/app-start-view.engine.d.ts +12 -0
- package/es/view-engine/app-start-view.engine.mjs +11 -0
- package/es/view-engine/app-welcome-view.engine.d.ts +12 -0
- package/es/view-engine/app-welcome-view.engine.mjs +11 -0
- package/es/view-engine/edit-view.engine.d.ts +11 -2
- package/es/view-engine/edit-view.engine.mjs +23 -8
- package/es/view-engine/edit-view4.engine.mjs +4 -0
- package/es/view-engine/index.mjs +10 -0
- package/es/view-engine/opt-view.engine.d.ts +11 -2
- package/es/view-engine/opt-view.engine.mjs +23 -8
- package/es/view-engine/tab-exp-view.engine.mjs +1 -0
- 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/data-view/data-view.cjs +4 -4
- package/lib/control/data-view/data-view.css +1 -1
- package/lib/control/drbar/drbar.controller.cjs +3 -1
- package/lib/control/drtab/drtab-control.util.cjs +1 -1
- package/lib/control/drtab/drtab.cjs +7 -1
- package/lib/control/drtab/drtab.controller.cjs +3 -5
- package/lib/control/kanban/kanban.cjs +14 -9
- package/lib/control/kanban/kanban.css +1 -1
- package/lib/control/kanban/lane-kanban/lane-kanban.cjs +411 -0
- package/lib/control/kanban/lane-kanban/lane-kanban.css +1 -0
- package/lib/control/toolbar/toolbar.cjs +232 -132
- package/lib/control/toolbar/toolbar.css +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 +11 -12
- package/lib/editor/data-picker/ibiz-picker-dropdown/ibiz-picker-dropdown.cjs +17 -17
- package/lib/editor/data-picker/ibiz-picker-link/ibiz-picker-link.cjs +9 -8
- 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/raw/ibiz-raw/ibiz-raw.cjs +2 -0
- package/lib/editor/span/span/span.cjs +7 -4
- package/lib/editor/stepper/ibiz-stepper/ibiz-stepper.cjs +2 -1
- package/lib/editor/text-box/ibiz-input-number/ibiz-input-number.cjs +5 -2
- package/lib/editor/text-box/input/input.cjs +6 -3
- package/lib/locale/en/index.cjs +5 -0
- package/lib/locale/zh-CN/index.cjs +5 -0
- 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 +233 -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/app-util/app-util.cjs +8 -0
- package/lib/util/fullscreen/fullscreen-util.cjs +1 -1
- package/lib/view-engine/app-start-view.engine.cjs +13 -0
- package/lib/view-engine/app-welcome-view.engine.cjs +13 -0
- package/lib/view-engine/edit-view.engine.cjs +23 -8
- package/lib/view-engine/edit-view4.engine.cjs +4 -0
- package/lib/view-engine/index.cjs +10 -0
- package/lib/view-engine/opt-view.engine.cjs +23 -8
- package/lib/view-engine/tab-exp-view.engine.cjs +1 -0
- package/package.json +8 -8
- 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,231 @@
|
|
|
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]), isShowArrow && createVNode("span", {
|
|
107
|
+
"class": ns.em("content", "item-arrow")
|
|
108
|
+
}, [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
|
+
showCascaderArrow: true,
|
|
175
|
+
isLayout: false
|
|
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
|
+
ns: this.ns,
|
|
219
|
+
menuAlign: this.menuAlign,
|
|
220
|
+
isLayout: this.isLayout,
|
|
221
|
+
position: this.position,
|
|
222
|
+
menus: this.menus,
|
|
223
|
+
menuItemsState: this.menuItemsState,
|
|
224
|
+
handleMenuItemClick: this.handleMenuItemClick,
|
|
225
|
+
handleMenuItemMouseEnter: this.handleMenuItemMouseEnter,
|
|
226
|
+
handleMenuItemMouseLeave: this.handleMenuItemMouseLeave
|
|
227
|
+
})]);
|
|
228
|
+
}
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
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;
|