@ditari/bsui 1.1.49 → 1.1.51

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 CHANGED
@@ -1,5 +1,17 @@
1
1
  # @ditari/bsui
2
2
 
3
+ ## 1.1.51
4
+
5
+ ### Patch Changes
6
+
7
+ - 1. 左侧菜单实现无限极渲染
8
+
9
+ ## 1.1.50
10
+
11
+ ### Patch Changes
12
+
13
+ - 1.修复左侧菜单打开新窗口失败的 bug
14
+
3
15
  ## 1.1.49
4
16
 
5
17
  ### Patch Changes
@@ -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
- menuStore: import("pinia").Store<string, {
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
- menuStore: import("pinia").Store<string, {
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
- menuStore: import("pinia").Store<string, {
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 menuStore = store.useMenuStore();
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.path,
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.value,
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.value === item.path }])
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, watchEffect, ref } 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 useMenuStore\n} from \"@ditari/store\";\n\nimport { prefixName } from \"../theme\";\n\nconst route = useRoute();\nconst router = useRouter();\n\nconst navStore = useNavTabsStore();\nconst keepAliveStore = useKeepAliveStore();\nconst menuStore = useMenuStore();\n\n//class名称\nconst baseClassName = `${prefixName}-nav`;\n\n//标签列表\nconst navTabs: Ref<any[]> = computed(() => navStore.getList);\n// 被选中的菜单\nconst { selectedMenuKeys } = storeToRefs(menuStore);\n//当前被激活的标签 通过选中的菜单得到\nconst activeKey = ref(\"\");\nwatchEffect(() => {\n activeKey.value =\n selectedMenuKeys.value.length > 0 ? selectedMenuKeys.value[0] : \"\";\n});\n//首次进入页面或者刷新的时候执行\nsetNavTabs();\n// 监听路由变化\nwatch(\n () => route.path,\n () => {\n //TODO 需要优化 确保只有未打开过的标签 进入保存\n setNavTabs();\n }\n);\n\n//设置标签\nfunction setNavTabs() {\n // 保存标签\n navStore.save(route);\n // 设置激活的标签\n //navStore.setActiveKey(route.path);\n selectedMenuKeys.value = [route.path];\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","useMenuStore","prefixName","computed","storeToRefs","ref","watchEffect","watch"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAiBA,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,YAAYC,kBAAa,EAAA,CAAA;AAG/B,IAAM,MAAA,aAAA,GAAgB,GAAGC,gBAAU,CAAA,IAAA,CAAA,CAAA;AAGnC,IAAA,MAAM,OAAsB,GAAAC,YAAA,CAAS,MAAM,QAAA,CAAS,OAAO,CAAA,CAAA;AAE3D,IAAA,MAAM,EAAE,gBAAA,EAAqB,GAAAC,iBAAA,CAAY,SAAS,CAAA,CAAA;AAElD,IAAM,MAAA,SAAA,GAAYC,QAAI,EAAE,CAAA,CAAA;AACxB,IAAAC,eAAA,CAAY,MAAM;AAChB,MAAU,SAAA,CAAA,KAAA,GACR,iBAAiB,KAAM,CAAA,MAAA,GAAS,IAAI,gBAAiB,CAAA,KAAA,CAAM,CAAC,CAAI,GAAA,EAAA,CAAA;AAAA,KACnE,CAAA,CAAA;AAED,IAAW,UAAA,EAAA,CAAA;AAEX,IAAAC,SAAA;AAAA,MACE,MAAM,KAAM,CAAA,IAAA;AAAA,MACZ,MAAM;AAEJ,QAAW,UAAA,EAAA,CAAA;AAAA,OACb;AAAA,KACF,CAAA;AAGA,IAAA,SAAS,UAAa,GAAA;AAEpB,MAAA,QAAA,CAAS,KAAK,KAAK,CAAA,CAAA;AAGnB,MAAiB,gBAAA,CAAA,KAAA,GAAQ,CAAC,KAAA,CAAM,IAAI,CAAA,CAAA;AACpC,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
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":"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"}
@@ -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;
@@ -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,45 +54,95 @@ var Menu = /* @__PURE__ */ vue.defineComponent({
29
54
  const {
30
55
  getCollapsed
31
56
  } = 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];
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
- return null;
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
- openMenusKeys.value = keyPath;
61
- selectedMenuKeys.value = [key];
62
- if (((_a = route.meta) == null ? void 0 : _a.open) === "_blank") {
63
- window.open(window.location.origin + route.path, "_blank");
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);
129
+ if (((_a = findRoute == null ? void 0 : findRoute.meta) == null ? void 0 : _a.open) === "_blank") {
130
+ window.open(window.location.origin + rs.matchItem.url, "_blank");
64
131
  } else {
65
- route.path !== key ? router.push(key).then((r) => r ? console.warn(r) : null) : null;
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
+ }
66
141
  }
67
142
  };
68
143
  const renderMenu = (menu) => {
69
144
  return vue.createVNode(vue.Fragment, null, [vue.createVNode(vue.resolveComponent("a-menu-item"), {
70
- "key": menu.url
145
+ "key": menu.key
71
146
  }, {
72
147
  icon: () => renderIcon(menu),
73
148
  default: () => menu.title
@@ -92,7 +167,7 @@ var Menu = /* @__PURE__ */ vue.defineComponent({
92
167
  };
93
168
  const renderSub = (menu) => {
94
169
  return vue.createVNode(vue.Fragment, null, [vue.createVNode(vue.resolveComponent("a-sub-menu"), {
95
- "key": menu.url
170
+ "key": menu.key
96
171
  }, {
97
172
  title: () => menu.title,
98
173
  icon: () => renderIcon(menu),
@@ -106,7 +181,7 @@ var Menu = /* @__PURE__ */ vue.defineComponent({
106
181
  };
107
182
  const renderSubMenu = (menu) => {
108
183
  return vue.createVNode(vue.Fragment, null, [vue.createVNode(vue.resolveComponent("a-menu-item"), {
109
- "key": menu.url
184
+ "key": menu.key
110
185
  }, {
111
186
  default: () => menu.title
112
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 // 判断目标路由和当前路由是否相等\n // 不相等的时候再跳转\n if (route.meta?.open === \"_blank\") {\n window.open(window.location.origin + route.path, \"_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","meta","open","window","location","origin","path","push","then","r","console","warn","renderMenu","menu","_createVNode","_Fragment","_resolveComponent","icon","renderIcon","default","title","iconClass","_withDirectives","substring","_vShow","renderIconSwitch","h","resolveComponent","renderSub","map","item","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;AAG7B,MAAA,IAAA,CAAA,CAAI7B,EAAM+B,GAAAA,KAAAA,CAAAA,IAAAA,KAAN/B,IAAYgC,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAAA,IAAAA,MAAS,QAAU,EAAA;AACjCC,QAAAA,MAAAA,CAAOD,KAAKC,MAAOC,CAAAA,QAAAA,CAASC,MAASnC,GAAAA,KAAAA,CAAMoC,MAAM,QAAQ,CAAA,CAAA;AAAA,OACpD,MAAA;AACLpC,QAAAA,KAAAA,CAAMoC,IAASP,KAAAA,GAAAA,GACX/B,MAAOuC,CAAAA,IAAAA,CAAKR,GAAG,CAAES,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,IAAKnB,CAAAA,GAAAA;AAAAA,OAAG,EAAA;AAAA,QAEtBuB,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,SADhBxC,EAAAA,YAAAA,CAAaE,KAAK,CAAA,CAAA,IAI/BuC,gBAAiBZ,CAAAA,IAAAA,CAAKI,IAAI,CAC3B,CAAA,CAAA,CAAA;AAAA,KAGP,CAAA;AAEA,IAAA,MAAMQ,mBAAoBR,CAAc,IAAA,KAAA;AACtC,MAAA,IAAI7C,kBAAkB,YAAc,EAAA;AAClC,QAAA,OAAA0C,gBAAA,MAAA,EAAA;AAAA,UAAA,WAAqBG,EAAAA,IAAAA;AAAAA,WAAI,IAAA,CAAA,CAAA;AAAA,OACpB,MAAA;AACL,QAAOS,OAAAA,KAAAA,CAAEC,oBAAiBvD,CAAAA,aAAa,CAAG,EAAA;AAAA,UACxC,CAAE,CAAA,EAAEE,QAAS,CAAA,CAAC,GAAG2C,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,IAAKnB,CAAAA,GAAAA;AAAAA,OAAG,EAAA;AAAA,QAErB0B,KAAAA,EAAOA,MAAMP,IAAKO,CAAAA,KAAAA;AAAAA,QAClBH,IAAAA,EAAMA,MAAMC,UAAAA,CAAWL,IAAI,CAAA;AAAA,QAC3BM,SAASA,MAAM;AACb,UAAA,OAAON,KAAKhB,QAASgC,CAAAA,GAAAA;AAAAA,YAClBC,CACC,IAAA,KAAA,CAACA,IAAKjC,CAAAA,QAAAA,IAAYiC,IAAKjC,CAAAA,QAAAA,CAASR,MAAW,KAAA,CAAA,GACvC0C,aAAcD,CAAAA,IAAI,CAClBF,GAAAA,SAAAA,CAAUE,IAAI,CAAA;AAAA;AAAA,WACtB,CAAA;AAAA,SACF;AAAA,OAAC,CAAA,CAAA,CAAA,CAAA;AAAA,KAKX,CAAA;AAGA,IAAA,MAAMC,gBAAiBlB,CAAc,IAAA,KAAA;AACnC,MAAA,OAAAC,gBAAAC,YAAAD,EAAAA,IAAAA,EAAAA,CAAAA,eAAAE,CAAAA,oBAAAA,CAAA,aAAA,CAAA,EAAA;AAAA,QAAA,OAEsBH,IAAKnB,CAAAA,GAAAA;AAAAA,OAAG,EAAA;AAAA,QAEtByB,OAAAA,EAASA,MAAMN,IAAKO,CAAAA,KAAAA;AAAAA,OAAK,CAAA,CAAA,CAAA,CAAA;AAAA,KAKnC,CAAA;AAEA,IAAA,OAAO,MAAA;AAAA,MAAAY,IAAAA,KAAAA,CAAAA;AAAA,MAAA,OAAAlB,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,YAKiBrC,aAAcO,CAAAA,KAAAA;AAAAA,QAAK,mBAAA,EAAA+C,CAAnBtD,MAAAA,KAAAA,aAAAA,CAAcO,KAAK+C,GAAAA,MAAAA;AAAAA,QAAA,gBACfrD,gBAAiBM,CAAAA,KAAAA;AAAAA,QAAK,uBAAA,EAAA+C,CAAtBrD,MAAAA,KAAAA,gBAAAA,CAAiBM,KAAK+C,GAAAA,MAAAA;AAAAA,QAAA,SACnCnC,EAAAA,OAAAA;AAAAA,SAAOxC,OAAA0E,CAAAA,KAAAA,GAEftD,IAAKQ,CAAAA,KAAAA,CAAM2C,IAAKhB,CAAc,IAAA,KAAA;;AAC7B,QAAA,IAAI,CAACA,IAAKhB,CAAAA,QAAAA,IAAAA,CAAAA,CAAYgB,UAAKhB,QAALgB,KAAAA,IAAAA,GAAAA,KAAAA,CAAAA,GAAAA,EAAAA,CAAexB,YAAW,CAAG,EAAA;AAEjD,UAAA,OAAOuB,WAAWC,IAAI,CAAA,CAAA;AAAA,SACjB,MAAA;AACL,UAAA,OAAOe,UAAUf,IAAI,CAAA,CAAA;AAAA,SACvB;AAAA,OACD,CAAC,CAAA,GAAAmB,KAAA,GAAA;AAAA,QAAAb,OAAAA,EAAAA,MAAA,CAAAa,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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"}