@keyblade/pro-components 0.0.11 → 1.0.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/components.d.ts +2 -1
- package/es/index.d.ts +2 -1
- package/es/index.js +16 -12
- package/es/pro-breadcrumb/index.d.ts +4 -16
- package/es/pro-breadcrumb/index.js +1 -0
- package/es/pro-breadcrumb/pro-breadcrumb.vue.d.ts +2 -6
- package/es/pro-breadcrumb/pro-breadcrumb.vue.js +14 -6
- package/es/pro-breadcrumb/pro-breadcrumb.vue2.js +2 -3
- package/es/pro-breadcrumb/pro-breadcrumb.vue3.js +5 -0
- package/es/pro-drawer-form/index.d.ts +4 -55
- package/es/pro-drawer-form/pro-drawer-form.vue.d.ts +2 -19
- package/es/pro-drawer-form/pro-drawer-form.vue2.js +1 -2
- package/es/pro-keep-alive-router-view/index.d.ts +124 -0
- package/es/pro-keep-alive-router-view/index.js +11 -0
- package/es/pro-keep-alive-router-view/pro-keep-alive-router-view.vue.d.ts +45 -0
- package/es/pro-keep-alive-router-view/pro-keep-alive-router-view.vue.js +57 -0
- package/es/pro-keep-alive-router-view/pro-keep-alive-router-view.vue2.js +4 -0
- package/es/pro-layout/hooks.d.ts +3 -2
- package/es/pro-layout/hooks.js +38 -8
- package/es/pro-layout/index.d.ts +19 -106
- package/es/pro-layout/index.js +3 -6
- package/es/pro-layout/pro-layout.vue.d.ts +7 -36
- package/es/pro-layout/pro-layout.vue.js +34 -59
- package/es/pro-layout/pro-layout.vue3.js +1 -2
- package/es/pro-menu/index.d.ts +5 -75
- package/es/pro-menu/interface.d.ts +5 -9
- package/es/pro-menu/pro-menu-item.vue.d.ts +4 -8
- package/es/pro-menu/pro-menu-item.vue.js +28 -4
- package/es/pro-menu/pro-menu-item.vue2.js +2 -3
- package/es/pro-menu/pro-menu-item.vue3.js +5 -0
- package/es/pro-menu/pro-menu.vue.d.ts +2 -26
- package/es/pro-menu/pro-menu.vue.js +3 -8
- package/es/pro-menu/pro-menu.vue2.js +1 -2
- package/es/pro-modal-form/index.d.ts +4 -55
- package/es/pro-modal-form/pro-modal-form.vue.d.ts +2 -19
- package/es/pro-modal-form/pro-modal-form.vue2.js +1 -2
- package/es/{pro-page-wrapper → pro-page-container}/index.d.ts +14 -23
- package/es/pro-page-container/index.js +14 -0
- package/es/{pro-page-wrapper/pro-page-wrapper.vue.d.ts → pro-page-container/pro-page-container.vue.d.ts} +4 -7
- package/es/{pro-page-wrapper/pro-page-wrapper.vue.js → pro-page-container/pro-page-container.vue.js} +8 -8
- package/es/pro-page-container/pro-page-container.vue2.js +4 -0
- package/es/pro-page-container/pro-page-container.vue3.js +5 -0
- package/es/pro-reuse-tabs/index.d.ts +4 -25
- package/es/pro-reuse-tabs/pro-reuse-tabs.vue.d.ts +2 -9
- package/es/pro-reuse-tabs/pro-reuse-tabs.vue3.js +1 -2
- package/es/style.css +24 -15
- package/package.json +3 -3
- package/src/index.ts +7 -3
- package/es/pro-page-wrapper/index.js +0 -14
- package/es/pro-page-wrapper/pro-page-wrapper.vue2.js +0 -4
- package/es/pro-page-wrapper/pro-page-wrapper.vue3.js +0 -6
package/es/pro-layout/hooks.js
CHANGED
|
@@ -12,6 +12,7 @@ function useHooks(menuItems, options) {
|
|
|
12
12
|
const menuItemMap = ref({});
|
|
13
13
|
const breadcrumbItems = ref([]);
|
|
14
14
|
const tabs = ref([]);
|
|
15
|
+
const keepAliveInclude = ref([]);
|
|
15
16
|
const setActiveMenuItemPaths = () => {
|
|
16
17
|
const paths = [];
|
|
17
18
|
const recursion = (_menuItems) => {
|
|
@@ -43,16 +44,13 @@ function useHooks(menuItems, options) {
|
|
|
43
44
|
breadcrumbItems.value = ((_a = activeMenuItem.value) == null ? void 0 : _a.breadcrumbs) ? (_b = activeMenuItem.value) == null ? void 0 : _b.breadcrumbs : activeMenuItemTitles.length !== 0 ? activeMenuItemTitles : [];
|
|
44
45
|
};
|
|
45
46
|
function setTabs() {
|
|
46
|
-
if (!activeMenuItem.value) {
|
|
47
|
+
if (!activeMenuItem.value || activeMenuItem.value.noAffix) {
|
|
47
48
|
tabs.value.forEach((tab) => {
|
|
48
49
|
tab.active = false;
|
|
49
50
|
});
|
|
50
51
|
return;
|
|
51
52
|
}
|
|
52
|
-
const { name: menuItemName, title: menuItemTitle
|
|
53
|
-
if (noAffix) {
|
|
54
|
-
return;
|
|
55
|
-
}
|
|
53
|
+
const { name: menuItemName, title: menuItemTitle } = activeMenuItem.value;
|
|
56
54
|
let findIndex = -1;
|
|
57
55
|
tabs.value.forEach((v, i) => {
|
|
58
56
|
v.active = false;
|
|
@@ -108,7 +106,37 @@ function useHooks(menuItems, options) {
|
|
|
108
106
|
tab.active = true;
|
|
109
107
|
router.push(tab.fullPath);
|
|
110
108
|
}
|
|
111
|
-
tabs.value.splice(findTabIndex, 1);
|
|
109
|
+
const deleteTab = tabs.value.splice(findTabIndex, 1);
|
|
110
|
+
removeKeepAliveInclude(deleteTab[0]);
|
|
111
|
+
};
|
|
112
|
+
const addKeepAliveInclude = () => {
|
|
113
|
+
var _a;
|
|
114
|
+
if ((_a = route == null ? void 0 : route.meta) == null ? void 0 : _a.ignoreCache) {
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const keys = new Set(keepAliveInclude.value);
|
|
118
|
+
activeMenuItemPaths.value.forEach((item) => {
|
|
119
|
+
if (item.name) {
|
|
120
|
+
keys.add(item.name);
|
|
121
|
+
}
|
|
122
|
+
});
|
|
123
|
+
keepAliveInclude.value = Array.from(keys.values());
|
|
124
|
+
};
|
|
125
|
+
const removeKeepAliveInclude = (tab) => {
|
|
126
|
+
const keys = new Set(keepAliveInclude.value);
|
|
127
|
+
tab.parentNames.forEach((name) => {
|
|
128
|
+
keys.delete(name);
|
|
129
|
+
});
|
|
130
|
+
tabs.value.forEach((tab2) => {
|
|
131
|
+
tab2.parentNames.forEach((name) => {
|
|
132
|
+
const menuItem = menuItemMap.value[name];
|
|
133
|
+
if (menuItem == null ? void 0 : menuItem.ignoreCache) {
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
keys.add(menuItem.name);
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
keepAliveInclude.value = Array.from(keys.values());
|
|
112
140
|
};
|
|
113
141
|
watch(menuItems, () => {
|
|
114
142
|
const _menuItemMap = {};
|
|
@@ -130,17 +158,19 @@ function useHooks(menuItems, options) {
|
|
|
130
158
|
menuSelectedKeys.value = (activeMenuItem == null ? void 0 : activeMenuItem.value) ? [activeMenuItem.value.name] : [];
|
|
131
159
|
setActiveMenuItemPaths();
|
|
132
160
|
setBreadcrumbItems();
|
|
133
|
-
if (options.
|
|
161
|
+
if (options.showTabs) {
|
|
134
162
|
setTabs();
|
|
135
163
|
}
|
|
164
|
+
addKeepAliveInclude();
|
|
136
165
|
}, { immediate: true });
|
|
137
166
|
return {
|
|
138
167
|
menuSelectedKeys,
|
|
139
|
-
onMenuItemClick,
|
|
140
168
|
activeMenuItem,
|
|
141
169
|
menuItemMap,
|
|
142
170
|
breadcrumbItems,
|
|
143
171
|
tabs,
|
|
172
|
+
keepAliveInclude,
|
|
173
|
+
onMenuItemClick,
|
|
144
174
|
onTabClick,
|
|
145
175
|
onTabDelete
|
|
146
176
|
};
|
package/es/pro-layout/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IProMenuItem } from '../pro-menu';
|
|
2
|
-
import type { ComponentInternalInstance, ExtractPropTypes, PropType, VNodeProps, AllowedComponentProps, ComponentCustomProps, Slot, ComponentPublicInstance, ComponentOptionsBase,
|
|
2
|
+
import type { ComponentInternalInstance, ExtractPropTypes, PropType, VNodeProps, AllowedComponentProps, ComponentCustomProps, Slot, ComponentPublicInstance, ComponentOptionsBase, ComponentOptionsMixin, DebuggerEvent, nextTick, WatchOptions, WatchStopHandle, ShallowUnwrapRef, ComponentCustomProperties, App } from 'vue';
|
|
3
3
|
declare const ProLayout: {
|
|
4
4
|
new (...args: any[]): {
|
|
5
5
|
$: ComponentInternalInstance;
|
|
@@ -10,7 +10,7 @@ declare const ProLayout: {
|
|
|
10
10
|
headerLogo: string;
|
|
11
11
|
theme: "light" | "dark";
|
|
12
12
|
footerTitle: string;
|
|
13
|
-
|
|
13
|
+
showTabs: boolean;
|
|
14
14
|
siderBreakpoint: "xxl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
15
15
|
}> & Omit<Readonly<ExtractPropTypes<{
|
|
16
16
|
menuItems: {
|
|
@@ -38,7 +38,7 @@ declare const ProLayout: {
|
|
|
38
38
|
required: false;
|
|
39
39
|
default: string;
|
|
40
40
|
};
|
|
41
|
-
|
|
41
|
+
showTabs: {
|
|
42
42
|
type: PropType<boolean>;
|
|
43
43
|
required: false;
|
|
44
44
|
default: boolean;
|
|
@@ -50,7 +50,8 @@ declare const ProLayout: {
|
|
|
50
50
|
};
|
|
51
51
|
}>> & {
|
|
52
52
|
onCollapse?: ((collapsed: boolean) => any) | undefined;
|
|
53
|
-
|
|
53
|
+
onKeepAliveIncludeChange?: ((keepAliveInclude: string[]) => any) | undefined;
|
|
54
|
+
} & VNodeProps & AllowedComponentProps & ComponentCustomProps, "menuItems" | "headerTitle" | "headerLogo" | "theme" | "footerTitle" | "showTabs" | "siderBreakpoint">;
|
|
54
55
|
$attrs: {
|
|
55
56
|
[x: string]: unknown;
|
|
56
57
|
};
|
|
@@ -62,7 +63,7 @@ declare const ProLayout: {
|
|
|
62
63
|
}>;
|
|
63
64
|
$root: ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string>, {}> | null;
|
|
64
65
|
$parent: ComponentPublicInstance<{}, {}, {}, {}, {}, {}, {}, {}, false, ComponentOptionsBase<any, any, any, any, any, any, any, any, any, {}, {}, string>, {}> | null;
|
|
65
|
-
$emit: (event: "collapse", collapsed: boolean) => void;
|
|
66
|
+
$emit: ((event: "collapse", collapsed: boolean) => void) & ((event: "keepAliveIncludeChange", keepAliveInclude: string[]) => void);
|
|
66
67
|
$el: any;
|
|
67
68
|
$options: ComponentOptionsBase<Readonly<ExtractPropTypes<{
|
|
68
69
|
menuItems: {
|
|
@@ -90,7 +91,7 @@ declare const ProLayout: {
|
|
|
90
91
|
required: false;
|
|
91
92
|
default: string;
|
|
92
93
|
};
|
|
93
|
-
|
|
94
|
+
showTabs: {
|
|
94
95
|
type: PropType<boolean>;
|
|
95
96
|
required: false;
|
|
96
97
|
default: boolean;
|
|
@@ -102,46 +103,17 @@ declare const ProLayout: {
|
|
|
102
103
|
};
|
|
103
104
|
}>> & {
|
|
104
105
|
onCollapse?: ((collapsed: boolean) => any) | undefined;
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
props: any;
|
|
108
|
-
emit: (event: "collapse", collapsed: boolean) => void;
|
|
109
|
-
menuItems: Ref<IProMenuItem[]>;
|
|
110
|
-
slots: Readonly<{
|
|
111
|
-
[name: string]: Slot | undefined;
|
|
112
|
-
}>;
|
|
113
|
-
menuSelectedKeys: Ref<string[]>;
|
|
114
|
-
onMenuItemClick: (key: string) => void;
|
|
115
|
-
activeMenuItem: Ref<IProMenuItem | undefined>;
|
|
116
|
-
menuItemMap: Ref<Record<string, IProMenuItem>>;
|
|
117
|
-
breadcrumbItems: Ref<string[]>;
|
|
118
|
-
tabs: Ref<{
|
|
119
|
-
name: string;
|
|
120
|
-
parentNames: string[];
|
|
121
|
-
title: string;
|
|
122
|
-
fullPath: string;
|
|
123
|
-
active: boolean;
|
|
124
|
-
}[]>;
|
|
125
|
-
onTabClick: (key: string) => void;
|
|
126
|
-
onTabDelete: (key: string) => void;
|
|
127
|
-
keepAliveKeys: ComputedRef<string[]>;
|
|
128
|
-
headerHeight: number;
|
|
129
|
-
headerHeightWidthPx: string;
|
|
130
|
-
siderWidth: number;
|
|
131
|
-
siderCollapsedWidth: number;
|
|
132
|
-
siderWidthPx: string;
|
|
133
|
-
siderCollapsedWidthPx: string;
|
|
134
|
-
siderCollapsed: Ref<boolean>;
|
|
135
|
-
onSiderCollapse: (val: boolean) => void;
|
|
136
|
-
}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
106
|
+
onKeepAliveIncludeChange?: ((keepAliveInclude: string[]) => any) | undefined;
|
|
107
|
+
}, {}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
137
108
|
collapse: (collapsed: boolean) => true;
|
|
109
|
+
keepAliveIncludeChange: (keepAliveInclude: string[]) => true;
|
|
138
110
|
}, string, {
|
|
139
111
|
menuItems: IProMenuItem[];
|
|
140
112
|
headerTitle: string;
|
|
141
113
|
headerLogo: string;
|
|
142
114
|
theme: "light" | "dark";
|
|
143
115
|
footerTitle: string;
|
|
144
|
-
|
|
116
|
+
showTabs: boolean;
|
|
145
117
|
siderBreakpoint: "xxl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
146
118
|
}, {}, string> & {
|
|
147
119
|
beforeCreate?: ((() => void) | (() => void)[]) | undefined;
|
|
@@ -189,7 +161,7 @@ declare const ProLayout: {
|
|
|
189
161
|
required: false;
|
|
190
162
|
default: string;
|
|
191
163
|
};
|
|
192
|
-
|
|
164
|
+
showTabs: {
|
|
193
165
|
type: PropType<boolean>;
|
|
194
166
|
required: false;
|
|
195
167
|
default: boolean;
|
|
@@ -201,38 +173,8 @@ declare const ProLayout: {
|
|
|
201
173
|
};
|
|
202
174
|
}>> & {
|
|
203
175
|
onCollapse?: ((collapsed: boolean) => any) | undefined;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
props: any;
|
|
207
|
-
emit: (event: "collapse", collapsed: boolean) => void;
|
|
208
|
-
menuItems: Ref<IProMenuItem[]>;
|
|
209
|
-
slots: Readonly<{
|
|
210
|
-
[name: string]: Slot | undefined;
|
|
211
|
-
}>;
|
|
212
|
-
menuSelectedKeys: Ref<string[]>;
|
|
213
|
-
onMenuItemClick: (key: string) => void;
|
|
214
|
-
activeMenuItem: Ref<IProMenuItem | undefined>;
|
|
215
|
-
menuItemMap: Ref<Record<string, IProMenuItem>>;
|
|
216
|
-
breadcrumbItems: Ref<string[]>;
|
|
217
|
-
tabs: Ref<{
|
|
218
|
-
name: string;
|
|
219
|
-
parentNames: string[];
|
|
220
|
-
title: string;
|
|
221
|
-
fullPath: string;
|
|
222
|
-
active: boolean;
|
|
223
|
-
}[]>;
|
|
224
|
-
onTabClick: (key: string) => void;
|
|
225
|
-
onTabDelete: (key: string) => void;
|
|
226
|
-
keepAliveKeys: ComputedRef<string[]>;
|
|
227
|
-
headerHeight: number;
|
|
228
|
-
headerHeightWidthPx: string;
|
|
229
|
-
siderWidth: number;
|
|
230
|
-
siderCollapsedWidth: number;
|
|
231
|
-
siderWidthPx: string;
|
|
232
|
-
siderCollapsedWidthPx: string;
|
|
233
|
-
siderCollapsed: Ref<boolean>;
|
|
234
|
-
onSiderCollapse: (val: boolean) => void;
|
|
235
|
-
}> & {} & ComponentCustomProperties & {};
|
|
176
|
+
onKeepAliveIncludeChange?: ((keepAliveInclude: string[]) => any) | undefined;
|
|
177
|
+
} & ShallowUnwrapRef<{}> & {} & ComponentCustomProperties & {};
|
|
236
178
|
__isFragment?: undefined;
|
|
237
179
|
__isTeleport?: undefined;
|
|
238
180
|
__isSuspense?: undefined;
|
|
@@ -262,7 +204,7 @@ declare const ProLayout: {
|
|
|
262
204
|
required: false;
|
|
263
205
|
default: string;
|
|
264
206
|
};
|
|
265
|
-
|
|
207
|
+
showTabs: {
|
|
266
208
|
type: PropType<boolean>;
|
|
267
209
|
required: false;
|
|
268
210
|
default: boolean;
|
|
@@ -274,46 +216,17 @@ declare const ProLayout: {
|
|
|
274
216
|
};
|
|
275
217
|
}>> & {
|
|
276
218
|
onCollapse?: ((collapsed: boolean) => any) | undefined;
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
props: any;
|
|
280
|
-
emit: (event: "collapse", collapsed: boolean) => void;
|
|
281
|
-
menuItems: Ref<IProMenuItem[]>;
|
|
282
|
-
slots: Readonly<{
|
|
283
|
-
[name: string]: Slot | undefined;
|
|
284
|
-
}>;
|
|
285
|
-
menuSelectedKeys: Ref<string[]>;
|
|
286
|
-
onMenuItemClick: (key: string) => void;
|
|
287
|
-
activeMenuItem: Ref<IProMenuItem | undefined>;
|
|
288
|
-
menuItemMap: Ref<Record<string, IProMenuItem>>;
|
|
289
|
-
breadcrumbItems: Ref<string[]>;
|
|
290
|
-
tabs: Ref<{
|
|
291
|
-
name: string;
|
|
292
|
-
parentNames: string[];
|
|
293
|
-
title: string;
|
|
294
|
-
fullPath: string;
|
|
295
|
-
active: boolean;
|
|
296
|
-
}[]>;
|
|
297
|
-
onTabClick: (key: string) => void;
|
|
298
|
-
onTabDelete: (key: string) => void;
|
|
299
|
-
keepAliveKeys: ComputedRef<string[]>;
|
|
300
|
-
headerHeight: number;
|
|
301
|
-
headerHeightWidthPx: string;
|
|
302
|
-
siderWidth: number;
|
|
303
|
-
siderCollapsedWidth: number;
|
|
304
|
-
siderWidthPx: string;
|
|
305
|
-
siderCollapsedWidthPx: string;
|
|
306
|
-
siderCollapsed: Ref<boolean>;
|
|
307
|
-
onSiderCollapse: (val: boolean) => void;
|
|
308
|
-
}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
219
|
+
onKeepAliveIncludeChange?: ((keepAliveInclude: string[]) => any) | undefined;
|
|
220
|
+
}, {}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
309
221
|
collapse: (collapsed: boolean) => true;
|
|
222
|
+
keepAliveIncludeChange: (keepAliveInclude: string[]) => true;
|
|
310
223
|
}, string, {
|
|
311
224
|
menuItems: IProMenuItem[];
|
|
312
225
|
headerTitle: string;
|
|
313
226
|
headerLogo: string;
|
|
314
227
|
theme: "light" | "dark";
|
|
315
228
|
footerTitle: string;
|
|
316
|
-
|
|
229
|
+
showTabs: boolean;
|
|
317
230
|
siderBreakpoint: "xxl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
318
231
|
}, {}, string> & VNodeProps & AllowedComponentProps & ComponentCustomProps & {
|
|
319
232
|
install: (app: App) => void;
|
package/es/pro-layout/index.js
CHANGED
|
@@ -1,22 +1,19 @@
|
|
|
1
1
|
import _sfc_main from "./pro-layout.vue.js";
|
|
2
2
|
import "./pro-layout.vue2.js";
|
|
3
|
-
import { Layout, Space, Typography,
|
|
3
|
+
import { Layout, Space, Typography, Button, Affix } from "@arco-design/web-vue";
|
|
4
|
+
import { ProKeepAliveRouterView } from "../pro-keep-alive-router-view/index.js";
|
|
4
5
|
import { ProMenu } from "../pro-menu/index.js";
|
|
5
6
|
import { ProReuseTabs } from "../pro-reuse-tabs/index.js";
|
|
6
|
-
import { ProPageWrapper } from "../pro-page-wrapper/index.js";
|
|
7
7
|
const ProLayout = Object.assign(_sfc_main, {
|
|
8
8
|
install: (app) => {
|
|
9
9
|
app.use(Layout);
|
|
10
10
|
app.use(Space);
|
|
11
11
|
app.use(Typography);
|
|
12
|
-
app.use(Tooltip);
|
|
13
12
|
app.use(Button);
|
|
14
|
-
app.use(Dropdown);
|
|
15
|
-
app.use(Avatar);
|
|
16
13
|
app.use(Affix);
|
|
14
|
+
app.use(ProKeepAliveRouterView);
|
|
17
15
|
app.use(ProMenu);
|
|
18
16
|
app.use(ProReuseTabs);
|
|
19
|
-
app.use(ProPageWrapper);
|
|
20
17
|
app.component("KbProLayout", _sfc_main);
|
|
21
18
|
}
|
|
22
19
|
});
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { DefineComponent,
|
|
1
|
+
import type { DefineComponent, ComponentOptionsMixin, VNodeProps, AllowedComponentProps, ComponentCustomProps, ExtractPropTypes, type PropType } from 'vue';
|
|
2
2
|
import type { IProMenuItem } from '../pro-menu';
|
|
3
3
|
declare const _sfc_main: DefineComponent<{
|
|
4
4
|
menuItems: {
|
|
@@ -26,7 +26,7 @@ declare const _sfc_main: DefineComponent<{
|
|
|
26
26
|
required: false;
|
|
27
27
|
default: string;
|
|
28
28
|
};
|
|
29
|
-
|
|
29
|
+
showTabs: {
|
|
30
30
|
type: PropType<boolean>;
|
|
31
31
|
required: false;
|
|
32
32
|
default: boolean;
|
|
@@ -36,39 +36,9 @@ declare const _sfc_main: DefineComponent<{
|
|
|
36
36
|
required: false;
|
|
37
37
|
default: string;
|
|
38
38
|
};
|
|
39
|
-
}, {
|
|
40
|
-
prefixClsName: string;
|
|
41
|
-
props: any;
|
|
42
|
-
emit: (event: "collapse", collapsed: boolean) => void;
|
|
43
|
-
menuItems: Ref<IProMenuItem[]>;
|
|
44
|
-
slots: Readonly<{
|
|
45
|
-
[name: string]: Slot | undefined;
|
|
46
|
-
}>;
|
|
47
|
-
menuSelectedKeys: Ref<string[]>;
|
|
48
|
-
onMenuItemClick: (key: string) => void;
|
|
49
|
-
activeMenuItem: Ref<IProMenuItem | undefined>;
|
|
50
|
-
menuItemMap: Ref<Record<string, IProMenuItem>>;
|
|
51
|
-
breadcrumbItems: Ref<string[]>;
|
|
52
|
-
tabs: Ref<{
|
|
53
|
-
name: string;
|
|
54
|
-
parentNames: string[];
|
|
55
|
-
title: string;
|
|
56
|
-
fullPath: string;
|
|
57
|
-
active: boolean;
|
|
58
|
-
}[]>;
|
|
59
|
-
onTabClick: (key: string) => void;
|
|
60
|
-
onTabDelete: (key: string) => void;
|
|
61
|
-
keepAliveKeys: ComputedRef<string[]>;
|
|
62
|
-
headerHeight: number;
|
|
63
|
-
headerHeightWidthPx: string;
|
|
64
|
-
siderWidth: number;
|
|
65
|
-
siderCollapsedWidth: number;
|
|
66
|
-
siderWidthPx: string;
|
|
67
|
-
siderCollapsedWidthPx: string;
|
|
68
|
-
siderCollapsed: Ref<boolean>;
|
|
69
|
-
onSiderCollapse: (val: boolean) => void;
|
|
70
|
-
}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
39
|
+
}, {}, unknown, {}, {}, ComponentOptionsMixin, ComponentOptionsMixin, {
|
|
71
40
|
collapse: (collapsed: boolean) => true;
|
|
41
|
+
keepAliveIncludeChange: (keepAliveInclude: string[]) => true;
|
|
72
42
|
}, string, VNodeProps & AllowedComponentProps & ComponentCustomProps, Readonly<ExtractPropTypes<{
|
|
73
43
|
menuItems: {
|
|
74
44
|
type: PropType<IProMenuItem[]>;
|
|
@@ -95,7 +65,7 @@ declare const _sfc_main: DefineComponent<{
|
|
|
95
65
|
required: false;
|
|
96
66
|
default: string;
|
|
97
67
|
};
|
|
98
|
-
|
|
68
|
+
showTabs: {
|
|
99
69
|
type: PropType<boolean>;
|
|
100
70
|
required: false;
|
|
101
71
|
default: boolean;
|
|
@@ -107,13 +77,14 @@ declare const _sfc_main: DefineComponent<{
|
|
|
107
77
|
};
|
|
108
78
|
}>> & {
|
|
109
79
|
onCollapse?: ((collapsed: boolean) => any) | undefined;
|
|
80
|
+
onKeepAliveIncludeChange?: ((keepAliveInclude: string[]) => any) | undefined;
|
|
110
81
|
}, {
|
|
111
82
|
menuItems: IProMenuItem[];
|
|
112
83
|
headerTitle: string;
|
|
113
84
|
headerLogo: string;
|
|
114
85
|
theme: "light" | "dark";
|
|
115
86
|
footerTitle: string;
|
|
116
|
-
|
|
87
|
+
showTabs: boolean;
|
|
117
88
|
siderBreakpoint: "xxl" | "xl" | "lg" | "md" | "sm" | "xs";
|
|
118
89
|
}>;
|
|
119
90
|
export default _sfc_main;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { defineComponent, useCssVars, toRefs, useSlots,
|
|
1
|
+
import { defineComponent, useCssVars, toRefs, useSlots, provide, ref, watch, resolveComponent, openBlock, createBlock, normalizeClass, withCtx, createVNode, createElementVNode, unref, renderSlot, createTextVNode, toDisplayString, createCommentVNode } from "vue";
|
|
2
2
|
import { useHooks } from "./hooks.js";
|
|
3
3
|
const _hoisted_1 = ["src"];
|
|
4
4
|
const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
@@ -29,7 +29,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
29
29
|
required: false,
|
|
30
30
|
default: "KeyBlade Pro"
|
|
31
31
|
},
|
|
32
|
-
|
|
32
|
+
showTabs: {
|
|
33
33
|
type: Boolean,
|
|
34
34
|
required: false,
|
|
35
35
|
default: true
|
|
@@ -41,45 +41,32 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
41
41
|
}
|
|
42
42
|
},
|
|
43
43
|
emits: {
|
|
44
|
-
"collapse": (collapsed) => true
|
|
44
|
+
"collapse": (collapsed) => true,
|
|
45
|
+
"keepAliveIncludeChange": (keepAliveInclude) => true
|
|
45
46
|
},
|
|
46
47
|
setup(__props, { emit }) {
|
|
47
48
|
const props = __props;
|
|
48
49
|
useCssVars((_ctx) => ({
|
|
49
|
-
"
|
|
50
|
-
"
|
|
51
|
-
"
|
|
50
|
+
"c766e2a6": headerHeightWidthPx,
|
|
51
|
+
"2eb6eb40": siderWidthPx,
|
|
52
|
+
"4059c865": siderCollapsedWidthPx
|
|
52
53
|
}));
|
|
53
54
|
const prefixClsName = "keyblade-pro-layout";
|
|
54
55
|
const { menuItems } = toRefs(props);
|
|
55
56
|
const slots = useSlots();
|
|
56
57
|
const {
|
|
57
58
|
menuSelectedKeys,
|
|
58
|
-
onMenuItemClick,
|
|
59
|
-
activeMenuItem,
|
|
60
|
-
menuItemMap,
|
|
61
59
|
breadcrumbItems,
|
|
62
60
|
tabs,
|
|
61
|
+
keepAliveInclude,
|
|
62
|
+
onMenuItemClick,
|
|
63
63
|
onTabClick,
|
|
64
64
|
onTabDelete
|
|
65
65
|
} = useHooks(menuItems, {
|
|
66
|
-
|
|
67
|
-
});
|
|
68
|
-
const keepAliveKeys = computed(() => {
|
|
69
|
-
const keys = /* @__PURE__ */ new Set();
|
|
70
|
-
tabs.value.forEach((tab) => {
|
|
71
|
-
tab.parentNames.forEach((name) => {
|
|
72
|
-
const menuItem = menuItemMap.value[name];
|
|
73
|
-
if (menuItem.ignoreCache) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
keys.add(menuItem.name);
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
return Array.from(keys.values());
|
|
66
|
+
showTabs: props.showTabs
|
|
80
67
|
});
|
|
81
68
|
provide("ProBreadcrumbItems", breadcrumbItems);
|
|
82
|
-
provide("
|
|
69
|
+
provide("ProKeepAliveInclude", keepAliveInclude);
|
|
83
70
|
const headerHeight = 60;
|
|
84
71
|
const headerHeightWidthPx = `${headerHeight}px`;
|
|
85
72
|
const siderWidth = 220;
|
|
@@ -101,16 +88,21 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
101
88
|
break;
|
|
102
89
|
}
|
|
103
90
|
}, { immediate: true });
|
|
91
|
+
watch(keepAliveInclude, () => {
|
|
92
|
+
emit("keepAliveIncludeChange", keepAliveInclude.value);
|
|
93
|
+
}, { immediate: true });
|
|
104
94
|
return (_ctx, _cache) => {
|
|
105
95
|
const _component_a_typography_title = resolveComponent("a-typography-title");
|
|
106
96
|
const _component_a_space = resolveComponent("a-space");
|
|
107
97
|
const _component_a_layout_header = resolveComponent("a-layout-header");
|
|
108
98
|
const _component_kb_pro_menu = resolveComponent("kb-pro-menu");
|
|
99
|
+
const _component_icon_menu_unfold = resolveComponent("icon-menu-unfold");
|
|
100
|
+
const _component_icon_menu_fold = resolveComponent("icon-menu-fold");
|
|
101
|
+
const _component_a_button = resolveComponent("a-button");
|
|
109
102
|
const _component_a_layout_sider = resolveComponent("a-layout-sider");
|
|
110
103
|
const _component_kb_pro_reuse_tabs = resolveComponent("kb-pro-reuse-tabs");
|
|
111
104
|
const _component_a_affix = resolveComponent("a-affix");
|
|
112
|
-
const
|
|
113
|
-
const _component_kb_pro_page_wrapper = resolveComponent("kb-pro-page-wrapper");
|
|
105
|
+
const _component_kb_pro_keep_alive_router_view = resolveComponent("kb-pro-keep-alive-router-view");
|
|
114
106
|
const _component_a_layout_content = resolveComponent("a-layout-content");
|
|
115
107
|
const _component_a_layout_footer = resolveComponent("a-layout-footer");
|
|
116
108
|
const _component_a_layout = resolveComponent("a-layout");
|
|
@@ -158,8 +150,8 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
158
150
|
default: withCtx(() => [
|
|
159
151
|
createVNode(_component_a_layout_sider, {
|
|
160
152
|
class: normalizeClass(`${prefixClsName}-sider`),
|
|
161
|
-
collapsible: true,
|
|
162
153
|
width: siderWidth,
|
|
154
|
+
collapsible: true,
|
|
163
155
|
breakpoint: __props.siderBreakpoint,
|
|
164
156
|
collapsed: siderCollapsed.value,
|
|
165
157
|
"hide-trigger": true,
|
|
@@ -171,14 +163,22 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
171
163
|
}, [
|
|
172
164
|
renderSlot(_ctx.$slots, "sider-top"),
|
|
173
165
|
createVNode(_component_kb_pro_menu, {
|
|
174
|
-
style: { "flex": "1" },
|
|
175
166
|
collapsed: siderCollapsed.value,
|
|
176
167
|
"selected-keys": unref(menuSelectedKeys),
|
|
177
168
|
items: unref(menuItems),
|
|
178
|
-
onCollapse: onSiderCollapse,
|
|
179
169
|
onMenuItemClick: unref(onMenuItemClick)
|
|
180
170
|
}, null, 8, ["collapsed", "selected-keys", "items", "onMenuItemClick"])
|
|
181
|
-
], 2)
|
|
171
|
+
], 2),
|
|
172
|
+
createVNode(_component_a_button, {
|
|
173
|
+
size: "mini",
|
|
174
|
+
class: normalizeClass(`${prefixClsName}-sider-collapsed`),
|
|
175
|
+
onClick: _cache[0] || (_cache[0] = ($event) => onSiderCollapse(!siderCollapsed.value))
|
|
176
|
+
}, {
|
|
177
|
+
icon: withCtx(() => [
|
|
178
|
+
siderCollapsed.value ? (openBlock(), createBlock(_component_icon_menu_unfold, { key: 0 })) : (openBlock(), createBlock(_component_icon_menu_fold, { key: 1 }))
|
|
179
|
+
]),
|
|
180
|
+
_: 1
|
|
181
|
+
}, 8, ["class"])
|
|
182
182
|
]),
|
|
183
183
|
_: 3
|
|
184
184
|
}, 8, ["class", "breakpoint", "collapsed"]),
|
|
@@ -191,7 +191,7 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
191
191
|
offsetTop: headerHeight
|
|
192
192
|
}, {
|
|
193
193
|
default: withCtx(() => [
|
|
194
|
-
__props.
|
|
194
|
+
__props.showTabs && unref(tabs).length > 0 ? (openBlock(), createBlock(_component_kb_pro_reuse_tabs, {
|
|
195
195
|
key: 0,
|
|
196
196
|
tabs: unref(tabs),
|
|
197
197
|
onTabClick: unref(onTabClick),
|
|
@@ -201,34 +201,9 @@ const _sfc_main = /* @__PURE__ */ defineComponent({
|
|
|
201
201
|
_: 1
|
|
202
202
|
}, 8, ["class"]),
|
|
203
203
|
createVNode(_component_a_layout_content, null, {
|
|
204
|
-
default: withCtx(() =>
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
createVNode(_component_kb_pro_page_wrapper, {
|
|
208
|
-
"hide-page-wrapper": (_a = unref(activeMenuItem)) == null ? void 0 : _a.hidePageWrapper
|
|
209
|
-
}, {
|
|
210
|
-
default: withCtx(() => [
|
|
211
|
-
createVNode(_component_router_view, null, {
|
|
212
|
-
default: withCtx(({ Component, route }) => [
|
|
213
|
-
!__props.tabsMode ? (openBlock(), createBlock(resolveDynamicComponent(Component), {
|
|
214
|
-
key: route.fullPath
|
|
215
|
-
})) : (openBlock(), createBlock(KeepAlive, {
|
|
216
|
-
key: 1,
|
|
217
|
-
include: unref(keepAliveKeys),
|
|
218
|
-
max: 15
|
|
219
|
-
}, [
|
|
220
|
-
(openBlock(), createBlock(resolveDynamicComponent(Component), {
|
|
221
|
-
key: route.fullPath
|
|
222
|
-
}))
|
|
223
|
-
], 1032, ["include"]))
|
|
224
|
-
]),
|
|
225
|
-
_: 1
|
|
226
|
-
})
|
|
227
|
-
]),
|
|
228
|
-
_: 1
|
|
229
|
-
}, 8, ["hide-page-wrapper"])
|
|
230
|
-
];
|
|
231
|
-
}),
|
|
204
|
+
default: withCtx(() => [
|
|
205
|
+
createVNode(_component_kb_pro_keep_alive_router_view)
|
|
206
|
+
]),
|
|
232
207
|
_: 1
|
|
233
208
|
}),
|
|
234
209
|
unref(slots)["footer"] !== void 0 ? renderSlot(_ctx.$slots, "footer", { key: 0 }) : (openBlock(), createBlock(_component_a_layout_footer, {
|