@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
|
@@ -3,10 +3,14 @@
|
|
|
3
3
|
var vue = require('vue');
|
|
4
4
|
var vue3Util = require('@ibiz-template/vue3-util');
|
|
5
5
|
require('./common-extend-menu.css');
|
|
6
|
+
var extendButtonMenu = require('../extend-button-menu/extend-button-menu.cjs');
|
|
6
7
|
|
|
7
8
|
"use strict";
|
|
8
9
|
const CommonExtendMenu = /* @__PURE__ */ vue.defineComponent({
|
|
9
10
|
name: "IBizCommonExtendMenu",
|
|
11
|
+
components: {
|
|
12
|
+
ExtendButtonMenu: extendButtonMenu.ExtendButtonMenu
|
|
13
|
+
},
|
|
10
14
|
props: {
|
|
11
15
|
/**
|
|
12
16
|
* @description 绘制模式,'BUTTON' | 'MENU': 按钮态(仅识别一层) | 常规菜单态
|
|
@@ -63,16 +67,33 @@ const CommonExtendMenu = /* @__PURE__ */ vue.defineComponent({
|
|
|
63
67
|
*/
|
|
64
68
|
menuItemClick: (item, event) => true
|
|
65
69
|
},
|
|
66
|
-
setup(props
|
|
70
|
+
setup(props, {
|
|
71
|
+
emit
|
|
72
|
+
}) {
|
|
67
73
|
const ns = vue3Util.useNamespace("common-extend-menu");
|
|
74
|
+
const handleMenuItemClick = (menuItem, event) => {
|
|
75
|
+
if (!menuItem || (menuItem == null ? void 0 : menuItem.itemType) === "RAWITEM") {
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
emit("menuItemClick", menuItem, event);
|
|
79
|
+
};
|
|
68
80
|
return {
|
|
69
|
-
ns
|
|
81
|
+
ns,
|
|
82
|
+
handleMenuItemClick
|
|
70
83
|
};
|
|
71
84
|
},
|
|
72
85
|
render() {
|
|
73
86
|
return vue.createVNode("div", {
|
|
74
87
|
"class": this.ns.b()
|
|
75
|
-
}, [
|
|
88
|
+
}, [vue.createVNode(extendButtonMenu.ExtendButtonMenu, {
|
|
89
|
+
"items": this.items,
|
|
90
|
+
"menuItemsState": this.menuItemsState,
|
|
91
|
+
"providers": this.providers,
|
|
92
|
+
"position": this.position,
|
|
93
|
+
"layoutMode": this.layoutMode,
|
|
94
|
+
"layout": this.layout,
|
|
95
|
+
"onMenuItemClick": this.handleMenuItemClick
|
|
96
|
+
}, null)]);
|
|
76
97
|
}
|
|
77
98
|
});
|
|
78
99
|
|
|
@@ -0,0 +1,233 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
var vue3Util = require('@ibiz-template/vue3-util');
|
|
5
|
+
var core = require('@ibiz-template/core');
|
|
6
|
+
var extendMenuBase_util = require('../extend-menu-base.util.cjs');
|
|
7
|
+
require('./extend-button-menu.css');
|
|
8
|
+
|
|
9
|
+
"use strict";
|
|
10
|
+
const rightArrow = () => vue.createVNode("svg", {
|
|
11
|
+
"xmlns": "http://www.w3.org/2000/svg",
|
|
12
|
+
"viewBox": "0 0 1024 1024",
|
|
13
|
+
"width": "1em",
|
|
14
|
+
"height": "1em",
|
|
15
|
+
"fill": "currentColor"
|
|
16
|
+
}, [vue.createVNode("path", {
|
|
17
|
+
"fill": "currentColor",
|
|
18
|
+
"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"
|
|
19
|
+
}, null)]);
|
|
20
|
+
function renderMenuItem(params) {
|
|
21
|
+
var _a, _b, _c;
|
|
22
|
+
const {
|
|
23
|
+
ns,
|
|
24
|
+
menu,
|
|
25
|
+
menuAlign,
|
|
26
|
+
menuItemsState
|
|
27
|
+
} = params;
|
|
28
|
+
if (!menu.id || !((_a = menuItemsState[menu.id]) == null ? void 0 : _a.visible))
|
|
29
|
+
return;
|
|
30
|
+
if (menu.itemType === "MENUITEM") {
|
|
31
|
+
return vue.createVNode(vue.resolveComponent("el-button"), {
|
|
32
|
+
"class": [ns.e("menuitem"), "".concat(((_b = menu.sysCss) == null ? void 0 : _b.cssName) || "")],
|
|
33
|
+
"index": menu.id
|
|
34
|
+
}, {
|
|
35
|
+
default: () => [menu.sysImage && vue.createVNode(vue.resolveComponent("iBizIcon"), {
|
|
36
|
+
"class": ns.e("icon"),
|
|
37
|
+
"icon": menu.sysImage
|
|
38
|
+
}, null), menu.caption && vue.createVNode("span", {
|
|
39
|
+
"class": ns.e("caption"),
|
|
40
|
+
"title": core.showTitle(menu.tooltip)
|
|
41
|
+
}, [menu.caption])]
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
if (menu.itemType === "SEPERATOR") {
|
|
45
|
+
const direction = menuAlign === "horizontal" ? "vertical" : "horizontal";
|
|
46
|
+
return vue.createVNode(vue.resolveComponent("el-divider"), {
|
|
47
|
+
"direction": direction,
|
|
48
|
+
"class": [ns.em("separator"), ns.em("separator", direction)],
|
|
49
|
+
"id": menu.id
|
|
50
|
+
}, null);
|
|
51
|
+
}
|
|
52
|
+
if (menu.itemType === "RAWITEM") {
|
|
53
|
+
return vue.createVNode(vue.resolveComponent("el-button"), {
|
|
54
|
+
"index": menu.id,
|
|
55
|
+
"title": core.showTitle(menu.tooltip),
|
|
56
|
+
"class": [ns.e("rawitem"), "".concat(((_c = menu.sysCss) == null ? void 0 : _c.cssName) || "")]
|
|
57
|
+
}, {
|
|
58
|
+
default: () => [vue.createVNode(vue.resolveComponent("iBizRawItem"), {
|
|
59
|
+
"rawItem": menu
|
|
60
|
+
}, null)]
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function renderMenuContent(_params) {
|
|
65
|
+
const {
|
|
66
|
+
ns,
|
|
67
|
+
isLayout,
|
|
68
|
+
position,
|
|
69
|
+
menuAlign,
|
|
70
|
+
menus,
|
|
71
|
+
menuItemsState,
|
|
72
|
+
showCascaderArrow,
|
|
73
|
+
handleMenuItemClick,
|
|
74
|
+
handleMenuItemMouseEnter,
|
|
75
|
+
handleMenuItemMouseLeave
|
|
76
|
+
} = _params;
|
|
77
|
+
return vue.createVNode(vue.resolveComponent("el-row"), {
|
|
78
|
+
"class": [ns.e("content"), ns.is(menuAlign, !!menuAlign), ns.is(position == null ? void 0 : position.toLowerCase(), !!position)]
|
|
79
|
+
}, {
|
|
80
|
+
default: () => menus.map((menu) => {
|
|
81
|
+
var _a, _b;
|
|
82
|
+
const menuItem = renderMenuItem({
|
|
83
|
+
menu,
|
|
84
|
+
ns,
|
|
85
|
+
menuAlign,
|
|
86
|
+
menuItemsState
|
|
87
|
+
});
|
|
88
|
+
if (!menuItem)
|
|
89
|
+
return;
|
|
90
|
+
const style = {};
|
|
91
|
+
if (isLayout && ((_a = menu.layoutPos) == null ? void 0 : _a.layout) === "FLEX") {
|
|
92
|
+
const pos = menu.layoutPos;
|
|
93
|
+
Object.assign(style, {
|
|
94
|
+
flexGrow: pos.grow,
|
|
95
|
+
flexShrink: pos.shrink === 1 ? void 0 : pos.shrink,
|
|
96
|
+
flexBasis: pos.basis
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
const isShowArrow = !!(showCascaderArrow && menu.children);
|
|
100
|
+
return vue.createVNode("div", {
|
|
101
|
+
"class": [ns.em("content", "item"), ns.em("content", (_b = menu.itemType) == null ? void 0 : _b.toLowerCase()), ns.is("show-arrow", isShowArrow)],
|
|
102
|
+
"style": style
|
|
103
|
+
}, [vue.createVNode("div", {
|
|
104
|
+
"class": ns.em("content", "item-container"),
|
|
105
|
+
"onMouseenter": (_e) => handleMenuItemMouseEnter(menu, _e),
|
|
106
|
+
"onMouseleave": (_e) => handleMenuItemMouseLeave(menu, _e),
|
|
107
|
+
"onClick": (_e) => handleMenuItemClick(menu, _e)
|
|
108
|
+
}, [menuItem]), isShowArrow && vue.createVNode("span", {
|
|
109
|
+
"class": ns.em("content", "item-arrow")
|
|
110
|
+
}, [rightArrow()])]);
|
|
111
|
+
})
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
const ExtendButtonMenu = /* @__PURE__ */ vue.defineComponent({
|
|
115
|
+
name: "IBizExtendButtonMenu",
|
|
116
|
+
props: {
|
|
117
|
+
items: {
|
|
118
|
+
type: Object,
|
|
119
|
+
required: true
|
|
120
|
+
},
|
|
121
|
+
menuItemsState: {
|
|
122
|
+
type: Object,
|
|
123
|
+
required: true
|
|
124
|
+
},
|
|
125
|
+
providers: {
|
|
126
|
+
type: Object,
|
|
127
|
+
required: true
|
|
128
|
+
},
|
|
129
|
+
position: {
|
|
130
|
+
type: String,
|
|
131
|
+
required: true
|
|
132
|
+
},
|
|
133
|
+
layoutMode: {
|
|
134
|
+
type: String,
|
|
135
|
+
required: true
|
|
136
|
+
},
|
|
137
|
+
layout: {
|
|
138
|
+
type: Object
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
emits: {
|
|
142
|
+
menuItemClick: (item, event) => true
|
|
143
|
+
},
|
|
144
|
+
setup(props, {
|
|
145
|
+
emit
|
|
146
|
+
}) {
|
|
147
|
+
const ns = vue3Util.useNamespace("extend-menu-button");
|
|
148
|
+
const buttonMenuRef = vue.ref();
|
|
149
|
+
const menuAlign = vue.computed(() => ["TOP", "BOTTOM"].includes(props.position) ? "horizontal" : "vertical");
|
|
150
|
+
const isLayout = vue.computed(() => props.layoutMode !== "BORDER" && ["TOP", "BOTTOM"].includes(props.position));
|
|
151
|
+
const menus = vue.ref(extendMenuBase_util.getMenus(props.items));
|
|
152
|
+
const renderCascaderContent = (_menu) => {
|
|
153
|
+
return renderMenuContent({
|
|
154
|
+
ns,
|
|
155
|
+
menuAlign: "vertical",
|
|
156
|
+
position: props.position,
|
|
157
|
+
menus: _menu.children,
|
|
158
|
+
menuItemsState: props.menuItemsState,
|
|
159
|
+
handleMenuItemClick,
|
|
160
|
+
handleMenuItemMouseEnter,
|
|
161
|
+
handleMenuItemMouseLeave,
|
|
162
|
+
showCascaderArrow: true,
|
|
163
|
+
isLayout: false
|
|
164
|
+
});
|
|
165
|
+
};
|
|
166
|
+
const renderBorderContent = () => {
|
|
167
|
+
return renderMenuContent({
|
|
168
|
+
ns,
|
|
169
|
+
menuAlign: menuAlign.value,
|
|
170
|
+
position: props.position,
|
|
171
|
+
menus: menus.value,
|
|
172
|
+
menuItemsState: props.menuItemsState,
|
|
173
|
+
handleMenuItemClick,
|
|
174
|
+
handleMenuItemMouseEnter,
|
|
175
|
+
handleMenuItemMouseLeave,
|
|
176
|
+
showCascaderArrow: true,
|
|
177
|
+
isLayout: false
|
|
178
|
+
});
|
|
179
|
+
};
|
|
180
|
+
const {
|
|
181
|
+
getOverlayNum,
|
|
182
|
+
clearAllCascader,
|
|
183
|
+
handleMenuItemMouseEnter,
|
|
184
|
+
handleMenuItemMouseLeave
|
|
185
|
+
} = extendMenuBase_util.useCascaderPopover(props, ns, menuAlign, renderCascaderContent);
|
|
186
|
+
let closeBorderPopover;
|
|
187
|
+
if (props.layoutMode === "BORDER") {
|
|
188
|
+
const borderLayout = extendMenuBase_util.useBorderLayout(buttonMenuRef, ns, props.position, menuAlign, getOverlayNum, renderBorderContent);
|
|
189
|
+
closeBorderPopover = borderLayout.closeBorderPopover;
|
|
190
|
+
}
|
|
191
|
+
const handleMenuItemClick = async (_menu, _event) => {
|
|
192
|
+
if (_menu.children)
|
|
193
|
+
return;
|
|
194
|
+
clearAllCascader();
|
|
195
|
+
if (closeBorderPopover)
|
|
196
|
+
closeBorderPopover();
|
|
197
|
+
if (!_menu.appFuncId) {
|
|
198
|
+
ibiz.log.warn(ibiz.i18n.t("runtime.controller.control.menu.noConfigured"));
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
const menuItem = extendMenuBase_util.findMenuItem(_menu.id, props.items);
|
|
202
|
+
emit("menuItemClick", menuItem, _event);
|
|
203
|
+
};
|
|
204
|
+
return {
|
|
205
|
+
ns,
|
|
206
|
+
menus,
|
|
207
|
+
menuAlign,
|
|
208
|
+
isLayout,
|
|
209
|
+
buttonMenuRef,
|
|
210
|
+
handleMenuItemClick,
|
|
211
|
+
handleMenuItemMouseEnter,
|
|
212
|
+
handleMenuItemMouseLeave
|
|
213
|
+
};
|
|
214
|
+
},
|
|
215
|
+
render() {
|
|
216
|
+
return vue.createVNode("div", {
|
|
217
|
+
"ref": "buttonMenuRef",
|
|
218
|
+
"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)]
|
|
219
|
+
}, [this.layoutMode !== "BORDER" && renderMenuContent({
|
|
220
|
+
ns: this.ns,
|
|
221
|
+
menuAlign: this.menuAlign,
|
|
222
|
+
isLayout: this.isLayout,
|
|
223
|
+
position: this.position,
|
|
224
|
+
menus: this.menus,
|
|
225
|
+
menuItemsState: this.menuItemsState,
|
|
226
|
+
handleMenuItemClick: this.handleMenuItemClick,
|
|
227
|
+
handleMenuItemMouseEnter: this.handleMenuItemMouseEnter,
|
|
228
|
+
handleMenuItemMouseLeave: this.handleMenuItemMouseLeave
|
|
229
|
+
})]);
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
|
|
233
|
+
exports.ExtendButtonMenu = ExtendButtonMenu;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ibiz-extend-menu-button{--ibiz-extend-menu-button-padding:var(--ibiz-spacing-extra-tight) 0;--ibiz-extend-menu-button-font-size:var(--ibiz-font-size-header-6);--ibiz-extend-menu-button-rawitem-min-width:var(--ibiz-font-size-header-6);--ibiz-extend-menu-button-icon-width:20px;--ibiz-extend-menu-button-icon-height:20px;--ibiz-extend-menu-button-text-margin:0 0 0 var(--ibiz-spacing-tight);--ibiz-extend-menu-button-content-padding:0 var(--ibiz-spacing-tight);--ibiz-extend-menu-button-hover-color:var(--ibiz-color-primary-hover-text);--ibiz-extend-menu-button-hover-bg-color:var(--ibiz-color-primary-hover);--ibiz-extend-menu-button-active-color:var(--ibiz-color-primary-active-text);--ibiz-extend-menu-button-active-bg-color:var(--ibiz-color-primary-active);--ibiz-extend-menu-button-item-height:42px;--ibiz-extend-menu-button-item-horizontal-min-width:200px;--ibiz-extend-menu-button-item-horizontal-margin:0 0 0 var(--ibiz-spacing-extra-tight);--ibiz-extend-menu-button-item-horizontal-separator-margin:0 var(--ibiz-spacing-tight);--ibiz-extend-menu-button-item-vertical-margin:var(--ibiz-spacing-extra-tight) 0 0 0;--ibiz-extend-menu-button-item-vertical-separator-margin:var(--ibiz-spacing-tight) 0;width:100%;height:100%;padding:var(--ibiz-extend-menu-button-padding)}.ibiz-extend-menu-button__menuitem{width:100%;height:100%;font-size:var(--ibiz-extend-menu-button-font-size)}.ibiz-extend-menu-button__rawitem{width:100%;height:100%}.ibiz-extend-menu-button__rawitem .ibiz-rawitem{min-width:var(--ibiz-extend-menu-button-rawitem-min-width);font-size:initial;color:var(--ibiz-color-primary-text)}.ibiz-extend-menu-button__separator--horizontal{margin:0}.ibiz-extend-menu-button__separator--vertical{margin:0}.ibiz-extend-menu-button__icon{display:flex;align-items:center;width:var(--ibiz-extend-menu-button-icon-width);height:var(--ibiz-extend-menu-button-icon-height)}.ibiz-extend-menu-button__icon+.ibiz-extend-menu-button__caption{margin:var(--ibiz-extend-menu-button-text-margin)}.ibiz-extend-menu-button__content{display:flex;flex-wrap:nowrap;height:100%;padding:var(--ibiz-extend-menu-button-content-padding);overflow:auto}.ibiz-extend-menu-button__content--item{display:flex;align-items:center}.ibiz-extend-menu-button__content--item.is-show-arrow{position:relative}.ibiz-extend-menu-button__content--item.is-show-arrow .ibiz-extend-menu-button__menuitem::after{display:block;width:1em;height:1em;margin-left:auto;content:""}.ibiz-extend-menu-button__content--item.is-rotate-arrow svg{transform:rotate(180deg)}.ibiz-extend-menu-button__content--item-container{display:flex;align-items:center;height:100%}.ibiz-extend-menu-button__content--menuitem{height:var(--ibiz-extend-menu-button-item-height)}.ibiz-extend-menu-button__content--rawitem{height:var(--ibiz-extend-menu-button-item-height)}.ibiz-extend-menu-button__content--item-arrow{position:absolute;top:50%;right:15px;display:flex;align-items:center;justify-content:center;color:var(--ibiz-color-primary-text);transform:translateY(-50%)}.ibiz-extend-menu-button__content--item-arrow svg{transition:transform .3s ease}.ibiz-extend-menu-button__content.is-horizontal{align-items:center}.ibiz-extend-menu-button__content.is-horizontal .ibiz-extend-menu-button__content--item{margin:var(--ibiz-extend-menu-button-item-horizontal-margin)}.ibiz-extend-menu-button__content.is-horizontal .ibiz-extend-menu-button__content--item:first-child{margin-left:0}.ibiz-extend-menu-button__content.is-horizontal .ibiz-extend-menu-button__content--item-container:not(:has(.el-divider)){min-width:var(--ibiz-extend-menu-button-item-horizontal-min-width)}.ibiz-extend-menu-button__content.is-horizontal .ibiz-extend-menu-button__content--seperator{width:auto;margin:var(--ibiz-extend-menu-button-item-horizontal-separator-margin)}.ibiz-extend-menu-button__content.is-horizontal .ibiz-extend-menu-button__content--seperator+.ibiz-extend-menu-button__content--item{margin-left:0}.ibiz-extend-menu-button__content.is-vertical{flex-direction:column}.ibiz-extend-menu-button__content.is-vertical .ibiz-extend-menu-button__content--item{margin:var(--ibiz-extend-menu-button-item-vertical-margin)}.ibiz-extend-menu-button__content.is-vertical .ibiz-extend-menu-button__content--item:first-child{margin-top:0}.ibiz-extend-menu-button__content.is-vertical .ibiz-extend-menu-button__content--seperator{margin:var(--ibiz-extend-menu-button-item-vertical-separator-margin)}.ibiz-extend-menu-button__content.is-vertical .ibiz-extend-menu-button__content--seperator+.ibiz-extend-menu-button__content--item{margin-top:0}.ibiz-extend-menu-button__content.is-vertical .ibiz-extend-menu-button__menuitem{justify-content:flex-start}.ibiz-extend-menu-button__content.is-vertical .ibiz-extend-menu-button__rawitem{justify-content:flex-start}.ibiz-extend-menu-button__content .el-button{--ibiz-color-primary-hover:var(--ibiz-extend-menu-button-active-bg-color);--ibiz-color-primary-hover-text:var(--ibiz-extend-menu-button-active-color);--ibiz-color-primary-active:var(--ibiz-extend-menu-button-hover-bg-color);--ibiz-color-primary-active-text:var(--ibiz-extend-menu-button-hover-color)}.ibiz-extend-menu-button__content .el-button:focus{background-color:var(--ibiz-color-primary-active)}.ibiz-extend-menu-button__content .el-button:hover{background-color:var(--ibiz-color-primary-hover)}.ibiz-extend-menu-button.is-vertical{--ibiz-extend-menu-button-padding:var(--ibiz-spacing-tight) 0}.ibiz-extend-menu-button.is-vertical .ibiz-extend-menu-button__content,.ibiz-extend-menu-button.is-vertical .ibiz-extend-menu-button__content--item,.ibiz-extend-menu-button.is-vertical .ibiz-extend-menu-button__content--item-container{width:100%}.ibiz-extend-menu-button-cascader-popover{--ibiz-extend-menu-button-padding:var(--ibiz-spacing-extra-tight) 0;--ibiz-extend-menu-button-font-size:var(--ibiz-font-size-header-6);--ibiz-extend-menu-button-rawitem-min-width:var(--ibiz-font-size-header-6);--ibiz-extend-menu-button-icon-width:20px;--ibiz-extend-menu-button-icon-height:20px;--ibiz-extend-menu-button-text-margin:0 0 0 var(--ibiz-spacing-tight);--ibiz-extend-menu-button-content-padding:0 var(--ibiz-spacing-tight);--ibiz-extend-menu-button-hover-color:var(--ibiz-color-primary-hover-text);--ibiz-extend-menu-button-hover-bg-color:var(--ibiz-color-primary-hover);--ibiz-extend-menu-button-active-color:var(--ibiz-color-primary-active-text);--ibiz-extend-menu-button-active-bg-color:var(--ibiz-color-primary-active);--ibiz-extend-menu-button-item-height:42px;--ibiz-extend-menu-button-item-horizontal-min-width:200px;--ibiz-extend-menu-button-item-horizontal-margin:0 0 0 var(--ibiz-spacing-extra-tight);--ibiz-extend-menu-button-item-horizontal-separator-margin:0 var(--ibiz-spacing-tight);--ibiz-extend-menu-button-item-vertical-margin:var(--ibiz-spacing-extra-tight) 0 0 0;--ibiz-extend-menu-button-item-vertical-separator-margin:var(--ibiz-spacing-tight) 0;--ibiz-extend-menu-button-popover-padding:var(--ibiz-spacing-super-tight) var(--ibiz-spacing-extra-tight);--ibiz-extend-menu-button-popover-min-width:200px;--ibiz-extend-menu-button-popover-z-index:3;--ibiz-extend-menu-button-popover-background:var(--ibiz-color-primary);--ibiz-extend-menu-button-content-padding:0;--ibiz-extend-menu-button-item-vertical-margin:0;z-index:var(--ibiz-extend-menu-button-popover-z-index);width:auto;padding:var(--ibiz-extend-menu-button-popover-padding);background-color:var(--ibiz-extend-menu-button-popover-background);box-shadow:var(--ibiz-shadow-elevated)}.ibiz-extend-menu-button-cascader-popover .ibiz-extend-menu-button__content{min-width:var(--ibiz-extend-menu-button-popover-min-width)}.ibiz-extend-menu-button-cascader-popover .ibiz-extend-menu-button__separator--horizontal{border-color:var(--ibiz-color-primary-hover)}.ibiz-extend-menu-button-cascader-popover .ibiz-extend-menu-button__content,.ibiz-extend-menu-button-cascader-popover .ibiz-extend-menu-button__content--item,.ibiz-extend-menu-button-cascader-popover .ibiz-extend-menu-button__content--item-container{width:100%}.ibiz-extend-menu-button-border-popover{--ibiz-extend-menu-button-padding:var(--ibiz-spacing-extra-tight) 0;--ibiz-extend-menu-button-font-size:var(--ibiz-font-size-header-6);--ibiz-extend-menu-button-rawitem-min-width:var(--ibiz-font-size-header-6);--ibiz-extend-menu-button-icon-width:20px;--ibiz-extend-menu-button-icon-height:20px;--ibiz-extend-menu-button-text-margin:0 0 0 var(--ibiz-spacing-tight);--ibiz-extend-menu-button-content-padding:0 var(--ibiz-spacing-tight);--ibiz-extend-menu-button-hover-color:var(--ibiz-color-primary-hover-text);--ibiz-extend-menu-button-hover-bg-color:var(--ibiz-color-primary-hover);--ibiz-extend-menu-button-active-color:var(--ibiz-color-primary-active-text);--ibiz-extend-menu-button-active-bg-color:var(--ibiz-color-primary-active);--ibiz-extend-menu-button-item-height:42px;--ibiz-extend-menu-button-item-horizontal-min-width:200px;--ibiz-extend-menu-button-item-horizontal-margin:0 0 0 var(--ibiz-spacing-extra-tight);--ibiz-extend-menu-button-item-horizontal-separator-margin:0 var(--ibiz-spacing-tight);--ibiz-extend-menu-button-item-vertical-margin:var(--ibiz-spacing-extra-tight) 0 0 0;--ibiz-extend-menu-button-item-vertical-separator-margin:var(--ibiz-spacing-tight) 0;--ibiz-extend-menu-button-popover-padding:var(--ibiz-spacing-super-tight) var(--ibiz-spacing-extra-tight);--ibiz-extend-menu-button-popover-min-width:200px;--ibiz-extend-menu-button-popover-z-index:3;--ibiz-extend-menu-button-popover-background:var(--ibiz-color-primary);--ibiz-extend-menu-button-content-padding:0;--ibiz-extend-menu-button-item-vertical-margin:0;z-index:var(--ibiz-extend-menu-button-popover-z-index);width:auto;padding:var(--ibiz-extend-menu-button-popover-padding);background-color:var(--ibiz-extend-menu-button-popover-background);box-shadow:var(--ibiz-shadow-elevated)}.ibiz-extend-menu-button-border-popover .ibiz-extend-menu-button__content{min-width:var(--ibiz-extend-menu-button-popover-min-width)}.ibiz-extend-menu-button-border-popover .ibiz-extend-menu-button__separator--horizontal{border-color:var(--ibiz-color-primary-hover)}.ibiz-extend-menu-button-border-popover .ibiz-extend-menu-button__content,.ibiz-extend-menu-button-border-popover .ibiz-extend-menu-button__content--item,.ibiz-extend-menu-button-border-popover .ibiz-extend-menu-button__content--item-container{width:100%}.ibiz-extend-menu-button-border-popover .ibiz-extend-menu-button__content.is-horizontal .ibiz-extend-menu-button__content--item-arrow{transform:translateY(-50%) rotate(90deg)}.ibiz-extend-menu-button-placehold{--ibiz-extend-menu-button-placehold-z-index:3;position:fixed;z-index:var(--ibiz-extend-menu-button-placehold-z-index);display:flex;align-items:center;justify-content:center;cursor:pointer}.ibiz-extend-menu-button-placehold__line{position:absolute}.ibiz-extend-menu-button-placehold__arrow{color:var(--ibiz-color-text-2)}.ibiz-extend-menu-button-placehold.is-left .ibiz-extend-menu-button-placehold__line{top:0;left:0;width:1px;height:100%}.ibiz-extend-menu-button-placehold.is-right .ibiz-extend-menu-button-placehold__line{top:0;right:0;width:1px;height:100%}.ibiz-extend-menu-button-placehold.is-right svg{transform:rotate(180deg)}.ibiz-extend-menu-button-placehold.is-top .ibiz-extend-menu-button-placehold__line{top:0;left:0;width:100%;height:1px}.ibiz-extend-menu-button-placehold.is-top svg{transform:rotate(90deg)}.ibiz-extend-menu-button-placehold.is-bottom .ibiz-extend-menu-button-placehold__line{bottom:0;left:0;width:100%;height:1px}.ibiz-extend-menu-button-placehold.is-bottom svg{transform:rotate(-90deg)}
|
|
@@ -0,0 +1,344 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var vue = require('vue');
|
|
4
|
+
|
|
5
|
+
"use strict";
|
|
6
|
+
function useCascaderPopover(props, ns, menuAlign, renderCascaderContent) {
|
|
7
|
+
let hoverCount = 0;
|
|
8
|
+
let closeTimer = null;
|
|
9
|
+
const overlayInstances = /* @__PURE__ */ new Map();
|
|
10
|
+
const activeMenuIdStack = vue.ref([]);
|
|
11
|
+
const rotatedArrowElements = /* @__PURE__ */ new Map();
|
|
12
|
+
const getOverlayNum = () => {
|
|
13
|
+
return overlayInstances.size;
|
|
14
|
+
};
|
|
15
|
+
const getPopoverPlacement = (level) => {
|
|
16
|
+
switch (props.position) {
|
|
17
|
+
case "TOP":
|
|
18
|
+
return level > 0 ? "right-start" : "bottom-start";
|
|
19
|
+
case "BOTTOM":
|
|
20
|
+
return level > 0 ? "right-end" : "top-start";
|
|
21
|
+
case "RIGHT":
|
|
22
|
+
return "left-start";
|
|
23
|
+
case "LEFT":
|
|
24
|
+
return "right-start";
|
|
25
|
+
default:
|
|
26
|
+
return void 0;
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
const clearCloseTimer = () => {
|
|
30
|
+
if (closeTimer) {
|
|
31
|
+
clearTimeout(closeTimer);
|
|
32
|
+
closeTimer = null;
|
|
33
|
+
}
|
|
34
|
+
};
|
|
35
|
+
const resetArrowRotation = (ns2, key) => {
|
|
36
|
+
const arrow = rotatedArrowElements.get(key);
|
|
37
|
+
if (!arrow)
|
|
38
|
+
return;
|
|
39
|
+
arrow.classList.remove(ns2.is("rotate-arrow", true));
|
|
40
|
+
rotatedArrowElements.delete(key);
|
|
41
|
+
};
|
|
42
|
+
const rotateArrowIcon = (el, ns2, key) => {
|
|
43
|
+
if (el) {
|
|
44
|
+
el.classList.add(ns2.is("rotate-arrow", true));
|
|
45
|
+
rotatedArrowElements.set(key, el);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
const closePopoverAtLevel = (key) => {
|
|
49
|
+
const overlay = overlayInstances.get(key);
|
|
50
|
+
if (overlay) {
|
|
51
|
+
overlay.dismiss();
|
|
52
|
+
overlayInstances.delete(key);
|
|
53
|
+
resetArrowRotation(ns, key);
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
const closeSubsequentPopovers = (currentLevel) => {
|
|
57
|
+
let level = currentLevel;
|
|
58
|
+
while (overlayInstances.get(level + 1)) {
|
|
59
|
+
level++;
|
|
60
|
+
}
|
|
61
|
+
for (let i = level; i >= currentLevel; i--) {
|
|
62
|
+
closePopoverAtLevel(i);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
const closeAllPopovers = () => {
|
|
66
|
+
for (const key of overlayInstances.keys()) {
|
|
67
|
+
closePopoverAtLevel(key);
|
|
68
|
+
}
|
|
69
|
+
overlayInstances.clear();
|
|
70
|
+
activeMenuIdStack.value = [];
|
|
71
|
+
hoverCount = 0;
|
|
72
|
+
};
|
|
73
|
+
const scheduleDelayedClose = () => {
|
|
74
|
+
clearCloseTimer();
|
|
75
|
+
closeTimer = setTimeout(() => {
|
|
76
|
+
if (hoverCount <= 0) {
|
|
77
|
+
closeAllPopovers();
|
|
78
|
+
}
|
|
79
|
+
}, 300);
|
|
80
|
+
};
|
|
81
|
+
const clearAllCascader = () => {
|
|
82
|
+
closeAllPopovers();
|
|
83
|
+
clearCloseTimer();
|
|
84
|
+
};
|
|
85
|
+
const handleMenuItemMouseEnter = (_menu, event) => {
|
|
86
|
+
if (activeMenuIdStack.value.includes(_menu.id))
|
|
87
|
+
return;
|
|
88
|
+
activeMenuIdStack.value.push(_menu.id);
|
|
89
|
+
closeSubsequentPopovers(_menu.level);
|
|
90
|
+
if (_menu.children) {
|
|
91
|
+
openCascaderPopover(_menu, event);
|
|
92
|
+
}
|
|
93
|
+
clearCloseTimer();
|
|
94
|
+
};
|
|
95
|
+
const handleMenuItemMouseLeave = (_menu) => {
|
|
96
|
+
const index = activeMenuIdStack.value.indexOf(_menu.id);
|
|
97
|
+
if (index !== -1) {
|
|
98
|
+
activeMenuIdStack.value.splice(index, 1);
|
|
99
|
+
}
|
|
100
|
+
scheduleDelayedClose();
|
|
101
|
+
};
|
|
102
|
+
const onPopoverMouseEnter = () => {
|
|
103
|
+
hoverCount++;
|
|
104
|
+
clearCloseTimer();
|
|
105
|
+
};
|
|
106
|
+
const onPopoverMouseLeave = (_menu, _event) => {
|
|
107
|
+
hoverCount = Math.max(0, hoverCount - 1);
|
|
108
|
+
scheduleDelayedClose();
|
|
109
|
+
};
|
|
110
|
+
const openCascaderPopover = (menu, evt, opts) => {
|
|
111
|
+
var _a;
|
|
112
|
+
const overlay = ibiz.overlay.createPopover(
|
|
113
|
+
() => vue.h(renderCascaderContent(menu), {
|
|
114
|
+
onMouseenter: onPopoverMouseEnter,
|
|
115
|
+
onMouseleave: onPopoverMouseLeave
|
|
116
|
+
}),
|
|
117
|
+
void 0,
|
|
118
|
+
{
|
|
119
|
+
width: "auto",
|
|
120
|
+
height: "auto",
|
|
121
|
+
noArrow: true,
|
|
122
|
+
placement: getPopoverPlacement(menu.level),
|
|
123
|
+
offsetOpts: 10,
|
|
124
|
+
...opts,
|
|
125
|
+
modalClass: "".concat(ns.b("cascader-popover"), " ").concat(ns.is(
|
|
126
|
+
menuAlign.value,
|
|
127
|
+
true
|
|
128
|
+
), " ").concat((opts == null ? void 0 : opts.modalClass) || "")
|
|
129
|
+
}
|
|
130
|
+
);
|
|
131
|
+
overlayInstances.set(menu.level, overlay);
|
|
132
|
+
overlay == null ? void 0 : overlay.present(evt.currentTarget);
|
|
133
|
+
rotateArrowIcon(
|
|
134
|
+
(_a = evt.currentTarget) == null ? void 0 : _a.parentElement,
|
|
135
|
+
ns,
|
|
136
|
+
menu.level
|
|
137
|
+
);
|
|
138
|
+
};
|
|
139
|
+
return {
|
|
140
|
+
getOverlayNum,
|
|
141
|
+
openCascaderPopover,
|
|
142
|
+
clearAllCascader,
|
|
143
|
+
handleMenuItemMouseEnter,
|
|
144
|
+
handleMenuItemMouseLeave
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
function useBorderLayout(menuRef, ns, position, menuAlign, getOverlayNum, renderBorderContent) {
|
|
148
|
+
let overlay;
|
|
149
|
+
const getElementAbsolutePosition = (element) => {
|
|
150
|
+
let x = 0;
|
|
151
|
+
let y = 0;
|
|
152
|
+
let current = element;
|
|
153
|
+
while (current) {
|
|
154
|
+
x += current.offsetLeft;
|
|
155
|
+
y += current.offsetTop;
|
|
156
|
+
current = current.offsetParent;
|
|
157
|
+
}
|
|
158
|
+
return {
|
|
159
|
+
x,
|
|
160
|
+
y,
|
|
161
|
+
width: element.offsetWidth,
|
|
162
|
+
height: element.offsetHeight
|
|
163
|
+
};
|
|
164
|
+
};
|
|
165
|
+
const resolvePopoverPlacement = () => {
|
|
166
|
+
switch (position) {
|
|
167
|
+
case "TOP":
|
|
168
|
+
return "bottom";
|
|
169
|
+
case "BOTTOM":
|
|
170
|
+
return "top";
|
|
171
|
+
case "RIGHT":
|
|
172
|
+
return "left";
|
|
173
|
+
case "LEFT":
|
|
174
|
+
return "right";
|
|
175
|
+
default:
|
|
176
|
+
return void 0;
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
let popoverEl;
|
|
180
|
+
const closeBorderPopover = () => {
|
|
181
|
+
overlay == null ? void 0 : overlay.dismiss();
|
|
182
|
+
overlay = null;
|
|
183
|
+
document.removeEventListener("mousemove", handleMouseTrackOut);
|
|
184
|
+
popoverEl = void 0;
|
|
185
|
+
};
|
|
186
|
+
const handleMouseTrackOut = (e) => {
|
|
187
|
+
if (!popoverEl) {
|
|
188
|
+
popoverEl = document.querySelector(
|
|
189
|
+
".".concat(ns.b("border-popover"))
|
|
190
|
+
);
|
|
191
|
+
}
|
|
192
|
+
const pos = getElementAbsolutePosition(popoverEl);
|
|
193
|
+
const isInside = e.pageX >= pos.x && e.pageX <= pos.x + pos.width && e.pageY >= pos.y && e.pageY <= pos.y + pos.height;
|
|
194
|
+
if (!isInside && getOverlayNum() <= 0) {
|
|
195
|
+
closeBorderPopover();
|
|
196
|
+
}
|
|
197
|
+
};
|
|
198
|
+
const handlePlaceholderMouseEnter = async (evt) => {
|
|
199
|
+
var _a;
|
|
200
|
+
if (overlay)
|
|
201
|
+
return;
|
|
202
|
+
overlay = ibiz.overlay.createPopover(
|
|
203
|
+
() => vue.h(renderBorderContent()),
|
|
204
|
+
void 0,
|
|
205
|
+
{
|
|
206
|
+
width: "auto",
|
|
207
|
+
height: "auto",
|
|
208
|
+
noArrow: true,
|
|
209
|
+
placement: resolvePopoverPlacement(),
|
|
210
|
+
offsetOpts: -1,
|
|
211
|
+
modalClass: "".concat(ns.b("border-popover"), " ").concat(ns.is(menuAlign.value, true))
|
|
212
|
+
}
|
|
213
|
+
);
|
|
214
|
+
const triggerEl = (_a = evt.currentTarget) == null ? void 0 : _a.querySelector(
|
|
215
|
+
".".concat(ns.be("placehold", "line"))
|
|
216
|
+
);
|
|
217
|
+
await (overlay == null ? void 0 : overlay.present(triggerEl));
|
|
218
|
+
setTimeout(() => {
|
|
219
|
+
document.addEventListener("mousemove", handleMouseTrackOut);
|
|
220
|
+
}, 200);
|
|
221
|
+
};
|
|
222
|
+
let placeholderEl = null;
|
|
223
|
+
let resizeObserver = null;
|
|
224
|
+
let frameLoopId = null;
|
|
225
|
+
const minWidth = 20;
|
|
226
|
+
const minHeight = 20;
|
|
227
|
+
const computeTop = (top, height) => {
|
|
228
|
+
return position === "BOTTOM" ? top + height - minHeight : top;
|
|
229
|
+
};
|
|
230
|
+
const computeLeft = (left, width) => {
|
|
231
|
+
return position === "RIGHT" ? left + width - minWidth : left;
|
|
232
|
+
};
|
|
233
|
+
const computeWidth = (width) => {
|
|
234
|
+
return ["RIGHT", "LEFT"].includes(position) ? minWidth : width;
|
|
235
|
+
};
|
|
236
|
+
const computeHeight = (height) => {
|
|
237
|
+
return ["TOP", "BOTTOM"].includes(position) ? minHeight : height;
|
|
238
|
+
};
|
|
239
|
+
function createFixedPlaceholder(el) {
|
|
240
|
+
const container = document.createElement("div");
|
|
241
|
+
container.classList.add(ns.b("placehold"));
|
|
242
|
+
container.classList.add(ns.is(position.toLowerCase(), !!position));
|
|
243
|
+
const line = document.createElement("div");
|
|
244
|
+
line.classList.add(ns.be("placehold", "line"));
|
|
245
|
+
const arrow = document.createElement("div");
|
|
246
|
+
arrow.classList.add(ns.be("placehold", "arrow"));
|
|
247
|
+
container.appendChild(line);
|
|
248
|
+
container.appendChild(arrow);
|
|
249
|
+
document.body.appendChild(container);
|
|
250
|
+
placeholderEl = container;
|
|
251
|
+
placeholderEl.addEventListener("mouseenter", handlePlaceholderMouseEnter);
|
|
252
|
+
arrow.innerHTML = '\n <svg xmlns="http://www.w3.org/2000/svg"\n viewBox="0 0 1024 1024"\n width="1em"\n height="1em"\n fill="currentColor">\n <path fill="currentColor"\n 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">\n </path>\n </svg>\n ';
|
|
253
|
+
updatePlaceholderPosition(el);
|
|
254
|
+
}
|
|
255
|
+
function updatePlaceholderPosition(el) {
|
|
256
|
+
if (!placeholderEl)
|
|
257
|
+
return;
|
|
258
|
+
const rect = el.getBoundingClientRect();
|
|
259
|
+
placeholderEl.style.top = "".concat(computeTop(rect.top, rect.height), "px");
|
|
260
|
+
placeholderEl.style.left = "".concat(computeLeft(rect.left, rect.width), "px");
|
|
261
|
+
placeholderEl.style.width = "".concat(computeWidth(rect.width), "px");
|
|
262
|
+
placeholderEl.style.height = "".concat(computeHeight(rect.height), "px");
|
|
263
|
+
}
|
|
264
|
+
function startTracking() {
|
|
265
|
+
const el = menuRef.value;
|
|
266
|
+
if (!el)
|
|
267
|
+
return;
|
|
268
|
+
createFixedPlaceholder(el);
|
|
269
|
+
resizeObserver = new ResizeObserver(() => updatePlaceholderPosition(el));
|
|
270
|
+
resizeObserver.observe(el);
|
|
271
|
+
const updateLoop = () => {
|
|
272
|
+
updatePlaceholderPosition(el);
|
|
273
|
+
frameLoopId = requestAnimationFrame(updateLoop);
|
|
274
|
+
};
|
|
275
|
+
frameLoopId = requestAnimationFrame(updateLoop);
|
|
276
|
+
}
|
|
277
|
+
function stopTrackingAndDestroy() {
|
|
278
|
+
if (resizeObserver) {
|
|
279
|
+
const el = menuRef.value;
|
|
280
|
+
if (el)
|
|
281
|
+
resizeObserver.unobserve(el);
|
|
282
|
+
resizeObserver.disconnect();
|
|
283
|
+
resizeObserver = null;
|
|
284
|
+
}
|
|
285
|
+
if (frameLoopId !== null) {
|
|
286
|
+
cancelAnimationFrame(frameLoopId);
|
|
287
|
+
frameLoopId = null;
|
|
288
|
+
}
|
|
289
|
+
if (placeholderEl && placeholderEl.parentNode) {
|
|
290
|
+
placeholderEl.removeEventListener(
|
|
291
|
+
"mouseenter",
|
|
292
|
+
handlePlaceholderMouseEnter
|
|
293
|
+
);
|
|
294
|
+
placeholderEl.parentNode.removeChild(placeholderEl);
|
|
295
|
+
placeholderEl = null;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
vue.onMounted(startTracking);
|
|
299
|
+
vue.onUnmounted(stopTrackingAndDestroy);
|
|
300
|
+
return { closeBorderPopover };
|
|
301
|
+
}
|
|
302
|
+
function getMenus(items, _parentItem, level = 0) {
|
|
303
|
+
return items.map((item) => {
|
|
304
|
+
var _a;
|
|
305
|
+
const data = {
|
|
306
|
+
...item,
|
|
307
|
+
value: item.id,
|
|
308
|
+
label: item.caption,
|
|
309
|
+
parentId: _parentItem == null ? void 0 : _parentItem.id,
|
|
310
|
+
level
|
|
311
|
+
};
|
|
312
|
+
if ((_a = item.appMenuItems) == null ? void 0 : _a.length) {
|
|
313
|
+
data.children = getMenus(item.appMenuItems, item, level + 1);
|
|
314
|
+
}
|
|
315
|
+
return data;
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
function findMenuItem(_id, items) {
|
|
319
|
+
let temp;
|
|
320
|
+
if (items) {
|
|
321
|
+
items.some((item) => {
|
|
322
|
+
if (!item.id)
|
|
323
|
+
return true;
|
|
324
|
+
if (item.id === _id) {
|
|
325
|
+
temp = item;
|
|
326
|
+
return true;
|
|
327
|
+
}
|
|
328
|
+
if (item.appMenuItems && item.appMenuItems.length > 0) {
|
|
329
|
+
temp = findMenuItem(_id, item.appMenuItems);
|
|
330
|
+
if (!temp) {
|
|
331
|
+
return false;
|
|
332
|
+
}
|
|
333
|
+
return true;
|
|
334
|
+
}
|
|
335
|
+
return false;
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
return temp;
|
|
339
|
+
}
|
|
340
|
+
|
|
341
|
+
exports.findMenuItem = findMenuItem;
|
|
342
|
+
exports.getMenus = getMenus;
|
|
343
|
+
exports.useBorderLayout = useBorderLayout;
|
|
344
|
+
exports.useCascaderPopover = useCascaderPopover;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.ibiz-left-side-menu{width:100%;height:100%}
|
|
1
|
+
.ibiz-left-side-menu{width:100%;height:100%}.ibiz-col--self-align>.ibiz-left-side-menu{width:100%;height:100%}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.ibiz-right-side-menu{width:100%;height:100%}
|
|
1
|
+
.ibiz-right-side-menu{width:100%;height:100%}.ibiz-col--self-align>.ibiz-right-side-menu{width:100%;height:100%}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
.ibiz-top-side-menu{width:100%;height:100%}
|
|
1
|
+
.ibiz-top-side-menu{width:100%;height:100%}.ibiz-col--self-align>.ibiz-top-side-menu{width:100%;height:100%}
|
|
@@ -17,6 +17,14 @@ class AppUtil {
|
|
|
17
17
|
constructor(router) {
|
|
18
18
|
this.router = router;
|
|
19
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* @description 路由是否初始化构建完成
|
|
22
|
+
* @returns {*} {Promise<void>}
|
|
23
|
+
* @memberof AppUtil
|
|
24
|
+
*/
|
|
25
|
+
async onRouteIsReady() {
|
|
26
|
+
return this.router.isReady();
|
|
27
|
+
}
|
|
20
28
|
/**
|
|
21
29
|
* 登录
|
|
22
30
|
*
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
var vue = require('vue');
|
|
4
4
|
var ElementPlus = require('element-plus');
|
|
5
|
-
var namespace = require('../../node_modules/.pnpm/@ibiz-template_core@0.7.41-alpha.
|
|
5
|
+
var namespace = require('../../node_modules/.pnpm/@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');
|
|
6
6
|
var fullscreenToolbar = require('../../common/fullscreen-toolbar/fullscreen-toolbar.cjs');
|
|
7
7
|
|
|
8
8
|
"use strict";
|