@ibiz-template/vue3-components 0.0.1-alpha.1
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/es/common/app-icon/app-icon.d.ts +19 -0
- package/es/common/app-icon/app-icon.js +71 -0
- package/es/common/app-keep-alive/app-keep-alive.d.ts +47 -0
- package/es/common/app-keep-alive/app-keep-alive.js +297 -0
- package/es/common/app-keep-alive/scheduler.d.ts +39 -0
- package/es/common/app-keep-alive/scheduler.js +171 -0
- package/es/common/app-router-view/app-router-view.d.ts +30 -0
- package/es/common/app-router-view/app-router-view.js +73 -0
- package/es/common/app-user/app-user.d.ts +8 -0
- package/es/common/app-user/app-user.js +60 -0
- package/es/common/grid-pagination/grid-pagination.d.ts +41 -0
- package/es/common/grid-pagination/grid-pagination.js +84 -0
- package/es/common/grid-pagination/index.d.ts +40 -0
- package/es/common/grid-pagination/index.js +9 -0
- package/es/common/index.d.ts +8 -0
- package/es/common/index.js +8 -0
- package/es/common/quick-search/quick-search.d.ts +30 -0
- package/es/common/quick-search/quick-search.js +63 -0
- package/es/common/tab-page-exp/tab-page-exp.d.ts +69 -0
- package/es/common/tab-page-exp/tab-page-exp.js +117 -0
- package/es/control/app-menu/app-menu-provider.d.ts +13 -0
- package/es/control/app-menu/app-menu-provider.js +14 -0
- package/es/control/app-menu/app-menu.d.ts +54 -0
- package/es/control/app-menu/app-menu.js +178 -0
- package/es/control/app-menu/index.d.ts +53 -0
- package/es/control/app-menu/index.js +12 -0
- package/es/control/grid-control/grid-control.d.ts +158 -0
- package/es/control/grid-control/grid-control.util.d.ts +38 -0
- package/es/control/grid-control/grid-control.util.js +84 -0
- package/es/control/grid-control/grid-field-column/grid-field-column.d.ts +26 -0
- package/es/control/grid-control/grid-field-column-provider.d.ts +15 -0
- package/es/control/grid-control/grid-field-column-provider.js +20 -0
- package/es/control/grid-control/grid-provider.d.ts +13 -0
- package/es/control/grid-control/grid-provider.js +14 -0
- package/es/control/grid-control/index.d.ts +114 -0
- package/es/control/grid-control/index.js +23 -0
- package/es/control/index.d.ts +3 -0
- package/es/control/index.js +3 -0
- package/es/control/toolbar-control/index.d.ts +43 -0
- package/es/control/toolbar-control/index.js +12 -0
- package/es/control/toolbar-control/toolbar-control.d.ts +44 -0
- package/es/control/toolbar-control/toolbar-provider.d.ts +13 -0
- package/es/control/toolbar-control/toolbar-provider.js +14 -0
- package/es/index.d.ts +4 -0
- package/es/index.js +4 -0
- package/es/layout/app-layout/app-layout.d.ts +32 -0
- package/es/layout/control-base/control-base.d.ts +17 -0
- package/es/layout/control-base/control-base.js +42 -0
- package/es/layout/control-layout/control-layout.d.ts +19 -0
- package/es/layout/control-shell/control-shell.d.ts +18 -0
- package/es/layout/index.d.ts +10 -0
- package/es/layout/index.js +20 -0
- package/es/layout/md-view-base/md-view-base.d.ts +12 -0
- package/es/layout/md-view-base/md-view-base.js +35 -0
- package/es/layout/router-shell/router-shell.d.ts +27 -0
- package/es/layout/router-shell/router-shell.js +96 -0
- package/es/layout/view-base/view-base.d.ts +18 -0
- package/es/layout/view-layout/view-layout.d.ts +44 -0
- package/es/layout/view-shell/view-shell.d.ts +42 -0
- package/es/shims-vue.d.ts +5 -0
- package/es/util/install.d.ts +3 -0
- package/es/util/install.js +9 -0
- package/es/views/edit-view/index.d.ts +3 -0
- package/es/views/edit-view/index.js +9 -0
- package/es/views/edit-view/src/edit-view.css +6 -0
- package/es/views/edit-view/src/edit-view.d.ts +3 -0
- package/es/views/edit-view/src/edit-view.js +15 -0
- package/es/views/grid-view/grid-view-engine.d.ts +8 -0
- package/es/views/grid-view/grid-view-engine.js +21 -0
- package/es/views/grid-view/grid-view-provider.d.ts +13 -0
- package/es/views/grid-view/grid-view-provider.js +14 -0
- package/es/views/grid-view/grid-view.d.ts +32 -0
- package/es/views/grid-view/grid-view.js +64 -0
- package/es/views/grid-view/index.d.ts +32 -0
- package/es/views/grid-view/index.js +14 -0
- package/es/views/index-view/index-view-default.d.ts +22 -0
- package/es/views/index-view/index-view-default.js +117 -0
- package/es/views/index-view/index-view-engine.d.ts +6 -0
- package/es/views/index-view/index-view-engine.js +9 -0
- package/es/views/index-view/index-view-exp.d.ts +29 -0
- package/es/views/index-view/index-view-exp.js +177 -0
- package/es/views/index-view/index-view-provider.d.ts +13 -0
- package/es/views/index-view/index-view-provider.js +14 -0
- package/es/views/index-view/index-view.d.ts +44 -0
- package/es/views/index-view/index-view.js +155 -0
- package/es/views/index-view/index.d.ts +44 -0
- package/es/views/index-view/index.js +14 -0
- package/es/views/index.d.ts +4 -0
- package/es/views/index.js +6 -0
- package/lib/common/app-icon/app-icon.d.ts +19 -0
- package/lib/common/app-icon/app-icon.js +71 -0
- package/lib/common/app-keep-alive/app-keep-alive.d.ts +47 -0
- package/lib/common/app-keep-alive/app-keep-alive.js +297 -0
- package/lib/common/app-keep-alive/scheduler.d.ts +39 -0
- package/lib/common/app-keep-alive/scheduler.js +171 -0
- package/lib/common/app-router-view/app-router-view.d.ts +30 -0
- package/lib/common/app-router-view/app-router-view.js +73 -0
- package/lib/common/app-user/app-user.d.ts +8 -0
- package/lib/common/app-user/app-user.js +60 -0
- package/lib/common/grid-pagination/grid-pagination.d.ts +41 -0
- package/lib/common/grid-pagination/grid-pagination.js +84 -0
- package/lib/common/grid-pagination/index.d.ts +40 -0
- package/lib/common/grid-pagination/index.js +9 -0
- package/lib/common/index.d.ts +8 -0
- package/lib/common/index.js +66 -0
- package/lib/common/quick-search/quick-search.d.ts +30 -0
- package/lib/common/quick-search/quick-search.js +63 -0
- package/lib/common/tab-page-exp/tab-page-exp.d.ts +69 -0
- package/lib/common/tab-page-exp/tab-page-exp.js +117 -0
- package/lib/control/app-menu/app-menu-provider.d.ts +13 -0
- package/lib/control/app-menu/app-menu-provider.js +14 -0
- package/lib/control/app-menu/app-menu.d.ts +54 -0
- package/lib/control/app-menu/app-menu.js +178 -0
- package/lib/control/app-menu/index.d.ts +53 -0
- package/lib/control/app-menu/index.js +12 -0
- package/lib/control/grid-control/grid-control.d.ts +158 -0
- package/lib/control/grid-control/grid-control.util.d.ts +38 -0
- package/lib/control/grid-control/grid-control.util.js +84 -0
- package/lib/control/grid-control/grid-field-column/grid-field-column.d.ts +26 -0
- package/lib/control/grid-control/grid-field-column-provider.d.ts +15 -0
- package/lib/control/grid-control/grid-field-column-provider.js +20 -0
- package/lib/control/grid-control/grid-provider.d.ts +13 -0
- package/lib/control/grid-control/grid-provider.js +14 -0
- package/lib/control/grid-control/index.d.ts +114 -0
- package/lib/control/grid-control/index.js +24 -0
- package/lib/control/index.d.ts +3 -0
- package/lib/control/index.js +26 -0
- package/lib/control/toolbar-control/index.d.ts +43 -0
- package/lib/control/toolbar-control/index.js +12 -0
- package/lib/control/toolbar-control/toolbar-control.d.ts +44 -0
- package/lib/control/toolbar-control/toolbar-provider.d.ts +13 -0
- package/lib/control/toolbar-control/toolbar-provider.js +14 -0
- package/lib/index.d.ts +4 -0
- package/lib/index.js +34 -0
- package/lib/layout/app-layout/app-layout.d.ts +32 -0
- package/lib/layout/control-base/control-base.d.ts +17 -0
- package/lib/layout/control-base/control-base.js +42 -0
- package/lib/layout/control-layout/control-layout.d.ts +19 -0
- package/lib/layout/control-shell/control-shell.d.ts +18 -0
- package/lib/layout/index.d.ts +10 -0
- package/lib/layout/index.js +44 -0
- package/lib/layout/md-view-base/md-view-base.d.ts +12 -0
- package/lib/layout/md-view-base/md-view-base.js +35 -0
- package/lib/layout/router-shell/router-shell.d.ts +27 -0
- package/lib/layout/router-shell/router-shell.js +96 -0
- package/lib/layout/view-base/view-base.d.ts +18 -0
- package/lib/layout/view-layout/view-layout.d.ts +44 -0
- package/lib/layout/view-shell/view-shell.d.ts +42 -0
- package/lib/shims-vue.d.ts +5 -0
- package/lib/util/install.d.ts +3 -0
- package/lib/util/install.js +9 -0
- package/lib/views/edit-view/index.d.ts +3 -0
- package/lib/views/edit-view/index.js +8 -0
- package/lib/views/edit-view/src/edit-view.css +6 -0
- package/lib/views/edit-view/src/edit-view.d.ts +3 -0
- package/lib/views/edit-view/src/edit-view.js +14 -0
- package/lib/views/grid-view/grid-view-engine.d.ts +8 -0
- package/lib/views/grid-view/grid-view-engine.js +21 -0
- package/lib/views/grid-view/grid-view-provider.d.ts +13 -0
- package/lib/views/grid-view/grid-view-provider.js +14 -0
- package/lib/views/grid-view/grid-view.d.ts +32 -0
- package/lib/views/grid-view/grid-view.js +64 -0
- package/lib/views/grid-view/index.d.ts +32 -0
- package/lib/views/grid-view/index.js +14 -0
- package/lib/views/index-view/index-view-default.d.ts +22 -0
- package/lib/views/index-view/index-view-default.js +117 -0
- package/lib/views/index-view/index-view-engine.d.ts +6 -0
- package/lib/views/index-view/index-view-engine.js +9 -0
- package/lib/views/index-view/index-view-exp.d.ts +29 -0
- package/lib/views/index-view/index-view-exp.js +177 -0
- package/lib/views/index-view/index-view-provider.d.ts +13 -0
- package/lib/views/index-view/index-view-provider.js +14 -0
- package/lib/views/index-view/index-view.d.ts +44 -0
- package/lib/views/index-view/index-view.js +155 -0
- package/lib/views/index-view/index.d.ts +44 -0
- package/lib/views/index-view/index.js +14 -0
- package/lib/views/index.d.ts +4 -0
- package/lib/views/index.js +20 -0
- package/package.json +71 -0
- package/src/common/app-col/app-col.tsx +90 -0
- package/src/common/app-icon/app-icon.tsx +58 -0
- package/src/common/app-keep-alive/app-keep-alive.ts +441 -0
- package/src/common/app-keep-alive/scheduler.ts +281 -0
- package/src/common/app-router-view/app-router-view.tsx +73 -0
- package/src/common/app-row/app-row.tsx +31 -0
- package/src/common/app-user/app-user.scss +32 -0
- package/src/common/app-user/app-user.tsx +61 -0
- package/src/common/index.ts +9 -0
- package/src/common/quick-search/quick-search.scss +15 -0
- package/src/common/quick-search/quick-search.tsx +59 -0
- package/src/common/tab-page-exp/tab-page-exp.scss +43 -0
- package/src/common/tab-page-exp/tab-page-exp.tsx +125 -0
- package/src/control/app-menu/app-menu-provider.ts +14 -0
- package/src/control/app-menu/app-menu-state.ts +20 -0
- package/src/control/app-menu/app-menu.controller.ts +97 -0
- package/src/control/app-menu/app-menu.scss +163 -0
- package/src/control/app-menu/app-menu.tsx +305 -0
- package/src/control/app-menu/index.ts +12 -0
- package/src/control/form/form/form-control.tsx +98 -0
- package/src/control/form/form/form-state.ts +39 -0
- package/src/control/form/form/form.controller.ts +260 -0
- package/src/control/form/form/form.scss +10 -0
- package/src/control/form/form/index.ts +30 -0
- package/src/control/form/form-detail/form-detail/form-detail-state.ts +92 -0
- package/src/control/form/form-detail/form-detail/form-detail.ts +214 -0
- package/src/control/form/form-detail/form-detail/index.ts +2 -0
- package/src/control/form/form-detail/form-group-panel/form-group-panel-provider.ts +27 -0
- package/src/control/form/form-detail/form-group-panel/form-group-panel-state.ts +29 -0
- package/src/control/form/form-detail/form-group-panel/form-group-panel.controller.ts +103 -0
- package/src/control/form/form-detail/form-group-panel/index.ts +3 -0
- package/src/control/form/form-detail/form-item/form-item-container/form-item-container.scss +90 -0
- package/src/control/form/form-detail/form-item/form-item-container/form-item-container.tsx +68 -0
- package/src/control/form/form-detail/form-item/form-item-provider.ts +28 -0
- package/src/control/form/form-detail/form-item/form-item-state.ts +48 -0
- package/src/control/form/form-detail/form-item/form-item.controller.ts +341 -0
- package/src/control/form/form-detail/form-item/form-item.scss +4 -0
- package/src/control/form/form-detail/form-item/form-item.tsx +69 -0
- package/src/control/form/form-detail/form-item/index.ts +3 -0
- package/src/control/form/form-detail/form-page/form-page-item.tsx +59 -0
- package/src/control/form/form-detail/form-page/form-page-provider.ts +27 -0
- package/src/control/form/form-detail/form-page/form-page-state.ts +12 -0
- package/src/control/form/form-detail/form-page/form-page.controller.ts +20 -0
- package/src/control/form/form-detail/form-page/form-page.scss +42 -0
- package/src/control/form/form-detail/form-page/form-page.tsx +56 -0
- package/src/control/form/form-detail/index.ts +3 -0
- package/src/control/form/index.ts +12 -0
- package/src/control/form/search-form/index.ts +15 -0
- package/src/control/form/search-form/search-form-provider.ts +14 -0
- package/src/control/form/search-form/search-form-state.ts +12 -0
- package/src/control/form/search-form/search-form.controller.ts +135 -0
- package/src/control/form/search-form/search-form.scss +48 -0
- package/src/control/form/search-form/search-form.tsx +70 -0
- package/src/control/grid/grid/grid-column.controller.ts +98 -0
- package/src/control/grid/grid/grid-control.tsx +174 -0
- package/src/control/grid/grid/grid-control.util.ts +135 -0
- package/src/control/grid/grid/grid-provider.ts +13 -0
- package/src/control/grid/grid/grid-row.controller.ts +114 -0
- package/src/control/grid/grid/grid-state.ts +20 -0
- package/src/control/grid/grid/grid.controller.ts +531 -0
- package/src/control/grid/grid/grid.scss +79 -0
- package/src/control/grid/grid-field-column/grid-field-column-provider.ts +26 -0
- package/src/control/grid/grid-field-column/grid-field-column.controller.ts +189 -0
- package/src/control/grid/grid-field-column/grid-field-column.scss +19 -0
- package/src/control/grid/grid-field-column/grid-field-column.tsx +87 -0
- package/src/control/grid/grid-pagination/grid-pagination.scss +7 -0
- package/src/control/grid/grid-pagination/grid-pagination.tsx +88 -0
- package/src/control/grid/index.ts +23 -0
- package/src/control/index.ts +4 -0
- package/src/control/panel/index.ts +23 -0
- package/src/control/panel/panel/panel-item-state.ts +73 -0
- package/src/control/panel/panel/panel-item.controller.ts +161 -0
- package/src/control/panel/panel/panel-state.ts +22 -0
- package/src/control/panel/panel/panel.controller.ts +256 -0
- package/src/control/panel/panel-container/index.ts +23 -0
- package/src/control/panel/panel-container/panel-container-provider.ts +28 -0
- package/src/control/panel/panel-container/panel-container-state.ts +12 -0
- package/src/control/panel/panel-container/panel-container.controller.ts +18 -0
- package/src/control/panel/panel-container/panel-container.scss +66 -0
- package/src/control/panel/panel-container/panel-container.tsx +93 -0
- package/src/control/panel/panel-ctrl-pos/index.ts +13 -0
- package/src/control/panel/panel-ctrl-pos/panel-ctrl-pos-provider.ts +28 -0
- package/src/control/panel/panel-ctrl-pos/panel-ctrl-pos.controller.ts +23 -0
- package/src/control/panel/panel-ctrl-pos/panel-ctrl-pos.tsx +39 -0
- package/src/control/panel/view-layout-panel/view-layout-panel-provider.ts +14 -0
- package/src/control/panel/view-layout-panel/view-layout-panel.controller.ts +62 -0
- package/src/control/panel/view-layout-panel/view-layout-panel.scss +3 -0
- package/src/control/panel/view-layout-panel/view-layout-panel.tsx +127 -0
- package/src/control/panel/view-layout-panel.json +141 -0
- package/src/control/toolbar/index.ts +12 -0
- package/src/control/toolbar/toolbar-control.scss +46 -0
- package/src/control/toolbar/toolbar-control.tsx +127 -0
- package/src/control/toolbar/toolbar-provider.ts +14 -0
- package/src/control/toolbar/toolbar-state.ts +31 -0
- package/src/control/toolbar/toolbar.controllerr.ts +112 -0
- package/src/editor/index.ts +14 -0
- package/src/editor/text-box/ibiz-input/ibiz-input.scss +48 -0
- package/src/editor/text-box/ibiz-input/ibiz-input.tsx +176 -0
- package/src/editor/text-box/index.ts +1 -0
- package/src/editor/text-box/text-box-provider.ts +39 -0
- package/src/editor/text-box/text-box.controller.ts +21 -0
- package/src/index.ts +57 -0
- package/src/layout/app-layout/app-layout.scss +133 -0
- package/src/layout/app-layout/app-layout.tsx +149 -0
- package/src/layout/control-base/control-base.tsx +37 -0
- package/src/layout/control-layout/control-layout.scss +4 -0
- package/src/layout/control-layout/control-layout.tsx +29 -0
- package/src/layout/index.ts +15 -0
- package/src/layout/md-view-base/md-view-base.tsx +69 -0
- package/src/layout/view-base/view-base.scss +11 -0
- package/src/layout/view-base/view-base.tsx +147 -0
- package/src/layout/view-layout/view-layout.scss +198 -0
- package/src/layout/view-layout/view-layout.tsx +115 -0
- package/src/shims-vue.d.ts +5 -0
- package/src/util/install.ts +11 -0
- package/src/views/grid-view/grid-view-engine.ts +68 -0
- package/src/views/grid-view/index.ts +12 -0
- package/src/views/index-view/index-view-default.ts +168 -0
- package/src/views/index-view/index-view-engine.ts +10 -0
- package/src/views/index-view/index-view-exp.ts +261 -0
- package/src/views/index-view/index-view-provider.ts +14 -0
- package/src/views/index-view/index-view.tsx +249 -0
- package/src/views/index-view/index.ts +14 -0
- package/src/views/index.ts +3 -0
- package/src/views/view/ibiz-view.tsx +49 -0
- package/src/views/view/index.ts +12 -0
- package/src/views/view/view-provider.ts +14 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { defineComponent, ref, watch } from 'vue';
|
|
2
|
+
import { useNamespace } from '@ibiz-template/vue3-util';
|
|
3
|
+
import './tab-page-exp.scss';
|
|
4
|
+
import { TabPaneName, TabsPaneContext } from 'element-plus';
|
|
5
|
+
|
|
6
|
+
interface RouteMsg {
|
|
7
|
+
key: string;
|
|
8
|
+
fullPath: string;
|
|
9
|
+
modelPath?: string;
|
|
10
|
+
caption?: string;
|
|
11
|
+
}
|
|
12
|
+
interface dropdownAction {
|
|
13
|
+
text: string;
|
|
14
|
+
value?: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const TabPageExp = defineComponent({
|
|
18
|
+
name: 'TabPageExp',
|
|
19
|
+
props: {
|
|
20
|
+
routeMsgs: {
|
|
21
|
+
type: Array<RouteMsg>,
|
|
22
|
+
required: true,
|
|
23
|
+
},
|
|
24
|
+
currentKey: {
|
|
25
|
+
type: String,
|
|
26
|
+
required: true,
|
|
27
|
+
},
|
|
28
|
+
},
|
|
29
|
+
emits: ['tab-delete', 'tab-click', 'close-all', 'close-other'],
|
|
30
|
+
setup(props, { emit }) {
|
|
31
|
+
const ns = useNamespace('tab-page-exp');
|
|
32
|
+
const tabsValue = ref(0);
|
|
33
|
+
const actions: dropdownAction[] = [
|
|
34
|
+
{ text: '关闭所有', value: 'closeAll' },
|
|
35
|
+
{ text: '关闭其他', value: 'closeOther' },
|
|
36
|
+
];
|
|
37
|
+
|
|
38
|
+
// 监听currentVal确认当前激活tab
|
|
39
|
+
watch(
|
|
40
|
+
() => props.currentKey,
|
|
41
|
+
(newVal, _oldVal) => {
|
|
42
|
+
const currentRouteMsgIndex = props.routeMsgs.findIndex(
|
|
43
|
+
(msg: RouteMsg) => msg.key === newVal,
|
|
44
|
+
);
|
|
45
|
+
if (currentRouteMsgIndex !== -1) {
|
|
46
|
+
tabsValue.value = currentRouteMsgIndex;
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
// 点击tab
|
|
52
|
+
const changePage = (pane: TabsPaneContext, _ev: Event) => {
|
|
53
|
+
const index = Number(pane.index);
|
|
54
|
+
tabsValue.value = index;
|
|
55
|
+
emit('tab-click', index);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// 关闭tab
|
|
59
|
+
const onClose = (name: TabPaneName) => {
|
|
60
|
+
emit('tab-delete', name);
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// 处理下拉点击
|
|
64
|
+
const handleCommand = (command: dropdownAction) => {
|
|
65
|
+
if (command.value === 'closeAll') {
|
|
66
|
+
emit('close-all');
|
|
67
|
+
} else if (command.value === 'closeOther') {
|
|
68
|
+
emit('close-other');
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
return { ns, tabsValue, actions, changePage, onClose, handleCommand };
|
|
73
|
+
},
|
|
74
|
+
render() {
|
|
75
|
+
return (
|
|
76
|
+
<div class={this.ns.b()}>
|
|
77
|
+
<div class={this.ns.e('left')}>
|
|
78
|
+
<el-tabs
|
|
79
|
+
type='card'
|
|
80
|
+
v-model={this.tabsValue}
|
|
81
|
+
closable
|
|
82
|
+
onTabClick={this.changePage}
|
|
83
|
+
onTabRemove={this.onClose}
|
|
84
|
+
>
|
|
85
|
+
{this.routeMsgs?.map((msg: RouteMsg, index: number) => {
|
|
86
|
+
return (
|
|
87
|
+
<el-tab-pane
|
|
88
|
+
name={index}
|
|
89
|
+
key={index}
|
|
90
|
+
label={msg.caption}
|
|
91
|
+
></el-tab-pane>
|
|
92
|
+
);
|
|
93
|
+
})}
|
|
94
|
+
</el-tabs>
|
|
95
|
+
</div>
|
|
96
|
+
<div class={this.ns.e('right')}>
|
|
97
|
+
<el-dropdown onCommand={this.handleCommand}>
|
|
98
|
+
{{
|
|
99
|
+
default: () => {
|
|
100
|
+
return (
|
|
101
|
+
<el-button size='small' type='primary'>
|
|
102
|
+
更多 <ion-icon name='arrow-down'></ion-icon>
|
|
103
|
+
</el-button>
|
|
104
|
+
);
|
|
105
|
+
},
|
|
106
|
+
dropdown: () => {
|
|
107
|
+
return (
|
|
108
|
+
<el-dropdown-menu>
|
|
109
|
+
{this.actions.map((action: dropdownAction) => {
|
|
110
|
+
return (
|
|
111
|
+
<el-dropdown-item command={action}>
|
|
112
|
+
{action.text}
|
|
113
|
+
</el-dropdown-item>
|
|
114
|
+
);
|
|
115
|
+
})}
|
|
116
|
+
</el-dropdown-menu>
|
|
117
|
+
);
|
|
118
|
+
},
|
|
119
|
+
}}
|
|
120
|
+
</el-dropdown>
|
|
121
|
+
</div>
|
|
122
|
+
</div>
|
|
123
|
+
);
|
|
124
|
+
},
|
|
125
|
+
});
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { IControlProvider } from '@ibiz-template/runtime';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 应用菜单适配器
|
|
5
|
+
*
|
|
6
|
+
* @author lxm
|
|
7
|
+
* @date 2022-10-25 18:10:57
|
|
8
|
+
* @export
|
|
9
|
+
* @class AppMenuProvider
|
|
10
|
+
* @implements {IControlProvider}
|
|
11
|
+
*/
|
|
12
|
+
export class AppMenuProvider implements IControlProvider {
|
|
13
|
+
component: string = 'AppMenu';
|
|
14
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { ControlState } from '@ibiz-template/runtime';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* 应用菜单部件UI状态
|
|
5
|
+
*
|
|
6
|
+
* @export
|
|
7
|
+
* @class AppMenuState
|
|
8
|
+
* @extends {ControlState}
|
|
9
|
+
*/
|
|
10
|
+
export class AppMenuState extends ControlState {
|
|
11
|
+
/**
|
|
12
|
+
* 菜单项状态
|
|
13
|
+
*
|
|
14
|
+
* @author lxm
|
|
15
|
+
* @date 2022-10-12 20:10:51
|
|
16
|
+
* @type {{ [p: string]: { visible: boolean; permitted: boolean } }}
|
|
17
|
+
*/
|
|
18
|
+
menuItemsState: { [p: string]: { visible: boolean; permitted: boolean } } =
|
|
19
|
+
{};
|
|
20
|
+
}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { RuntimeError } from '@ibiz-template/core';
|
|
2
|
+
import {
|
|
3
|
+
ControlController,
|
|
4
|
+
AppFuncCommand,
|
|
5
|
+
findRecursiveChild,
|
|
6
|
+
} from '@ibiz-template/runtime';
|
|
7
|
+
import { IAppMenu, IAppMenuItem } from '@ibiz/model-core';
|
|
8
|
+
import { AppMenuState } from './app-menu-state';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* 应用菜单控制器
|
|
12
|
+
*
|
|
13
|
+
* @author chitanda
|
|
14
|
+
* @date 2022-07-24 15:07:07
|
|
15
|
+
* @export
|
|
16
|
+
* @class AppMenuController
|
|
17
|
+
* @extends {ControlController}
|
|
18
|
+
*/
|
|
19
|
+
export class AppMenuController extends ControlController<IAppMenu> {
|
|
20
|
+
state = new AppMenuState();
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* 菜单项状态
|
|
24
|
+
*
|
|
25
|
+
* @deprecated
|
|
26
|
+
* @author lxm
|
|
27
|
+
* @date 2022-10-12 20:10:51
|
|
28
|
+
* @type {{ [p: string]: { visible: boolean; permitted: boolean } }}
|
|
29
|
+
*/
|
|
30
|
+
menuItemsState: { [p: string]: { visible: boolean; permitted: boolean } } =
|
|
31
|
+
{};
|
|
32
|
+
|
|
33
|
+
protected async doCreated(): Promise<void> {
|
|
34
|
+
await super.doCreated();
|
|
35
|
+
|
|
36
|
+
// 初始化菜单项状态
|
|
37
|
+
this.model.appMenuItems?.forEach(item => {
|
|
38
|
+
this.initMenuItemState(item);
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/**
|
|
43
|
+
* 菜单项点击回调,触发对应的应用功能
|
|
44
|
+
*
|
|
45
|
+
* @author chitanda
|
|
46
|
+
* @date 2022-12-22 14:12:53
|
|
47
|
+
* @param {string} id
|
|
48
|
+
* @return {*} {Promise<void>}
|
|
49
|
+
*/
|
|
50
|
+
async onClickMenuItem(id: string): Promise<void> {
|
|
51
|
+
const menuItem = findRecursiveChild(this.model, id, {
|
|
52
|
+
compareField: 'id',
|
|
53
|
+
childrenFields: ['appMenuItems'],
|
|
54
|
+
});
|
|
55
|
+
if (!menuItem) {
|
|
56
|
+
throw new RuntimeError(`找不到名为${id}的菜单项`);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
console.log(menuItem);
|
|
60
|
+
await ibiz.commands.execute(
|
|
61
|
+
AppFuncCommand.TAG,
|
|
62
|
+
menuItem.appFuncId,
|
|
63
|
+
this.context,
|
|
64
|
+
this.params,
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* 初始化菜单项状态
|
|
70
|
+
*
|
|
71
|
+
* @author lxm
|
|
72
|
+
* @date 2022-10-12 20:10:37
|
|
73
|
+
* @param {AppMenuItemModel} menu
|
|
74
|
+
*/
|
|
75
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
76
|
+
initMenuItemState(menu: IAppMenuItem): {
|
|
77
|
+
visible: boolean;
|
|
78
|
+
permitted: boolean;
|
|
79
|
+
} {
|
|
80
|
+
// const permitted = app.authority.hasMenuPermitted(menu);
|
|
81
|
+
const permitted = true;
|
|
82
|
+
let visible = permitted;
|
|
83
|
+
// 有子的计算子状态,如果本身显示但是子都不显示则不显示
|
|
84
|
+
if (menu.appMenuItems?.length) {
|
|
85
|
+
const childrenState = menu.appMenuItems.map(child => {
|
|
86
|
+
return this.initMenuItemState(child).visible;
|
|
87
|
+
});
|
|
88
|
+
visible = visible && childrenState.includes(true);
|
|
89
|
+
}
|
|
90
|
+
const result = { permitted, visible };
|
|
91
|
+
this.state.menuItemsState[menu.id!] = result;
|
|
92
|
+
return {
|
|
93
|
+
visible: true,
|
|
94
|
+
permitted: true,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
// @mixin menu-item-vertical-style {
|
|
2
|
+
// @include flex(row, flex-start, center);
|
|
3
|
+
|
|
4
|
+
// width: 100%;
|
|
5
|
+
// height: getCssVar('control-menu-item', 'height');
|
|
6
|
+
// padding: calc(getCssVar('control-menu-item', 'padding') * 0.875)
|
|
7
|
+
// calc(getCssVar('control-menu-item', 'padding') * 1.5);
|
|
8
|
+
// font-size: getCssVar('control-menu-item', 'font-size');
|
|
9
|
+
// color: getCssVar('control-menu-item', 'color');
|
|
10
|
+
// white-space: nowrap;
|
|
11
|
+
|
|
12
|
+
// &:hover {
|
|
13
|
+
// color: getCssVar('control-menu-item', 'hover-color');
|
|
14
|
+
// background-color: getCssVar('control-menu-item', 'hover-bg-color');
|
|
15
|
+
// }
|
|
16
|
+
|
|
17
|
+
// &.is-active {
|
|
18
|
+
// color: getCssVar('control-menu-item', 'selected-color');
|
|
19
|
+
// background-color: getCssVar('control-menu-item', 'selected-bg-color');
|
|
20
|
+
// }
|
|
21
|
+
// }
|
|
22
|
+
|
|
23
|
+
// @mixin menu-item-horizontal-style {
|
|
24
|
+
// color: getCssVar('control-menu-item', 'horizontal-color');
|
|
25
|
+
// white-space: nowrap;
|
|
26
|
+
// border: none;
|
|
27
|
+
|
|
28
|
+
// &:hover {
|
|
29
|
+
// color: getCssVar('control-menu-item', 'horizontal-hover-color');
|
|
30
|
+
// background-color: getCssVar(
|
|
31
|
+
// 'control-menu-item',
|
|
32
|
+
// 'horizontal-hover-bg-color'
|
|
33
|
+
// );
|
|
34
|
+
// }
|
|
35
|
+
|
|
36
|
+
// &.is-active {
|
|
37
|
+
// // 压element-plus 加important
|
|
38
|
+
// color: getCssVar(
|
|
39
|
+
// 'control-menu-item',
|
|
40
|
+
// 'horizontal-selected-color'
|
|
41
|
+
// ) !important;
|
|
42
|
+
// background-color: getCssVar(
|
|
43
|
+
// 'control-menu-item',
|
|
44
|
+
// 'horizontal-selected-bg-color'
|
|
45
|
+
// );
|
|
46
|
+
// }
|
|
47
|
+
// }
|
|
48
|
+
|
|
49
|
+
// @mixin menu-collapse-item-style {
|
|
50
|
+
// @include flex-center;
|
|
51
|
+
|
|
52
|
+
// padding: calc(getCssVar('control-menu', 'collapse-item-padding') * 0.875)
|
|
53
|
+
// calc(getCssVar('control-menu', 'collapse-item-padding') * 1.5);
|
|
54
|
+
|
|
55
|
+
// &:hover {
|
|
56
|
+
// color: getCssVar('control-menu', 'collapse-item-hover-color');
|
|
57
|
+
// }
|
|
58
|
+
// }
|
|
59
|
+
|
|
60
|
+
// @mixin menu-item-selected-style {
|
|
61
|
+
// color: getCssVar('control-menu', 'item-selected-color');
|
|
62
|
+
// background-color: getCssVar('control-menu', 'item-selected-bg-color');
|
|
63
|
+
// }
|
|
64
|
+
|
|
65
|
+
// @include b(control-menu) {
|
|
66
|
+
// position: static;
|
|
67
|
+
// @include set-component-css-var('control-menu', $control-menu);
|
|
68
|
+
// @include set-component-css-var('control-menu-item', $control-menu-item);
|
|
69
|
+
|
|
70
|
+
// // 垂直
|
|
71
|
+
// .el-menu--vertical {
|
|
72
|
+
// height: calc(100vh - getCssVar('layout', 'header-height'));
|
|
73
|
+
|
|
74
|
+
// // 菜单项样式
|
|
75
|
+
// .el-menu-item,
|
|
76
|
+
// .el-sub-menu__title {
|
|
77
|
+
// @include menu-item-vertical-style;
|
|
78
|
+
// }
|
|
79
|
+
// }
|
|
80
|
+
|
|
81
|
+
// // 水平
|
|
82
|
+
// .el-menu--horizontal {
|
|
83
|
+
// max-width: getCssVar('control-menu', 'horizontal-width');
|
|
84
|
+
// height: 100%;
|
|
85
|
+
// background-color: getCssVar('control-menu', 'horizontal-bg-color');
|
|
86
|
+
// border-bottom: none;
|
|
87
|
+
|
|
88
|
+
// // 菜单项样式
|
|
89
|
+
// .el-menu-item,
|
|
90
|
+
// .el-sub-menu__title {
|
|
91
|
+
// @include menu-item-horizontal-style;
|
|
92
|
+
// }
|
|
93
|
+
|
|
94
|
+
// > .el-sub-menu.is-active .el-sub-menu__title {
|
|
95
|
+
// color: getCssVar('control-menu-item', 'horizontal-selected-color');
|
|
96
|
+
// background-color: getCssVar(
|
|
97
|
+
// 'control-menu-item',
|
|
98
|
+
// 'horizontal-selected-bg-color'
|
|
99
|
+
// );
|
|
100
|
+
// }
|
|
101
|
+
|
|
102
|
+
// &::-webkit-scrollbar-thumb {
|
|
103
|
+
// background: #fff;
|
|
104
|
+
// }
|
|
105
|
+
// }
|
|
106
|
+
|
|
107
|
+
// overflow-y: auto;
|
|
108
|
+
|
|
109
|
+
// // 图标样式
|
|
110
|
+
// @include e(icon) {
|
|
111
|
+
// margin: getCssVar('control-menu', 'icon-margin');
|
|
112
|
+
// }
|
|
113
|
+
|
|
114
|
+
// // 收缩
|
|
115
|
+
// @include when(collapse) {
|
|
116
|
+
// @include e(item) {
|
|
117
|
+
// @include menu-collapse-item-style;
|
|
118
|
+
// }
|
|
119
|
+
// @include b(control-menu-tooltip) {
|
|
120
|
+
// width: 100%;
|
|
121
|
+
// }
|
|
122
|
+
// @include b(control-menu-submenu) {
|
|
123
|
+
// display: block;
|
|
124
|
+
|
|
125
|
+
// > .el-sub-menu__title {
|
|
126
|
+
// @include flex-center;
|
|
127
|
+
// @include menu-collapse-item-style;
|
|
128
|
+
|
|
129
|
+
// white-space: nowrap;
|
|
130
|
+
// cursor: pointer;
|
|
131
|
+
// }
|
|
132
|
+
// @include e(item) {
|
|
133
|
+
// padding: 0;
|
|
134
|
+
// }
|
|
135
|
+
// }
|
|
136
|
+
// }
|
|
137
|
+
|
|
138
|
+
// .el-menu {
|
|
139
|
+
// border-right: 0;
|
|
140
|
+
// }
|
|
141
|
+
|
|
142
|
+
// .el-sub-menu {
|
|
143
|
+
// .el-sub-menu__icon-arrow {
|
|
144
|
+
// right: 14px;
|
|
145
|
+
// width: 12px;
|
|
146
|
+
// }
|
|
147
|
+
|
|
148
|
+
// .el-menu-item {
|
|
149
|
+
// padding: calc(getCssVar('control-menu', 'item-padding') * 0.875)
|
|
150
|
+
// calc(getCssVar('control-menu', 'item-padding') * 2.5);
|
|
151
|
+
// }
|
|
152
|
+
// }
|
|
153
|
+
// }
|
|
154
|
+
|
|
155
|
+
// // 收缩时菜单项样式
|
|
156
|
+
// .el-menu--popup-container {
|
|
157
|
+
// @include set-component-css-var('control-menu', $control-menu);
|
|
158
|
+
|
|
159
|
+
// .el-menu-item,
|
|
160
|
+
// .el-sub-menu__title {
|
|
161
|
+
// @include menu-item-vertical-style;
|
|
162
|
+
// }
|
|
163
|
+
// }
|