@ditari/bsui 1.1.50 → 1.1.52
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/CHANGELOG.md +14 -0
- package/dist/cjs/layout/FuckMain.vue.d.ts +1 -19
- package/dist/cjs/layout/Main.vue.d.ts +1 -19
- package/dist/cjs/layout/NavTabs.vue.d.ts +4 -19
- package/dist/cjs/layout/NavTabs.vue2.cjs +11 -13
- package/dist/cjs/layout/NavTabs.vue2.cjs.map +1 -1
- package/dist/cjs/menu/Menu.bak.cjs +140 -0
- package/dist/cjs/menu/Menu.bak.cjs.map +1 -0
- package/dist/cjs/menu/Menu.bak.d.ts +2 -0
- package/dist/cjs/menu/Menu.cjs +103 -29
- package/dist/cjs/menu/Menu.cjs.map +1 -1
- package/dist/cjs/menu/useMenuCore.cjs +53 -0
- package/dist/cjs/menu/useMenuCore.cjs.map +1 -0
- package/dist/cjs/menu/useMenuCore.d.ts +8 -0
- package/dist/esm/layout/FuckMain.vue.d.ts +1 -19
- package/dist/esm/layout/Main.vue.d.ts +1 -19
- package/dist/esm/layout/NavTabs.vue.d.ts +4 -19
- package/dist/esm/layout/NavTabs.vue2.mjs +13 -15
- package/dist/esm/layout/NavTabs.vue2.mjs.map +1 -1
- package/dist/esm/menu/Menu.bak.d.ts +2 -0
- package/dist/esm/menu/Menu.bak.mjs +136 -0
- package/dist/esm/menu/Menu.bak.mjs.map +1 -0
- package/dist/esm/menu/Menu.mjs +103 -29
- package/dist/esm/menu/Menu.mjs.map +1 -1
- package/dist/esm/menu/useMenuCore.d.ts +8 -0
- package/dist/esm/menu/useMenuCore.mjs +49 -0
- package/dist/esm/menu/useMenuCore.mjs.map +1 -0
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -107,27 +107,9 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
107
107
|
deleteKeepAlive(name: string): void;
|
|
108
108
|
save(route: import("vue-router").RouteLocationNormalized): void;
|
|
109
109
|
}>;
|
|
110
|
-
|
|
111
|
-
list: never[];
|
|
112
|
-
openMenusKeys: any;
|
|
113
|
-
selectedMenuKeys: any;
|
|
114
|
-
}, {
|
|
115
|
-
getMenu: (state: {
|
|
116
|
-
list: never[];
|
|
117
|
-
openMenusKeys: any;
|
|
118
|
-
selectedMenuKeys: any;
|
|
119
|
-
} & import("pinia").PiniaCustomStateProperties<{
|
|
120
|
-
list: never[];
|
|
121
|
-
openMenusKeys: any;
|
|
122
|
-
selectedMenuKeys: any;
|
|
123
|
-
}>) => never[];
|
|
124
|
-
}, {
|
|
125
|
-
save(data: any): void;
|
|
126
|
-
}>;
|
|
110
|
+
activeKey: import("vue").Ref<string>;
|
|
127
111
|
baseClassName: string;
|
|
128
112
|
navTabs: import("vue").Ref<any[]>;
|
|
129
|
-
selectedMenuKeys: import("vue").Ref<any>;
|
|
130
|
-
activeKey: import("vue").Ref<string>;
|
|
131
113
|
setNavTabs: () => void;
|
|
132
114
|
onClick: (key: string) => void;
|
|
133
115
|
onClose: ($event: any, key: string) => void;
|
|
@@ -107,27 +107,9 @@ declare const _default: import("vue").DefineComponent<{
|
|
|
107
107
|
deleteKeepAlive(name: string): void;
|
|
108
108
|
save(route: import("vue-router").RouteLocationNormalized): void;
|
|
109
109
|
}>;
|
|
110
|
-
|
|
111
|
-
list: never[];
|
|
112
|
-
openMenusKeys: any;
|
|
113
|
-
selectedMenuKeys: any;
|
|
114
|
-
}, {
|
|
115
|
-
getMenu: (state: {
|
|
116
|
-
list: never[];
|
|
117
|
-
openMenusKeys: any;
|
|
118
|
-
selectedMenuKeys: any;
|
|
119
|
-
} & import("pinia").PiniaCustomStateProperties<{
|
|
120
|
-
list: never[];
|
|
121
|
-
openMenusKeys: any;
|
|
122
|
-
selectedMenuKeys: any;
|
|
123
|
-
}>) => never[];
|
|
124
|
-
}, {
|
|
125
|
-
save(data: any): void;
|
|
126
|
-
}>;
|
|
110
|
+
activeKey: import("vue").Ref<string>;
|
|
127
111
|
baseClassName: string;
|
|
128
112
|
navTabs: import("vue").Ref<any[]>;
|
|
129
|
-
selectedMenuKeys: import("vue").Ref<any>;
|
|
130
|
-
activeKey: import("vue").Ref<string>;
|
|
131
113
|
setNavTabs: () => void;
|
|
132
114
|
onClick: (key: string) => void;
|
|
133
115
|
onClose: ($event: any, key: string) => void;
|
|
@@ -9,6 +9,9 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
9
9
|
getList: (state: {
|
|
10
10
|
list: {
|
|
11
11
|
path: string;
|
|
12
|
+
/**
|
|
13
|
+
* 标签组件
|
|
14
|
+
*/
|
|
12
15
|
fullPath: string;
|
|
13
16
|
query: import("vue-router").LocationQuery;
|
|
14
17
|
params: import("vue-router").RouteParams;
|
|
@@ -52,27 +55,9 @@ declare const _default: import("vue").DefineComponent<{}, {
|
|
|
52
55
|
deleteKeepAlive(name: string): void;
|
|
53
56
|
save(route: import("vue-router").RouteLocationNormalized): void;
|
|
54
57
|
}>;
|
|
55
|
-
|
|
56
|
-
list: never[];
|
|
57
|
-
openMenusKeys: any;
|
|
58
|
-
selectedMenuKeys: any;
|
|
59
|
-
}, {
|
|
60
|
-
getMenu: (state: {
|
|
61
|
-
list: never[];
|
|
62
|
-
openMenusKeys: any;
|
|
63
|
-
selectedMenuKeys: any;
|
|
64
|
-
} & import("pinia").PiniaCustomStateProperties<{
|
|
65
|
-
list: never[];
|
|
66
|
-
openMenusKeys: any;
|
|
67
|
-
selectedMenuKeys: any;
|
|
68
|
-
}>) => never[];
|
|
69
|
-
}, {
|
|
70
|
-
save(data: any): void;
|
|
71
|
-
}>;
|
|
58
|
+
activeKey: Ref<string>;
|
|
72
59
|
baseClassName: string;
|
|
73
60
|
navTabs: Ref<any[]>;
|
|
74
|
-
selectedMenuKeys: Ref<any>;
|
|
75
|
-
activeKey: Ref<string>;
|
|
76
61
|
setNavTabs: () => void;
|
|
77
62
|
onClick: (key: string) => void;
|
|
78
63
|
onClose: ($event: any, key: string) => void;
|
|
@@ -27,24 +27,22 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
27
27
|
const router = vueRouter.useRouter();
|
|
28
28
|
const navStore = store.useNavTabsStore();
|
|
29
29
|
const keepAliveStore = store.useKeepAliveStore();
|
|
30
|
-
const
|
|
30
|
+
const { activeKey } = pinia.storeToRefs(navStore);
|
|
31
31
|
const baseClassName = `${index.prefixName}-nav`;
|
|
32
32
|
const navTabs = vue.computed(() => navStore.getList);
|
|
33
|
-
const { selectedMenuKeys } = pinia.storeToRefs(menuStore);
|
|
34
|
-
const activeKey = vue.ref("");
|
|
35
|
-
vue.watchEffect(() => {
|
|
36
|
-
activeKey.value = selectedMenuKeys.value.length > 0 ? selectedMenuKeys.value[0] : "";
|
|
37
|
-
});
|
|
38
|
-
setNavTabs();
|
|
39
33
|
vue.watch(
|
|
40
|
-
() => route.
|
|
41
|
-
() => {
|
|
34
|
+
() => route.fullPath,
|
|
35
|
+
(val) => {
|
|
42
36
|
setNavTabs();
|
|
37
|
+
activeKey.value = val;
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
immediate: true
|
|
43
41
|
}
|
|
44
42
|
);
|
|
43
|
+
setNavTabs();
|
|
45
44
|
function setNavTabs() {
|
|
46
45
|
navStore.save(route);
|
|
47
|
-
selectedMenuKeys.value = [route.path];
|
|
48
46
|
keepAliveStore.save(route);
|
|
49
47
|
}
|
|
50
48
|
const onClick = (key) => {
|
|
@@ -78,8 +76,8 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
78
76
|
class: vue.normalizeClass(baseClassName)
|
|
79
77
|
}, [
|
|
80
78
|
vue.createVNode(_component_a_tabs, {
|
|
81
|
-
activeKey: activeKey
|
|
82
|
-
"onUpdate:activeKey": _cache[0] || (_cache[0] = ($event) => activeKey.value = $event),
|
|
79
|
+
activeKey: vue.unref(activeKey),
|
|
80
|
+
"onUpdate:activeKey": _cache[0] || (_cache[0] = ($event) => vue.isRef(activeKey) ? activeKey.value = $event : null),
|
|
83
81
|
type: "card",
|
|
84
82
|
onTabClick: onClick
|
|
85
83
|
}, {
|
|
@@ -99,7 +97,7 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
|
|
|
99
97
|
vue.createElementVNode(
|
|
100
98
|
"div",
|
|
101
99
|
{
|
|
102
|
-
class: vue.normalizeClass(["tab-item", { active: activeKey
|
|
100
|
+
class: vue.normalizeClass(["tab-item", { active: vue.unref(activeKey) === item.path }])
|
|
103
101
|
},
|
|
104
102
|
vue.toDisplayString(item.meta.title),
|
|
105
103
|
3
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavTabs.vue2.cjs","sources":["../../../src/layout/NavTabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * 标签组件\n */\nimport { computed, Ref, watch
|
|
1
|
+
{"version":3,"file":"NavTabs.vue2.cjs","sources":["../../../src/layout/NavTabs.vue"],"sourcesContent":["<script setup lang=\"ts\">\n/**\n * 标签组件\n */\nimport { computed, Ref, watch } from \"vue\";\nimport { useRoute, useRouter } from \"vue-router\";\nimport { CloseOutlined } from \"@ant-design/icons-vue\";\nimport { storeToRefs } from \"pinia\";\n\nimport {\n useNavTabsStore,\n useKeepAliveStore,\n} from \"@ditari/store\";\n\nimport { prefixName } from \"../theme\";\n\nconst route = useRoute();\nconst router = useRouter();\n\nconst navStore = useNavTabsStore();\nconst keepAliveStore = useKeepAliveStore();\nconst { activeKey } = storeToRefs(navStore);\n//class名称\nconst baseClassName = `${prefixName}-nav`;\n\n//标签列表\nconst navTabs: Ref<any[]> = computed(() => navStore.getList);\n//当前被激活的标签 通过选中的菜单得到\nwatch(\n () => route.fullPath,\n (val) => {\n setNavTabs();\n activeKey.value = val;\n },\n {\n immediate: true\n }\n);\n//首次进入页面或者刷新的时候执行\nsetNavTabs();\n\n//设置标签\nfunction setNavTabs() {\n // 保存标签\n navStore.save(route);\n // 存储路由缓存\n keepAliveStore.save(route);\n}\n\n/**\n * 切换标签\n * @param nav\n */\nconst onClick = (key: string) => {\n if (key !== route.path) {\n // 匹配打开的标签路由数据\n const rs = navTabs.value.filter((item: any) => item.path === key)[0];\n // 打开路由\n router.push({\n path: rs.path,\n query: rs.query,\n params: rs.params,\n fullPath: rs.fullPath\n } as any);\n }\n};\n\n/**\n * 关闭标签\n * @param $event\n * @param targetKey\n */\nconst onClose = ($event: any, key: string) => {\n //const rs = navTabs.value.find((item) => item.fullPath === key) as any;\n //阻止冒泡\n $event.stopPropagation();\n // 删除标签\n navStore.deleteTabs(key);\n // 重新push已打开的路由\n router.push(navTabs.value[navTabs.value.length - 1].fullPath);\n\n //根据name 删除缓存的组件\n // if (rs.name) {\n // keepAliveStore.deleteKeepAlive(rs.name);\n // }\n};\n\n/**\n * 是否显示标签关闭按钮函数\n * @param item\n * 根据item和当前 navTabs 长度来判断是否要隐藏关闭标签按钮\n */\nconst closeStatus = (item: any) => {\n // 如果meta有设置keepOpen或者当前打开的标签只有一个的话不显示关闭按钮\n if (item.meta?.keepOpen) {\n return false;\n } else {\n // 如果只有一个标签,则隐藏关闭按钮\n return navTabs.value.length === 1 ? false : true;\n }\n};\n</script>\n<template>\n <div :class=\"baseClassName\">\n <a-tabs v-model:activeKey=\"activeKey\" type=\"card\" @tabClick=\"onClick\">\n <a-tab-pane v-for=\"item in navTabs\" :key=\"item.path\">\n <template #tab>\n <div class=\"tab-dividers\"></div>\n <div class=\"tab-item\" :class=\"{ active: activeKey === item.path }\">\n {{ item.meta.title }}\n </div>\n <div v-if=\"closeStatus(item)\" class=\"tab-close\">\n <CloseOutlined @click=\"onClose($event, item.fullPath)\" />\n </div>\n </template>\n </a-tab-pane>\n </a-tabs>\n </div>\n</template>\n<style lang=\"scss\"></style>\n"],"names":["useRoute","useRouter","useNavTabsStore","useKeepAliveStore","storeToRefs","prefixName","computed","watch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAgBA,IAAA,MAAM,QAAQA,kBAAS,EAAA,CAAA;AACvB,IAAA,MAAM,SAASC,mBAAU,EAAA,CAAA;AAEzB,IAAA,MAAM,WAAWC,qBAAgB,EAAA,CAAA;AACjC,IAAA,MAAM,iBAAiBC,uBAAkB,EAAA,CAAA;AACzC,IAAA,MAAM,EAAE,SAAA,EAAc,GAAAC,iBAAA,CAAY,QAAQ,CAAA,CAAA;AAE1C,IAAM,MAAA,aAAA,GAAgB,GAAGC,gBAAU,CAAA,IAAA,CAAA,CAAA;AAGnC,IAAA,MAAM,OAAsB,GAAAC,YAAA,CAAS,MAAM,QAAA,CAAS,OAAO,CAAA,CAAA;AAE3D,IAAAC,SAAA;AAAA,MACE,MAAM,KAAM,CAAA,QAAA;AAAA,MACZ,CAAC,GAAQ,KAAA;AACP,QAAW,UAAA,EAAA,CAAA;AACX,QAAA,SAAA,CAAU,KAAQ,GAAA,GAAA,CAAA;AAAA,OACpB;AAAA,MACA;AAAA,QACE,SAAW,EAAA,IAAA;AAAA,OACb;AAAA,KACF,CAAA;AAEA,IAAW,UAAA,EAAA,CAAA;AAGX,IAAA,SAAS,UAAa,GAAA;AAEpB,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA,CAAA;AAEnB,MAAA,cAAA,CAAe,KAAK,KAAK,CAAA,CAAA;AAAA,KAC3B;AAMA,IAAM,MAAA,OAAA,GAAU,CAAC,GAAgB,KAAA;AAC/B,MAAI,IAAA,GAAA,KAAQ,MAAM,IAAM,EAAA;AAEtB,QAAM,MAAA,EAAA,GAAK,OAAQ,CAAA,KAAA,CAAM,MAAO,CAAA,CAAC,SAAc,IAAK,CAAA,IAAA,KAAS,GAAG,CAAA,CAAE,CAAC,CAAA,CAAA;AAEnE,QAAA,MAAA,CAAO,IAAK,CAAA;AAAA,UACV,MAAM,EAAG,CAAA,IAAA;AAAA,UACT,OAAO,EAAG,CAAA,KAAA;AAAA,UACV,QAAQ,EAAG,CAAA,MAAA;AAAA,UACX,UAAU,EAAG,CAAA,QAAA;AAAA,SACP,CAAA,CAAA;AAAA,OACV;AAAA,KACF,CAAA;AAOA,IAAM,MAAA,OAAA,GAAU,CAAC,MAAA,EAAa,GAAgB,KAAA;AAG5C,MAAA,MAAA,CAAO,eAAgB,EAAA,CAAA;AAEvB,MAAA,QAAA,CAAS,WAAW,GAAG,CAAA,CAAA;AAEvB,MAAO,MAAA,CAAA,IAAA,CAAK,QAAQ,KAAM,CAAA,OAAA,CAAQ,MAAM,MAAS,GAAA,CAAC,EAAE,QAAQ,CAAA,CAAA;AAAA,KAM9D,CAAA;AAOA,IAAM,MAAA,WAAA,GAAc,CAAC,IAAc,KAAA;;AAEjC,MAAI,IAAA,CAAA,EAAA,GAAA,IAAA,CAAK,IAAL,KAAA,IAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAW,QAAU,EAAA;AACvB,QAAO,OAAA,KAAA,CAAA;AAAA,OACF,MAAA;AAEL,QAAA,OAAO,OAAQ,CAAA,KAAA,CAAM,MAAW,KAAA,CAAA,GAAI,KAAQ,GAAA,IAAA,CAAA;AAAA,OAC9C;AAAA,KACF,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var vue = require('vue');
|
|
6
|
+
var vueRouter = require('vue-router');
|
|
7
|
+
var pinia = require('pinia');
|
|
8
|
+
var store = require('@ditari/store');
|
|
9
|
+
|
|
10
|
+
function _isSlot(s) {
|
|
11
|
+
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s);
|
|
12
|
+
}
|
|
13
|
+
var Menu_bak = /* @__PURE__ */ vue.defineComponent({
|
|
14
|
+
name: "DMenu",
|
|
15
|
+
setup() {
|
|
16
|
+
const router = vueRouter.useRouter();
|
|
17
|
+
const route = vueRouter.useRoute();
|
|
18
|
+
const {
|
|
19
|
+
componentName,
|
|
20
|
+
prop: menuProp
|
|
21
|
+
} = vue.inject("menuIcon");
|
|
22
|
+
const menuStore = store.useMenuStore();
|
|
23
|
+
const {
|
|
24
|
+
list,
|
|
25
|
+
openMenusKeys,
|
|
26
|
+
selectedMenuKeys
|
|
27
|
+
} = pinia.storeToRefs(menuStore);
|
|
28
|
+
const settingsStore = store.useSettingsStore();
|
|
29
|
+
const {
|
|
30
|
+
getCollapsed
|
|
31
|
+
} = pinia.storeToRefs(settingsStore);
|
|
32
|
+
vue.watch(() => selectedMenuKeys.value, (newValue) => {
|
|
33
|
+
if (getCollapsed.value) {
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const activatedUrl = newValue.length > 0 ? newValue[0] : "";
|
|
37
|
+
const parentUrls = getParentUrls(list.value, activatedUrl);
|
|
38
|
+
openMenusKeys.value = parentUrls || [];
|
|
39
|
+
}, {
|
|
40
|
+
deep: true
|
|
41
|
+
});
|
|
42
|
+
function getParentUrls(menus, url) {
|
|
43
|
+
for (let i = 0; i < menus.length; i++) {
|
|
44
|
+
if (menus[i].url === url || url.startsWith(menus[i].url)) {
|
|
45
|
+
return [menus[i].url];
|
|
46
|
+
} else if (menus[i].children && menus[i].children.length > 0) {
|
|
47
|
+
const parentUrls = getParentUrls(menus[i].children, url);
|
|
48
|
+
if (parentUrls) {
|
|
49
|
+
return [menus[i].url, ...parentUrls];
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
const onClick = ({
|
|
56
|
+
key,
|
|
57
|
+
keyPath
|
|
58
|
+
}) => {
|
|
59
|
+
var _a;
|
|
60
|
+
openMenusKeys.value = keyPath;
|
|
61
|
+
selectedMenuKeys.value = [key];
|
|
62
|
+
const findRoute = router.getRoutes().find((item) => item.path === key && item.components);
|
|
63
|
+
if (((_a = findRoute == null ? void 0 : findRoute.meta) == null ? void 0 : _a.open) === "_blank") {
|
|
64
|
+
window.open(window.location.origin + key, "_blank");
|
|
65
|
+
} else {
|
|
66
|
+
route.path !== key ? router.push(key).then((r) => r ? console.warn(r) : null) : null;
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
const renderMenu = (menu) => {
|
|
70
|
+
return vue.createVNode(vue.Fragment, null, [vue.createVNode(vue.resolveComponent("a-menu-item"), {
|
|
71
|
+
"key": menu.url
|
|
72
|
+
}, {
|
|
73
|
+
icon: () => renderIcon(menu),
|
|
74
|
+
default: () => menu.title
|
|
75
|
+
})]);
|
|
76
|
+
};
|
|
77
|
+
const iconClass = ["anticon", "anticon-menu", "ant-menu-item-icon"];
|
|
78
|
+
const renderIcon = (menu) => {
|
|
79
|
+
return vue.createVNode(vue.Fragment, null, [!menu.icon ? vue.withDirectives(vue.createVNode("div", {
|
|
80
|
+
"class": iconClass
|
|
81
|
+
}, [menu.title.substring(0, 1)]), [[vue.vShow, getCollapsed.value]]) : renderIconSwitch(menu.icon)]);
|
|
82
|
+
};
|
|
83
|
+
const renderIconSwitch = (icon) => {
|
|
84
|
+
if (componentName === "nativeHtml") {
|
|
85
|
+
return vue.createVNode("span", {
|
|
86
|
+
"innerHTML": icon
|
|
87
|
+
}, null);
|
|
88
|
+
} else {
|
|
89
|
+
return vue.h(vue.resolveComponent(componentName), {
|
|
90
|
+
[`${menuProp}`]: icon
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
const renderSub = (menu) => {
|
|
95
|
+
return vue.createVNode(vue.Fragment, null, [vue.createVNode(vue.resolveComponent("a-sub-menu"), {
|
|
96
|
+
"key": menu.url
|
|
97
|
+
}, {
|
|
98
|
+
title: () => menu.title,
|
|
99
|
+
icon: () => renderIcon(menu),
|
|
100
|
+
default: () => {
|
|
101
|
+
return menu.children.map(
|
|
102
|
+
(item) => !item.children || item.children.length === 0 ? renderSubMenu(item) : renderSub(item)
|
|
103
|
+
// 递归调用
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
})]);
|
|
107
|
+
};
|
|
108
|
+
const renderSubMenu = (menu) => {
|
|
109
|
+
return vue.createVNode(vue.Fragment, null, [vue.createVNode(vue.resolveComponent("a-menu-item"), {
|
|
110
|
+
"key": menu.url
|
|
111
|
+
}, {
|
|
112
|
+
default: () => menu.title
|
|
113
|
+
})]);
|
|
114
|
+
};
|
|
115
|
+
return () => {
|
|
116
|
+
let _slot;
|
|
117
|
+
return vue.createVNode(vue.Fragment, null, [vue.createVNode(vue.resolveComponent("a-menu"), {
|
|
118
|
+
"mode": "inline",
|
|
119
|
+
"theme": "dark",
|
|
120
|
+
"openKeys": openMenusKeys.value,
|
|
121
|
+
"onUpdate:openKeys": ($event) => openMenusKeys.value = $event,
|
|
122
|
+
"selectedKeys": selectedMenuKeys.value,
|
|
123
|
+
"onUpdate:selectedKeys": ($event) => selectedMenuKeys.value = $event,
|
|
124
|
+
"onClick": onClick
|
|
125
|
+
}, _isSlot(_slot = list.value.map((menu) => {
|
|
126
|
+
var _a;
|
|
127
|
+
if (!menu.children || ((_a = menu.children) == null ? void 0 : _a.length) === 0) {
|
|
128
|
+
return renderMenu(menu);
|
|
129
|
+
} else {
|
|
130
|
+
return renderSub(menu);
|
|
131
|
+
}
|
|
132
|
+
})) ? _slot : {
|
|
133
|
+
default: () => [_slot]
|
|
134
|
+
})]);
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
exports.default = Menu_bak;
|
|
140
|
+
//# sourceMappingURL=Menu.bak.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Menu.bak.cjs","sources":["../../../src/menu/Menu.bak.tsx"],"sourcesContent":["import { defineComponent, h, inject, resolveComponent, watch } from \"vue\";\nimport { useRouter, useRoute } from \"vue-router\";\n\nimport { storeToRefs } from \"pinia\";\n\nimport { useMenuStore, useSettingsStore } from \"@ditari/store\";\n\nexport default defineComponent({\n name: \"DMenu\",\n setup() {\n const router = useRouter();\n const route = useRoute();\n const { componentName, prop: menuProp } = inject(\"menuIcon\") as any;\n // 菜单store\n const menuStore = useMenuStore();\n const { list, openMenusKeys, selectedMenuKeys } = storeToRefs(menuStore);\n // 设置store\n const settingsStore = useSettingsStore();\n const { getCollapsed } = storeToRefs(settingsStore) as any;\n\n // watchEffect(() => {\n // if (getCollapsed.value) {\n // // 如果菜单是收缩的状态,则不匹配激活的菜单\n // // 否则 在切换标签的时候,收缩菜单会自动激活悬浮的动作\n // return;\n // }\n // // 会被触发两次\n // // 当前激活的url\n // const activatedUrl =\n // selectedMenuKeys.value.length > 0 ? selectedMenuKeys.value[0] : \"\";\n // const parentUrls = getParentUrls(list.value, activatedUrl);\n // openMenusKeys.value = parentUrls || [];\n // });\n\n watch(\n () => selectedMenuKeys.value,\n (newValue: any) => {\n if (getCollapsed.value) {\n // 如果菜单是收缩的状态,则不匹配激活的菜单\n // 否则 在切换标签的时候,收缩菜单会自动激活悬浮的动作\n return;\n }\n const activatedUrl = newValue.length > 0 ? newValue[0] : \"\";\n const parentUrls = getParentUrls(list.value, activatedUrl);\n openMenusKeys.value = parentUrls || [];\n },\n {\n deep: true\n }\n );\n\n function getParentUrls(menus: any, url: any) {\n for (let i = 0; i < menus.length; i++) {\n if (menus[i].url === url || url.startsWith(menus[i].url)) {\n // 如果当前菜单项的url与传入的url相等,说明找到了当前菜单项\n return [menus[i].url];\n } else if (menus[i].children && menus[i].children.length > 0) {\n // 如果当前菜单项有子菜单,则递归查找子菜单\n const parentUrls: any = getParentUrls(menus[i].children, url);\n if (parentUrls) {\n // 如果子菜单中存在当前url,则将当前菜单项的url添加到返回结果中\n return [menus[i].url, ...parentUrls];\n }\n }\n }\n return null;\n }\n\n /**\n * 监听菜单点击事件\n * @param item\n * @param key\n * @param keyPath\n */\n const onClick = ({ key, keyPath }: any) => {\n openMenusKeys.value = keyPath;\n selectedMenuKeys.value = [key];\n const findRoute = router\n .getRoutes()\n .find((item) => item.path === key && item.components);\n // 判断目标路由和当前路由是否相等\n // 不相等的时候再跳转\n if (findRoute?.meta?.open === \"_blank\") {\n window.open(window.location.origin + key, \"_blank\");\n } else {\n route.path !== key\n ? router.push(key).then((r) => (r ? console.warn(r) : null))\n : null;\n }\n };\n\n // 渲染菜单\n const renderMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.url}>\n {{\n icon: () => renderIcon(menu),\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n const iconClass = [\"anticon\", \"anticon-menu\", \"ant-menu-item-icon\"];\n // 渲染图标\n const renderIcon = (menu: any) => {\n return (\n <>\n {!menu.icon ? (\n <div v-show={getCollapsed.value} class={iconClass}>\n {menu.title.substring(0, 1)}\n </div>\n ) : (\n renderIconSwitch(menu.icon)\n )}\n </>\n );\n };\n\n const renderIconSwitch = (icon: any) => {\n if (componentName === \"nativeHtml\") {\n return <span v-html={icon}></span>;\n } else {\n return h(resolveComponent(componentName), {\n [`${menuProp}`]: icon\n });\n }\n };\n\n // 递归渲染子菜单\n const renderSub = (menu: any) => {\n return (\n <>\n <a-sub-menu key={menu.url}>\n {{\n title: () => menu.title,\n icon: () => renderIcon(menu),\n default: () => {\n return menu.children.map(\n (item: any) =>\n !item.children || item.children.length === 0\n ? renderSubMenu(item)\n : renderSub(item) // 递归调用\n );\n }\n }}\n </a-sub-menu>\n </>\n );\n };\n\n // 递归下的子菜单\n const renderSubMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.url}>\n {{\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n return () => (\n <>\n <a-menu\n mode=\"inline\"\n theme=\"dark\"\n v-model:openKeys={openMenusKeys.value}\n v-model:selectedKeys={selectedMenuKeys.value}\n onClick={onClick}\n >\n {list.value.map((menu: any) => {\n if (!menu.children || menu.children?.length === 0) {\n // 没有children属性或者children的长度等于0\n return renderMenu(menu);\n } else {\n return renderSub(menu);\n }\n })}\n </a-menu>\n </>\n );\n }\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","setup","router","useRouter","route","useRoute","componentName","prop","menuProp","inject","menuStore","useMenuStore","list","openMenusKeys","selectedMenuKeys","storeToRefs","settingsStore","useSettingsStore","getCollapsed","watch","value","newValue","activatedUrl","length","parentUrls","getParentUrls","deep","menus","url","i","startsWith","children","onClick","key","keyPath","findRoute","getRoutes","find","item","path","components","meta","open","window","location","origin","push","then","r","console","warn","renderMenu","menu","_createVNode","_Fragment","_resolveComponent","icon","renderIcon","default","title","iconClass","_withDirectives","substring","_vShow","renderIconSwitch","h","resolveComponent","renderSub","map","renderSubMenu","_slot","$event"],"mappings":";;;;;;;;;AAK+D,SAAAA,QAAAC,CAAA,EAAA;AAAA,EAAA,OAAA,OAAAA,CAAAA,KAAA,UAAAC,IAAAA,MAAAA,CAAAC,SAAAC,CAAAA,QAAAA,CAAAC,IAAAJ,CAAAA,CAAA,CAAAK,KAAAA,iBAAAA,IAAAA,CAAAA,WAAAA,CAAAL,CAAA,CAAA,CAAA;AAAA,CAAA;AAE/D,+BAA+BM,mBAAA,CAAA;AAAA,EAC7BC,IAAM,EAAA,OAAA;AAAA,EACNC,KAAQ,GAAA;AACN,IAAA,MAAMC,SAASC,mBAAU,EAAA,CAAA;AACzB,IAAA,MAAMC,QAAQC,kBAAS,EAAA,CAAA;AACvB,IAAM,MAAA;AAAA,MAAEC,aAAAA;AAAAA,MAAeC,IAAMC,EAAAA,QAAAA;AAAAA,KAAS,GAAIC,WAAO,UAAU,CAAA,CAAA;AAE3D,IAAA,MAAMC,YAAYC,kBAAa,EAAA,CAAA;AAC/B,IAAM,MAAA;AAAA,MAAEC,IAAAA;AAAAA,MAAMC,aAAAA;AAAAA,MAAeC,gBAAAA;AAAAA,KAAiB,GAAIC,kBAAYL,SAAS,CAAA,CAAA;AAEvE,IAAA,MAAMM,gBAAgBC,sBAAiB,EAAA,CAAA;AACvC,IAAM,MAAA;AAAA,MAAEC,YAAAA;AAAAA,KAAa,GAAIH,kBAAYC,aAAa,CAAA,CAAA;AAgBlDG,IACEA,SAAA,CAAA,MAAML,gBAAiBM,CAAAA,KAAAA,EACtBC,CAAkB,QAAA,KAAA;AACjB,MAAA,IAAIH,aAAaE,KAAO,EAAA;AAGtB,QAAA,OAAA;AAAA,OACF;AACA,MAAA,MAAME,eAAeD,QAASE,CAAAA,MAAAA,GAAS,CAAIF,GAAAA,QAAAA,CAAS,CAAC,CAAI,GAAA,EAAA,CAAA;AACzD,MAAA,MAAMG,UAAaC,GAAAA,aAAAA,CAAcb,IAAKQ,CAAAA,KAAAA,EAAOE,YAAY,CAAA,CAAA;AACzDT,MAAcO,aAAAA,CAAAA,KAAAA,GAAQI,cAAc,EAAE,CAAA;AAAA,KAExC,EAAA;AAAA,MACEE,IAAM,EAAA,IAAA;AAAA,KAEV,CAAA,CAAA;AAEA,IAASD,SAAAA,aAAAA,CAAcE,OAAYC,GAAU,EAAA;AAC3C,MAAA,KAAA,IAASC,CAAI,GAAA,CAAA,EAAGA,CAAIF,GAAAA,KAAAA,CAAMJ,QAAQM,CAAK,EAAA,EAAA;AACrC,QAAIF,IAAAA,KAAAA,CAAME,CAAC,CAAA,CAAED,GAAQA,KAAAA,GAAAA,IAAOA,GAAIE,CAAAA,UAAAA,CAAWH,KAAME,CAAAA,CAAC,CAAED,CAAAA,GAAG,CAAG,EAAA;AAExD,UAAA,OAAO,CAACD,KAAAA,CAAME,CAAC,CAAA,CAAED,GAAG,CAAA,CAAA;AAAA,SACtB,MAAA,IAAWD,KAAME,CAAAA,CAAC,CAAEE,CAAAA,QAAAA,IAAYJ,MAAME,CAAC,CAAA,CAAEE,QAASR,CAAAA,MAAAA,GAAS,CAAG,EAAA;AAE5D,UAAA,MAAMC,aAAkBC,aAAcE,CAAAA,KAAAA,CAAME,CAAC,CAAA,CAAEE,UAAUH,GAAG,CAAA,CAAA;AAC5D,UAAA,IAAIJ,UAAY,EAAA;AAEd,YAAA,OAAO,CAACG,KAAME,CAAAA,CAAC,CAAED,CAAAA,GAAAA,EAAK,GAAGJ,UAAU,CAAA,CAAA;AAAA,WACrC;AAAA,SACF;AAAA,OACF;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAQA,IAAA,MAAMQ,UAAUA,CAAC;AAAA,MAAEC,GAAAA;AAAAA,MAAKC,OAAAA;AAAAA,KAAmB,KAAA;;AACzCrB,MAAAA,aAAAA,CAAcO,KAAQc,GAAAA,OAAAA,CAAAA;AACtBpB,MAAiBM,gBAAAA,CAAAA,KAAAA,GAAQ,CAACa,GAAG,CAAA,CAAA;AAC7B,MAAME,MAAAA,SAAAA,GAAYjC,MACfkC,CAAAA,SAAAA,EACAC,CAAAA,IAAAA,CAAMC,UAASA,IAAKC,CAAAA,IAAAA,KAASN,GAAOK,IAAAA,IAAAA,CAAKE,UAAU,CAAA,CAAA;AAGtD,MAAA,IAAA,CAAA,CAAIL,EAAWM,GAAAA,SAAAA,IAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAAA,CAAAA,IAAAA,KAAXN,IAAiBO,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,IAAAA,MAAS,QAAU,EAAA;AACtCC,QAAAA,MAAAA,CAAOD,IAAKC,CAAAA,MAAAA,CAAOC,QAASC,CAAAA,MAAAA,GAASZ,KAAK,QAAQ,CAAA,CAAA;AAAA,OAC7C,MAAA;AACL7B,QAAAA,KAAAA,CAAMmC,IAASN,KAAAA,GAAAA,GACX/B,MAAO4C,CAAAA,IAAAA,CAAKb,GAAG,CAAEc,CAAAA,IAAAA,CAAMC,CAAOA,CAAAA,KAAAA,CAAAA,GAAIC,OAAQC,CAAAA,IAAAA,CAAKF,CAAC,CAAA,GAAI,IAAK,CACzD,GAAA,IAAA,CAAA;AAAA,OACN;AAAA,KACF,CAAA;AAGA,IAAA,MAAMG,aAAcC,CAAc,IAAA,KAAA;AAChC,MAAA,OAAAC,gBAAAC,YAAAD,EAAAA,IAAAA,EAAAA,CAAAA,eAAAE,CAAAA,oBAAAA,CAAA,aAAA,CAAA,EAAA;AAAA,QAAA,OAEsBH,IAAKxB,CAAAA,GAAAA;AAAAA,OAAG,EAAA;AAAA,QAEtB4B,IAAAA,EAAMA,MAAMC,UAAAA,CAAWL,IAAI,CAAA;AAAA,QAC3BM,OAAAA,EAASA,MAAMN,IAAKO,CAAAA,KAAAA;AAAAA,OAAK,CAAA,CAAA,CAAA,CAAA;AAAA,KAKnC,CAAA;AAEA,IAAA,MAAMC,SAAY,GAAA,CAAC,SAAW,EAAA,cAAA,EAAgB,oBAAoB,CAAA,CAAA;AAElE,IAAA,MAAMH,aAAcL,CAAc,IAAA,KAAA;AAChC,MAAAC,OAAAA,eAAAA,CAAAC,cAEK,IAAA,EAAA,CAAA,CAACF,IAAKI,CAAAA,IAAAA,GAAIK,kBAAAR,CAAAA,eAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAC+BO,EAAAA,SAAAA;AAAAA,OAAS,EAC9CR,CAAAA,IAAKO,CAAAA,KAAAA,CAAMG,UAAU,CAAG,EAAA,CAAC,CAAC,CAAA,CAAA,EAAA,CAAA,CAAAC,SADhB7C,EAAAA,YAAAA,CAAaE,KAAK,CAAA,CAAA,IAI/B4C,gBAAiBZ,CAAAA,IAAAA,CAAKI,IAAI,CAC3B,CAAA,CAAA,CAAA;AAAA,KAGP,CAAA;AAEA,IAAA,MAAMQ,mBAAoBR,CAAc,IAAA,KAAA;AACtC,MAAA,IAAIlD,kBAAkB,YAAc,EAAA;AAClC,QAAA,OAAA+C,gBAAA,MAAA,EAAA;AAAA,UAAA,WAAqBG,EAAAA,IAAAA;AAAAA,WAAI,IAAA,CAAA,CAAA;AAAA,OACpB,MAAA;AACL,QAAOS,OAAAA,KAAAA,CAAEC,oBAAiB5D,CAAAA,aAAa,CAAG,EAAA;AAAA,UACxC,CAAE,CAAA,EAAEE,QAAS,CAAA,CAAC,GAAGgD,IAAAA;AAAAA,SAClB,CAAA,CAAA;AAAA,OACH;AAAA,KACF,CAAA;AAGA,IAAA,MAAMW,YAAaf,CAAc,IAAA,KAAA;AAC/B,MAAA,OAAAC,gBAAAC,YAAAD,EAAAA,IAAAA,EAAAA,CAAAA,eAAAE,CAAAA,oBAAAA,CAAA,YAAA,CAAA,EAAA;AAAA,QAAA,OAEqBH,IAAKxB,CAAAA,GAAAA;AAAAA,OAAG,EAAA;AAAA,QAErB+B,KAAAA,EAAOA,MAAMP,IAAKO,CAAAA,KAAAA;AAAAA,QAClBH,IAAAA,EAAMA,MAAMC,UAAAA,CAAWL,IAAI,CAAA;AAAA,QAC3BM,SAASA,MAAM;AACb,UAAA,OAAON,KAAKrB,QAASqC,CAAAA,GAAAA;AAAAA,YAClB9B,CACC,IAAA,KAAA,CAACA,IAAKP,CAAAA,QAAAA,IAAYO,IAAKP,CAAAA,QAAAA,CAASR,MAAW,KAAA,CAAA,GACvC8C,aAAc/B,CAAAA,IAAI,CAClB6B,GAAAA,SAAAA,CAAU7B,IAAI,CAAA;AAAA;AAAA,WACtB,CAAA;AAAA,SACF;AAAA,OAAC,CAAA,CAAA,CAAA,CAAA;AAAA,KAKX,CAAA;AAGA,IAAA,MAAM+B,gBAAiBjB,CAAc,IAAA,KAAA;AACnC,MAAA,OAAAC,gBAAAC,YAAAD,EAAAA,IAAAA,EAAAA,CAAAA,eAAAE,CAAAA,oBAAAA,CAAA,aAAA,CAAA,EAAA;AAAA,QAAA,OAEsBH,IAAKxB,CAAAA,GAAAA;AAAAA,OAAG,EAAA;AAAA,QAEtB8B,OAAAA,EAASA,MAAMN,IAAKO,CAAAA,KAAAA;AAAAA,OAAK,CAAA,CAAA,CAAA,CAAA;AAAA,KAKnC,CAAA;AAEA,IAAA,OAAO,MAAA;AAAA,MAAAW,IAAAA,KAAAA,CAAAA;AAAA,MAAA,OAAAjB,gBAAAC,YAAAD,EAAAA,IAAAA,EAAAA,CAAAA,eAAAE,CAAAA,oBAAAA,CAAA,QAAA,CAAA,EAAA;AAAA,QAAA,MAAA,EAAA,QAAA;AAAA,QAAA,OAAA,EAAA,MAAA;AAAA,QAAA,YAKiB1C,aAAcO,CAAAA,KAAAA;AAAAA,QAAK,mBAAA,EAAAmD,CAAnB1D,MAAAA,KAAAA,aAAAA,CAAcO,KAAKmD,GAAAA,MAAAA;AAAAA,QAAA,gBACfzD,gBAAiBM,CAAAA,KAAAA;AAAAA,QAAK,uBAAA,EAAAmD,CAAtBzD,MAAAA,KAAAA,gBAAAA,CAAiBM,KAAKmD,GAAAA,MAAAA;AAAAA,QAAA,SACnCvC,EAAAA,OAAAA;AAAAA,SAAOxC,OAAA8E,CAAAA,KAAAA,GAEf1D,IAAKQ,CAAAA,KAAAA,CAAMgD,IAAKhB,CAAc,IAAA,KAAA;;AAC7B,QAAA,IAAI,CAACA,IAAKrB,CAAAA,QAAAA,IAAAA,CAAAA,CAAYqB,UAAKrB,QAALqB,KAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAe7B,YAAW,CAAG,EAAA;AAEjD,UAAA,OAAO4B,WAAWC,IAAI,CAAA,CAAA;AAAA,SACjB,MAAA;AACL,UAAA,OAAOe,UAAUf,IAAI,CAAA,CAAA;AAAA,SACvB;AAAA,OACD,CAAC,CAAA,GAAAkB,KAAA,GAAA;AAAA,QAAAZ,OAAAA,EAAAA,MAAA,CAAAY,KAAA,CAAA;AAAA,OAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAIV;AACF,CAAC,CAAA;;;;"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
declare const _default: import("vue").DefineComponent<{}, () => JSX.Element, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{}>>, {}, {}>;
|
|
2
|
+
export default _default;
|
package/dist/cjs/menu/Menu.cjs
CHANGED
|
@@ -6,7 +6,28 @@ var vue = require('vue');
|
|
|
6
6
|
var vueRouter = require('vue-router');
|
|
7
7
|
var pinia = require('pinia');
|
|
8
8
|
var store = require('@ditari/store');
|
|
9
|
+
var useMenuCore = require('./useMenuCore.cjs');
|
|
9
10
|
|
|
11
|
+
var __async = (__this, __arguments, generator) => {
|
|
12
|
+
return new Promise((resolve, reject) => {
|
|
13
|
+
var fulfilled = (value) => {
|
|
14
|
+
try {
|
|
15
|
+
step(generator.next(value));
|
|
16
|
+
} catch (e) {
|
|
17
|
+
reject(e);
|
|
18
|
+
}
|
|
19
|
+
};
|
|
20
|
+
var rejected = (value) => {
|
|
21
|
+
try {
|
|
22
|
+
step(generator.throw(value));
|
|
23
|
+
} catch (e) {
|
|
24
|
+
reject(e);
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
28
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
29
|
+
});
|
|
30
|
+
};
|
|
10
31
|
function _isSlot(s) {
|
|
11
32
|
return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s);
|
|
12
33
|
}
|
|
@@ -19,6 +40,10 @@ var Menu = /* @__PURE__ */ vue.defineComponent({
|
|
|
19
40
|
componentName,
|
|
20
41
|
prop: menuProp
|
|
21
42
|
} = vue.inject("menuIcon");
|
|
43
|
+
const {
|
|
44
|
+
findMatchedMenuById,
|
|
45
|
+
findMenuItemByUrl
|
|
46
|
+
} = useMenuCore.default();
|
|
22
47
|
const menuStore = store.useMenuStore();
|
|
23
48
|
const {
|
|
24
49
|
list,
|
|
@@ -29,46 +54,95 @@ var Menu = /* @__PURE__ */ vue.defineComponent({
|
|
|
29
54
|
const {
|
|
30
55
|
getCollapsed
|
|
31
56
|
} = pinia.storeToRefs(settingsStore);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
57
|
+
useMenu();
|
|
58
|
+
function useMenu() {
|
|
59
|
+
vue.watch(() => route.fullPath, (path) => __async(this, null, function* () {
|
|
60
|
+
const flag = selectedMenuKeys.value.some((item) => item === path);
|
|
61
|
+
if (!flag) {
|
|
62
|
+
let menuItem = findMenuItemByUrl(path, list.value);
|
|
63
|
+
if (!menuItem) {
|
|
64
|
+
menuItem = findClosestParentMenu(path, list.value);
|
|
65
|
+
}
|
|
66
|
+
if (!menuItem) {
|
|
67
|
+
openMenusKeys.value = [];
|
|
68
|
+
selectedMenuKeys.value = [path];
|
|
69
|
+
} else {
|
|
70
|
+
const rs = getFullParentChain(menuItem.id, list.value);
|
|
71
|
+
if (!getCollapsed.value) {
|
|
72
|
+
openMenusKeys.value = rs;
|
|
73
|
+
}
|
|
74
|
+
selectedMenuKeys.value = [menuItem.key];
|
|
50
75
|
}
|
|
51
76
|
}
|
|
52
|
-
}
|
|
53
|
-
|
|
77
|
+
}));
|
|
78
|
+
vue.watch(() => getCollapsed.value, (val) => {
|
|
79
|
+
const id = selectedMenuKeys.value[0];
|
|
80
|
+
const rs = findMatchedMenuById(id, list.value);
|
|
81
|
+
if (val) {
|
|
82
|
+
openMenusKeys.value = [];
|
|
83
|
+
} else {
|
|
84
|
+
if (rs == null ? void 0 : rs.parentItem) {
|
|
85
|
+
openMenusKeys.value = [rs.parentItem.key];
|
|
86
|
+
} else {
|
|
87
|
+
openMenusKeys.value = [rs.matchItem.key];
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
const findClosestParentMenu = (url, menus) => {
|
|
92
|
+
const cleanUrl = url.split("?")[0].split("#")[0];
|
|
93
|
+
const pathSegments = cleanUrl.split("/").filter(Boolean);
|
|
94
|
+
for (let i = pathSegments.length; i > 0; i--) {
|
|
95
|
+
const testPath = "/" + pathSegments.slice(0, i).join("/");
|
|
96
|
+
const foundItem = findMenuItemByUrl(testPath, menus);
|
|
97
|
+
if (foundItem)
|
|
98
|
+
return foundItem;
|
|
99
|
+
}
|
|
100
|
+
return null;
|
|
101
|
+
};
|
|
102
|
+
const getFullParentChain = (targetId, menus, parentChain = []) => {
|
|
103
|
+
var _a;
|
|
104
|
+
for (const menu of menus) {
|
|
105
|
+
if (menu.id === targetId) {
|
|
106
|
+
return [...parentChain, menu.key];
|
|
107
|
+
}
|
|
108
|
+
if ((_a = menu.children) == null ? void 0 : _a.length) {
|
|
109
|
+
const result = getFullParentChain(
|
|
110
|
+
targetId,
|
|
111
|
+
menu.children,
|
|
112
|
+
[...parentChain, menu.key]
|
|
113
|
+
// 传递当前层级的 key
|
|
114
|
+
);
|
|
115
|
+
if (result)
|
|
116
|
+
return result;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
return null;
|
|
120
|
+
};
|
|
54
121
|
}
|
|
55
122
|
const onClick = ({
|
|
56
123
|
key,
|
|
57
124
|
keyPath
|
|
58
125
|
}) => {
|
|
59
|
-
var _a;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const findRoute = router.getRoutes().find((item) => item.path === key && item.components);
|
|
126
|
+
var _a, _b, _c, _d;
|
|
127
|
+
const rs = findMatchedMenuById(key, list.value);
|
|
128
|
+
const findRoute = router.getRoutes().find((item) => item.path === rs.matchItem.url && item.components);
|
|
63
129
|
if (((_a = findRoute == null ? void 0 : findRoute.meta) == null ? void 0 : _a.open) === "_blank") {
|
|
64
|
-
window.open(window.location.origin +
|
|
130
|
+
window.open(window.location.origin + rs.matchItem.url, "_blank");
|
|
65
131
|
} else {
|
|
66
|
-
|
|
132
|
+
openMenusKeys.value = keyPath;
|
|
133
|
+
selectedMenuKeys.value = [(_b = rs.matchItem) == null ? void 0 : _b.key];
|
|
134
|
+
if (((_c = rs.matchItem) == null ? void 0 : _c.url) !== route.path) {
|
|
135
|
+
router.push((_d = rs.matchItem) == null ? void 0 : _d.url).then((r) => {
|
|
136
|
+
if (r) {
|
|
137
|
+
console.warn(r);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
}
|
|
67
141
|
}
|
|
68
142
|
};
|
|
69
143
|
const renderMenu = (menu) => {
|
|
70
144
|
return vue.createVNode(vue.Fragment, null, [vue.createVNode(vue.resolveComponent("a-menu-item"), {
|
|
71
|
-
"key": menu.
|
|
145
|
+
"key": menu.key
|
|
72
146
|
}, {
|
|
73
147
|
icon: () => renderIcon(menu),
|
|
74
148
|
default: () => menu.title
|
|
@@ -93,7 +167,7 @@ var Menu = /* @__PURE__ */ vue.defineComponent({
|
|
|
93
167
|
};
|
|
94
168
|
const renderSub = (menu) => {
|
|
95
169
|
return vue.createVNode(vue.Fragment, null, [vue.createVNode(vue.resolveComponent("a-sub-menu"), {
|
|
96
|
-
"key": menu.
|
|
170
|
+
"key": menu.key
|
|
97
171
|
}, {
|
|
98
172
|
title: () => menu.title,
|
|
99
173
|
icon: () => renderIcon(menu),
|
|
@@ -107,7 +181,7 @@ var Menu = /* @__PURE__ */ vue.defineComponent({
|
|
|
107
181
|
};
|
|
108
182
|
const renderSubMenu = (menu) => {
|
|
109
183
|
return vue.createVNode(vue.Fragment, null, [vue.createVNode(vue.resolveComponent("a-menu-item"), {
|
|
110
|
-
"key": menu.
|
|
184
|
+
"key": menu.key
|
|
111
185
|
}, {
|
|
112
186
|
default: () => menu.title
|
|
113
187
|
})]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.cjs","sources":["../../../src/menu/Menu.tsx"],"sourcesContent":["import { defineComponent, h, inject, resolveComponent, watch } from \"vue\";\nimport { useRouter, useRoute } from \"vue-router\";\n\nimport { storeToRefs } from \"pinia\";\n\nimport { useMenuStore, useSettingsStore } from \"@ditari/store\";\n\nexport default defineComponent({\n name: \"DMenu\",\n setup() {\n const router = useRouter();\n const route = useRoute();\n const { componentName, prop: menuProp } = inject(\"menuIcon\") as any;\n // 菜单store\n const menuStore = useMenuStore();\n const { list, openMenusKeys, selectedMenuKeys } = storeToRefs(menuStore);\n // 设置store\n const settingsStore = useSettingsStore();\n const { getCollapsed } = storeToRefs(settingsStore) as any;\n\n // watchEffect(() => {\n // if (getCollapsed.value) {\n // // 如果菜单是收缩的状态,则不匹配激活的菜单\n // // 否则 在切换标签的时候,收缩菜单会自动激活悬浮的动作\n // return;\n // }\n // // 会被触发两次\n // // 当前激活的url\n // const activatedUrl =\n // selectedMenuKeys.value.length > 0 ? selectedMenuKeys.value[0] : \"\";\n // const parentUrls = getParentUrls(list.value, activatedUrl);\n // openMenusKeys.value = parentUrls || [];\n // });\n\n watch(\n () => selectedMenuKeys.value,\n (newValue: any) => {\n if (getCollapsed.value) {\n // 如果菜单是收缩的状态,则不匹配激活的菜单\n // 否则 在切换标签的时候,收缩菜单会自动激活悬浮的动作\n return;\n }\n const activatedUrl = newValue.length > 0 ? newValue[0] : \"\";\n const parentUrls = getParentUrls(list.value, activatedUrl);\n openMenusKeys.value = parentUrls || [];\n },\n {\n deep: true\n }\n );\n\n function getParentUrls(menus: any, url: any) {\n for (let i = 0; i < menus.length; i++) {\n if (menus[i].url === url || url.startsWith(menus[i].url)) {\n // 如果当前菜单项的url与传入的url相等,说明找到了当前菜单项\n return [menus[i].url];\n } else if (menus[i].children && menus[i].children.length > 0) {\n // 如果当前菜单项有子菜单,则递归查找子菜单\n const parentUrls: any = getParentUrls(menus[i].children, url);\n if (parentUrls) {\n // 如果子菜单中存在当前url,则将当前菜单项的url添加到返回结果中\n return [menus[i].url, ...parentUrls];\n }\n }\n }\n return null;\n }\n\n /**\n * 监听菜单点击事件\n * @param item\n * @param key\n * @param keyPath\n */\n const onClick = ({ key, keyPath }: any) => {\n openMenusKeys.value = keyPath;\n selectedMenuKeys.value = [key];\n const findRoute = router\n .getRoutes()\n .find((item) => item.path === key && item.components);\n // 判断目标路由和当前路由是否相等\n // 不相等的时候再跳转\n if (findRoute?.meta?.open === \"_blank\") {\n window.open(window.location.origin + key, \"_blank\");\n } else {\n route.path !== key\n ? router.push(key).then((r) => (r ? console.warn(r) : null))\n : null;\n }\n };\n\n // 渲染菜单\n const renderMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.url}>\n {{\n icon: () => renderIcon(menu),\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n const iconClass = [\"anticon\", \"anticon-menu\", \"ant-menu-item-icon\"];\n // 渲染图标\n const renderIcon = (menu: any) => {\n return (\n <>\n {!menu.icon ? (\n <div v-show={getCollapsed.value} class={iconClass}>\n {menu.title.substring(0, 1)}\n </div>\n ) : (\n renderIconSwitch(menu.icon)\n )}\n </>\n );\n };\n\n const renderIconSwitch = (icon: any) => {\n if (componentName === \"nativeHtml\") {\n return <span v-html={icon}></span>;\n } else {\n return h(resolveComponent(componentName), {\n [`${menuProp}`]: icon\n });\n }\n };\n\n // 递归渲染子菜单\n const renderSub = (menu: any) => {\n return (\n <>\n <a-sub-menu key={menu.url}>\n {{\n title: () => menu.title,\n icon: () => renderIcon(menu),\n default: () => {\n return menu.children.map(\n (item: any) =>\n !item.children || item.children.length === 0\n ? renderSubMenu(item)\n : renderSub(item) // 递归调用\n );\n }\n }}\n </a-sub-menu>\n </>\n );\n };\n\n // 递归下的子菜单\n const renderSubMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.url}>\n {{\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n return () => (\n <>\n <a-menu\n mode=\"inline\"\n theme=\"dark\"\n v-model:openKeys={openMenusKeys.value}\n v-model:selectedKeys={selectedMenuKeys.value}\n onClick={onClick}\n >\n {list.value.map((menu: any) => {\n if (!menu.children || menu.children?.length === 0) {\n // 没有children属性或者children的长度等于0\n return renderMenu(menu);\n } else {\n return renderSub(menu);\n }\n })}\n </a-menu>\n </>\n );\n }\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","setup","router","useRouter","route","useRoute","componentName","prop","menuProp","inject","menuStore","useMenuStore","list","openMenusKeys","selectedMenuKeys","storeToRefs","settingsStore","useSettingsStore","getCollapsed","watch","value","newValue","activatedUrl","length","parentUrls","getParentUrls","deep","menus","url","i","startsWith","children","onClick","key","keyPath","findRoute","getRoutes","find","item","path","components","meta","open","window","location","origin","push","then","r","console","warn","renderMenu","menu","_createVNode","_Fragment","_resolveComponent","icon","renderIcon","default","title","iconClass","_withDirectives","substring","_vShow","renderIconSwitch","h","resolveComponent","renderSub","map","renderSubMenu","_slot","$event"],"mappings":";;;;;;;;;AAK+D,SAAAA,QAAAC,CAAA,EAAA;AAAA,EAAA,OAAA,OAAAA,CAAAA,KAAA,UAAAC,IAAAA,MAAAA,CAAAC,SAAAC,CAAAA,QAAAA,CAAAC,IAAAJ,CAAAA,CAAA,CAAAK,KAAAA,iBAAAA,IAAAA,CAAAA,WAAAA,CAAAL,CAAA,CAAA,CAAA;AAAA,CAAA;AAE/D,2BAA+BM,mBAAA,CAAA;AAAA,EAC7BC,IAAM,EAAA,OAAA;AAAA,EACNC,KAAQ,GAAA;AACN,IAAA,MAAMC,SAASC,mBAAU,EAAA,CAAA;AACzB,IAAA,MAAMC,QAAQC,kBAAS,EAAA,CAAA;AACvB,IAAM,MAAA;AAAA,MAAEC,aAAAA;AAAAA,MAAeC,IAAMC,EAAAA,QAAAA;AAAAA,KAAS,GAAIC,WAAO,UAAU,CAAA,CAAA;AAE3D,IAAA,MAAMC,YAAYC,kBAAa,EAAA,CAAA;AAC/B,IAAM,MAAA;AAAA,MAAEC,IAAAA;AAAAA,MAAMC,aAAAA;AAAAA,MAAeC,gBAAAA;AAAAA,KAAiB,GAAIC,kBAAYL,SAAS,CAAA,CAAA;AAEvE,IAAA,MAAMM,gBAAgBC,sBAAiB,EAAA,CAAA;AACvC,IAAM,MAAA;AAAA,MAAEC,YAAAA;AAAAA,KAAa,GAAIH,kBAAYC,aAAa,CAAA,CAAA;AAgBlDG,IACEA,SAAA,CAAA,MAAML,gBAAiBM,CAAAA,KAAAA,EACtBC,CAAkB,QAAA,KAAA;AACjB,MAAA,IAAIH,aAAaE,KAAO,EAAA;AAGtB,QAAA,OAAA;AAAA,OACF;AACA,MAAA,MAAME,eAAeD,QAASE,CAAAA,MAAAA,GAAS,CAAIF,GAAAA,QAAAA,CAAS,CAAC,CAAI,GAAA,EAAA,CAAA;AACzD,MAAA,MAAMG,UAAaC,GAAAA,aAAAA,CAAcb,IAAKQ,CAAAA,KAAAA,EAAOE,YAAY,CAAA,CAAA;AACzDT,MAAcO,aAAAA,CAAAA,KAAAA,GAAQI,cAAc,EAAE,CAAA;AAAA,KAExC,EAAA;AAAA,MACEE,IAAM,EAAA,IAAA;AAAA,KAEV,CAAA,CAAA;AAEA,IAASD,SAAAA,aAAAA,CAAcE,OAAYC,GAAU,EAAA;AAC3C,MAAA,KAAA,IAASC,CAAI,GAAA,CAAA,EAAGA,CAAIF,GAAAA,KAAAA,CAAMJ,QAAQM,CAAK,EAAA,EAAA;AACrC,QAAIF,IAAAA,KAAAA,CAAME,CAAC,CAAA,CAAED,GAAQA,KAAAA,GAAAA,IAAOA,GAAIE,CAAAA,UAAAA,CAAWH,KAAME,CAAAA,CAAC,CAAED,CAAAA,GAAG,CAAG,EAAA;AAExD,UAAA,OAAO,CAACD,KAAAA,CAAME,CAAC,CAAA,CAAED,GAAG,CAAA,CAAA;AAAA,SACtB,MAAA,IAAWD,KAAME,CAAAA,CAAC,CAAEE,CAAAA,QAAAA,IAAYJ,MAAME,CAAC,CAAA,CAAEE,QAASR,CAAAA,MAAAA,GAAS,CAAG,EAAA;AAE5D,UAAA,MAAMC,aAAkBC,aAAcE,CAAAA,KAAAA,CAAME,CAAC,CAAA,CAAEE,UAAUH,GAAG,CAAA,CAAA;AAC5D,UAAA,IAAIJ,UAAY,EAAA;AAEd,YAAA,OAAO,CAACG,KAAME,CAAAA,CAAC,CAAED,CAAAA,GAAAA,EAAK,GAAGJ,UAAU,CAAA,CAAA;AAAA,WACrC;AAAA,SACF;AAAA,OACF;AACA,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAQA,IAAA,MAAMQ,UAAUA,CAAC;AAAA,MAAEC,GAAAA;AAAAA,MAAKC,OAAAA;AAAAA,KAAmB,KAAA;;AACzCrB,MAAAA,aAAAA,CAAcO,KAAQc,GAAAA,OAAAA,CAAAA;AACtBpB,MAAiBM,gBAAAA,CAAAA,KAAAA,GAAQ,CAACa,GAAG,CAAA,CAAA;AAC7B,MAAME,MAAAA,SAAAA,GAAYjC,MACfkC,CAAAA,SAAAA,EACAC,CAAAA,IAAAA,CAAMC,UAASA,IAAKC,CAAAA,IAAAA,KAASN,GAAOK,IAAAA,IAAAA,CAAKE,UAAU,CAAA,CAAA;AAGtD,MAAA,IAAA,CAAA,CAAIL,EAAWM,GAAAA,SAAAA,IAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,SAAAA,CAAAA,IAAAA,KAAXN,IAAiBO,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,IAAAA,MAAS,QAAU,EAAA;AACtCC,QAAAA,MAAAA,CAAOD,IAAKC,CAAAA,MAAAA,CAAOC,QAASC,CAAAA,MAAAA,GAASZ,KAAK,QAAQ,CAAA,CAAA;AAAA,OAC7C,MAAA;AACL7B,QAAAA,KAAAA,CAAMmC,IAASN,KAAAA,GAAAA,GACX/B,MAAO4C,CAAAA,IAAAA,CAAKb,GAAG,CAAEc,CAAAA,IAAAA,CAAMC,CAAOA,CAAAA,KAAAA,CAAAA,GAAIC,OAAQC,CAAAA,IAAAA,CAAKF,CAAC,CAAA,GAAI,IAAK,CACzD,GAAA,IAAA,CAAA;AAAA,OACN;AAAA,KACF,CAAA;AAGA,IAAA,MAAMG,aAAcC,CAAc,IAAA,KAAA;AAChC,MAAA,OAAAC,gBAAAC,YAAAD,EAAAA,IAAAA,EAAAA,CAAAA,eAAAE,CAAAA,oBAAAA,CAAA,aAAA,CAAA,EAAA;AAAA,QAAA,OAEsBH,IAAKxB,CAAAA,GAAAA;AAAAA,OAAG,EAAA;AAAA,QAEtB4B,IAAAA,EAAMA,MAAMC,UAAAA,CAAWL,IAAI,CAAA;AAAA,QAC3BM,OAAAA,EAASA,MAAMN,IAAKO,CAAAA,KAAAA;AAAAA,OAAK,CAAA,CAAA,CAAA,CAAA;AAAA,KAKnC,CAAA;AAEA,IAAA,MAAMC,SAAY,GAAA,CAAC,SAAW,EAAA,cAAA,EAAgB,oBAAoB,CAAA,CAAA;AAElE,IAAA,MAAMH,aAAcL,CAAc,IAAA,KAAA;AAChC,MAAAC,OAAAA,eAAAA,CAAAC,cAEK,IAAA,EAAA,CAAA,CAACF,IAAKI,CAAAA,IAAAA,GAAIK,kBAAAR,CAAAA,eAAAA,CAAA,KAAA,EAAA;AAAA,QAAA,OAC+BO,EAAAA,SAAAA;AAAAA,OAAS,EAC9CR,CAAAA,IAAKO,CAAAA,KAAAA,CAAMG,UAAU,CAAG,EAAA,CAAC,CAAC,CAAA,CAAA,EAAA,CAAA,CAAAC,SADhB7C,EAAAA,YAAAA,CAAaE,KAAK,CAAA,CAAA,IAI/B4C,gBAAiBZ,CAAAA,IAAAA,CAAKI,IAAI,CAC3B,CAAA,CAAA,CAAA;AAAA,KAGP,CAAA;AAEA,IAAA,MAAMQ,mBAAoBR,CAAc,IAAA,KAAA;AACtC,MAAA,IAAIlD,kBAAkB,YAAc,EAAA;AAClC,QAAA,OAAA+C,gBAAA,MAAA,EAAA;AAAA,UAAA,WAAqBG,EAAAA,IAAAA;AAAAA,WAAI,IAAA,CAAA,CAAA;AAAA,OACpB,MAAA;AACL,QAAOS,OAAAA,KAAAA,CAAEC,oBAAiB5D,CAAAA,aAAa,CAAG,EAAA;AAAA,UACxC,CAAE,CAAA,EAAEE,QAAS,CAAA,CAAC,GAAGgD,IAAAA;AAAAA,SAClB,CAAA,CAAA;AAAA,OACH;AAAA,KACF,CAAA;AAGA,IAAA,MAAMW,YAAaf,CAAc,IAAA,KAAA;AAC/B,MAAA,OAAAC,gBAAAC,YAAAD,EAAAA,IAAAA,EAAAA,CAAAA,eAAAE,CAAAA,oBAAAA,CAAA,YAAA,CAAA,EAAA;AAAA,QAAA,OAEqBH,IAAKxB,CAAAA,GAAAA;AAAAA,OAAG,EAAA;AAAA,QAErB+B,KAAAA,EAAOA,MAAMP,IAAKO,CAAAA,KAAAA;AAAAA,QAClBH,IAAAA,EAAMA,MAAMC,UAAAA,CAAWL,IAAI,CAAA;AAAA,QAC3BM,SAASA,MAAM;AACb,UAAA,OAAON,KAAKrB,QAASqC,CAAAA,GAAAA;AAAAA,YAClB9B,CACC,IAAA,KAAA,CAACA,IAAKP,CAAAA,QAAAA,IAAYO,IAAKP,CAAAA,QAAAA,CAASR,MAAW,KAAA,CAAA,GACvC8C,aAAc/B,CAAAA,IAAI,CAClB6B,GAAAA,SAAAA,CAAU7B,IAAI,CAAA;AAAA;AAAA,WACtB,CAAA;AAAA,SACF;AAAA,OAAC,CAAA,CAAA,CAAA,CAAA;AAAA,KAKX,CAAA;AAGA,IAAA,MAAM+B,gBAAiBjB,CAAc,IAAA,KAAA;AACnC,MAAA,OAAAC,gBAAAC,YAAAD,EAAAA,IAAAA,EAAAA,CAAAA,eAAAE,CAAAA,oBAAAA,CAAA,aAAA,CAAA,EAAA;AAAA,QAAA,OAEsBH,IAAKxB,CAAAA,GAAAA;AAAAA,OAAG,EAAA;AAAA,QAEtB8B,OAAAA,EAASA,MAAMN,IAAKO,CAAAA,KAAAA;AAAAA,OAAK,CAAA,CAAA,CAAA,CAAA;AAAA,KAKnC,CAAA;AAEA,IAAA,OAAO,MAAA;AAAA,MAAAW,IAAAA,KAAAA,CAAAA;AAAA,MAAA,OAAAjB,gBAAAC,YAAAD,EAAAA,IAAAA,EAAAA,CAAAA,eAAAE,CAAAA,oBAAAA,CAAA,QAAA,CAAA,EAAA;AAAA,QAAA,MAAA,EAAA,QAAA;AAAA,QAAA,OAAA,EAAA,MAAA;AAAA,QAAA,YAKiB1C,aAAcO,CAAAA,KAAAA;AAAAA,QAAK,mBAAA,EAAAmD,CAAnB1D,MAAAA,KAAAA,aAAAA,CAAcO,KAAKmD,GAAAA,MAAAA;AAAAA,QAAA,gBACfzD,gBAAiBM,CAAAA,KAAAA;AAAAA,QAAK,uBAAA,EAAAmD,CAAtBzD,MAAAA,KAAAA,gBAAAA,CAAiBM,KAAKmD,GAAAA,MAAAA;AAAAA,QAAA,SACnCvC,EAAAA,OAAAA;AAAAA,SAAOxC,OAAA8E,CAAAA,KAAAA,GAEf1D,IAAKQ,CAAAA,KAAAA,CAAMgD,IAAKhB,CAAc,IAAA,KAAA;;AAC7B,QAAA,IAAI,CAACA,IAAKrB,CAAAA,QAAAA,IAAAA,CAAAA,CAAYqB,UAAKrB,QAALqB,KAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAe7B,YAAW,CAAG,EAAA;AAEjD,UAAA,OAAO4B,WAAWC,IAAI,CAAA,CAAA;AAAA,SACjB,MAAA;AACL,UAAA,OAAOe,UAAUf,IAAI,CAAA,CAAA;AAAA,SACvB;AAAA,OACD,CAAC,CAAA,GAAAkB,KAAA,GAAA;AAAA,QAAAZ,OAAAA,EAAAA,MAAA,CAAAY,KAAA,CAAA;AAAA,OAAA,CAAA,CAAA,CAAA,CAAA;AAAA,KAAA,CAAA;AAAA,GAIV;AACF,CAAC,CAAA;;;;"}
|
|
1
|
+
{"version":3,"file":"Menu.cjs","sources":["../../../src/menu/Menu.tsx"],"sourcesContent":["import { defineComponent, h, inject, resolveComponent, watch } from \"vue\";\nimport { useRouter, useRoute } from \"vue-router\";\n\nimport { storeToRefs } from \"pinia\";\n\nimport { useMenuStore, useSettingsStore } from \"@ditari/store\";\nimport useMenuCore from \"./useMenuCore\";\n\nexport default defineComponent({\n name: \"DMenu\",\n setup() {\n const router = useRouter();\n const route = useRoute();\n const { componentName, prop: menuProp } = inject(\"menuIcon\") as any;\n const { findMatchedMenuById, findMenuItemByUrl } = useMenuCore();\n\n // 菜单store\n const menuStore = useMenuStore();\n const { list, openMenusKeys, selectedMenuKeys } = storeToRefs(menuStore);\n // 设置store\n const settingsStore = useSettingsStore();\n const { getCollapsed } = storeToRefs(settingsStore) as any;\n useMenu();\n function useMenu() {\n /**\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\n */\n watch(\n () => route.fullPath,\n async (path) => {\n const flag = selectedMenuKeys.value.some(\n (item: string) => item === path\n );\n if (!flag) {\n let menuItem = findMenuItemByUrl(path, list.value);\n\n // 如果没有精确匹配,尝试匹配父级路径\n if (!menuItem) {\n menuItem = findClosestParentMenu(path, list.value);\n }\n if (!menuItem) {\n openMenusKeys.value = [];\n selectedMenuKeys.value = [path];\n } else {\n const rs = getFullParentChain(menuItem.id, list.value as never);\n if (!getCollapsed.value) {\n openMenusKeys.value = rs!;\n }\n selectedMenuKeys.value = [menuItem.key];\n }\n }\n }\n );\n\n watch(\n () => getCollapsed.value,\n (val) => {\n const id = selectedMenuKeys.value[0];\n const rs = findMatchedMenuById(id, list.value as never);\n\n if (val) {\n openMenusKeys.value = [];\n } else {\n if (rs?.parentItem) {\n openMenusKeys.value = [rs.parentItem.key];\n } else {\n openMenusKeys.value = [rs!.matchItem.key];\n }\n }\n }\n );\n\n /**\n * 根据URL路径查找最接近的父级菜单\n */\n const findClosestParentMenu = (url: string, menus: any[]): any => {\n // 移除查询参数和哈希\n const cleanUrl = url.split(\"?\")[0].split(\"#\")[0];\n const pathSegments = cleanUrl.split(\"/\").filter(Boolean);\n\n // 从最长路径开始尝试匹配\n for (let i = pathSegments.length; i > 0; i--) {\n const testPath = \"/\" + pathSegments.slice(0, i).join(\"/\");\n const foundItem = findMenuItemByUrl(testPath, menus);\n if (foundItem) return foundItem;\n }\n\n return null;\n };\n\n /**\n * 获取从根到目标菜单项的完整 key 链\n * @param targetId 目标菜单项 id\n * @param menus 菜单数据\n * @param parentChain 递归传递的父级链\n */\n const getFullParentChain = (\n targetId: string,\n menus: any[],\n parentChain: string[] = []\n ): string[] | null => {\n for (const menu of menus) {\n // 找到目标项,返回完整链(包含自身 key)\n if (menu.id === targetId) {\n return [...parentChain, menu.key];\n }\n\n // 递归查找子菜单\n if (menu.children?.length) {\n const result = getFullParentChain(\n targetId,\n menu.children,\n [...parentChain, menu.key] // 传递当前层级的 key\n );\n if (result) return result;\n }\n }\n return null;\n };\n }\n\n /**\n * 监听菜单点击事件\n * @param item\n * @param key\n * @param keyPath\n */\n const onClick = ({ key, keyPath }: any) => {\n const rs = findMatchedMenuById(key, list.value);\n const findRoute = router\n .getRoutes()\n .find((item) => item.path === rs.matchItem.url && item.components);\n\n if (findRoute?.meta?.open === \"_blank\") {\n window.open(window.location.origin + rs.matchItem.url, \"_blank\");\n } else {\n openMenusKeys.value = keyPath;\n selectedMenuKeys.value = [rs.matchItem?.key];\n if (rs.matchItem?.url !== route.path) {\n // 判断目标路由和当前路由是否相等;\n // 不相等的时候再跳转\n router.push(rs.matchItem?.url).then((r) => {\n if (r) {\n console.warn(r);\n }\n });\n }\n }\n };\n\n // 渲染菜单\n const renderMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.key}>\n {{\n icon: () => renderIcon(menu),\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n const iconClass = [\"anticon\", \"anticon-menu\", \"ant-menu-item-icon\"];\n // 渲染图标\n const renderIcon = (menu: any) => {\n return (\n <>\n {!menu.icon ? (\n <div v-show={getCollapsed.value} class={iconClass}>\n {menu.title.substring(0, 1)}\n </div>\n ) : (\n renderIconSwitch(menu.icon)\n )}\n </>\n );\n };\n\n const renderIconSwitch = (icon: any) => {\n if (componentName === \"nativeHtml\") {\n return <span v-html={icon}></span>;\n } else {\n return h(resolveComponent(componentName), {\n [`${menuProp}`]: icon\n });\n }\n };\n\n // 递归渲染子菜单\n const renderSub = (menu: any) => {\n return (\n <>\n <a-sub-menu key={menu.key}>\n {{\n title: () => menu.title,\n icon: () => renderIcon(menu),\n default: () => {\n return menu.children.map(\n (item: any) =>\n !item.children || item.children.length === 0\n ? renderSubMenu(item)\n : renderSub(item) // 递归调用\n );\n }\n }}\n </a-sub-menu>\n </>\n );\n };\n\n // 递归下的子菜单\n const renderSubMenu = (menu: any) => {\n return (\n <>\n <a-menu-item key={menu.key}>\n {{\n default: () => menu.title\n }}\n </a-menu-item>\n </>\n );\n };\n\n return () => (\n <>\n <a-menu\n mode=\"inline\"\n theme=\"dark\"\n v-model:openKeys={openMenusKeys.value}\n v-model:selectedKeys={selectedMenuKeys.value}\n onClick={onClick}\n >\n {list.value.map((menu: any) => {\n if (!menu.children || menu.children?.length === 0) {\n // 没有children属性或者children的长度等于0\n return renderMenu(menu);\n } else {\n return renderSub(menu);\n }\n })}\n </a-menu>\n </>\n );\n }\n});\n"],"names":["_isSlot","s","Object","prototype","toString","call","_isVNode","defineComponent","name","setup","router","useRouter","route","useRoute","componentName","prop","menuProp","inject","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuStore","useMenuStore","list","openMenusKeys","selectedMenuKeys","storeToRefs","settingsStore","useSettingsStore","getCollapsed","useMenu","watch","fullPath","path","flag","value","some","item","menuItem","findClosestParentMenu","rs","getFullParentChain","id","key","val","parentItem","matchItem","url","menus","cleanUrl","split","pathSegments","filter","Boolean","i","length","testPath","slice","join","foundItem","targetId","parentChain","menu","children","result","onClick","keyPath","findRoute","getRoutes","find","components","meta","open","window","location","origin","push","then","r","console","warn","renderMenu","_createVNode","_Fragment","_resolveComponent","icon","renderIcon","default","title","iconClass","_withDirectives","substring","_vShow","renderIconSwitch","h","resolveComponent","renderSub","map","renderSubMenu","_slot","$event"],"mappings":"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"}
|