@ditari/bsui 5.0.25 → 5.0.26
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/dist/cjs/components/layout/components/menu/Menu.cjs +1 -0
- package/dist/cjs/components/layout/components/menu/Menu.cjs.map +1 -1
- package/dist/esm/components/layout/components/menu/Menu.mjs +1 -0
- package/dist/esm/components/layout/components/menu/Menu.mjs.map +1 -1
- package/dist/types/components/layout/components/menu/Menu.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -91,6 +91,7 @@ var Menu = /* @__PURE__ */ vue.defineComponent({
|
|
|
91
91
|
const menuItem = findMenuItemByUrl(path, data.value);
|
|
92
92
|
if (!menuItem) {
|
|
93
93
|
openKeys2.value = [];
|
|
94
|
+
selectedKeys2.value = [path];
|
|
94
95
|
} else {
|
|
95
96
|
const rs = getFullParentChain(menuItem.id, data.value);
|
|
96
97
|
if (!layout.value.collapsed) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.cjs","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"sourcesContent":["import { computed, defineComponent, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n useAppStore,\r\n useMenuStore,\r\n useNoStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nimport useMenuCore from \"../../../../utils/useMenuCore\";\r\n\r\nexport default defineComponent({\r\n name: \"DMenu\",\r\n emits: [\"onMenuClick\"],\r\n setup(_, { emit }) {\r\n const { layout, modeConfig } =\r\n storeToRefs(useAppStore());\r\n const { findMatchedMenuById, findMenuItemByUrl } =\r\n useMenuCore();\r\n const { menuList } = storeToRefs(useNoStore());\r\n const { menuWrapperStyle } = useStyle();\r\n const { openKeys, selectedKeys, onClick } = useMenu();\r\n\r\n function useStyle() {\r\n const menuWrapperStyle = computed(\r\n () => css`\r\n flex: 1;\r\n overflow: hidden;\r\n\r\n .ant-menu {\r\n height: 100%;\r\n overflow: scroll;\r\n -ms-overflow-style: none; /* 对 IE 和 Edge 生效 */\r\n scrollbar-width: none; /* 对 Firefox 生效 */\r\n\r\n ${modeConfig.value.mode === \"light\"\r\n ? \"background:transparent;\"\r\n : \"\"}\r\n /* Webkit 浏览器 */\r\n ::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n `\r\n );\r\n return {\r\n menuWrapperStyle\r\n };\r\n }\r\n\r\n function useMenu() {\r\n const { openKeys, selectedKeys, data } =\r\n storeToRefs(useMenuStore());\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n /**\r\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\r\n */\r\n watch(\r\n () => route.fullPath,\r\n async path => {\r\n const flag = selectedKeys.value.some(\r\n (item: string) => item === path\r\n );\r\n if (!flag) {\r\n const menuItem = findMenuItemByUrl(\r\n path,\r\n data.value\r\n );\r\n if (!menuItem) {\r\n openKeys.value = [];\r\n } else {\r\n const rs = getFullParentChain(\r\n menuItem.id,\r\n data.value as never\r\n );\r\n if (!layout.value.collapsed) {\r\n openKeys.value = rs!;\r\n }\r\n selectedKeys.value = [menuItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n watch(\r\n () => layout.value.collapsed,\r\n val => {\r\n const id = selectedKeys.value[0];\r\n const rs = findMatchedMenuById(\r\n id,\r\n data.value as never\r\n );\r\n\r\n if (val) {\r\n openKeys.value = [];\r\n } else {\r\n if (rs?.parentItem) {\r\n openKeys.value = [rs.parentItem.key];\r\n } else {\r\n openKeys.value = [rs!.matchItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n /**\r\n * 获取从根到目标菜单项的完整 key 链\r\n * @param targetId 目标菜单项 id\r\n * @param menus 菜单数据\r\n * @param parentChain 递归传递的父级链\r\n */\r\n const getFullParentChain = (\r\n targetId: string,\r\n menus: any[],\r\n parentChain: string[] = []\r\n ): string[] | null => {\r\n for (const menu of menus) {\r\n // 找到目标项,返回完整链(包含自身 key)\r\n if (menu.id === targetId) {\r\n return [...parentChain, menu.key];\r\n }\r\n\r\n // 递归查找子菜单\r\n if (menu.children?.length) {\r\n const result = getFullParentChain(\r\n targetId,\r\n menu.children,\r\n [...parentChain, menu.key] // 传递当前层级的 key\r\n );\r\n if (result) return result;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const onClick = ({\r\n key,\r\n keyPath,\r\n item\r\n }: {\r\n item: { originItemValue: any };\r\n key: string;\r\n keyPath: string[];\r\n }) => {\r\n const rs = findMatchedMenuById(key, data.value);\r\n if (\r\n item.originItemValue?.isFrame &&\r\n item.originItemValue?.isFrame === \"0\"\r\n ) {\r\n emit(\"onMenuClick\", item);\r\n } else {\r\n openKeys.value = keyPath;\r\n selectedKeys.value = [rs.matchItem?.key];\r\n if (rs.matchItem?.url !== route.path) {\r\n // 判断目标路由和当前路由是否相等;\r\n // 不相等的时候再跳转\r\n router.push(rs.matchItem?.url).then(r => {\r\n if (r) {\r\n console.warn(r);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n return {\r\n openKeys,\r\n selectedKeys,\r\n data,\r\n onClick\r\n };\r\n }\r\n\r\n return () => (\r\n <div class={menuWrapperStyle.value}>\r\n <a-menu\r\n v-model:open-keys={openKeys.value}\r\n v-model:selected-keys={selectedKeys.value}\r\n items={menuList.value}\r\n mode=\"inline\"\r\n triggerSubMenuAction={\"hover\"}\r\n onClick={onClick}\r\n ></a-menu>\r\n </div>\r\n );\r\n }\r\n});\r\n"],"names":["defineComponent","name","emits","setup","_","emit","layout","modeConfig","storeToRefs","useAppStore","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuList","useNoStore","menuWrapperStyle","useStyle","openKeys","selectedKeys","onClick","useMenu","computed","css","value","mode","data","useMenuStore","route","useRoute","router","useRouter","watch","fullPath","path","flag","some","item","menuItem","rs","getFullParentChain","id","collapsed","key","val","parentItem","matchItem","targetId","menus","parentChain","menu","children","length","result","keyPath","originItemValue","isFrame","url","push","then","r","console","warn","_createVNode","_resolveComponent","$event"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Menu.cjs","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"sourcesContent":["import { computed, defineComponent, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n useAppStore,\r\n useMenuStore,\r\n useNoStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nimport useMenuCore from \"../../../../utils/useMenuCore\";\r\n\r\nexport default defineComponent({\r\n name: \"DMenu\",\r\n emits: [\"onMenuClick\"],\r\n setup(_, { emit }) {\r\n const { layout, modeConfig } =\r\n storeToRefs(useAppStore());\r\n const { findMatchedMenuById, findMenuItemByUrl } =\r\n useMenuCore();\r\n const { menuList } = storeToRefs(useNoStore());\r\n const { menuWrapperStyle } = useStyle();\r\n const { openKeys, selectedKeys, onClick } = useMenu();\r\n\r\n function useStyle() {\r\n const menuWrapperStyle = computed(\r\n () => css`\r\n flex: 1;\r\n overflow: hidden;\r\n\r\n .ant-menu {\r\n height: 100%;\r\n overflow: scroll;\r\n -ms-overflow-style: none; /* 对 IE 和 Edge 生效 */\r\n scrollbar-width: none; /* 对 Firefox 生效 */\r\n\r\n ${modeConfig.value.mode === \"light\"\r\n ? \"background:transparent;\"\r\n : \"\"}\r\n /* Webkit 浏览器 */\r\n ::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n `\r\n );\r\n return {\r\n menuWrapperStyle\r\n };\r\n }\r\n\r\n function useMenu() {\r\n const { openKeys, selectedKeys, data } =\r\n storeToRefs(useMenuStore());\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n /**\r\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\r\n */\r\n watch(\r\n () => route.fullPath,\r\n async path => {\r\n const flag = selectedKeys.value.some(\r\n (item: string) => item === path\r\n );\r\n if (!flag) {\r\n const menuItem = findMenuItemByUrl(\r\n path,\r\n data.value\r\n );\r\n if (!menuItem) {\r\n openKeys.value = [];\r\n selectedKeys.value = [path];\r\n } else {\r\n const rs = getFullParentChain(\r\n menuItem.id,\r\n data.value as never\r\n );\r\n if (!layout.value.collapsed) {\r\n openKeys.value = rs!;\r\n }\r\n selectedKeys.value = [menuItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n watch(\r\n () => layout.value.collapsed,\r\n val => {\r\n const id = selectedKeys.value[0];\r\n const rs = findMatchedMenuById(\r\n id,\r\n data.value as never\r\n );\r\n\r\n if (val) {\r\n openKeys.value = [];\r\n } else {\r\n if (rs?.parentItem) {\r\n openKeys.value = [rs.parentItem.key];\r\n } else {\r\n openKeys.value = [rs!.matchItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n /**\r\n * 获取从根到目标菜单项的完整 key 链\r\n * @param targetId 目标菜单项 id\r\n * @param menus 菜单数据\r\n * @param parentChain 递归传递的父级链\r\n */\r\n const getFullParentChain = (\r\n targetId: string,\r\n menus: any[],\r\n parentChain: string[] = []\r\n ): string[] | null => {\r\n for (const menu of menus) {\r\n // 找到目标项,返回完整链(包含自身 key)\r\n if (menu.id === targetId) {\r\n return [...parentChain, menu.key];\r\n }\r\n\r\n // 递归查找子菜单\r\n if (menu.children?.length) {\r\n const result = getFullParentChain(\r\n targetId,\r\n menu.children,\r\n [...parentChain, menu.key] // 传递当前层级的 key\r\n );\r\n if (result) return result;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const onClick = ({\r\n key,\r\n keyPath,\r\n item\r\n }: {\r\n item: { originItemValue: any };\r\n key: string;\r\n keyPath: string[];\r\n }) => {\r\n const rs = findMatchedMenuById(key, data.value);\r\n if (\r\n item.originItemValue?.isFrame &&\r\n item.originItemValue?.isFrame === \"0\"\r\n ) {\r\n emit(\"onMenuClick\", item);\r\n } else {\r\n openKeys.value = keyPath;\r\n selectedKeys.value = [rs.matchItem?.key];\r\n if (rs.matchItem?.url !== route.path) {\r\n // 判断目标路由和当前路由是否相等;\r\n // 不相等的时候再跳转\r\n router.push(rs.matchItem?.url).then(r => {\r\n if (r) {\r\n console.warn(r);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n return {\r\n openKeys,\r\n selectedKeys,\r\n data,\r\n onClick\r\n };\r\n }\r\n\r\n return () => (\r\n <div class={menuWrapperStyle.value}>\r\n <a-menu\r\n v-model:open-keys={openKeys.value}\r\n v-model:selected-keys={selectedKeys.value}\r\n items={menuList.value}\r\n mode=\"inline\"\r\n triggerSubMenuAction={\"hover\"}\r\n onClick={onClick}\r\n ></a-menu>\r\n </div>\r\n );\r\n }\r\n});\r\n"],"names":["defineComponent","name","emits","setup","_","emit","layout","modeConfig","storeToRefs","useAppStore","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuList","useNoStore","menuWrapperStyle","useStyle","openKeys","selectedKeys","onClick","useMenu","computed","css","value","mode","data","useMenuStore","route","useRoute","router","useRouter","watch","fullPath","path","flag","some","item","menuItem","rs","getFullParentChain","id","collapsed","key","val","parentItem","matchItem","targetId","menus","parentChain","menu","children","length","result","keyPath","originItemValue","isFrame","url","push","then","r","console","warn","_createVNode","_resolveComponent","$event"],"mappings":"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"}
|
|
@@ -87,6 +87,7 @@ var Menu = /* @__PURE__ */ defineComponent({
|
|
|
87
87
|
const menuItem = findMenuItemByUrl(path, data.value);
|
|
88
88
|
if (!menuItem) {
|
|
89
89
|
openKeys2.value = [];
|
|
90
|
+
selectedKeys2.value = [path];
|
|
90
91
|
} else {
|
|
91
92
|
const rs = getFullParentChain(menuItem.id, data.value);
|
|
92
93
|
if (!layout.value.collapsed) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.mjs","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"sourcesContent":["import { computed, defineComponent, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n useAppStore,\r\n useMenuStore,\r\n useNoStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nimport useMenuCore from \"../../../../utils/useMenuCore\";\r\n\r\nexport default defineComponent({\r\n name: \"DMenu\",\r\n emits: [\"onMenuClick\"],\r\n setup(_, { emit }) {\r\n const { layout, modeConfig } =\r\n storeToRefs(useAppStore());\r\n const { findMatchedMenuById, findMenuItemByUrl } =\r\n useMenuCore();\r\n const { menuList } = storeToRefs(useNoStore());\r\n const { menuWrapperStyle } = useStyle();\r\n const { openKeys, selectedKeys, onClick } = useMenu();\r\n\r\n function useStyle() {\r\n const menuWrapperStyle = computed(\r\n () => css`\r\n flex: 1;\r\n overflow: hidden;\r\n\r\n .ant-menu {\r\n height: 100%;\r\n overflow: scroll;\r\n -ms-overflow-style: none; /* 对 IE 和 Edge 生效 */\r\n scrollbar-width: none; /* 对 Firefox 生效 */\r\n\r\n ${modeConfig.value.mode === \"light\"\r\n ? \"background:transparent;\"\r\n : \"\"}\r\n /* Webkit 浏览器 */\r\n ::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n `\r\n );\r\n return {\r\n menuWrapperStyle\r\n };\r\n }\r\n\r\n function useMenu() {\r\n const { openKeys, selectedKeys, data } =\r\n storeToRefs(useMenuStore());\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n /**\r\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\r\n */\r\n watch(\r\n () => route.fullPath,\r\n async path => {\r\n const flag = selectedKeys.value.some(\r\n (item: string) => item === path\r\n );\r\n if (!flag) {\r\n const menuItem = findMenuItemByUrl(\r\n path,\r\n data.value\r\n );\r\n if (!menuItem) {\r\n openKeys.value = [];\r\n } else {\r\n const rs = getFullParentChain(\r\n menuItem.id,\r\n data.value as never\r\n );\r\n if (!layout.value.collapsed) {\r\n openKeys.value = rs!;\r\n }\r\n selectedKeys.value = [menuItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n watch(\r\n () => layout.value.collapsed,\r\n val => {\r\n const id = selectedKeys.value[0];\r\n const rs = findMatchedMenuById(\r\n id,\r\n data.value as never\r\n );\r\n\r\n if (val) {\r\n openKeys.value = [];\r\n } else {\r\n if (rs?.parentItem) {\r\n openKeys.value = [rs.parentItem.key];\r\n } else {\r\n openKeys.value = [rs!.matchItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n /**\r\n * 获取从根到目标菜单项的完整 key 链\r\n * @param targetId 目标菜单项 id\r\n * @param menus 菜单数据\r\n * @param parentChain 递归传递的父级链\r\n */\r\n const getFullParentChain = (\r\n targetId: string,\r\n menus: any[],\r\n parentChain: string[] = []\r\n ): string[] | null => {\r\n for (const menu of menus) {\r\n // 找到目标项,返回完整链(包含自身 key)\r\n if (menu.id === targetId) {\r\n return [...parentChain, menu.key];\r\n }\r\n\r\n // 递归查找子菜单\r\n if (menu.children?.length) {\r\n const result = getFullParentChain(\r\n targetId,\r\n menu.children,\r\n [...parentChain, menu.key] // 传递当前层级的 key\r\n );\r\n if (result) return result;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const onClick = ({\r\n key,\r\n keyPath,\r\n item\r\n }: {\r\n item: { originItemValue: any };\r\n key: string;\r\n keyPath: string[];\r\n }) => {\r\n const rs = findMatchedMenuById(key, data.value);\r\n if (\r\n item.originItemValue?.isFrame &&\r\n item.originItemValue?.isFrame === \"0\"\r\n ) {\r\n emit(\"onMenuClick\", item);\r\n } else {\r\n openKeys.value = keyPath;\r\n selectedKeys.value = [rs.matchItem?.key];\r\n if (rs.matchItem?.url !== route.path) {\r\n // 判断目标路由和当前路由是否相等;\r\n // 不相等的时候再跳转\r\n router.push(rs.matchItem?.url).then(r => {\r\n if (r) {\r\n console.warn(r);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n return {\r\n openKeys,\r\n selectedKeys,\r\n data,\r\n onClick\r\n };\r\n }\r\n\r\n return () => (\r\n <div class={menuWrapperStyle.value}>\r\n <a-menu\r\n v-model:open-keys={openKeys.value}\r\n v-model:selected-keys={selectedKeys.value}\r\n items={menuList.value}\r\n mode=\"inline\"\r\n triggerSubMenuAction={\"hover\"}\r\n onClick={onClick}\r\n ></a-menu>\r\n </div>\r\n );\r\n }\r\n});\r\n"],"names":["name","emits","setup","_","emit","layout","modeConfig","storeToRefs","useAppStore","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuList","useNoStore","menuWrapperStyle","useStyle","openKeys","selectedKeys","onClick","useMenu","computed","css","value","mode","data","useMenuStore","route","useRoute","router","useRouter","watch","fullPath","path","flag","some","item","menuItem","rs","getFullParentChain","id","collapsed","key","val","parentItem","matchItem","targetId","menus","parentChain","menu","children","length","result","keyPath","originItemValue","isFrame","url","push","then","r","console","warn","_createVNode","_resolveComponent","$event"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Menu.mjs","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"sourcesContent":["import { computed, defineComponent, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport {\r\n useAppStore,\r\n useMenuStore,\r\n useNoStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\n\r\nimport useMenuCore from \"../../../../utils/useMenuCore\";\r\n\r\nexport default defineComponent({\r\n name: \"DMenu\",\r\n emits: [\"onMenuClick\"],\r\n setup(_, { emit }) {\r\n const { layout, modeConfig } =\r\n storeToRefs(useAppStore());\r\n const { findMatchedMenuById, findMenuItemByUrl } =\r\n useMenuCore();\r\n const { menuList } = storeToRefs(useNoStore());\r\n const { menuWrapperStyle } = useStyle();\r\n const { openKeys, selectedKeys, onClick } = useMenu();\r\n\r\n function useStyle() {\r\n const menuWrapperStyle = computed(\r\n () => css`\r\n flex: 1;\r\n overflow: hidden;\r\n\r\n .ant-menu {\r\n height: 100%;\r\n overflow: scroll;\r\n -ms-overflow-style: none; /* 对 IE 和 Edge 生效 */\r\n scrollbar-width: none; /* 对 Firefox 生效 */\r\n\r\n ${modeConfig.value.mode === \"light\"\r\n ? \"background:transparent;\"\r\n : \"\"}\r\n /* Webkit 浏览器 */\r\n ::-webkit-scrollbar {\r\n display: none;\r\n }\r\n }\r\n `\r\n );\r\n return {\r\n menuWrapperStyle\r\n };\r\n }\r\n\r\n function useMenu() {\r\n const { openKeys, selectedKeys, data } =\r\n storeToRefs(useMenuStore());\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n /**\r\n * 在标签切换的时候,路由会变化,需要动态关联左侧菜单的选中状态\r\n */\r\n watch(\r\n () => route.fullPath,\r\n async path => {\r\n const flag = selectedKeys.value.some(\r\n (item: string) => item === path\r\n );\r\n if (!flag) {\r\n const menuItem = findMenuItemByUrl(\r\n path,\r\n data.value\r\n );\r\n if (!menuItem) {\r\n openKeys.value = [];\r\n selectedKeys.value = [path];\r\n } else {\r\n const rs = getFullParentChain(\r\n menuItem.id,\r\n data.value as never\r\n );\r\n if (!layout.value.collapsed) {\r\n openKeys.value = rs!;\r\n }\r\n selectedKeys.value = [menuItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n watch(\r\n () => layout.value.collapsed,\r\n val => {\r\n const id = selectedKeys.value[0];\r\n const rs = findMatchedMenuById(\r\n id,\r\n data.value as never\r\n );\r\n\r\n if (val) {\r\n openKeys.value = [];\r\n } else {\r\n if (rs?.parentItem) {\r\n openKeys.value = [rs.parentItem.key];\r\n } else {\r\n openKeys.value = [rs!.matchItem.key];\r\n }\r\n }\r\n }\r\n );\r\n\r\n /**\r\n * 获取从根到目标菜单项的完整 key 链\r\n * @param targetId 目标菜单项 id\r\n * @param menus 菜单数据\r\n * @param parentChain 递归传递的父级链\r\n */\r\n const getFullParentChain = (\r\n targetId: string,\r\n menus: any[],\r\n parentChain: string[] = []\r\n ): string[] | null => {\r\n for (const menu of menus) {\r\n // 找到目标项,返回完整链(包含自身 key)\r\n if (menu.id === targetId) {\r\n return [...parentChain, menu.key];\r\n }\r\n\r\n // 递归查找子菜单\r\n if (menu.children?.length) {\r\n const result = getFullParentChain(\r\n targetId,\r\n menu.children,\r\n [...parentChain, menu.key] // 传递当前层级的 key\r\n );\r\n if (result) return result;\r\n }\r\n }\r\n return null;\r\n };\r\n\r\n const onClick = ({\r\n key,\r\n keyPath,\r\n item\r\n }: {\r\n item: { originItemValue: any };\r\n key: string;\r\n keyPath: string[];\r\n }) => {\r\n const rs = findMatchedMenuById(key, data.value);\r\n if (\r\n item.originItemValue?.isFrame &&\r\n item.originItemValue?.isFrame === \"0\"\r\n ) {\r\n emit(\"onMenuClick\", item);\r\n } else {\r\n openKeys.value = keyPath;\r\n selectedKeys.value = [rs.matchItem?.key];\r\n if (rs.matchItem?.url !== route.path) {\r\n // 判断目标路由和当前路由是否相等;\r\n // 不相等的时候再跳转\r\n router.push(rs.matchItem?.url).then(r => {\r\n if (r) {\r\n console.warn(r);\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n return {\r\n openKeys,\r\n selectedKeys,\r\n data,\r\n onClick\r\n };\r\n }\r\n\r\n return () => (\r\n <div class={menuWrapperStyle.value}>\r\n <a-menu\r\n v-model:open-keys={openKeys.value}\r\n v-model:selected-keys={selectedKeys.value}\r\n items={menuList.value}\r\n mode=\"inline\"\r\n triggerSubMenuAction={\"hover\"}\r\n onClick={onClick}\r\n ></a-menu>\r\n </div>\r\n );\r\n }\r\n});\r\n"],"names":["name","emits","setup","_","emit","layout","modeConfig","storeToRefs","useAppStore","findMatchedMenuById","findMenuItemByUrl","useMenuCore","menuList","useNoStore","menuWrapperStyle","useStyle","openKeys","selectedKeys","onClick","useMenu","computed","css","value","mode","data","useMenuStore","route","useRoute","router","useRouter","watch","fullPath","path","flag","some","item","menuItem","rs","getFullParentChain","id","collapsed","key","val","parentItem","matchItem","targetId","menus","parentChain","menu","children","length","result","keyPath","originItemValue","isFrame","url","push","then","r","console","warn","_createVNode","_resolveComponent","$event"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"names":[],"mappings":";;;AAaA,
|
|
1
|
+
{"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"names":[],"mappings":";;;AAaA,wBAkLG"}
|