@ditari/bsui 5.0.22 → 5.0.23

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.
@@ -88,17 +88,12 @@ var Menu = /* @__PURE__ */ vue.defineComponent({
88
88
  vue.watch(() => route.fullPath, (path) => __async(this, null, function* () {
89
89
  const flag = selectedKeys2.value.some((item) => item === path);
90
90
  if (!flag) {
91
- const rs = _findMatchedMenuKey(path, data.value);
92
- if (rs) {
93
- let matchItem = null;
94
- if (rs.matchedUrl) {
95
- matchItem = findMenuItemByUrl(rs.matchedUrl, data.value);
96
- }
97
- if (!layout.value.collapsed) {
98
- openKeys2.value = [matchItem == null ? void 0 : matchItem.parentId];
99
- }
100
- selectedKeys2.value = [matchItem == null ? void 0 : matchItem.id];
91
+ const menuItem = findMenuItemByUrl(path, data.value);
92
+ const rs = getFullParentChain(menuItem.id, data.value);
93
+ if (!layout.value.collapsed) {
94
+ openKeys2.value = rs;
101
95
  }
96
+ selectedKeys2.value = [menuItem.key];
102
97
  }
103
98
  }));
104
99
  vue.watch(() => layout.value.collapsed, (val) => {
@@ -114,31 +109,20 @@ var Menu = /* @__PURE__ */ vue.defineComponent({
114
109
  }
115
110
  }
116
111
  });
117
- const _findMatchedMenuKey = (path, menuItems, parentUrl = "") => {
118
- for (const item of menuItems) {
119
- if (item.url === path) {
120
- return {
121
- matchedUrl: item.url,
122
- parentUrl
123
- };
124
- }
125
- if (item.children && item.children.length > 0) {
126
- const result = _findMatchedMenuKey(path, item.children, item.url);
127
- if (result) {
128
- return result;
129
- }
112
+ const getFullParentChain = (targetId, menus, parentChain = []) => {
113
+ var _a;
114
+ for (const menu of menus) {
115
+ if (menu.id === targetId) {
116
+ return [...parentChain, menu.key];
130
117
  }
131
- if (path.startsWith(item.url)) {
132
- if (!item.children || item.children.length === 0) {
133
- return {
134
- matchedUrl: item.url,
135
- parentUrl
136
- };
137
- }
138
- const result = _findMatchedMenuKey(path, item.children, item.url);
139
- if (result) {
140
- return result;
141
- }
118
+ if ((_a = menu.children) == null ? void 0 : _a.length) {
119
+ const result = getFullParentChain(
120
+ targetId,
121
+ menu.children,
122
+ [...parentChain, menu.key]
123
+ // 传递当前层级的 key
124
+ );
125
+ if (result) return result;
142
126
  }
143
127
  }
144
128
  return null;
@@ -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 rs = _findMatchedMenuKey(\r\n path,\r\n data.value as never\r\n );\r\n if (rs) {\r\n let matchItem = null;\r\n if (rs.matchedUrl) {\r\n matchItem = findMenuItemByUrl(\r\n rs.matchedUrl,\r\n data.value as never\r\n );\r\n }\r\n\r\n if (!layout.value.collapsed) {\r\n openKeys.value = [matchItem?.parentId];\r\n }\r\n selectedKeys.value = [matchItem?.id];\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 const _findMatchedMenuKey = (\r\n path: string,\r\n menuItems: any[],\r\n parentUrl: string = \"\"\r\n ): {\r\n matchedUrl: string;\r\n parentUrl: string;\r\n } | null => {\r\n // 遍历菜单项\r\n for (const item of menuItems) {\r\n // 完全匹配\r\n if (item.url === path) {\r\n return { matchedUrl: item.url, parentUrl };\r\n }\r\n\r\n // 如果当前菜单项有 children,递归查找\r\n if (item.children && item.children.length > 0) {\r\n const result = _findMatchedMenuKey(\r\n path,\r\n item.children,\r\n item.url\r\n );\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n\r\n // 匹配路径前缀(确保只匹配最深层的菜单项)\r\n if (path.startsWith(item.url)) {\r\n // 如果路径以该菜单项的 key 开头,且该菜单项没有子菜单,直接返回匹配的菜单\r\n if (\r\n !item.children ||\r\n item.children.length === 0\r\n ) {\r\n return { matchedUrl: item.url, parentUrl };\r\n }\r\n // 如果是父菜单且有子菜单,继续递归寻找匹配的子菜单\r\n const result = _findMatchedMenuKey(\r\n path,\r\n item.children,\r\n item.url\r\n );\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n }\r\n\r\n // 如果没有找到匹配的菜单项,返回 null\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","rs","_findMatchedMenuKey","matchItem","matchedUrl","collapsed","parentId","id","val","parentItem","key","menuItems","parentUrl","url","children","length","result","startsWith","keyPath","originItemValue","isFrame","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 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 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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"}
@@ -74,18 +74,10 @@ var _sfc_main = /* @__PURE__ */ vue.defineComponent({
74
74
  const store$1 = store.useNavTabStore();
75
75
  const { list: list2, activeKey: activeKey2 } = pinia.storeToRefs(store$1);
76
76
  const { save, deleteTabs } = store$1;
77
- vue.watch(
78
- () => route.fullPath,
79
- () => {
80
- save(route);
81
- },
82
- {
83
- immediate: true
84
- }
85
- );
86
77
  vue.watch(
87
78
  () => route.fullPath,
88
79
  (val) => {
80
+ save(route);
89
81
  activeKey2.value = val;
90
82
  },
91
83
  {
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.vue2.cjs","sources":["../../../../src/components/tab/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, type ComputedRef, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport Search from \"./Search\";\r\nimport {\r\n CloseOutlined,\r\n ReloadOutlined\r\n} from \"@ant-design/icons-vue\";\r\nimport {\r\n type NavTabsState,\r\n useNavTabStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nconst { tabsNavStyle, tabHoverBgStyle, closeBtnStyle } =\r\n useStyle();\r\n\r\nconst {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n} = useTab();\r\n\r\nfunction useStyle(): {\r\n tabsNavStyle: ComputedRef<string>;\r\n tabHoverBgStyle: ComputedRef<string>;\r\n closeBtnStyle: ComputedRef<string>;\r\n} {\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const activeTabColor = computed(\r\n () => token.value.colorBgLayout\r\n );\r\n const splitColor = computed(\r\n () => token.value.colorBorderSecondary\r\n );\r\n\r\n const tabsNavStyle = computed(() => {\r\n return css`\r\n --active-tab-color: ${activeTabColor.value};\r\n --splitColor: ${splitColor.value};\r\n padding-top: 10px;\r\n display: flex;\r\n `;\r\n });\r\n\r\n const tabHoverBgStyle = computed(() => {\r\n return css`\r\n &:before {\r\n background: ${token.value.colorPrimaryBgHover};\r\n }\r\n `;\r\n });\r\n\r\n const closeBtnStyle = computed(() => {\r\n return css`\r\n &:hover {\r\n background: ${token.value.colorPrimaryBorderHover};\r\n border-radius: 50%;\r\n }\r\n `;\r\n });\r\n\r\n return {\r\n tabsNavStyle,\r\n tabHoverBgStyle,\r\n closeBtnStyle\r\n };\r\n}\r\n\r\nfunction useTab() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n const store = useNavTabStore();\r\n const { list, activeKey } = storeToRefs(store);\r\n const { save, deleteTabs } = store;\r\n\r\n watch(\r\n () => route.fullPath,\r\n () => {\r\n save(route);\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n watch(\r\n () => route.fullPath,\r\n val => {\r\n activeKey.value = val;\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n const onChange = (key: string) => {\r\n if (key !== route.path) {\r\n // 匹配打开的标签路由数据\r\n const rs = list.value.filter(\r\n item => item.fullPath === key\r\n )[0];\r\n router.push(rs);\r\n }\r\n };\r\n\r\n const onClose = (\r\n $event: Event,\r\n key: string | undefined\r\n ) => {\r\n if (!key) return;\r\n //阻止冒泡\r\n $event.stopPropagation();\r\n // 删除标签\r\n deleteTabs(key);\r\n // 重新push已打开的路由\r\n const backRoute = list.value[list.value.length - 1];\r\n if (backRoute.fullPath) {\r\n router.push(backRoute.fullPath);\r\n }\r\n };\r\n\r\n const closeBtnStatus = (item: NavTabsState) => {\r\n // 如果meta有设置keepOpen则隐藏关闭按钮\r\n if (item.meta?.keepOpen) {\r\n return false;\r\n } else {\r\n // 如果只有一个标签,则隐藏关闭按钮\r\n return list.value.length !== 1;\r\n }\r\n };\r\n\r\n return {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n };\r\n}\r\n</script>\r\n<template>\r\n <div class=\"tabs-nav-wrapper\" :class=\"tabsNavStyle\">\r\n <Search />\r\n <div class=\"d-tabs-nav\">\r\n <a-tabs\r\n size=\"small\"\r\n v-model:activeKey=\"activeKey\"\r\n type=\"card\"\r\n hide-add\r\n @change=\"onChange\"\r\n >\r\n <a-tab-pane\r\n :key=\"item.fullPath\"\r\n :closable=\"false\"\r\n v-for=\"item in list\"\r\n :class=\"{ active: activeKey === item.fullPath }\"\r\n >\r\n <template #tab>\r\n <div\r\n class=\"tab-hover-bg\"\r\n :class=\"tabHoverBgStyle\"\r\n ></div>\r\n <div class=\"tab-dividers\"></div>\r\n <!-- <a-dropdown :trigger=\"['contextmenu']\">-->\r\n <div class=\"tab-item\">\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <!-- <template #overlay>-->\r\n <!-- <a-menu>-->\r\n <!-- <a-menu-item key=\"1\">-->\r\n <!-- <ReloadOutlined />-->\r\n <!-- 重新加载-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"2\">-->\r\n <!-- <CloseOutlined />-->\r\n <!-- 关闭其他-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭右侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭左侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- </a-menu>-->\r\n <!-- </template>-->\r\n <!-- </a-dropdown>-->\r\n\r\n <div\r\n class=\"tab-close\"\r\n v-if=\"closeBtnStatus(item)\"\r\n >\r\n <div\r\n class=\"close-btn\"\r\n :class=\"closeBtnStyle\"\r\n @click=\"onClose($event, item.fullPath)\"\r\n >\r\n <CloseOutlined />\r\n </div>\r\n </div>\r\n </template>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\"></style>\r\n"],"names":["theme","computed","tabsNavStyle","css","tabHoverBgStyle","closeBtnStyle","useRoute","useRouter","store","useNavTabStore","list","activeKey","storeToRefs","watch","onChange","onClose","closeBtnStatus"],"mappings":"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"}
1
+ {"version":3,"file":"Tab.vue2.cjs","sources":["../../../../src/components/tab/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, type ComputedRef, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport Search from \"./Search\";\r\nimport {\r\n CloseOutlined,\r\n ReloadOutlined\r\n} from \"@ant-design/icons-vue\";\r\nimport {\r\n type NavTabsState,\r\n useNavTabStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nconst { tabsNavStyle, tabHoverBgStyle, closeBtnStyle } =\r\n useStyle();\r\n\r\nconst {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n} = useTab();\r\n\r\nfunction useStyle(): {\r\n tabsNavStyle: ComputedRef<string>;\r\n tabHoverBgStyle: ComputedRef<string>;\r\n closeBtnStyle: ComputedRef<string>;\r\n} {\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const activeTabColor = computed(\r\n () => token.value.colorBgLayout\r\n );\r\n const splitColor = computed(\r\n () => token.value.colorBorderSecondary\r\n );\r\n\r\n const tabsNavStyle = computed(() => {\r\n return css`\r\n --active-tab-color: ${activeTabColor.value};\r\n --splitColor: ${splitColor.value};\r\n padding-top: 10px;\r\n display: flex;\r\n `;\r\n });\r\n\r\n const tabHoverBgStyle = computed(() => {\r\n return css`\r\n &:before {\r\n background: ${token.value.colorPrimaryBgHover};\r\n }\r\n `;\r\n });\r\n\r\n const closeBtnStyle = computed(() => {\r\n return css`\r\n &:hover {\r\n background: ${token.value.colorPrimaryBorderHover};\r\n border-radius: 50%;\r\n }\r\n `;\r\n });\r\n\r\n return {\r\n tabsNavStyle,\r\n tabHoverBgStyle,\r\n closeBtnStyle\r\n };\r\n}\r\n\r\nfunction useTab() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n const store = useNavTabStore();\r\n const { list, activeKey } = storeToRefs(store);\r\n const { save, deleteTabs } = store;\r\n\r\n watch(\r\n () => route.fullPath,\r\n val => {\r\n save(route);\r\n activeKey.value = val;\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n const onChange = (key: string) => {\r\n if (key !== route.path) {\r\n // 匹配打开的标签路由数据\r\n const rs = list.value.filter(\r\n item => item.fullPath === key\r\n )[0];\r\n router.push(rs);\r\n }\r\n };\r\n\r\n const onClose = (\r\n $event: Event,\r\n key: string | undefined\r\n ) => {\r\n if (!key) return;\r\n //阻止冒泡\r\n $event.stopPropagation();\r\n // 删除标签\r\n deleteTabs(key);\r\n // 重新push已打开的路由\r\n const backRoute = list.value[list.value.length - 1];\r\n if (backRoute.fullPath) {\r\n router.push(backRoute.fullPath);\r\n }\r\n };\r\n\r\n const closeBtnStatus = (item: NavTabsState) => {\r\n // 如果meta有设置keepOpen则隐藏关闭按钮\r\n if (item.meta?.keepOpen) {\r\n return false;\r\n } else {\r\n // 如果只有一个标签,则隐藏关闭按钮\r\n return list.value.length !== 1;\r\n }\r\n };\r\n\r\n return {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n };\r\n}\r\n</script>\r\n<template>\r\n <div class=\"tabs-nav-wrapper\" :class=\"tabsNavStyle\">\r\n <Search />\r\n <div class=\"d-tabs-nav\">\r\n <a-tabs\r\n size=\"small\"\r\n v-model:activeKey=\"activeKey\"\r\n type=\"card\"\r\n hide-add\r\n @change=\"onChange\"\r\n >\r\n <a-tab-pane\r\n :key=\"item.fullPath\"\r\n :closable=\"false\"\r\n v-for=\"item in list\"\r\n :class=\"{ active: activeKey === item.fullPath }\"\r\n >\r\n <template #tab>\r\n <div\r\n class=\"tab-hover-bg\"\r\n :class=\"tabHoverBgStyle\"\r\n ></div>\r\n <div class=\"tab-dividers\"></div>\r\n <!-- <a-dropdown :trigger=\"['contextmenu']\">-->\r\n <div class=\"tab-item\">\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <!-- <template #overlay>-->\r\n <!-- <a-menu>-->\r\n <!-- <a-menu-item key=\"1\">-->\r\n <!-- <ReloadOutlined />-->\r\n <!-- 重新加载-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"2\">-->\r\n <!-- <CloseOutlined />-->\r\n <!-- 关闭其他-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭右侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭左侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- </a-menu>-->\r\n <!-- </template>-->\r\n <!-- </a-dropdown>-->\r\n\r\n <div\r\n class=\"tab-close\"\r\n v-if=\"closeBtnStatus(item)\"\r\n >\r\n <div\r\n class=\"close-btn\"\r\n :class=\"closeBtnStyle\"\r\n @click=\"onClose($event, item.fullPath)\"\r\n >\r\n <CloseOutlined />\r\n </div>\r\n </div>\r\n </template>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\"></style>\r\n"],"names":["theme","computed","tabsNavStyle","css","tabHoverBgStyle","closeBtnStyle","useRoute","useRouter","store","useNavTabStore","list","activeKey","storeToRefs","watch","onChange","onClose","closeBtnStatus"],"mappings":"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"}
@@ -84,17 +84,12 @@ var Menu = /* @__PURE__ */ defineComponent({
84
84
  watch(() => route.fullPath, (path) => __async(this, null, function* () {
85
85
  const flag = selectedKeys2.value.some((item) => item === path);
86
86
  if (!flag) {
87
- const rs = _findMatchedMenuKey(path, data.value);
88
- if (rs) {
89
- let matchItem = null;
90
- if (rs.matchedUrl) {
91
- matchItem = findMenuItemByUrl(rs.matchedUrl, data.value);
92
- }
93
- if (!layout.value.collapsed) {
94
- openKeys2.value = [matchItem == null ? void 0 : matchItem.parentId];
95
- }
96
- selectedKeys2.value = [matchItem == null ? void 0 : matchItem.id];
87
+ const menuItem = findMenuItemByUrl(path, data.value);
88
+ const rs = getFullParentChain(menuItem.id, data.value);
89
+ if (!layout.value.collapsed) {
90
+ openKeys2.value = rs;
97
91
  }
92
+ selectedKeys2.value = [menuItem.key];
98
93
  }
99
94
  }));
100
95
  watch(() => layout.value.collapsed, (val) => {
@@ -110,31 +105,20 @@ var Menu = /* @__PURE__ */ defineComponent({
110
105
  }
111
106
  }
112
107
  });
113
- const _findMatchedMenuKey = (path, menuItems, parentUrl = "") => {
114
- for (const item of menuItems) {
115
- if (item.url === path) {
116
- return {
117
- matchedUrl: item.url,
118
- parentUrl
119
- };
120
- }
121
- if (item.children && item.children.length > 0) {
122
- const result = _findMatchedMenuKey(path, item.children, item.url);
123
- if (result) {
124
- return result;
125
- }
108
+ const getFullParentChain = (targetId, menus, parentChain = []) => {
109
+ var _a;
110
+ for (const menu of menus) {
111
+ if (menu.id === targetId) {
112
+ return [...parentChain, menu.key];
126
113
  }
127
- if (path.startsWith(item.url)) {
128
- if (!item.children || item.children.length === 0) {
129
- return {
130
- matchedUrl: item.url,
131
- parentUrl
132
- };
133
- }
134
- const result = _findMatchedMenuKey(path, item.children, item.url);
135
- if (result) {
136
- return result;
137
- }
114
+ if ((_a = menu.children) == null ? void 0 : _a.length) {
115
+ const result = getFullParentChain(
116
+ targetId,
117
+ menu.children,
118
+ [...parentChain, menu.key]
119
+ // 传递当前层级的 key
120
+ );
121
+ if (result) return result;
138
122
  }
139
123
  }
140
124
  return null;
@@ -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 rs = _findMatchedMenuKey(\r\n path,\r\n data.value as never\r\n );\r\n if (rs) {\r\n let matchItem = null;\r\n if (rs.matchedUrl) {\r\n matchItem = findMenuItemByUrl(\r\n rs.matchedUrl,\r\n data.value as never\r\n );\r\n }\r\n\r\n if (!layout.value.collapsed) {\r\n openKeys.value = [matchItem?.parentId];\r\n }\r\n selectedKeys.value = [matchItem?.id];\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 const _findMatchedMenuKey = (\r\n path: string,\r\n menuItems: any[],\r\n parentUrl: string = \"\"\r\n ): {\r\n matchedUrl: string;\r\n parentUrl: string;\r\n } | null => {\r\n // 遍历菜单项\r\n for (const item of menuItems) {\r\n // 完全匹配\r\n if (item.url === path) {\r\n return { matchedUrl: item.url, parentUrl };\r\n }\r\n\r\n // 如果当前菜单项有 children,递归查找\r\n if (item.children && item.children.length > 0) {\r\n const result = _findMatchedMenuKey(\r\n path,\r\n item.children,\r\n item.url\r\n );\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n\r\n // 匹配路径前缀(确保只匹配最深层的菜单项)\r\n if (path.startsWith(item.url)) {\r\n // 如果路径以该菜单项的 key 开头,且该菜单项没有子菜单,直接返回匹配的菜单\r\n if (\r\n !item.children ||\r\n item.children.length === 0\r\n ) {\r\n return { matchedUrl: item.url, parentUrl };\r\n }\r\n // 如果是父菜单且有子菜单,继续递归寻找匹配的子菜单\r\n const result = _findMatchedMenuKey(\r\n path,\r\n item.children,\r\n item.url\r\n );\r\n if (result) {\r\n return result;\r\n }\r\n }\r\n }\r\n\r\n // 如果没有找到匹配的菜单项,返回 null\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","rs","_findMatchedMenuKey","matchItem","matchedUrl","collapsed","parentId","id","val","parentItem","key","menuItems","parentUrl","url","children","length","result","startsWith","keyPath","originItemValue","isFrame","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 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 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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"}
@@ -70,18 +70,10 @@ var _sfc_main = /* @__PURE__ */ defineComponent({
70
70
  const store = useNavTabStore();
71
71
  const { list: list2, activeKey: activeKey2 } = storeToRefs(store);
72
72
  const { save, deleteTabs } = store;
73
- watch(
74
- () => route.fullPath,
75
- () => {
76
- save(route);
77
- },
78
- {
79
- immediate: true
80
- }
81
- );
82
73
  watch(
83
74
  () => route.fullPath,
84
75
  (val) => {
76
+ save(route);
85
77
  activeKey2.value = val;
86
78
  },
87
79
  {
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.vue2.mjs","sources":["../../../../src/components/tab/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, type ComputedRef, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport Search from \"./Search\";\r\nimport {\r\n CloseOutlined,\r\n ReloadOutlined\r\n} from \"@ant-design/icons-vue\";\r\nimport {\r\n type NavTabsState,\r\n useNavTabStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nconst { tabsNavStyle, tabHoverBgStyle, closeBtnStyle } =\r\n useStyle();\r\n\r\nconst {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n} = useTab();\r\n\r\nfunction useStyle(): {\r\n tabsNavStyle: ComputedRef<string>;\r\n tabHoverBgStyle: ComputedRef<string>;\r\n closeBtnStyle: ComputedRef<string>;\r\n} {\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const activeTabColor = computed(\r\n () => token.value.colorBgLayout\r\n );\r\n const splitColor = computed(\r\n () => token.value.colorBorderSecondary\r\n );\r\n\r\n const tabsNavStyle = computed(() => {\r\n return css`\r\n --active-tab-color: ${activeTabColor.value};\r\n --splitColor: ${splitColor.value};\r\n padding-top: 10px;\r\n display: flex;\r\n `;\r\n });\r\n\r\n const tabHoverBgStyle = computed(() => {\r\n return css`\r\n &:before {\r\n background: ${token.value.colorPrimaryBgHover};\r\n }\r\n `;\r\n });\r\n\r\n const closeBtnStyle = computed(() => {\r\n return css`\r\n &:hover {\r\n background: ${token.value.colorPrimaryBorderHover};\r\n border-radius: 50%;\r\n }\r\n `;\r\n });\r\n\r\n return {\r\n tabsNavStyle,\r\n tabHoverBgStyle,\r\n closeBtnStyle\r\n };\r\n}\r\n\r\nfunction useTab() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n const store = useNavTabStore();\r\n const { list, activeKey } = storeToRefs(store);\r\n const { save, deleteTabs } = store;\r\n\r\n watch(\r\n () => route.fullPath,\r\n () => {\r\n save(route);\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n watch(\r\n () => route.fullPath,\r\n val => {\r\n activeKey.value = val;\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n const onChange = (key: string) => {\r\n if (key !== route.path) {\r\n // 匹配打开的标签路由数据\r\n const rs = list.value.filter(\r\n item => item.fullPath === key\r\n )[0];\r\n router.push(rs);\r\n }\r\n };\r\n\r\n const onClose = (\r\n $event: Event,\r\n key: string | undefined\r\n ) => {\r\n if (!key) return;\r\n //阻止冒泡\r\n $event.stopPropagation();\r\n // 删除标签\r\n deleteTabs(key);\r\n // 重新push已打开的路由\r\n const backRoute = list.value[list.value.length - 1];\r\n if (backRoute.fullPath) {\r\n router.push(backRoute.fullPath);\r\n }\r\n };\r\n\r\n const closeBtnStatus = (item: NavTabsState) => {\r\n // 如果meta有设置keepOpen则隐藏关闭按钮\r\n if (item.meta?.keepOpen) {\r\n return false;\r\n } else {\r\n // 如果只有一个标签,则隐藏关闭按钮\r\n return list.value.length !== 1;\r\n }\r\n };\r\n\r\n return {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n };\r\n}\r\n</script>\r\n<template>\r\n <div class=\"tabs-nav-wrapper\" :class=\"tabsNavStyle\">\r\n <Search />\r\n <div class=\"d-tabs-nav\">\r\n <a-tabs\r\n size=\"small\"\r\n v-model:activeKey=\"activeKey\"\r\n type=\"card\"\r\n hide-add\r\n @change=\"onChange\"\r\n >\r\n <a-tab-pane\r\n :key=\"item.fullPath\"\r\n :closable=\"false\"\r\n v-for=\"item in list\"\r\n :class=\"{ active: activeKey === item.fullPath }\"\r\n >\r\n <template #tab>\r\n <div\r\n class=\"tab-hover-bg\"\r\n :class=\"tabHoverBgStyle\"\r\n ></div>\r\n <div class=\"tab-dividers\"></div>\r\n <!-- <a-dropdown :trigger=\"['contextmenu']\">-->\r\n <div class=\"tab-item\">\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <!-- <template #overlay>-->\r\n <!-- <a-menu>-->\r\n <!-- <a-menu-item key=\"1\">-->\r\n <!-- <ReloadOutlined />-->\r\n <!-- 重新加载-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"2\">-->\r\n <!-- <CloseOutlined />-->\r\n <!-- 关闭其他-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭右侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭左侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- </a-menu>-->\r\n <!-- </template>-->\r\n <!-- </a-dropdown>-->\r\n\r\n <div\r\n class=\"tab-close\"\r\n v-if=\"closeBtnStatus(item)\"\r\n >\r\n <div\r\n class=\"close-btn\"\r\n :class=\"closeBtnStyle\"\r\n @click=\"onClose($event, item.fullPath)\"\r\n >\r\n <CloseOutlined />\r\n </div>\r\n </div>\r\n </template>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\"></style>\r\n"],"names":["tabsNavStyle","tabHoverBgStyle","closeBtnStyle","list","activeKey","onChange","onClose","closeBtnStatus"],"mappings":"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"}
1
+ {"version":3,"file":"Tab.vue2.mjs","sources":["../../../../src/components/tab/Tab.vue"],"sourcesContent":["<script setup lang=\"ts\">\r\nimport { computed, type ComputedRef, watch } from \"vue\";\r\nimport { useRoute, useRouter } from \"vue-router\";\r\nimport { theme } from \"ant-design-vue\";\r\nimport { storeToRefs } from \"pinia\";\r\n\r\nimport Search from \"./Search\";\r\nimport {\r\n CloseOutlined,\r\n ReloadOutlined\r\n} from \"@ant-design/icons-vue\";\r\nimport {\r\n type NavTabsState,\r\n useNavTabStore\r\n} from \"@ditari/store\";\r\nimport { css } from \"@emotion/css\";\r\nimport type { GlobalToken } from \"ant-design-vue/es/theme/interface\";\r\n\r\nconst { tabsNavStyle, tabHoverBgStyle, closeBtnStyle } =\r\n useStyle();\r\n\r\nconst {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n} = useTab();\r\n\r\nfunction useStyle(): {\r\n tabsNavStyle: ComputedRef<string>;\r\n tabHoverBgStyle: ComputedRef<string>;\r\n closeBtnStyle: ComputedRef<string>;\r\n} {\r\n const { useToken } = theme;\r\n const { token }: { token: ComputedRef<GlobalToken> } =\r\n useToken();\r\n\r\n const activeTabColor = computed(\r\n () => token.value.colorBgLayout\r\n );\r\n const splitColor = computed(\r\n () => token.value.colorBorderSecondary\r\n );\r\n\r\n const tabsNavStyle = computed(() => {\r\n return css`\r\n --active-tab-color: ${activeTabColor.value};\r\n --splitColor: ${splitColor.value};\r\n padding-top: 10px;\r\n display: flex;\r\n `;\r\n });\r\n\r\n const tabHoverBgStyle = computed(() => {\r\n return css`\r\n &:before {\r\n background: ${token.value.colorPrimaryBgHover};\r\n }\r\n `;\r\n });\r\n\r\n const closeBtnStyle = computed(() => {\r\n return css`\r\n &:hover {\r\n background: ${token.value.colorPrimaryBorderHover};\r\n border-radius: 50%;\r\n }\r\n `;\r\n });\r\n\r\n return {\r\n tabsNavStyle,\r\n tabHoverBgStyle,\r\n closeBtnStyle\r\n };\r\n}\r\n\r\nfunction useTab() {\r\n const route = useRoute();\r\n const router = useRouter();\r\n\r\n const store = useNavTabStore();\r\n const { list, activeKey } = storeToRefs(store);\r\n const { save, deleteTabs } = store;\r\n\r\n watch(\r\n () => route.fullPath,\r\n val => {\r\n save(route);\r\n activeKey.value = val;\r\n },\r\n {\r\n immediate: true\r\n }\r\n );\r\n\r\n const onChange = (key: string) => {\r\n if (key !== route.path) {\r\n // 匹配打开的标签路由数据\r\n const rs = list.value.filter(\r\n item => item.fullPath === key\r\n )[0];\r\n router.push(rs);\r\n }\r\n };\r\n\r\n const onClose = (\r\n $event: Event,\r\n key: string | undefined\r\n ) => {\r\n if (!key) return;\r\n //阻止冒泡\r\n $event.stopPropagation();\r\n // 删除标签\r\n deleteTabs(key);\r\n // 重新push已打开的路由\r\n const backRoute = list.value[list.value.length - 1];\r\n if (backRoute.fullPath) {\r\n router.push(backRoute.fullPath);\r\n }\r\n };\r\n\r\n const closeBtnStatus = (item: NavTabsState) => {\r\n // 如果meta有设置keepOpen则隐藏关闭按钮\r\n if (item.meta?.keepOpen) {\r\n return false;\r\n } else {\r\n // 如果只有一个标签,则隐藏关闭按钮\r\n return list.value.length !== 1;\r\n }\r\n };\r\n\r\n return {\r\n activeKey,\r\n list,\r\n closeBtnStatus,\r\n onChange,\r\n onClose\r\n };\r\n}\r\n</script>\r\n<template>\r\n <div class=\"tabs-nav-wrapper\" :class=\"tabsNavStyle\">\r\n <Search />\r\n <div class=\"d-tabs-nav\">\r\n <a-tabs\r\n size=\"small\"\r\n v-model:activeKey=\"activeKey\"\r\n type=\"card\"\r\n hide-add\r\n @change=\"onChange\"\r\n >\r\n <a-tab-pane\r\n :key=\"item.fullPath\"\r\n :closable=\"false\"\r\n v-for=\"item in list\"\r\n :class=\"{ active: activeKey === item.fullPath }\"\r\n >\r\n <template #tab>\r\n <div\r\n class=\"tab-hover-bg\"\r\n :class=\"tabHoverBgStyle\"\r\n ></div>\r\n <div class=\"tab-dividers\"></div>\r\n <!-- <a-dropdown :trigger=\"['contextmenu']\">-->\r\n <div class=\"tab-item\">\r\n {{ item.meta?.title || \"无标题\" }}\r\n </div>\r\n <!-- <template #overlay>-->\r\n <!-- <a-menu>-->\r\n <!-- <a-menu-item key=\"1\">-->\r\n <!-- <ReloadOutlined />-->\r\n <!-- 重新加载-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"2\">-->\r\n <!-- <CloseOutlined />-->\r\n <!-- 关闭其他-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭右侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- <a-menu-item key=\"3\"-->\r\n <!-- >关闭左侧标签-->\r\n <!-- </a-menu-item>-->\r\n <!-- </a-menu>-->\r\n <!-- </template>-->\r\n <!-- </a-dropdown>-->\r\n\r\n <div\r\n class=\"tab-close\"\r\n v-if=\"closeBtnStatus(item)\"\r\n >\r\n <div\r\n class=\"close-btn\"\r\n :class=\"closeBtnStyle\"\r\n @click=\"onClose($event, item.fullPath)\"\r\n >\r\n <CloseOutlined />\r\n </div>\r\n </div>\r\n </template>\r\n </a-tab-pane>\r\n </a-tabs>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<style lang=\"scss\"></style>\r\n"],"names":["tabsNavStyle","tabHoverBgStyle","closeBtnStyle","list","activeKey","onChange","onClose","closeBtnStatus"],"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,wBAyMG"}
1
+ {"version":3,"file":"Menu.d.ts","sourceRoot":"","sources":["../../../../../../src/components/layout/components/menu/Menu.tsx"],"names":[],"mappings":";;;AAaA,wBA6KG"}
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/tab/Tab.vue.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,WAAW,EAAS,MAAM,KAAK,CAAC;AAUxD,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,eAAe,CAAC;;;;;;;2BA2HS,YAAY;oBA1BnB,MAAM;sBAWnB,KAAK,OACR,MAAM,GAAG,SAAS;oBAzFN;QACnB,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;KACpC;;;;+BAmG+B,YAAY;wBA1BnB,MAAM;0BAWnB,KAAK,OACR,MAAM,GAAG,SAAS;;;;;AAxG3B,wBA8IE"}
1
+ {"version":3,"file":"Tab.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/tab/Tab.vue.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,WAAW,EAAS,MAAM,KAAK,CAAC;AAUxD,OAAO,EACL,KAAK,YAAY,EAElB,MAAM,eAAe,CAAC;;;;;;;2BAkHS,YAAY;oBA1BnB,MAAM;sBAWnB,KAAK,OACR,MAAM,GAAG,SAAS;oBAhFN;QACnB,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,eAAe,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACrC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;KACpC;;;;+BA0F+B,YAAY;wBA1BnB,MAAM;0BAWnB,KAAK,OACR,MAAM,GAAG,SAAS;;;;;AA/F3B,wBAqIE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ditari/bsui",
3
- "version": "5.0.22",
3
+ "version": "5.0.23",
4
4
  "type": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"