@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.
Files changed (51) hide show
  1. package/es/components.d.ts +2 -1
  2. package/es/index.d.ts +2 -1
  3. package/es/index.js +16 -12
  4. package/es/pro-breadcrumb/index.d.ts +4 -16
  5. package/es/pro-breadcrumb/index.js +1 -0
  6. package/es/pro-breadcrumb/pro-breadcrumb.vue.d.ts +2 -6
  7. package/es/pro-breadcrumb/pro-breadcrumb.vue.js +14 -6
  8. package/es/pro-breadcrumb/pro-breadcrumb.vue2.js +2 -3
  9. package/es/pro-breadcrumb/pro-breadcrumb.vue3.js +5 -0
  10. package/es/pro-drawer-form/index.d.ts +4 -55
  11. package/es/pro-drawer-form/pro-drawer-form.vue.d.ts +2 -19
  12. package/es/pro-drawer-form/pro-drawer-form.vue2.js +1 -2
  13. package/es/pro-keep-alive-router-view/index.d.ts +124 -0
  14. package/es/pro-keep-alive-router-view/index.js +11 -0
  15. package/es/pro-keep-alive-router-view/pro-keep-alive-router-view.vue.d.ts +45 -0
  16. package/es/pro-keep-alive-router-view/pro-keep-alive-router-view.vue.js +57 -0
  17. package/es/pro-keep-alive-router-view/pro-keep-alive-router-view.vue2.js +4 -0
  18. package/es/pro-layout/hooks.d.ts +3 -2
  19. package/es/pro-layout/hooks.js +38 -8
  20. package/es/pro-layout/index.d.ts +19 -106
  21. package/es/pro-layout/index.js +3 -6
  22. package/es/pro-layout/pro-layout.vue.d.ts +7 -36
  23. package/es/pro-layout/pro-layout.vue.js +34 -59
  24. package/es/pro-layout/pro-layout.vue3.js +1 -2
  25. package/es/pro-menu/index.d.ts +5 -75
  26. package/es/pro-menu/interface.d.ts +5 -9
  27. package/es/pro-menu/pro-menu-item.vue.d.ts +4 -8
  28. package/es/pro-menu/pro-menu-item.vue.js +28 -4
  29. package/es/pro-menu/pro-menu-item.vue2.js +2 -3
  30. package/es/pro-menu/pro-menu-item.vue3.js +5 -0
  31. package/es/pro-menu/pro-menu.vue.d.ts +2 -26
  32. package/es/pro-menu/pro-menu.vue.js +3 -8
  33. package/es/pro-menu/pro-menu.vue2.js +1 -2
  34. package/es/pro-modal-form/index.d.ts +4 -55
  35. package/es/pro-modal-form/pro-modal-form.vue.d.ts +2 -19
  36. package/es/pro-modal-form/pro-modal-form.vue2.js +1 -2
  37. package/es/{pro-page-wrapper → pro-page-container}/index.d.ts +14 -23
  38. package/es/pro-page-container/index.js +14 -0
  39. package/es/{pro-page-wrapper/pro-page-wrapper.vue.d.ts → pro-page-container/pro-page-container.vue.d.ts} +4 -7
  40. package/es/{pro-page-wrapper/pro-page-wrapper.vue.js → pro-page-container/pro-page-container.vue.js} +8 -8
  41. package/es/pro-page-container/pro-page-container.vue2.js +4 -0
  42. package/es/pro-page-container/pro-page-container.vue3.js +5 -0
  43. package/es/pro-reuse-tabs/index.d.ts +4 -25
  44. package/es/pro-reuse-tabs/pro-reuse-tabs.vue.d.ts +2 -9
  45. package/es/pro-reuse-tabs/pro-reuse-tabs.vue3.js +1 -2
  46. package/es/style.css +24 -15
  47. package/package.json +3 -3
  48. package/src/index.ts +7 -3
  49. package/es/pro-page-wrapper/index.js +0 -14
  50. package/es/pro-page-wrapper/pro-page-wrapper.vue2.js +0 -4
  51. package/es/pro-page-wrapper/pro-page-wrapper.vue3.js +0 -6
@@ -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, noAffix } = activeMenuItem.value;
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.tabsMode) {
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
  };
@@ -1,5 +1,5 @@
1
1
  import type { IProMenuItem } from '../pro-menu';
2
- import type { ComponentInternalInstance, ExtractPropTypes, PropType, VNodeProps, AllowedComponentProps, ComponentCustomProps, Slot, ComponentPublicInstance, ComponentOptionsBase, Ref, ComputedRef, ComponentOptionsMixin, DebuggerEvent, nextTick, WatchOptions, WatchStopHandle, ShallowUnwrapRef, ComponentCustomProperties, App } from 'vue';
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
- tabsMode: boolean;
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
- tabsMode: {
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
- } & VNodeProps & AllowedComponentProps & ComponentCustomProps, "menuItems" | "headerTitle" | "headerLogo" | "theme" | "footerTitle" | "tabsMode" | "siderBreakpoint">;
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
- tabsMode: {
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
- prefixClsName: string;
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
- tabsMode: boolean;
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
- tabsMode: {
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
- } & ShallowUnwrapRef<{
205
- prefixClsName: string;
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
- tabsMode: {
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
- prefixClsName: string;
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
- tabsMode: boolean;
229
+ showTabs: boolean;
317
230
  siderBreakpoint: "xxl" | "xl" | "lg" | "md" | "sm" | "xs";
318
231
  }, {}, string> & VNodeProps & AllowedComponentProps & ComponentCustomProps & {
319
232
  install: (app: App) => void;
@@ -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, Tooltip, Button, Dropdown, Avatar, Affix } from "@arco-design/web-vue";
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, Ref, Slot, ComputedRef, ComponentOptionsMixin, VNodeProps, AllowedComponentProps, ComponentCustomProps, ExtractPropTypes, type PropType } from 'vue';
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
- tabsMode: {
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
- tabsMode: {
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
- tabsMode: boolean;
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, computed, provide, ref, watch, resolveComponent, openBlock, createBlock, normalizeClass, withCtx, createVNode, createElementVNode, unref, renderSlot, createTextVNode, toDisplayString, createCommentVNode, resolveDynamicComponent, KeepAlive } from "vue";
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
- tabsMode: {
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
- "aa0adaee": headerHeightWidthPx,
50
- "f32a33f8": siderWidthPx,
51
- "5b964541": siderCollapsedWidthPx
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
- tabsMode: props.tabsMode
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("ProKeepAliveKeys", keepAliveKeys);
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 _component_router_view = resolveComponent("router-view");
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.tabsMode && unref(tabs).length > 0 ? (openBlock(), createBlock(_component_kb_pro_reuse_tabs, {
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
- var _a;
206
- return [
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, {
@@ -1,6 +1,5 @@
1
1
  import _sfc_main from "./pro-layout.vue.js";
2
- import { default as default2 } from "./pro-layout.vue.js";
3
2
  import "./pro-layout.vue2.js";
4
3
  export {
5
- default2 as default
4
+ _sfc_main as default
6
5
  };